pax_global_header00006660000000000000000000000064136047366540014530gustar00rootroot0000000000000052 comment=0730d4cbecb7cedff0560aebe8feb7856a0c6d78 DustRacing2D-2.0.5/000077500000000000000000000000001360473665400137655ustar00rootroot00000000000000DustRacing2D-2.0.5/.clang-format000066400000000000000000000020501360473665400163350ustar00rootroot00000000000000AccessModifierOffset: -4 AlignAfterOpenBracket: true AllowShortFunctionsOnASingleLine: false AlwaysBreakTemplateDeclarations: true BasedOnStyle: WebKit BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: Custom BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeComma BraceWrapping: AfterClass: true AfterControlStatement: true AfterEnum: true AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: true AfterUnion: false BeforeCatch: false BeforeElse: true IndentBraces: false ColumnLimit: 0 CommentPragmas: "^!|^:" CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 2 ContinuationIndentWidth: 2 FixNamespaceComments: true ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ] IndentWidth: 4 NamespaceIndentation: None PointerAlignment: Middle PointerBindsToType: false SortIncludes: true SpaceAfterTemplateKeyword: false Standard: Cpp11 DustRacing2D-2.0.5/.gitignore000066400000000000000000000023071360473665400157570ustar00rootroot00000000000000*~ *.cxx *.o *.a *moc_* *_automoc* *qrc_* *qm *.tar.gz *.zip *.exe *.json log.txt manifest* .excludes *__* Makefile bin/ dustrac.pro.user dustrac.pro.user.2.1pre1 engine.txt header.txt src/editor/Makefile src/editor/editor src/game/Makefile src/game/Makefile.Debug src/game/Makefile.Release src/game/MiniCore/Core/genincludeheaders.sh *.cbp dustrac-editor dustrac-game test/ unittests/ CTestTestfile.cmake cmake_install.cmake src/editor/CTestTestfile.cmake src/editor/cmake_install.cmake src/game/CTestTestfile.cmake src/game/MiniCore/CTestTestfile.cmake src/game/MiniCore/UnitTests/CTestTestfile.cmake src/game/MiniCore/UnitTests/MCForceRegistryTest/CTestTestfile.cmake src/game/MiniCore/UnitTests/MCForceRegistryTest/cmake_install.cmake src/game/MiniCore/UnitTests/MCObjectTest/CTestTestfile.cmake src/game/MiniCore/UnitTests/MCObjectTest/cmake_install.cmake src/game/MiniCore/UnitTests/cmake_install.cmake src/game/MiniCore/cmake_install.cmake src/game/cmake_install.cmake src/game/renderer.cpp.autosave CPackConfig.cmake CPackSourceConfig.cmake data/translations/ dustrac-1.4.6.zip release/ src/game/dustrac-game_fi.qm src/game/dustrac-game_it.qm src/game/trackobjectfactory.cpp.orig *_plugin_import* *.Debug *.Release DustRacing2D-2.0.5/AUTHORS000066400000000000000000000014721360473665400150410ustar00rootroot00000000000000People who have contributed to Dust Racing 2D ============================================= Programming: * Jussi Lind Graphics: * Jussi Lind * Ville Mäkiranta (original graphics) Level design: * Jussi Lind * Wuzzy Translations: * Pavel Fric (cs) * Wuzzy (de) * Paolo Straffi (it) * Jussi Lind (fi) * Rémi Verschelde (fr) Patches: * Paolo Straffi * Markus Rinne * Antti Kervinen * Rémi Verschelde * Pino Toscano * David Carlier * Dimitriy Marakasov * jarssoft Special Thanks: * Tommi Martela * Alex Rietveld * Matthias Mailänder DustRacing2D-2.0.5/CHANGELOG000066400000000000000000000273361360473665400152120ustar00rootroot00000000000000x.y.z ===== New features: Bug fixes: Other: 2.0.5 ===== New features: * Show the actual car color in minimap Bug fixes: * Fix GitHub Issue #87: Improve off-track detection accuracy on curves * Fix GitHub Issue #83: Car dots in minimap are too small on very large tracks Other: * Editor: Write processing instruction * Add processing instructions to all existing tracks 2.0.4 ===== Mostly a bug fix and code refactoring release. One new track Crossroads (by Wuzzy) added. New features: * Fix GitHub Issue #67: New track: Crossroads Bug fixes: * Fix GitHub Issue #59: Regression: Bridge is broken due to changes in collision detection * Fix GitHub Issue #72: Apostrophe character is broken - The font is now initialized with the full ASCII table * Fix GitHub Issue #77: Pressing accelerate and brake at same time gives weird results * Fix GitHub Issue #76: Dirt particles appear even when not moving on grass * Fix GitHub Issue #66: Editor displays legacy track path on startup - Effective only on Linux/Unix * Fix GitHub Issue #69: Cars teleport above and below bridges when driving horizontally in Radiator * Fix GitHub Issue #71: Confusing starting numbers in two player mode Other: * Fix GitHub Issue #74: Twister track has no pit stop * Skip bridge tiles when placing car into start grid * Require C++14 2.0.3 ===== New features: * Fix GitHub Issue #49: Change custom track directory - On Linux/Unix also `$XDG_DATA_HOME/DustRacing2D/tracks` is added to search paths, or `$HOME/.local/share/DustRacing2D/tracks` if `$XDG_DATA_HOME` is not defined. * Fix GitHub Issue #53: Add a small delay before reverse engages Bug fixes: * Fix GitHub Issue #8: Confusing/weird stars * Fix GitHub Issue #5: Pit stop spam - Collision detection partly rewritten as a side effect * Fix GitHub Issue #48: Walls and grandstands are pushable Other: * Refactor sparkle effect due to changed collision event behavior * Use SimpleLogger instead of MCLogger - Add --debug and --trace CLI options - Throw on unknown arguments 2.0.2 ===== New features: * Editor: Enable zooming with Ctrl+Wheel * Fix GitHub Issue #43: Add option to force screen on multi-display setups Bug fixes: * Fix GitHub issue #30: Add more slack to zFar * Fix GitHub Issue #40: cmake installs into /usr/local instead of /usr/local/bin * Fix GitHub Issue #41: libqt5opengl5-dev is also missing on Ubuntu 18.04 * Editor: Fix mistake in argument parsing * Fix compiler options in CMakeLists.txt * CMake: Fix C++ standard setting * Fix GLES build: use explicitly GLES2/gl2.h * Fix linking to OpenGL libs on CMake < 3.11.0 Other: * Improve AI braking points in Desert Storm * Hard-code zFar to 10000.0f * Editor: Remove edit->enlarge* because there's insert row/column * Add separate build scripts for Jenkins * Bump minimum required Qt version to 5.4.0 * CMake: Default to GLVND, use the recommended way to link to GL 2.0.1 ===== A bug fix release to fix build on Qt 5.6+ Bug fixes: * Editor: use qSetGlobalQHashSeed with Qt 5.6+ qt_qhash_seed is no more exported in recent Qt 5.9.x versions, so use the public functions for it available since Qt 5.6. Other: * Properly check for empty version in mxe-windows-build 2.0.0 ===== This not a completely new game, but still so many fixes and changes that it deserves a major version bump. New features: * Animated game menus * Always select difficulty and lap count after selecting "Play" * "Cool down" laps for AI to prevent the destruction derby * Bridge object as a mesh * Font changed to DejaVu * FPS setting menu * Fully destructible tracks to make races more unpredictable * New intro image * New particle effects * New randomized tree objects * Editor: Add CLI option to force language * Editor: Add option to force object stationary * Editor: Lock qhash random seed so that XML output is not randomized Improvements: * Improved driving dynamics. It's now possible to do burnouts * Improved graphics and lighting * Improvements and additions to many tracks * Sound levels tuned Bug fixes: * Fix GitHub issue #26: Undo resets tile rotations * Fix GitHub issue #24: Change the game font to DejaVu * Fix qmake build * Fix some particle life times * Fix some compiler warnings * Fix shader deletion issues reported by Valgrind * Fix clang build which attributes wrongly std=c++11 into C compiler flags * Fix build with GLEW and QOpenGLFunctions=OFF * Fix CMake dev build * Editor: Fix object add on target nodes and other objects * Editor: Fix the behavior of right-click * Editor: Fix undo erasing computer hints * Editor: Fix undo on target node resize and object rotation Other: * Translation updates * Lots of code refactored 1.13.0 ====== New features: * Implement a minimap * Editor: Implement universal undo stack * Editor: Add option to insert row/col before or after Bug fixes: * Fix GitHub issue #9: Editor segfaults when undoing a change on the last row/column which got deleted before * Fix GitHub issue #19: Crash on exit on FreeBSD * Fix a potential crash on settings loading Other: * Lots of code refactored 1.12.0 ====== New features: * 7 new tracks by Wuzzy * Add German translation Improvements: * Make the steering more stable * Redo startlight graphics in SVG * Improve log messages about translations. * Editor: Improve override cursor logic. * Editor: Remove dead code. * Update Czech translations. Bug fixes: * Fix GitHub issue #7: Bad track preview images. * Fix GitHub issue #6: Assertion failure when empty route cleared. * Remove lower bridge rails for now. Other: * CMake: Switch to the recommended way to link Qt5 1.11.0 ====== New features: * Finally a difficulty setting with three levels: Easy, Medium and Senna * Show a red overlay on hard crashes * Cars can get damaged Improvements: * Remove alpha blending from the plant object * Stabilize the steering a bit Bug fixes: * Editor: Fix wrong scale when track given as a CLI argument * Editor: Don't try to open a track if filename is empty * Fix unit tests Other: * Refactor settingsmenu.hpp * Refactor steering logic * Sparkles as surface particles * Use same renderer for all particle batches 1.10.0 ====== In this release multiple issues with shadow rendering are fixed. Particle rendering is completely reworked and also the track editor is given some love. Issues with depth testing are fixed. A lot of bug fixes and miscellaneous improvements and changes. New features: * Add a chicane to straight.trk and make it shorter * Instantly change the virtual resolution between fullscreen modes * Longer start grid to Suzuka * Make it possible to spin * Show lap time in message area * Simple specular effect for the cars * Take more car colors in to use * Editor: Different colors for brake and brake hard * Editor: Implement row and col deletion * Editor: Implement row and column insertion Improvements: * Enable depth test for smoke * Implement batching and shadows for MCSurfaceParticles * Make timing based on frames instead of QTime * Mud particles as surface particles * No leaf particle when colliding with plants * Reduce quadratic drag * Refactor particle rendering * Rename textures.conf => surfaces.conf * Render rect particles as quads if not GLES * Render shadows with depth information * Set z-offsets for car surfaces * Smaller tree swing amplitude * Use GLSL's reflect() * Editor: Fit track properly when loading a track * Editor: Improve some tile graphics * Editor: Replace private slots with lambdas in EditorView * Editor: Replace some if's with asserts * Editor: Use C++11's override specifier Bug fixes: * Fix a bug where mouse release outside pressed item caused two items being focused * Fix build with qmake * Fix cppcheck warnings * Fix depth buffering * Fix exception handling * Fix specular lighting of the tire object Other: * Add optional z attribute to MCSurface / surface config loader * Add mcvector2d.hh and mcvector3d.hh to CMakeLists.txt * Add option to filter layers to be rendered * C++11 way to disable copy ctor's * Common base class for all particle renderers * Divide layers into render and collision layers * Lambda slots for show/hide cursor * Lambda slot for the update timer * More sane use of casts * Move MCGLScene to MCWorldRenderer * New-style signal connections in Game * Refactor bridge creation * Refactor Config * Refactor child velocity logic * Refactor MCSurfaceConfigLoader * Remove obsolete images * Remove render layers from cars' sub-objects * Replace MCException with std::runtime_error * Use add_compile_options() instead of appending CMAKE_CXX_FLAGS * Use C++11's move semantics in MCBBox and MCBBox3d * Use C++11's move semantics in MCVector2d and MCVector3d 1.9.2 ===== Bug fixes: * Fix rendering of the windowed mode. * Fix rendering in other than native resolutions. Improvements: * Take maximum supported texture size into account. * QGLFramebufferObject => QOpenGLFramebufferObject. * Add camera location support to MCGLShaderProgram. * Simplify FBO shading. * CMake: Check for polices before setting. * Fix some MSVC compilation warnings. * Improve documentaton in mcglscene.hh * Add getters for eyeZ and viewAngle. 1.9.1 ===== New features: * Rotating leaf particles * Show game version in the intro screen. Improvements: * Set VSync default to 'ON'. * Force QSettings to .INI-format on Windows. * Make the code compile with MS Visual C++ 2013. * Improved tile graphics * Re-license artwork under CC BY-SA * Switch to the new QSurface-based graphics stack * Engine improvements Bug fixes: * Fix broken OpenGL scene size on virtual desktops. * Fix multiple bridge issues * Fix crash when quitting * Fix rendering of two-player game 1.8.3 ===== Bug fixes: * Fix some physics issues 1.8.2 ===== New features: * New race track suzuka.trk Improvements: * Physics improvements - More stable and agile car handling - Lighter tire object Bug fixes: * Fix multiple bugs in the bridge component * Fix compilation with Clang 1.8.1 ===== Improvements: * Tune car parameters Other: * Drop support for Qt4 1.8.0 ===== New features: * More realistic and dynamic car physics for funnier gameplay. * Rewritten bridge object that now actually even works * Some graphics improvements (they are still shitty, though) - Transparent shadows - Two-player game views separated by a narrow line - Filtering added to some textures - Some car graphics improved * Driving off-track is now more merciful Bug fixes: * Fix installing the game when not built in the source root. Patch by Rémi Verschelde. * Enhancement of the desktop files. Patch by Rémi Verschelde. * Fix bridge Other: * Improve target zones of ring.trk 1.7.3 ===== Maintenance release: * Revert "Optimize VBO, VAO and texture binding." - Caused missing number plate of the first car * Fix MCObject::addTorque() * Remove linear and angular velocity limits. * Add support for positional force. * Fix build with GL30=ON. * Enable build on FreeBSD. 1.7.2 ===== New features * French translations Bug fixes: * Fix computer driving lines in twister.trk 1.7.1 ===== Bug fixes: * Add missing bridge model for editor. 1.7.0 ===== New features: * twister.trk * Bridge object. * Fade out flash transition. * Turn left and turn right signs. * CLI option to force vsync off. * New crash sound. * Editor: visualize computer hints. * Move user tracks to the beginning of the track array. * Increase the initial slide friction to 1.0 Bug fixes: * Don't show prev/next if on first/last item. * Remove specular shaders from crate and tire. * Fix computer driving line in curvastone.trk * Fix off-track detection on 'sand grass straight' tile. Other: * Small improvements to render timing. * Optimize VBO, VAO and texture binding. * Optimize viewport switching. * Optimize the use of GL_DEPTH_TEST. * Use random functionality from C++11. * Improve sky reflection. * Update scripts/genericLinuxBuildQt5 -- Jussi Lind DustRacing2D-2.0.5/CMakeLists.txt000066400000000000000000000120021360473665400165200ustar00rootroot00000000000000project(DustRacing2D) cmake_minimum_required(VERSION 2.8.12) cmake_policy(VERSION 2.8.12) # Use cmake --help-policy [POLICY] for more information about these: if(POLICY CMP0005) cmake_policy(SET CMP0005 NEW) endif() if(POLICY CMP0020) cmake_policy(SET CMP0020 NEW) endif() # Default to GLVND if(POLICY CMP0072) cmake_policy(SET CMP0072 OLD) endif() if(POLICY CMP0043) cmake_policy(SET CMP0043 NEW) endif() # Global game version set(VERSION_MAJOR 2) set(VERSION_MINOR 0) set(VERSION_PATCH 5) set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") # Some common CPack variables set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) set(CPACK_PACKAGE_NAME dustracing2d) set(CPACK_PACKAGE_VENDOR Juzzlin) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "") set(CPACK_PACKAGE_ICON ${CMAKE_SOURCE_DIR}/data/images/about.png) set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING) set(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README.md) option(ReleaseBuild "This should be used when creating a build with install targets" OFF) option(VorbisLibsPath "Optional path hint for vorbis libs (libvorbis, libvorbisfile)." "") option(OggLibPath "Optional path hint for ogg lib (libogg)." "") option(DATA_PATH "Optional DATA_PATH for Linux release build." "") option(BIN_PATH "Optional BIN_PATH for Linux release build." "") option(DOC_PATH "Optional DOC_PATH for Linux release build." "") option(GLES "Build for OpenGL ES 2.0" OFF) option(NO_GLEW "Don't use GLEW to resolve OpenGL extensions if enabled." ON) option(QOpenGLFunctions "Use QOpenGLFunctions to resolve OpenGL extensions if enabled." ON) option(UnlockAllTracks "Unlock all tracks (for development purposes)" OFF) # Default to release C++ flags if CMAKE_BUILD_TYPE not set if( NOT CMAKE_BUILD_TYPE ) set( CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE ) endif() if(GLES) add_definitions(-D__MC_GLES__) message(STATUS "Compiling for OpenGL ES 2.0") else() message(STATUS "Compiling for OpenGL 2.1") endif() if(NO_GLEW) add_definitions(-D__MC_NO_GLEW__) endif() if(QOpenGLFunctions) message(STATUS "Using QOpenGLFunctions") add_definitions(-D__MC_QOPENGLFUNCTIONS__) add_definitions(-D__MC_NO_GLEW__) endif() if (UnlockAllTracks) message(STATUS "All tracks unlocked") add_definitions(-DUNLOCK_ALL_TRACKS) endif() add_definitions(-DGLEW_STATIC) add_definitions(-DGLEW_NO_GLU) if(UNIX) include("InstallLinux.cmake") elseif(WIN32) include("InstallWindows.cmake") endif() if(CMAKE_COMPILER_IS_GNUCXX OR MINGW OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") add_compile_options("$<$:-W;-Wall;-O3;-pedantic;-fomit-frame-pointer>") add_compile_options("$<$:-W;-Wall;-O0;-pedantic>") # Automatically use ccache if found find_program(CCACHE_FOUND ccache) if(CCACHE_FOUND) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) endif(CCACHE_FOUND) elseif(MSVC) add_definitions(-DNOMINMAX) endif() set(GAME_BINARY_NAME "dustrac-game") set(EDITOR_BINARY_NAME "dustrac-editor") add_definitions(-DVERSION="${VERSION}") set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(QT_MIN_VER 5.4.0) find_package(Qt5Core ${QT_MIN_VER} REQUIRED) find_package(Qt5OpenGL ${QT_MIN_VER} REQUIRED) find_package(Qt5Xml ${QT_MIN_VER} REQUIRED) find_package(Qt5Widgets ${QT_MIN_VER} REQUIRED) find_package(Qt5LinguistTools ${QT_MIN_VER} REQUIRED) find_package(Qt5Test ${QT_MIN_VER} REQUIRED) # Find OpenGL find_package(OpenGL REQUIRED) if(${CMAKE_VERSION} VERSION_LESS "3.11.0") set(DUSTRAC_OPENGL_LIBS ${OPENGL_gl_LIBRARY}) else() set(DUSTRAC_OPENGL_LIBS OpenGL::GL) endif() # OpenAL for sounds. OpenAL directory can be given by -DOPENALDIR=... set(ENV{OPENALDIR} ${OpenALDir}) find_package(OpenAL REQUIRED) include_directories(${OPENAL_INCLUDE_DIR}/..) # Vorbis libs for reading Ogg files if(MSVC) find_library(VORBISFILE_LIB NAMES libvorbisfile.a libvorbisfile_static.lib HINTS ${VorbisLibsPath} REQUIRED) find_library(VORBIS_LIB NAMES libvorbis.a libvorbis_static.lib HINTS ${VorbisLibsPath} REQUIRED) include_directories(${VorbisLibsPath}/include) find_library(OGG_LIB NAMES libogg.a libogg_static.lib HINTS ${OggLibPath} REQUIRED) include_directories(${OggLibPath}/include) message(STATUS "Using static versions of vorbis libs:") message(STATUS " ${VORBISFILE_LIB}") message(STATUS " ${VORBIS_LIB}") message(STATUS " ${OGG_LIB}") else() include(FindPkgConfig) pkg_check_modules(VORBISFILE REQUIRED vorbisfile) endif() # Enable CMake's unit test framework enable_testing() # Install paths depend on the build type and target platform resolve_install_paths() add_subdirectory(src/contrib/SimpleLogger) include_directories(src/contrib/SimpleLogger/src) add_subdirectory(src/editor) add_subdirectory(src/game) DustRacing2D-2.0.5/CONTRIBUTING000066400000000000000000000072521360473665400156250ustar00rootroot00000000000000Contribution "instructions" =========================== All kinds of contributions are welcome: bug fixes, graphics, new tracks, translations.. E-mail: jussi.lind@iki.fi Getting the up-to-date source ----------------------------- git clone https://github.com/juzzlin/DustRacing2D.git - master branch has the currently released stuff and is stable. Game / Editor ------------- Make your changes against the master branch. If you have fixed a bug or modified the game in some other acceptable way, I most likely want to receive the changes as a GitHub pull request OR as a Git patch (make a commit of your changes in your working branch, and then make a patch "git diff master > your_change.patch"). Please follow the existing coding style. Some examples and conventions below. Adding/updating translations ---------------------------- Qt's translation source files for the game are at: src/game/translations/ Editor: src/editor/translations/ You can just copy these files as a new locale and edit, but the recommended way is to generate/update the file from source code to make sure that the source strings are up-to-date: $ lupdate src/game/*.cpp src/game/menu/*.cpp -ts src/game/translations/dustrac-game_fr.ts $ lupdate src/editor/*.cpp -ts src/editor/translations/dustrac-editor_fr.ts ..as an example for French. The .ts-files can then be opened in Qt's translation GUI, linguist. For Qt5, the Ubuntu package for these tools is qttools5-dev-tools. A fallback character mapping is in src/game/graphicsfactory, as the texture font used in the game doesn't support all accented characters, e.g. "á" is mapped to "a". This map can also be extended, if needed. In the case of a new locale, src/game/CMakeLists.txt and src/editor/CMakeLists.txt need to be modified so that the .ts files are compiled into corresponding .qm files. The .qm files are binary files that are actually used by the application: # Translation files in src/game/translations (without .ts) set(TS dustrac-game_fi dustrac-game_it dustrac-game_cs) Add your file to the list for both the game and the editor. Remember to TEST the translations. The editor and the game can be forced to given lang: $ ./dustrac-game --lang fr $ ./dustrac-editor --lang fr Coding style examples --------------------- Some conventions: * Avoid useless comments and temp variables * C++11 standard * camelCase naming convention for members * Indentation with 4 spaces * No copy-paste code * No public/protected member variables allowed, only private variables with getters/setters * PascalCase naming convention for class names, namespaces, and enums * Prefer references and smart pointers * Typedef STL containers and smart pointers * Use const always when possible Class header example: #ifndef MYFOOCLASS_HPP #define MYFOOCLASS_HPP class MyFooClass : public MyBase { public: enum class MyEnum { This, That }; MyFooClass(); virtual ~MyFooClass(); bool someMember() const; void setSomeMember(bool someMember); protected: void myMethod1(); private: void myMethod2(); bool m_someMember; int * m_somePointer; }; typedef std::shared_ptr MyFooClassPtr; #endif // MYFOOCLASS_HPP Class source example: #include "myfooclass.hpp" namespace { static const int MAX_CARS = 10; } MyFooClass::MyFooClass() : m_someMember(false) , m_somePointer(nullptr) { if (something()) { for (int i = 0; i < MAX_CARS; i++) { doSomething(i); } } } bool MyFooClass::someMember() const { return m_someMember; } void setSomeMember(bool someMember) { m_someMember = someMember; } MyFooClass::~MyFooClass() { } -- Jussi Lind DustRacing2D-2.0.5/COPYING000066400000000000000000001045131360473665400150240ustar00rootroot00000000000000 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 . DustRacing2D-2.0.5/INSTALL000066400000000000000000000116311360473665400150200ustar00rootroot00000000000000Build & install instructions ============================ These are build & install instructions for Dust Racing 2D. Source code =========== The source tree includes source code for the track editor and the game itself. The code is "documented" with Doxygen tags. The source tree layout: src/game/ : Source files for the game. src/game/MiniCore/ : Graphics and physics engine. src/game/MTFH/ : Menu Toolkit From Hell. src/game/STFH/ : Sound Toolkit From Hell. src/editor/ : Source files for the track editor. src/common/ : Shared files between the editor and the game. src/images/ : Some SVG-images used as the source for final images. Data directory structure: data/ : Data mapping and configuration files. data/fonts/ : Font used by the game. data/icons/ : Icon files for game and editor. data/images/ : Image files and textures loaded by the game. data/levels/ : Level data. data/models/ : 3D models. data/sounds/ : Sound files. data/translations/ : Released Qt translation files. Other: packaging/windows/ : NSIS packaging for Windows. Build systems ============= The "official" build system for Linux is CMake. Toolchains ========== GCC/MinGW and Clang are the only "officially" supported toolchains on Linux. Windows builds are done in a Docker container with MXE (http://mxe.cc). The build script also generates automatically an NSIS Windows installer and a ZIP-archive. See scripts/build-windows-installer and scripts/mxe-windows-build. Building the project with Microsoft Visual C++ 2013 also works, but no automatic packaging/deployment currently exist. The runtime files (data/, Qt, OpenAL..) must be manually copied in place. See more detailed instructions below. Build dependencies ================== Currently the build depends on Qt, libopenal and libvorbisfile. On Linux pkg-config is required. Dustrac also exploits some features of the C++14 standard, so a somewhat compliant compiler is required (GCC >= 5.0). Building in the command line on Linux (tested on Ubuntu 18.04) ============================================================== Development build (the game can be run without installing anything): ------------------------------------------------------------------- 1) Install Qt5 development files - qt5-default package on Ubuntu/Debian/Mint should install everything needed - You might need to install also these manually depending on your system - qttools5-dev - libqt5opengl5-dev 2) Install OpenAL development files (libopenal-dev on Debian/Ubuntu). 3) Install Vorbis development files (libvorbis-dev on Debian/Ubuntu). 4) Install CMake (cmake on Debian/Ubuntu). 5) Go to the source directory and run: `$ mkdir build && cd build` `$ cmake ..` `$ make` This will build the editor and the game binaries. Run the game: `$ ./dustrac-game` Optionally run the track editor: `$ ./dustrac-editor` Run unit tests: `$ ctest` Release build (in this example game installs under /usr): -------------------------------------------------------- `$ mkdir build && cd build` `$ cmake .. -DReleaseBuild=ON -DCMAKE_INSTALL_PREFIX=/usr` `$ make` This will build the editor and the game binaries. Install the binaries and data files: `$ sudo make install` This installs also the desktop files so Dust Racing 2D should appear in your application menu. Cross-compiling for Windows in Docker with MXE on Linux ======================================================= 1) Install Docker 2) `$ ./scripts/build-windows-installer` CPack ===== Dust Racing 2D has a support for CPack. It's not complete, but can be used to generate e.g. Debian packages. After a successful build with ReleaseBuild=ON run CPack: `$ cpack -G DEB` This will generate a Debian package. Building with Microsoft Visual C++ ================================== The project has been successfully compiled and executed with MSVC with the following setup: * Windows 8.1 Pro * Windows SDK for Windows 8.1 * CMake 3.0 * Qt 5.3 32-bit SDK for MSVC * MS Visual Studio 2013 for Desktop Windows 1) Download and build Vorbis libraries and OpenAL Soft with the same toolchain 2) Open the top-level CMakeLists.txt in Qt Creator, configure and build 3) Copy the runtime files, like OpenAL DLL, to the same directory with the game binary Jenkins CI ========== Jenkinsfile includes pipelines configuration for Jenkins CI. For packagers ============= The binaries only need to find the data dir that includes all the runtime data. This can be set in the main CMakeLists.txt and is given to the game via -DDATA_PATH. The release build should be used when packaging (give -DReleaseBuild=ON to cmake). Currently the data files install to CMAKE_INSTALL_PREFIX/share/DustRacing and the binaries install to CMAKE_INSTALL_PREFIX/bin. CMAKE_INSTALL_PREFIX usually defaults to /usr/local and can be changed by giving, for example, -DCMAKE_INSTALL_PREFIX=/usr to cmake (or to the configure script). DustRacing2D-2.0.5/InstallLinux.cmake000066400000000000000000000120041360473665400174120ustar00rootroot00000000000000# **** Resolve install and data paths **** function(resolve_install_paths) # Set default install paths for release builds. set(DEFAULT_DATA_PATH_BASE share/games/DustRacing2D) if(NOT DATA_PATH) set(DATA_PATH ${CMAKE_INSTALL_PREFIX}/${DEFAULT_DATA_PATH_BASE}/data) endif() if(NOT BIN_PATH) set(BIN_PATH bin) endif() if(NOT DOC_PATH) set(DOC_PATH ${DEFAULT_DATA_PATH_BASE}/) endif() if(ReleaseBuild) message(STATUS "Linux release build with system install targets.") setup_install_targets(${BIN_PATH} ${DATA_PATH} ${DOC_PATH}) set(QT_VER_STR "qt5") set(CPACK_PACKAGE_FILE_NAME "dustracing2d-${VERSION}-linux-${CMAKE_HOST_SYSTEM_PROCESSOR}-${QT_VER_STR}") set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING) set(CPACK_RESOURCE_FILE_README ${CMAKE_SOURCE_DIR}/README.md) set(CPACK_DEBIAN_PACKAGE_NAME "dustracing2d") set(CPACK_DEBIAN_PACKAGE_VERSION ${VERSION}) set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Jussi Lind ") set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Dust Racing 2D is a traditional top-down car racing game including a level editor. ") set(CPACK_DEBIAN_PACKAGE_SECTION "Games") set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES) if(DISTRO_VERSION) message(STATUS "Distro version: ${DISTRO_VERSION}") set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${DISTRO_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}) else() set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}) endif() include(CPack) else() message(STATUS "Linux development build without install targets.") message(STATUS "Use -DReleaseBuild=ON to enable install targets.") set(BIN_PATH .) set(DATA_PATH ./data) set(DOC_PATH .) # Add target to copy runtime files to the binary dir. add_custom_target(runtime ALL COMMAND cmake -E copy_directory ${CMAKE_SOURCE_DIR}/data ${CMAKE_BINARY_DIR}/data COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/AUTHORS ${CMAKE_BINARY_DIR}/AUTHORS COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/CHANGELOG ${CMAKE_BINARY_DIR}/CHANGELOG COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/COPYING ${CMAKE_BINARY_DIR}/COPYING COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/README.md ${CMAKE_BINARY_DIR}/README.md DEPENDS ${GAME_BINARY_NAME} ${QM_FILES}) endif() message(STATUS "BIN_PATH: " ${BIN_PATH}) message(STATUS "DATA_PATH: " ${DATA_PATH}) message(STATUS "DOC_PATH:" ${DOC_PATH}) # This is the main data path given to the game and editor binaries. add_definitions(-DDATA_PATH="${DATA_PATH}") endfunction() # **** Install targets for Linux **** function(setup_install_targets BIN_PATH DATA_PATH DOC_PATH) # Install binaries and game data install(PROGRAMS ${CMAKE_BINARY_DIR}/${GAME_BINARY_NAME} DESTINATION ${BIN_PATH}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${EDITOR_BINARY_NAME} DESTINATION ${BIN_PATH}) install(FILES data/editorModels.conf DESTINATION ${DATA_PATH}) install(FILES data/meshes.conf DESTINATION ${DATA_PATH}) install(FILES data/surfaces.conf DESTINATION ${DATA_PATH}) install(FILES AUTHORS CHANGELOG COPYING README.md DESTINATION ${DOC_PATH}) install(DIRECTORY data/images DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.jpg") install(DIRECTORY data/images DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.png") install(DIRECTORY data/levels DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.trk") install(DIRECTORY data/models DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.obj") install(DIRECTORY data/sounds DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.ogg") install(DIRECTORY data/fonts DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.ttf") install(DIRECTORY data/fonts DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.txt") install(DIRECTORY ${CMAKE_BINARY_DIR}/data/translations DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.qm") # Install .desktop files install(FILES ${CMAKE_BINARY_DIR}/dustrac-game.desktop DESTINATION share/applications) install(FILES ${CMAKE_BINARY_DIR}/dustrac-editor.desktop DESTINATION share/applications) # Install app store meta data install(FILES src/dustrac.appdata.xml DESTINATION share/metainfo) # Install icons install(FILES data/icons/dustrac-game.png DESTINATION share/pixmaps) install(FILES data/icons/dustrac-game.png DESTINATION share/icons/hicolor/64x64/apps) install(FILES data/icons/dustrac-editor.png DESTINATION share/pixmaps) install(FILES data/icons/dustrac-editor.png DESTINATION share/icons/hicolor/64x64/apps) endfunction() DustRacing2D-2.0.5/InstallWindows.cmake000066400000000000000000000037631360473665400177610ustar00rootroot00000000000000# **** Resolve install and data paths **** function(resolve_install_paths) message(STATUS "Windows build.") set(BIN_PATH .) set(DATA_PATH ./data) set(DOC_PATH .) # This is the main data path given to the game and editor binaries. add_definitions(-DDATA_PATH="${DATA_PATH}") # Add target to copy runtime files to the binary dir. add_custom_target(runtimeData ALL COMMAND cmake -E copy_directory ${CMAKE_SOURCE_DIR}/data ${CMAKE_BINARY_DIR}/data COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/AUTHORS ${CMAKE_BINARY_DIR}/AUTHORS COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/CHANGELOG ${CMAKE_BINARY_DIR}/CHANGELOG COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/COPYING ${CMAKE_BINARY_DIR}/COPYING COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/README.md ${CMAKE_BINARY_DIR}/README.md DEPENDS ${GAME_BINARY_NAME} ${QM_FILES}) setup_install_targets(${BIN_PATH} ${DATA_PATH} ${DOC_PATH}) endfunction() # **** Instal targets for Windows **** function(setup_install_targets BIN_PATH DATA_PATH DOC_PATH) # Install binaries and game data install(PROGRAMS ${CMAKE_BINARY_DIR}/${GAME_BINARY_NAME}.exe DESTINATION ${BIN_PATH}) install(PROGRAMS ${CMAKE_BINARY_DIR}/${EDITOR_BINARY_NAME}.exe DESTINATION ${BIN_PATH}) install(FILES data/editorModels.conf DESTINATION ${DATA_PATH}) install(FILES data/meshes.conf DESTINATION ${DATA_PATH}) install(FILES data/surfaces.conf DESTINATION ${DATA_PATH}) install(FILES AUTHORS CHANGELOG COPYING README.md DESTINATION ${DOC_PATH}) install(DIRECTORY data/images DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.jpg") install(DIRECTORY data/images DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.png") install(DIRECTORY data/levels DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.trk") install(DIRECTORY data/models DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.obj") install(DIRECTORY data/translations DESTINATION ${DATA_PATH} FILES_MATCHING PATTERN "*.qm") endfunction() DustRacing2D-2.0.5/Jenkinsfile000066400000000000000000000054161360473665400161570ustar00rootroot00000000000000pipeline { agent none stages { stage('CMake Debug build and unit tests') { agent { docker { image 'juzzlin/qt5-18.04:latest' args '--privileged -t -v $WORKSPACE:/dr2d' } } steps { sh "mkdir -p build-debug" sh "cd build-debug && cmake -DCMAKE_BUILD_TYPE=Debug .." sh "cd build-debug && cmake --build . --target all -- -j3 && ctest" } } stage('QMake build') { agent { docker { image 'juzzlin/qt5-18.04:latest' args '--privileged -t -v $WORKSPACE:/dr2d' } } steps { sh "mkdir -p build-qmake" sh "cd build-qmake && qmake .. && make -j3" } } stage('Debian package / Ubuntu 16.04') { agent { docker { image 'juzzlin/qt5-16.04:latest' args '--privileged -t -v $WORKSPACE:/dr2d' } } steps { sh "mkdir -p build" sh "cd build && cmake -D DISTRO_VERSION=Ubuntu-16.04 -D ReleaseBuild=ON -D CMAKE_BUILD_TYPE=Release .. && cmake --build . --target all -- -j3" sh "cd build && cpack -G DEB" } post { always { archiveArtifacts artifacts: 'build/*.deb', fingerprint: true } } } stage('Debian package / Ubuntu 18.04') { agent { docker { image 'juzzlin/qt5-18.04:latest' args '--privileged -t -v $WORKSPACE:/dr2d' } } steps { sh "mkdir -p build" sh "cd build && cmake -D DISTRO_VERSION=Ubuntu-18.04 -D ReleaseBuild=ON -D CMAKE_BUILD_TYPE=Release .. && cmake --build . --target all -- -j3" sh "cd build && cpack -G DEB" } post { always { archiveArtifacts artifacts: 'build/*.deb', fingerprint: true } } } stage('NSIS installer') { agent { docker { image 'juzzlin/mxe-qt5-18.04:latest' args '--privileged -t -v $WORKSPACE:/dr2d' } } steps { sh "./scripts/build-windows-installer" } post { always { archiveArtifacts artifacts: '*.exe', fingerprint: true archiveArtifacts artifacts: '*.zip', fingerprint: true } } } } } DustRacing2D-2.0.5/README.md000066400000000000000000000072371360473665400152550ustar00rootroot00000000000000## Dust Racing 2D
Video of the game Dust Racing 2D (Dustrac) is a tile-based, cross-platform 2D racing game written in Qt (C++) and OpenGL. Dust Racing 2D comes with a Qt-based level editor for easy level creation. A separate engine, MiniCore, is used for physics modeling. ## Features * 1-2 human players againts 11 challenging computer players * 3 difficulty settings: Easy, Medium, Hard * Split-screen two player game (vertical or horizontal) * Game modes: Race, Time Trial, Duel * 2D graphics with some 3D objects * Smooth game play and physics * Multiple race tracks * Finishing in TOP-6 will unlock the next race track * Star ratings based on the best positions on each race track * Easy to create new race tracks with the level editor * Engine and collision sounds * Pit stops * Runs windowed or fullscreen * Portable source code using CMake as the build system * Will be forever completely free ## License Dust Racing 2D source code is licensed under GNU GPLv3. See COPYING for the complete license text. Dust Racing 2D includes the source code for the GLEW library. See src/game/MiniCore/Graphics/glew/glew.h for the license text. Dust Racing 2D includes the source code for the GLM library. See src/game/MiniCore/Graphics/glm/ogl-math/glm/glm.hpp for the license text. All image files, except where otherwise noted, are licensed under CC BY-SA 3.0: http://creativecommons.org/licenses/by-sa/3.0/ ## Playing ### Controls The default controls for player one (the pink race car): Accelerate | Brake | Turn left | Turn right ---------- | ----- | --------- | ---------- Up | Down | Left | Right The default controls for player two (the grey race car): Accelerate | Brake | Turn left | Turn right ---------- | ----- | --------- | ---------- W | S | A | D The key configuration and game mode can be changed in the settings menu. **ESC** or **Q** exits the race and also the current menu. **P** pauses the game. ### Races In the race modes there are always 12 cars. By finishing in TOP-6 a new track will be unlocked. The record times and best positions are stored separately for each lap count. ### Pit stops Your tires will wear out as the race progresses. This causes more and more sliding. Fortunately there's a pit (the yellow rectangle). By stopping on the pit your tires will be repaired. ### Custom track files Dust Racing 2D searches for race tracks in `~/DustRacingTracks/` where you can place your own race tracks. On Linux/Unix also `$XDG_DATA_HOME/DustRacing2D/tracks` is added to search paths, or `$HOME/.local/share/DustRacing2D/tracks` if `$XDG_DATA_HOME` is not defined. ## Command line options `--lang [lang]` forces the language. Currently available: `fi`, `cs`, `de`, `it`, `fr`, `ru`. E.g. `dustrac-game --lang it` `--screen [index]` forces the screen on multi-display setups when in fullscreen mode. E.g. `dustrac-game --screen 1` would start the game on the second display. ## Building the project Please refer to the `INSTALL` document for build/install instructions if you're going to build **Dust Racing 2D** from sources. In a nutshell, on Linux after installing `Qt5`, `OpenAL` and `Vorbis` dev libs you just: `$ mkdir build && cd build` `$ cmake ..` `$ make` ..or open the top-level `CMakeLists.txt` in **Qt Creator** or other IDE that supports CMake. DustRacing2D-2.0.5/configure000077500000000000000000000001361360473665400156740ustar00rootroot00000000000000#!/bin/sh rm -f CMakeCache.txt cmake . $@ && echo "Configuring compeleted. Now run \"make\"." DustRacing2D-2.0.5/data/000077500000000000000000000000001360473665400146765ustar00rootroot00000000000000DustRacing2D-2.0.5/data/editorModels.conf000066400000000000000000000055471360473665400202120ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/fonts/000077500000000000000000000000001360473665400160275ustar00rootroot00000000000000DustRacing2D-2.0.5/data/fonts/DejaVuSans-Bold.ttf000066400000000000000000025422241360473665400214420ustar00rootroot000000000000000FFTMs<GDEFX8GPOS`6GSUB,VOS/2ZWVcmapG^cvt >1XTfpgm[kgaspX glyf8dhead d6hhea$hmtx|9`kernu $locaX /`maxpy- namer" =5post` prep|a =))(0Y        !%&&'KLLMOPTUst?@@ABCJKQRWX    ) * , -            cddeeffgijjkuv <==>lmtu3 JDFLTzarabarmnbraicanschercyrlgeorgrekhanihebrkana*lao 4latnDmathnko ogamrunrtfngthaiKUR SND URD MKD SRB 4ISM 4KSM 4LSM 4MOL 4NSM 4ROM 4SKS 4SSM 4kern2kern8mark@markNmarkTmkmk\mkmkdmkmkj     (08@JRZbjrz^`  ~!T"T$ 8:;AB DBU0nPo0&:  vy~vy~ *06<BHNTZ`flrx~:::::r: 4 4 `Ltuwxz{|}mnopqrstLtuwxz{|}mnopqrstRX^djpv|$ *JGH llN>X  &,G&--G@CDEFIRW &,28**`*-|*~*h. $JPV\bhntz MtH%   "#   !"# $*06<BHNTZH6 7pv| $*06<BHNTZ`flrx~hhf>fff>=>>jjjff   &-./==56  %,==678 $*06<BHNTZ`flrx~ &,{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ $6HZl~ q^j q^j q^j q^j q^ q^ q^j q^j&vy~>DJPV\bhpx~8 u "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z  "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz\Hq&~0`tw __q_R_Xjjj,,,&j&jXXvjj,,8 8 >?R>XjqRRj jjkjj,,,,,,,&j0^0p0p&j/&j&j&jXXXXXXXXXj,83p3p83v8  jjj88vjjjpDj >kDR>R>R>~j,qqqqRRSXjd01edx3\QQQjjjjjj8888,,,,,,,,//&j&j&j&j&j&jXXXXjjjjjjjjDD v vjjjjR>RR>R~j~j 8 8,j,jqqqqqqqqSSRR\\^^^,^^^^^^^^^^^ ____qq__RR__\\Xj&jjjjj,,\\,,,,&j&j&j&jXXXXjjjjjjjjjjjjjjjjBB88 88jj > >??jjR>RXj&jjqqRRRR\\j8kj,J,,,XX >R\\X&jddd000111eeedddxxx333\\\QQQQQQQQQ0^0p0p&j&jXXXXXepepeeeeppjjjjjB3p3p3vjjjjjj8jjv  jjjp  jjj > >kv\\c'DOhjs8BDRg(*;X`bbu0 &vy~BHNTZ`flt| 06<BHNTZ`flrx~x00U000000@0@0@000000x~0 '-/355 78 :;=A0 $6HZl~ qr : qr : qr  qr  qr  qr  qr  qr  Ltuwxz{|}mnopqrst^flrx~2```P [ $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |  $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz^^_L__4qF_r&_r      rr&~& LL RRq&R&RLJ@@@ n              rqr L L L L L LLL&x&x&x &x&x&x&x&x&x44f9_9~L qqxqx &&&RRd01e3[_3 \QQQ L L L L@@ P P n n&x&x^^&x&x^^&x&x^^&x&xll9_9e~L~L99qxqxqqqxqx  &R&R^^^:,^^^^:^:^^^^^:^:L___4_4qFqF_r_r&FF_r_rtXtBBFF                  BBrrrrrrrr&~&~B&&B L LnnL&Rnn  ^^rrRRRRRzBBRXRLqq&R&R LLL&RLLBBxxJ@   444 XRddd000111eee333[[[___333   \\\QQQQQQQQQ@            rrrqxqr9x LLL LFF LLL&Rnn&R&xxx&x^^ ^^&x^^&x^^&xff444fffrrzBBzBB3((22;;Ohjs')hwRg(*;X`bbu0 Ltuwxz{|}mnopqrst~ "(.42``{{{{{{{{` <BHNTZ`flrx~Q@`(&@E\U  #%'=KKbcGHJ0 >DJPV\bhntzQ`````````````````(`&``@``EJ  #=``bc @CDEFIRSTUVW 28>DJPV\bhnt```````````` 8>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz%$=D]4568:();AA=HH>QR?YYAaaBy{CFGHI**J77KTTLMN  OY\^_a cg-s25<HLP??df bNj $*06< o^ kZ-   {{ 3hntz "(.4:@FLRX^djpv|f |zrrf_^^_Tff^^]ffHR=5RRfr_5R3$&'(+,012=DGHKLPQRX]-HQRYayz{*7TBCH?T  DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z   |WzzRqof|f>fR^_Rd/RR^ZRTf'Rf ^^j] fqfz~RRHRd_R >zR_RR^RR=F_RRRRRR5^6>c^RR//R/RRRG1RUUU^R^R6ZZZRcRRR{R6RRTRRRRRRRfZy_RTRZZRZ7R!RdzR=fz^^ffb#DaT6R  MM  tt R"Y$R6fiR#>R}~Rsk|WqTfRfWURRmWRR"R~RrVbe@`\`\`\R~'+%Cm|R5RfRJ^RRR`RoRqo^Zs9zV >R+fQTR~ZSR5_Rd R_$= D]$>?ABCEGHIJKLM()N--PAAQHHRJJSLLTQRUYZWaaYddZnp[vv^y{_bcd f gmikmmJJ44}~hhkpssu{            ).13 5 9;-G25W;P[stqvs?@WWaakk   !"# $*06<BHNTZ H>. c "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z     " ( . 4 : @ F L R X ^ d j p v |     $ * 0 6 < B H N T Z ` f l r x ~      & , 2 8 > D J P V \ b h n t z  "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~   Wzzq|of"f>f{d{Z{{d^/_/dd/{{{{{U{Z{{{{{{T{f'{{{{Z^{{j{dm]{ {fzdyYofmZ{~z{T{H{{Zd_{ >{z_/ZU{{{{{d{{ZZ{{{={{{F{_{{{{{{dd5/^{6{>cdd/{/{/{{{{{G{{19{99{U{U{'{{Z{Z{Z{_{{A{{{{{{{T{T{T{T{fZ{y{{_/{j{ZZZ7{!dzv{{={{P{{{{{{{{{{({{({z{(z{L{{V{{{_/f{={{zzY  YfWfY"Y0$ P{{E{U{{{{{{[{D{{{{{{`{{{{{9{9{[{{{E{{{{Z{^/^/_z{GD{{T{f{f{G{{{f{f{fd{WW{D{f{E{{[{4{V{{f{[{{{'{{{{{b{#{{D{{{{{{{`{{{{T{{[{{6{{ Z Z Z Z5Y${6f iD>R}1{~{sd|y|"{WdqdT{f{f{{W{({9{{{>{{U{[{D{f{&z{m{`{`{m{Wd"~={b{e@{{{`\{`\{`\{~|'%C{m{"{{f{J^{{0fo{{qdo{U{Z{s9{zV >+fQT{{{{{{Z{*{S{{{{{o5{_{d^{^{^{ {$= D]$>?ABCEFHIJ()KACMHJPLLSORTTUXX]Z__`aaaffbijcmpet{iqrst v g}ikmmFVX^efjkmnppxx0FJR T$$Z+,[/7]AAf\\g__hcci}~jlmopqtvwhhxjpyssu{                  -25:Pst/v1CEFIKQSX>@YWW\aa]ee^hi_kkab !#$) /6==@AB "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~{{{{{{{{{{{{{{{{{{pprpr{pr{{{{r{{{{{{{{A{O{{{{{{{{{{{{{{{{{{{{{{{{{{{{{4: <BHNTZ`flrx~f@RVFTffHRRR$(,28<=DHLRX\]Yayz{*7T? @%8kY&&&au<aa<DrDr/&&KK&kk}}&N}&&au)&D&9a&a&&&a/ \<,@a=akuDYYY&&N<DDDkDDDDDkDVV&YY}}aD&&&&au<aa<DrDr aua/ mediDrligJrligTsalt\saltbsalth'     (RZbjrz $,4<DLT\dlt| R  N LTF  F d h  l  n  P 2 f     H |4D<@Db4<DLT\n,,,H!! u !! u&Bux{~Bvy|Bwz} B9&&99>9LM *_ + i$=EEGGIIKKLMNOWW      ""$$&&((**,,..0022446688:;==??AAHHRRTTVVyz  **__ + +   &   &$$4F!!$$4F""$$4F##$$4F$$$$4F%%(0RU&.6VVXZ&.6[\^_&.6`bdd&(0eh& 0D2 txz|~$*-03 6"`X !$  >(0,Z"%(46+.:9DBFHP]JbPhjs#%RN &,/25 8# & @*2.\!$'*(8-0<;R_L TTVVX\ahjprs)ORM%+.14  7"% ?)1-[ #&)'7,/;:Q^K TTVVX\ahjprs)O2  ozrz ryovvyz~&8Jlmznz s}pz t}qz qxpwnumt txswtuwxz} > $~zx~zx6 "(IOILOLIIRl$*06<t{rzpynxlwkviugtS~Q}P| &,u{szqyoxmwhtR}T}Uiqs3'B 8  WVWA(:FPZfr ,"  + *" $; V 0 (/ F X R")567DF  hgiefkj$:@GMU[hgiefkj$:@GMU[kWa>,-DO *"&kWa>,-DO\ 9 =  e!?@hifg LM *_ + jjjjj 123cX33f n $`) PfEd m`, T, ~OSXZbw%V_  :UWZpt?5JR>PjGv#.[jx{}EMWY[]} d q ! !I!K!N!!###!#(#,#u#z#}#######$#$i&&&&'' '''K'M'R'V'^''''''()) )A))))***/*k***++$+T,w,-%-e-o...%..MGMQWn+AKSWg&A6<>ADO#t QWZ\pz1Ya  !@WZ`ty? 7LT@RtFn&0]w{} HPY[]_ j t !! !K!N!P!!###$#+#s#z#}#######$"$`%&&&''' ')'M'O'V'X'a'''''')) )@))))** */*j*}**+++S,`,y--0-o..."..MЦDLPTb"0FNVd(8>@CFR pva_WRA@?72/.)(&! ,)'`^hgedcWUTM84953*n~e`\VT sofT |{@:80ğmlllllyl^lXlVkkkkkkkkkkkkkQ$QkjjieSSC  ~bOQSWXZZ\bpwz#$%81VY_a%'BG  I  KLMN!:O@UiWWZZ`ptty??"#%&()*.589:<ILQRXbd 57JLRTo>@PRjt!.>?FG@nvBKh#}&.0[]jwx{{}}   E HM <PW BYY J[[ K]] L_} M l      d j q H t P k x !! ! !I !K!K !N!N !P! !! !# ## ##! #$#( #+#, #s#u #z#z #}#} ## ## ## ## ## ## ## $"$# $`$i %& &&u&&&&'''' ' ''')'K'M'M'O'R'V'V'X'^'a'''''5''C''E''F'(L))\) ) ^)@)A`))b))d))l))m**o* *r*/*/*j*k*}*****++++$+S+T,`,w,y,--%-0-e!-o-oW..X..Y.".%Z....^MM_DGLMPQTWbn"+0AFK NS&VW,dg.26<>IQ&k(A68<>>@ACDFOR9=GIOS #cptgvl #V89s;>u@DyFF~JPRkV׏0"-.1155#%+-@CC    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a rdei xpk vj s gw U l|>cn T m} b : '   y  qzf3f=ffTbfTfmf3bq%fHZfm99Xm=fuff9{{X3fLfLJ#DDf?;Pw /X#/553X sf+j-j!f#^`3B3\fy```{j\{`bXP1L`%!JJ7{'}3Xy9bs&, %Id@QX Y!-,%Id@QX Y!-,  P y PXY%%# P y PXY%-,KPX (EDY!-,%E`D-,KSX%%EDY!!-,ED-,%%I%%I` ch #:e:-ff&&/10!%!!fsr) @ <2991/0!!!!h33h^h@1<20###h++)K@1     91/<2<<22<<220!3!!!!#!#!5!!5!!!`aaE````HFR`PF#*1s@? %$ + ,#,, (/($ +/ 2<<991/99999990#.''.546?3.'>54&}osy!dede GUNWWP-.);?7* "*/(BE5;CBBDCB '3c@5  % ."( 41+  1 +%49912<0KSXY""32654&'2#"&546#3!2#"&546"32654&3GNMHHLMGֺ%պպHNNHHMNh{rs{{sr{ؽ۽ ٽڽ٨|rs}}sr|{&06@Y     ,-./+0()'%0' - -! '*$ 0$*$  *  199999991/99990KSX999Y"']@   ' 0   0%/ / %&? ? @K K K/K0ZZUZ Z U(\.\0X2_2dig`i i d&2, ' '* 9 5005@J I'I(WW\ ['ggl ]] >7!!'# 5467.54632.#"3267577oc%Xbi*([k^PMU1ABwCt2>FnkmFDےj5j:0.;6"W/wGs))@ 10#+ @ 29910!&547!י);: @   29910654'!)?C)9F@(      <2<29912290 %#'-73%JLLNLNMXX "@   <<1/<<0!!#!5!    m9@ 10!#hduo10!!ot91/0!!h}B/99103#mb/ #@  10&#"326! ! i||jj|{j@'&@mstm (@  1/20!%!!!T[nT HH5@)% K TX8Y9991/2990KSX9Y"@&**"""555BJFF]]!!>54&#">3 N!IFuZzz )~B~DiMLH+-zӱ(L@+  #)& )999190!"&'32654&+532654&#">3 sqlg~]^rl#!%'%%)67jcfi[]V^*) \3 C@ !  ! %    <291/<290KSXY" !!3#!!Z@jRJ=@"  " 190!!>3 !"&'32654&#"v,Y00{zaSl 12/FFuv+-# $7@ "% %$%190"32654&.#">32! !2eeeefeev_PB[uEgჃ-+11ir E@%91/0KSXY"]@ &5F]!!!e'1} #/G@( '-0 $*& '&!$0991990"32654&%.54$! ! $54632654&#"lttlkrr|כc\ZbbZ\cvnnuunou)ž)*ސUY``YY_`j$7@  %%" $%19073267#"54! !"&2654&#"\RDZ9$@ieffeeff!++22 "vYN`@<21/0!!!!ii`}}N` %@  <210!#!!idiu}=@29190 5<'@ <210!!!!=@<91905511J!H@'    "<299991/9990!546?>54&#">32!!Bj@95`VQfy]N^@D*i1Rb:4\.FOCB:*(ǿbY9>K-o Ml@: 40LM3 30 07$CN34L **)(I(*)4=N<991299999032654&#"#"&5463253>54&'&$#"3267#"$'&5476$32!#?iZYjkZXiYثY|:;_tZked~Yk}٘~~On{KM'{zyZGOPGKɝdIz=;bɵdbg^Pag}}IJ}|b~ ' @@     %    Բ]91/<90KSXY"@ / V f  t   %* IFGH XYVWhifg` t{zu{t      /]]!!!!!F_}))}+%R P@%    !299991/90@ ""/"P"]2654&+2654&+)! [^^[tutuH|B7fPNMQsbcaay$ռmf\;@    - +21990/_]%# !2.#"3267\j}Lu}jksskR78ef87IDDI9.@  -. 99991/0P]32654&#! )=TMwiffixjq#ateeta 0@   21/0 P p ]!!!!!!rg +@ 21/0 P p ]!!!!!rgfK@%    1 3/-+19990_]%# !2.#"3267#!ʥLy}|@   221/<<0@P ` p ]!!!!!!89+y=,KTKT[X@8Y1/0@P]!!+f= A@   KTKT[X@8Y991990 @ P ]!!#3265N3IO@UZfi ]]!!!!mR+ff 2@  -7-+10@ /?]"3254 ! f°±hhgddjk 1@   - 299991/0]! !#!32654&#1pzzp_mddlffb@   - 7-+999190@,  '/V S f ` w w p  Y Y YXj i x ]]# ! !"3254fgk-¾lkh\@2%       29991/<9990KSX9Y"]@66EEVVPee`]2654&+!! !.#yiiyL'O}@f7q^?ZgfX֔-XspR-'@*% %( "(999919990@Tp)9999 JJJ X ]\^^ Z!joooh o n!t t t || |!  !  !(]].#"!"$'32654&/.54$!2{hYuӎ⏏ |~[ {78LP3 pq[QeiH"ӆsUst/ LJDMm)f]ˢŸUO..^ 8@ B@ 221/0O`]%2654&#">32#"&'!!syyss{{{Ju uJf稠b]]bX5{7@ B ;210_].#"3267# !25IOT@TWV/X=202177\8@ @B ;221/0O`]!!5#"322654&#"hJu tsyysryyXc\II]ɨX {C@!    D ;9190/?]!3267# ! 4&#" q}K"=w`h3f~~CD015:“f}un'Q@    E K TKT[X @8Y<<991/22990@]#"!!!#35463L<27DN`N\Fy(K@& #& @ B;)221/990O*`*]%#"54325!!"&'3265"32654&Ju uJhic^[o|xsp||b\CA\c !655@   G 21/<9990`]!54&'.#"!!>32 H.pfQnVon#'b])@ <21/0@ P ` p ]!!!!ff`F =@    <2991990@ P`p]!+53265!!fͱ>fLf`\y @   291/<90@`;IIZ]X_ogvv{:DGJV]g`ewpv|]]!! !!fNNK- 1/0@ P`p]!!f{%i@)   #  H H &KTX@8Y<991/<<<29990@'0'P'p'''']>32!>54&#"!4&#"!!>32DpFNfo@RgphBgthmVH wkHk`_`p{5@   G 21/<9990`]!54&'.#"!!>32 H.pfQnVon#'`b]X'{ -@  BLB;107?G]"32654& ! w}}wu||u!EG{88V^{;@B @ 2210O`]%!!>32#"&"32654&fJu us{{ssyy b]]7\Vy ;@  @B;2210O`]"32654&#"325!!ryyrsyyyJu uJhw+c\IG\c{7@     KTX8Y21/990.#"!!>32/]/fE}*(/`nejb{'@@  6  6% %( SRP"M(9999190KSX99Y" ]@^ #  ,. . . . . ) 9; ; ; : : K J J J H w w  %  7 ?)_) ]].#"!"&'32654&/.54632s_fcKa?o}ktijIm?c=0035+. ###44:90/ m@    TKTKT[KT[KT[X@8Y<<991/<2990@??PPP`` ]]!!;!"&5#33q>\Ա%N7>`;@  G 291/29990`]!3265!!5#"&hG.pfQmp[.w#&)b]`@'%Դ]91/290KSXY"@| 0@Vf  &$+)64990FFII`x$]]! !!fgGw`H` @J 4  4 4 4   %     K TK T[K T[X@8Y91/<2290KSXY"@ 550 G @ @ _ l        &$+)*+ $ % /554;::78 ?GIFHGH YVV[ T Y _f`b```d ` upspppt p      []]!!!! !H\+\yy` ` y@F    %    K TKT[KT[KT[X @8Y91/<290KSXY"@  / 3< CL R\ bl sz         2     $++$ 4;;4 0 DKKD o       :]] !! ! !l{{l=#LbF`6@C %    K TKT[KT[X@8Y9129990KSX9Y"@ @Pet $$$5586699EEJJEEge    9]]! !+5326?f-f)Gp[S `6:K\F` @% Դ]2991/0KSXY"@DYVifyv &)/ 9? J_ ]]!!!5!uNN`f$^@1 %   ! % $  %<<29999999199999990#"&=4&+5326=46;#"3l==lEUZnoYUmutWW10#$`@2%   #%# %<2<9999999199999990326=467.=4&+532;#"+FUZooZUFl==lmWW͖tuR#@  1990#"'&'&'&#"5>32326j`k^Xbk`k^VRPE:=MSPE:=K` "@  <29910!!33h=^qd#W@.    !$   B$<<222991<9990.+>7+#$4%3NMMNJAY9S: GZ,lm*902i2/  (.##}@@!   <<1/222990.#"!!!!3#5356!2FMvqu\'&} FJ=#/@ ! ! $A !* @&00   '}|~-} |022999999122999990'7.5467'7>327'#"&72654&#"ϙљ0l=6l9ϘϚ.j?:l[\[~ Ϛ1k??l.͚Ϛ7n6?i/ϙ\\\]~y@B  %     nm n m<2<2999991/2<<<290KSXY"]@, $+6:FI   0@ ]]!!!5!5'!5!! !!!!N9:1k$! %j1`BV3VB@ <210##  =3?k@8@1:4 %+1@ =!+%74:!=\.!\=[.7[(@9999991999990.#"#"&'532654'&'.5467.54632>54&uc9KL ҟquMKUfs9AN$ˠoqKATDC{AF''1/CO Y}u0)qI)+2(FJWh33oKL2CbBO4Cj;;1\@1<20K TK T[KT[KT[X@878YK TX@878Y3#%3#11IH@(  2&>f,X c8e XhDJ21/990.#"3267#"&54632'"3267>54&'.'2#"$'&5476$+9o9q~r@s.A>EyWWWWWVy{WWWWWXymmllmmmmllmmf%#rs~$#WWWzyWVVUWWyzWXVnmmmmnnmmmmnu)@$' # A # @'*# s#s*999991999990@??;;;? ?;;;???;]!!"326=%#5#"&546;54&#"5>32-ӅhB:Yr 7^YUWO\K=4>3:rWT@LHt8;##j' 5  @  y y<2991<2990 5 5%$'qsq@ 10!#!o10!!ot 4Lb@8-*+'0!5 2+A'*,$0-+$!1g3f$cX;eX3cGM299991/29990"3267>54&'.#32654&'2#'.+#2#"$'&5476$yWWWWWVy{WWWWWXϲ##NOM+i`)Gok&: 1mmllmmmmllmm3WWWzyWVVUWWyzWXV5442wyVpP:NAD7nmmmmnnmmmmnX;E10K TKT[X@878YKTX@878Y!!vdL @  XYX10"32654&'2#"&546HdcIHdeGBz0/11-0|D\dHHbcGHd3/0xDCy-03 .@   l l <2<21/<<0!!#!5!!!  bbm]@%   "@99919990KSX9Y"!!5>54&#"5>32r_9=4I;>TWKGeD 5P(2>-/oHyVZ(W@ #  ""#@#)& )99919990#"&'532654&+532654&#"5>32P\fQDB<_hkrJTbZNP4{FAWZ`nQ$%@;@=/3--piE`mf710K TKT[X@878Y]!#fT` B@!  !   !2912<990""]!3265!3267#"&'#"&'idfgdh!'!5]-Yq#/YJhT utqqtG8 KSOO/0;d &@ ^^9120!###.54$\fN۲910!!h}o5@   991/0K TX@878Y!#"&/32654&'Z:7{0f42S!:A+->j/_[ .(R<{ 7  @   129035733!9 41Zuu 9A  @  uu 99102#"&546!!"32654&B7T[[TS[[޾ܾM~tt||tt~' 5  @ yy <<991<2990 5-5-%!$'d' Pzd' '{d' ''td{h' Pzd' 'un`!M@*   "  "<2999919990!3267#"$546?>5%!!iAm@84`VQew\N^@D*iif1Q~d:3\/FPDB*(ǾcX:=L-d 'k&$u 'k&$u 'k&$u <1 's&${&+@0?&]1 'k&$u +@p@O / ]1 'm!{@S!! ! !%! !  UU "9999999991/<9990KSXY"K TX"""@878Y@/!/!:!o! !! # ///  /// "+ #EKUZ` ` ` ooo``ooo`fi `#tuyz{t    D]] !!!.54632%32654&#"!}^_}vtwM66MN56MJH"K+uu/L{6MM66MMR@7%     /<291/<90KSXY"K TK T[X@878Y@&W ] !!!!!!!!!{y}sfb^fo\&&zsk&(uk&(uk&(uk&(u @@@]1=k&,du@@]1k&,du@@]1k&,|u  Ic:1Ak&,|u +KQX @88Y1!L @   -. <291/<20@X!P!`!////////OOOOOOOO________(]]3#32654&#! )#3PULxhgghyk#ateetamm&15uffk&2Nuffk&2Nuffk&2Nuffm&2gu3"+@@"O3]1ffk&2fu$+@pP_ / ]1) /@   <291<290  ' 7 NNNN3NPPN- +@> +,   )*&& &,+,* # )-#7-+,99999999199999990@p- -*'&!/-976!9)?-GYVT!Y(Y)jege!j%j($'))68)KFE I)Z^SVV T!V"[(j ejlaf c!k(x ]]3254&/.#".5!27!"&''\4SM3RJJgfqMLhfqs>;Du1:9@q.dkKMscdOOqk&8'uk&8'uk&8@u<1k&8@u +@p`o0? ]1k&<u @ p o _  ]1 @  - 2299991/0K TK T[KT[KT[KT[X@878Y@,0000PPPP]]!!3 !32654&#=1pzzp]mcenh0j@4.(" !++/"!(%  a%.(a_ . 199991/990@ /2O2p22]4$! #"&'532654&/.5467.#"! 1]EtkAJ8s6HX7bFXT`[efZG NJ%94%@uH9/D7'1Zt2UYnmXf&DCXf&DvXf&DX9&D ?0+1X1&DjX&D@ &2O&O2?&?2]1X{>@B8>66'&# 6-*>;0*? - 6 & 7 3;?<9999912<<<9990@N>>?@MMO@^^_@nno@@@2=0>B=@>R=P>b=`>=>=>=>=>]]4&#""326=>32>3 !3267#"$'#"&54$!354&#"w`gpq[Qe^waGMz =q}~Heߋ"ӆsUf}unLJDMm)JMOMOf~~CD01kdkdŨŸUO..Xo5{&FzX f&HCX f&HvX f&HX 1&Hj @pp ]1f&Cw @p@]1f&vw@p]1f&^  Ic:1#1&j^ +KQX @88Y1X'(@Y&'('%$%(('"#" ! "! 5((5(%('&%"! ## #)'& !#(%" BB;)999919990KSX92Y"KTKT[X)@))878Y@6f!/*76"?*O*oooooooooo]].#"32654&! 4!2''%'!%7l4uru| uj-.N$%3`ox#y-\8 watr`9&QX'f&RCX'f&RvX'f&R <1X'9&R 1"+1X'1&Rj +1V 0@  z{z <<10!!!!!!33XˁN) +@> )+ *& &&++, #* #)B#LB;,999999991/9999990@@:5 ;75!8)?-IF KGD!H)[VT!U(ikfe!e(5:)EJ)U^(i em( ]].#"32654&'.5!27!"&''XK/w}HO0u|;CDG"jKmFElMpD)A+CN{8,,eP~--^f&XC@@]1f&Xvf&X  Ic:11&Xj +1Ff&\vV^;@B @ 2210O`]%!!>32#"&"32654&fJu us{{ssyyb]]7F1&\j 'O'q;$ +@ p/ ]1@]0X'qD@O]1 'z'4$ +@ p]1@o]0X='D@O]1 o''$Xo{'Df\k&&fuXuf&Fvf\k'u&XVf'Ff\k'u&X5'Ff\k&&fuXLf&F9k&' u\&G  @ O?]1!L\$K%@"      @"B;%<<1/<20O&]!5!5!3#!5#"322654&#"FhJu tsyysryyrr+c\II]ɨO'q;(+@ O@/ ]1@]0X 'qH+@ O@/ ]1k'u(X F'H@O]1k'u(X 'Ho'(Xo {'Hk&(u  Ic:1X f&Hfk'u*\Ff'Jfk&*1u\FF&Jfk'u*\F'Jf6'_*\F'JJk'Yu+  Ic:1k'fuK&+1K QX88Y@ ]<@      2222221/<<22220!!5!3#!!!#53!5H88ջyX¼<@   G  2221/<229990!54&'.#"!#535!!!>32 H.pfkQnVon#'kkb] m'|u,% $+19'_  +1AO'q|;,+1@]0$'q_+1,k'|u,+1F'_+1o&,o&L=k&,u+1` 1/0@ P`p]!!f`f6'-,@1F'ML@1fk'|u-  Ic:1Ff'_  Ic:1Sq'f<.Sy'<Ny` @   291/<290@`;IIZ]X_ogvv{:DGJV]g`ewpv|]]!! !!fNNK`e-l'v/@ pP`@0]1l'vO#@ p`@]1K QX@8Y@]0S'</ @]0S/'/<O' o/' OK QX@8Y@]1'y/'yO `@2 %    <<.9991/90KSXY"!7!!'%s۔#` j ~@-   %    T <2.991/90KSXY" ]@ut@ P ` ` tp p  ]]!7!'7ho}o XVl'+v1m&v}QS')<1S{'<Qk&1quf&Qi!'Q~f+@  21@ /0%!#3265'&#"!!>32؄N3 %"32654&w`hA q}~~HRՂG"QRLJBcw}}wu||f}unwf~~CD01QWTT88RVWQ:l'v5m&v}US'.<5S{'/<Uk&5uf&UU-l'v6jbm&v}V-k'u6jbf&ZVo-&6zjob{&Vzb-k&6ujbf'\V oj'z7o&zW jq&7{ +@ ]1&W 7 j.@   8 8 <<1/2<20!!3#!#3! `K:@  T<<2<<1/<<<20!!!!;!"'&=#35#33qq\XYMNXYM>m'?u8. $+@ / ]19'XO'q@;8+@ p]1@]0'qX+@ O@/ ]1k'@u8+@ p]1F'Xn&8DS &X@&``&PP&??&]1k''u8f'X @??]0o&84o`&X=r'h|:<1Hf'Z<1r'|< <1Ff'\k&<u +1\ql'v=\Fm&v}]\qo'y=\F'V]\qk&=u\Ff&]T'#@   E<1/0)#35463!#"?L`NC^ $H@#!$ B@"! %<2221/220O&`&]%2654&#">32#"&'!#535!!!syyss{{{Ju uJfH稠b]]brrt,Z@* & *  '* "&-<299991/290@ ../.P.]2654&+2654&+)#"!54763! v[^^[tutuH|O* c^B7fPNMQsbcaay$32#"&'!!!syyss{{{Ju uJa稠b]]bQ 27654'&+!'3 py6::5z=-1][0-ujju4 67632#"'&'!'276'&"FJZZuυuZZJ{=<<==>>b.//.bTT@TTUTTf\/@  - <10>3 !"&'3254#"fj}uL}jkssk78__875IDDIfd"Q@&   " # -+#299199990/$_$]%# !2676!3#".#"3267\j}Lu0/"b3NfL202177Tv\!Lt#8@  -.  $<99991/20P%]32654&#! )#"!5476TMwiffixjO* c^q#ateeta k}lk~#+hSsR\?@ @B ;221/0O`]!!5#"322654&#" Ju tJsyysryy#c\II]b5X:({)B@%BBK%B ;*991@ (" *990?+]!254'&'&! ! '67654&#"z@錪HJ4@6*Bqqb.Fb]##p9С2 OFn8W  +@    21@ /0!!!!!gr+#V##hfI@ -7-+91@  90@  / ? ]4'&#"6$3 ! '&!3276z}|}yh`;9aa:=~FG578bdrMM(?@# )) #)* --&)190.54$!2.#";#"3267# $546!#lr^]~glqs%" )*^V][ifcj76%%ޕfC@ 2991@ 990Pp]!!!!!#3265rgN7, 7%J22J%72`K/,WK:7Y^&/55/&^Y\_PDI}X254&'.#"!!>32;27654'&'52+"'& H.pfQn7vRK9*TvRF;mn:n#'b]ܔ4aXlrTH]Alvxl 5@  KTKT[X@8Y991/990!;# {x@    KTKT[X@8Y<<1/<20 @ P ]!3#!#3mq !!!632#54'&#"^[\)L]]^qy ! !!4763!#"NNKnldP-Fyv\  0@    <<1/<20@ P ` p ]!3#!#3f]m3''%'!%! =]M%5Kf&H#eaeca-%#"'&5!32767!32765!!5#"&D^]ppeh##Nf87h Rh78hBVUgth67wkC w65TTC65UU+_00pf@(66% 11  99991/299990KSXY"]@4 8GJVYPgh`>3IO@UZfi ]]!!!!#3265mR:>uw}}L\ 88p-74tE@-   99299991@   /2990]! !#!#"#54632654&#1"P;qpzzp3JM_mddlV^$H@ "B@ %221@  % %990O&`&]%!463!#">32#"&"32654&L3232767# $546%767654'&#"jc?m$%jitpqk}wvo?a&%12f_s=  09:4## +5008D|$323#;!"'&5# &'&+"30q~iLff &f+]jxdDXW7@.AJF!!;+532767&'&5#33q\glͱ>f&#MY%Nrv.+w MY>B@ 8 K TKT[X@8Y991/2990@]!!!#"!547601``N&&i1RQy@&      TKTKT[KT[KT[X@8Y<<291/<299990@PPP`` ]!!;!"&5#35463!#"3q>\ԱL<N%N7N7 fjA@ 8 8 K TKT[X @8Y99120@]!!;# ! `{xxU&XD&>V&XI&>U&XEX { 'R&$AnXO&q; 'U&$CfXP&q<O'q:;X'qfU*# '&!2&'&#"327675#535#!3ʥy}|{|}|<34)X[FFei7G##kJmJ\Fey 6"32654&6=#"'&5476325!3#!"&'3275o|<54.#"57>54.#"632XLqKF_38@Qv;!2QP(vzS"$yhv@.5NSk7@])U_!OBN-6O'8Xqj1eOZ{05>54&#"57>54.#"563232!'&#"!to1Bw]6E\&\f;%2'4#"%276'&#"632"''67&'#"'&7632!pK*%es=<<=sr<==<Lj^3@BM[G$. -FXυtYZJhY3/TT@TTTTTT\8EWiJPH7qD#,/.bX}@"327654'&5! '&54767&'&5476%&327654'&>WXXWUUUUfST]]]]NSt;p6RR@aQQO;;:;;:no;:YcUU)*_^rqqrސ^_*V\PldE %8L[G$& YU5/`4EWlJPH>Z Y>F` 1@    991990@ P ` p ]!+53265fͱ>fL`\\X @%276'&#" 276'&"367632#"'&'#!5#"'&7632s=<<=sr<==<?=<<==3 3>IYZuυuZYIJuυtYZJTT@TTTTTTTT@TTUEwnwE`-//-`c\/.bX\VX{ ?"3276'& "276'#!#"'&76325!367632#"'&r<===zpCk76l~X (w@."  *&  #&  !)<2299991/<290@ **/*P*]@p p!pp !]2654&+2654&+3#)#53! [^^[tutuH|B7fPNMQsbcaacb$hm0PO@ 9  <2<21@  2<<2290@p]326=!!!3#! 5#53=yyzŒbb[b6=b '1B33#3!!!#7!!#!9HTg99fSݾNVyXB  '+/!3267#"'#7&'&!2737&#"7#34' r?Wq}i_{4,K"`S\z7/m $h"@fxU3fCD01(:!. unK(C2fU@   KTKT[X@8Y<299199<20@P]!3#!#3265#3NfLf`^\cfj $%2654&#"# !25!;# Vb_bm{xPNyTUz\Ff{ )%276'&#" &'5#"'&76325!;s=<<=sr<==<VJuυtYZJhLfTT@TTTTTT_Shc\/.b\  @   !<29991@   /<<29990@ %KSX9Y" ]@ 66EEVVP"ee`"]2654&+!#3! !.#yiiyL'O}@f7q^?ZgfX5֔-XspR{D@   KTX 8Y<291@  /<290.#"3#!#53!>32/]/q fE}*(/lvJne!!7!3#!#53#xx{pqaջu—F?`!3!3!+53276?!53#ffH]_p[*) ^3`JJJJK€ { %U@#  = &229991@   # #&99902654&#"!>32!#3267# $pq[QeiHӆsUstfLJDMm)f]ˢŸUO..\{8@ @B ;221/0O`]5!!5#"322654&#"hJu tsyysryyc\II]ɨ^{ 8@ B@ 221/0O`]%2654&#">32#"&'!!syyss{{{Ju uJf稠b]]b`^ $M@!$B@$ %22991@$ ! /990O&`&]%2654&#">32#"&'!463!#"syyss{{{Ju uJfL稠b]]bF\X5{/@ ;B <10>3 !"&'326&#"XUX/VWT@TOI=%12:02Xs5{&L@ ## B ;'991@ %!'0_((].#"63%"''47&'&!232'&#"5IO3f!HnPV/X::S=20{PrWD&I79K\F$F@'  % %  @"B;%22991990!;#"&=#"322654&#"hLf@Ju tsyysryyX\c\II]ɨ\h$C@%     @"B;%22991/9905463!#"!5#"322654&#"fLJu tsyysryy\c\II]ɨX {"76! !"'&'3267!%!&'&#"X"}vwq pAAh`;<3 際0D"!~~n:;?>X {G@  D ;91@  90/?]5!.#">3 ! %3267XE q}0Qpw`h+f~~CD01>f}uny{ 432767! '&'&'&#"6763 ?;#"'&5W ;`hAA]U("Nqwv}0&&i+`OA ?;:n,Q`Vv)?!"D087o[n{Jn{1!"'&'5327654'&+5327654'&#"567632y~\]\ZG^UMtABC>v|u2987_;<[ZYWtt87\p$'(:<'%",*$#  HGa@?n'{?!"'&'5327654'&+5327654'&#"567632?;#"'&75y~\]\ZG^UMtABC>v|u2987_;v|u2987_cSSWtt87ly~'(:<'%",*$#dR]`囜*HGa@?pF`53!3#+53265$fllͱ>fL^wv\\Fh$0`@. @(B;122991@  $!% +/99990O2`2]%#"54325463!#"!"&'3265"32654&Ju uJfLic^[o|xsp||b\CA\c\+ !65\F`)%#"'&54763)!"&'3265"3265Ju͆qhic^ZZ[o|<@  G 29129990`]!3265!!#"&hG.pfQmp[.w#&)Xb]%!54'&'&'&#"!4763!#"67632$$.p@@nlfLPZ[nedVo77#WVFyv\a-/wwF167632#!5326=4'&'&'&#"!4763!#"PZ[nedilfL$$.p@@nlfLa-/wwFtv\[77#WVFyv\<@      <<<<1/<20@ P`p]!!!3#!#53ffܐJ` %@   991@ /990!;#"&5fLf`n\` %!53#5!#v!676=3!#4767f;9g;;i 9JH;JI!3#!# !2&#";&fXjB6.YyjX77"BKTFn !;!"'&5h&%gln/.vyHY&!!!"'&'327654'&+5!!f^V}VOstsqljkgQRTSrLN !qfst%)655cf54^,%#"&5!32767!32765!!5#"&D^]ph##Nf87h Rg88hBVUgth67 w65TT&65UT'_00pT^,%#"&5!32767!32765!!#"&D^]ph##Nf87h Rg88hBVUgth67 w65TT&65UT'N_00pF{167632#!532654'&#"!4'&#"!!67632D^]pnlfL##Nf87 Rg88hBVUgth67jyv\sw65TTH65UT`_00pF{G@"   G  9921/999990`!!]!54&'.#"+53265!>32 H.pͱ>fLfQnVon#'\Lb]Fj{#&'&'&#"!!67632;!"'&5$&,gI@fSYZofd&%glt2"WK`d,/wxj/.v` <@%    991/<2990KSX@ 44Y!!!!4mR`uuX'{ >@ BLB ;221@  9/07?G] ! "!&'&!3276!EGu>$%>y# />uw>0{88U2LL2UkmAUUAXa "#";!!!!!!"# !22oVVoEN_|  dKUV$"h $303265'"32'5 #"&'#"'&7'1!!7-cgWX/TliajDg*r{Vj`32765!!5#"'&'//./KJfEYZ}(1 XYn2332765!!5#"'&'//./KJfEYZ}(1 XXn23FE`32765!;!"'&=#"'&'//./KJfLflnEXZ}(1 XY\vyߢl23V{&'&#"!!67632//./NJfEYZ}(/ XVR n23F{K@!   KTX8Y299199990.#";!"&5!>32/]/LffE}*(/\Lne=`%!534763!#"nlh$&yv.1Y=`%34'&+5!23!8&$hln1.vyYj` "27654'&+!!2!&'&#['(('[Onn99s?223%+-Kv IH g`JKoHG!0/aGj` "#327654'&'32767!#!!OO['(('%K-+%k322?s99nnf HI Ga/0!GHoKJ`jFb{7.#"!"';!"'&=32654'&/.54632s_f12&%a?79&flnkpqtij$%m?c=005+ #b&.vyI4:90 Fr:@   99991@   90%+53265463!#"ͱ>fL!fL\2\F"535#354763!#"3#+53265 ϲffLglͱ>fLNWXCJrv\FP{!2;#"'&54'&+ffLf>llL{XW\vwDD|$ !34763!#"3##0#";2767ffLi~:j]+f&D7WXDԜdxxJA.`!!4'&+!23#q\3YX>NXY%Fu@    TKTKT[KT[KT[X@8Y<<991<2990@??PPP`` ]]!!;#"&5#33qLf>ز\L>`C@ G  <2<221@   /29/<<22053!!!3#!5#"&5)3276hfQmyG.p@"Jb]Z!#&V.`L@  BL B; 99// 991@  22990 5467#5!32654&'!#]$NTooTN$]$CBAL~yl78tt`]Rd#$*,"%'<:('殭p?@aGH֜X+%# '&76!236763!#".#"32767'!5!\hopwglfLZZZY,%%e2rv\10YX `F!!!3'+ !30#";276ff8si}7j]+f&ܐ0cv6K@.Ly` !! !!yd`#fLOe^-`!!!j`\Vh)%#"'&7632536763!#"!"3276'&JuυuJhlfLr<==%276'&#"!!367632+'47!#!5#"'&76323276'&s=<<=sr<==<^h#k@  JuυtYZv'% /61TT@TTTTTTXLu78878c\/.9GHl%8!67632.#")"&5#3!3!2654'&/.543q-zcڀs_fcKa?Y_Ա>\xij$#o?ˆ- V 0035+. (KP>%N79#F8$,!54763!#"+532767!"'&5#3!33QffLllͱ>f&#XY\NWXDRwv.+vXY>b`%Ns 2:E!676!2&'&#"63 !"'#65&'&'!"'&5#33254#"!;&543q/XUVUIJIOTS!g7h]G2$XY1CS\E»2WXcG99^H%@.9XY>_9K%N'F:#"!3!67632#!532654'&'&'&#"!!!#354763L/cQ[[nednlfL$$.p@@ffDNb./wwjyv\77#WV``NWX'!!265&'&/.54632.#")fLij$#n?cڀs_fcKa?Y_59 0035+. (KP !!!!#!fN7!f-L`D. 333# #333# #.xyyy޼yxxyyy޼yxsPTQ PTQ. 7#!#!#!#!>)>)JJ$4&+5!232765!!#"'&5Lfln$$.p@@fQ[[nedF\vy77#WV'Xb./wwJF`-%#"'&54&+5!232765!;!"'&5Ff[nedLfln$$.p@@fLflnY5/ww\vy77#WV'\vyn?#=4'&'.#"#367632? .H))4:;F|@A>S01Ug7BCn?%#=4'&'.#"#476;#"67632? .H))FFkA49:G|@A>S01Ue}CBKL6BCS 3+5327653#nEEr(A~BCK\n&'&#"#3676322X00,:9P  d 12\sg>n327653#5#"'&'nX0/,rP G 12\!g>8n_327653;#"'&=#"'"'nY/0BjEG,8:P  G 12\!LBD}[= !#32764'&'3276?3#!3322:l0]j! (I%$FGR|(6')>Z*)s. 333# #.xyyy޼yxPTQ?33+53276?-=32#<8$%?s33221htTcAy8@+'6%@ vJyQ5/#&'&547632.#"31xAdUt4312d4r@$%78d5QyJv @%6'+@ "% % E "5-5Eʳ|Nf# #ZfD|Nf33|Fyf6@ 91290K TKT[X@878Y3#'#Dzfyf6@ 91<90K TKT[X@878Y 373Dzx#+X;qmf!#f^f #yfx[#+;Cq/^#ykxm!#k]`!!*f|]`!*|& `L& `L!533> 5!## ‡oj 533##5#5Po1!5!1>մPF i@  1<0K TKT[KT[X@878YK TX@878Y@]332673#"& cSSc FFJJFw;1*10K TX@878Y!!w1 C @ : 10K TKT[X@878Y32654&#"4632#"&}M67LM67Lvvvv7LM66MM6vvvVo@   991/0!33267#"&546ō2&;1'M(7^)s{6CI'1 \V5m\9@  @  999919999990K TKT[X@878Y@T              ( ]]'&'&#"#4632326=3#"&7/$&g]$I)=%$(g]$CT%>;+@9f%@0_O]]1<203#3#-fx2%7;#"'&7:&&i+`NBs87o[f '#7'373QRSȵSRȶWWVV  3 5473254'xx !TWW*1')*&1nS3#nD1&'&#"#"'&'5327654'&/&'&54632JDD=B 0>(==TUGKLPDHHJD"!F(>=@EF -,`d32  .-\d`: 373 #'##2/#&'&547632.#"31xAdUt4312d4r@$%78d5QyJv @%6'+@;@ 1/0!!5!Fvмt;'@??//21/]0!!5!3F4t;@ 21/0!!5!3Fhht;'@pp  21/]0!!5!3F4t;@ 1/0%3!5tPp;&qqXo N3o\T$'&'&#"#476323276=3#"'&7/$&43]$$%)=$43]$"!2/l;< " .m;; \fCefvwfT9X9qM  !ZF K@1԰ KTX@8Y0!!Kf;?1j "#5476?67674'&#"5>32Y7 ,&A$XWPg11  1%+&#t^Y.$'$ fwf\#\D'C 4f###r£׮fxxZ' ZF #."#>  cc 8FJJFXr@10!3X*!527#xyz#3$5yxzJf!#ff\BCeBvO#5353#!33## 5C`n!5!#]+4+532654&'3#"&CI'1 \V5m2&;1'M(7^)s{6[F"30"&5463F&22&cc2%&2cb53533귽#5!##+˽  #53533##b5!+bF^ '#!5326=nlfLyv\Ff %!;!"'&5hLfln܇\vyKMq!!KfM?Cj 4&#"3267"&5462X3%&22&%3ƈƈ$32%&23$ccbbA@10!#DozVo\#\`t9#5##Ǽovg@#"'#"'&'3274732767jy0@k=>j. NONG@FF0:mw&'K TK TK TKT[[[X@878Yw&'K TK TK TKT[[[X@878YZ@ Z= #."#>  cc 8FJJF!T?9CB Ra(;@x5!;MOx5!M'2pnm^^ef'qqJqs 2#52654&#cc%33%bc3%$393353üvX8!5# T g@67632632#&'"#&'"gy0Aj>=k. MPMG@FF0:m '7'771!#532654'&/&'&5463#"# 9@ + ;>'RRz .!RSz#: ' ! !\fCkfvZ9;'jlV #"=3;X3Vh:I#5!#!ƴtxx,2!5!5!5!>>2Z 3#3#@`tt!#!*>\f+#7&#"#4654763273327653#"'& :a (56W%%Bi%56W&# J\ <2jAA h9j@A \#'+'&'&#"#465463232653#"&3#3#8- (kW%J';'%'kW&FҴN#<2j'<9jC\#T( 7!#'73!'3awQwww(͌$#557'Aܛp#";#"&46;7LM6vvM67LZ'  '7'77tyttyttyttyuytuxttxutyp532+532654&#pvv6ML7짚L76M ;1q64&""'"&462664&"33K22̈BCˆCB33K223I32K2Aʼn??ň??3I32K2_ "k "Pp`!!p pA!!p ࿼ '#'&'&#"#67632327673#"'&],$V5Hqpo?x],$P;Iqpo?@# $0)JI# $,-JIp&j #h(5!'3#7hfww͌`q !!!!!!N !!#!#!8Ntf3AntVH%#AnH`V #"=3;X3VhX5{X5{&FyfX5{&yfN`f=-[f710K TKT[X@878Y]!#uf;'lj5Wf&'09y+f'+JtRf'-\f'/\zf&5Kf':nf&>Zh/&Nj '$% '@ Բ]91/90@%KSXY"@/ IFXYVWhifg`zu]@/Vft ])!!')HNT(\q=+ff N@  -7-+1@  0@ /?]@ ]"3254 ! !!f°±hhghddjk=,q. '@ Բ]91/<90@%KSXY"@/ IFXYVWhifg`zu]@/Vft ]! !!ut}))w+901b ;  <<1@  /0@p P 0 ]!!!!!!29igg\qff23 b@     <9991@   /99990@  P p ]!! !!$a#A4l j7<ff'N@' %') -!%-+(ԴpP]<<<<Դp!P!]1/<2<20)]!67654'&'&'&7675!!.#aa"//"aa!0̓̒SO[W rr rq!';s\B@   ܶ _ o ]<<ܶ_o]1@   /22<<0!"!3!2765!#+S67R,6eP9ǗP^g\7b@ -7-+ 99//991@ /<2990@ !!/!?! ]  ] !!67654#"!!$fg3S&°­&S3d8#\6Fk&/uk&:uc)f'Fnf&JPVf&Lf'CN &Zc)y$d@   B;%99KSX$<3#"'8?O[mN{sbv@rMM sP7Cd\W>UsN)U+xwC X\Sf(TʲVU`@   91@  /<<990%KS KQZX@Y@=yZ^______GFDJJ77499%*+  ]@vVPA2$]!!&'&+5326g6"6%DDBPVXJ Y($)T@%%B L B;*991@(**" *990?+D4]&!"! 4767&5! 32654&'&z茪3@ 5*Brqc.Fb]##p9С2 ODF8W n{1J@" 22'(#,23 '  /;21Բ]033]&'&547632.#";#"32767# $546el78ttWYZ[<;_7892u|v>CBAtMU^GZ\]\~\?@aGH  #$*,"%'<:('$pYVUF@  B;Բ]91@   /<0@  @]#52654&# !!&}F0;;Z{};&&B< V{6@   G 21/9990`]!4&'.#"!!>32 H.pfQnn#'`b]X($B@ BLB;221@ @ `?]0?]767&'&#" ! 6[XY\6 1LghK2 OTW^aLWoo`" 10`0]327#"'&'&5!198 >CAhfj@[+Xw=` k@    291@  /<290%KSX@  <<@  Y@ ]!!! !fbRWR`Au+=@    Դ/  ]91@  /<90%KSX@    << 9Y@   ]@ ]'.+532! !>K^p϶DM8뚶<LT`w`O@   B 99991/20%KSX@CAh ` ?[+Xw`V^~ 2@ B @ !21@   !0O"`"]67632#"&'!%"32654&A{~y&%ÑuJTs{{ssyyĀ]bBXV5{8@  B;<1@/0_  ]&#"#52654&# '&!25F0;;V/b ;&&B~7>X` 6@  BLB;1@ 90 ]"32654&#! 76)v}}vv||B>{8+`'  1@  20!!327#"'&'&5+V189 >CAh ` @[-Vw `:@  B  Բp ]991 20@ p_/?]4'&'!! '&5!3764RuG*h~fJ`t\-RG_^PaJB@VjY@!B B ; ܶ_o]<<ܶ_o]991@  /<2<<0!]2!$763676&U62j@V@}dxa4V`@ <Բ]<91@  <<90%KSX@    99 999999Y@  ]@  ]!;#"&/!.+532{V G6pK!J0pσNwO6땻-R3V`R@   ܶo_]<<ܶo_]1@   <2<<0 ]65!!$!!ڋffdd @V@ d`X`V@  B B;999991@  2<29/90/]!!76'!%$z"F3sfs3FT(798'1'jbN 1'jZX'f&T} f'ZXf'y^Vq !! ! !+1:y!=Vup$ # 76'&! '&76! 03276!Kws6FP,^n #3A7Tg1F-m~`zUt]i$ #6'&#"'$%$! '&3676'\MRjе 鞏PJq9GR³#G BlO}վU*!4'&'&6%6'&µ=**+tx9CWsVV"}ddd}"VVc.Am+ny }a}yY+mA.`#! ! 47#!32!324_c d<+ -g9[HQW(8]P(oPDl$.8aPm(oPDlj"[<fVf "3254!&'&76! f°wgh̋^-jkdΌXV'{ "3276'&!&'&76! w>??>wu>>>>Uwd"!d{UVVUUVBVUZ#`(؜`fVl""#52764'&# '&76%!Svvp}U][TF";ڤ]zZb[TL&eFXVT`!"#52764'&#"'&76) :SSZ*}U][TF";Mw`_ff  :<|+3 '&76'&# |`)& k9V+ "Gk{W RS;fKX<"'&'# '&467!3276=!32764''!'676 x0/yzxGp@Ag479gh46{lel473hA?vBx=F޼ەu^U^^ FkmimmsAF褊b23GxU4`%%&'4!!764!'676Rj~=jr&nj=~8yܦob B@d6@ل|1+ &WfV" 765!!# '&76/RRRQ0RRJi~~vI<UX\V{"32765!!#"'&76r<==BC*J&#"327676#"'&'&'&547676763267!"'&#"'632327654fet1 *'1.&[s]-Z@I:1$#%7Hc}mD)DZwZ@NaerjQhVF"e  D8( $O:HAAC4D&0M`ds.#AL.#YIX^WV!3 %! 654'&#"!676! M|=[SL}xZ:\J2 eǾLlxVP|Dnӻ^V{!327! 654'&#"!676!  eNGAjs?1O}DznTQUQ:6F.Slll/!'27&#"6763267632&'&#";!Q:!3!N#"''+:Y#"`;*&(%N!3!:=#1b0> N&K(N 0<1#d{/%3'27&#"567632767632&'&#";!54z1-A " $2@@2$ " A-1jɞ9Y%33%9f"167632! '&7676!2767#"276'&#"4lz*&Yˋ(wrgDCCDDEEFD8/ߤ27x _VTTTTTUVTU]"067632! '&7676!2767#"276'&"/uanr¤&"}uP{cqlg]s=<<==>>?D8/ߤ27x _TTTTTTUVTU9V<!5#!#!!!<`[u7V#5#!##!!ƭse`p ppuoc,!"5476764&#"63 7!2327# 47d<+ -g9[>c d <+ -g9[>cH `(oPDl$.8aPm(oPDl.z1F^~76! #"&'3!! "26FuJxx"{{y! ]b1©@X5{FFMffag{!%# '&76!2&'&#"%32767g^{Щ0|^@|lLN n usN. !?@qr~! {!73267%5&'&#"54763 !"'Nsu n NLl|@^|0{ !~rq@?! ҚV^f\&9 ! !!#!TVW+DQV2` '!!!!,N DV^~ "26%6!2#"&'!!!5#53s{{yUKuJwhhw©@]bpp D:73254#">3 !"&Dksskj}u}R5IDDI5788f\&y3D:&yck'7uk'u fb#%!#3276=4'&'&'&#!!!!!!2bN=$$. fe銊#CC77##wul'vf\A@ - +21@990327# !2&#"!LuXxofeoˍx-6=,Akf=-^2654&+!!$!3 gypoz~d'3^][]\8#/(Az4&+326!!!3 )!!oz~~yp3,[]^q9y b2!=4'&'&'&#!!!!!fe$$.wu5o77##ll&9vk&pu;k&u !!!!!!8AN+ '$ '@   21/027654'&+!!!3 y6::5zi-1][0-ujju%@ 1/03!!%\N{0@    1@   /2220!!>!3!!!h:E#[ENAd( @  <2991@ %   /<<2290KSX@        <<Y  <<<<@     I:I:I:I:I:I:3 !!! !!'c22cXSSVhhuN((L@+  #)& )999190!"&'32654&+532654&#"6$3 llՙEC'^GM%'&$)67jcfi[]V^1") =@6  6% 11 991/<2990KSXY"!!!Rm+k&8ul Y@   2991@ %  /<290KSX@    <<Y!! !!ZrX?h|N^  1 /<036!!!^f'#K1+[90+ff2@1/<0!!!+N3f\& j7;= 1@% /20KSX@   Y%!#32767! !(;xFj!KBU6m#EOXf :@- -+ <<<<1@  /<2<204&'>!!5$%<oaboUr'; $@   1/2<0)!!!3!8NN  21 /20!!"&5!3!!:J^l:yx+ % %@    1/2<<0!!!!!!#+N -@    1/22<<03!!!!!!! %#ANNd2654&+!!3 )ypozn3^][]#&Q +@  - 299991/027654'&+%)!3 y6::5zL-1][0-juujy3267!!.#"63 !"'_uLx#x5o_5_o 6@! !--!2<1/0676! ! '&'#!!"3254ghh°{dd^m:@ - 21@ % /<0KSX  Y;#" .54$)!#Jiyyi9tL'jgZXz+ו+5X{DX>W*:@ (BL"B ;+1@ +%+990'&547676%6763 ! 4"32654&n:kv29PLzFt !Ehv}}vv||mCCĀ0)' "0O[8&&` -@    !21@   /02654&+2654&+!2#!>@@>OPPORMcm3222&??>>Rsj`@  1/03!!Q`}s`0@     1@   /2220>5!3!!!#!r`ȺppSO&i`X {H`@   <2991@ %   /<<2290KSX@        <<Y@  ]@ ]  <<<<@     I:I:I:I:I:I:3 !!! !!',{f{,ZZqq9gWsW6d${ <@ PP !1@  ! !!032654#"632!"'32654!# kzٴ@,gE03=᭮8^O2` <@%     991/<2990KSX@ 4 4Y!!!fi`T`T&P` p@    2991@ %  /<290KSX@    <<Y@  ] ]!! !!f"e`{9g`q0` @   1/<036765!!#q(E$uY`%I` J@%      1/<290KSX@4 44 4 Y!!!#!`0{\` $@      221/<20!!!!!!fcf`V'X'{R`@  1/<0!!!```V^{SX5{F`@  1/20!!!!ji`}F`\qV $/K@-B$$ ' B;022221@*% $" 02222220"327&!632#"'!#"32"32654&AyyAk===fj ϑjj ϑjk==kAyywJJII*IIIIJJ `[` $@     1/220!!!!3fcf```  21 /20!!"&5!;!0f:LfPDzY` %@     1/2<<0!!!!!!tfftf````-@     1/22<<0)!!!!!3!,ftftf```(`%2654&+!5!32#OPOP??>>W`'` !@   21/04'&+3276!32#!f('PO((Ffz{{z^? AWSTRRf{!. 63 !"'3267!  Ώ/VѰ $Kb$>>%cUl{ >@B LB !<21@   /990!3676! ! '&'#!"32654&f"!EޖZw}}wu||`?ȏ>{?z`M@  B 21@ % /<0KSX  Y@];#" .5463!!#O[[OV%U~!~H@>1jgX m&CX 1&j(FZ53!!!6325>54&#"!(f|x]xSLٿ#ֹ~(m&vX5{W@ B ;221@  IIPX@8Y0_]!327# !2&#"!$ V/ Uc>77>bKjb{VL#1FMZ`!32#!#!6762654&+QșEt(KOPPO`W`%I$uY7??>>L`%2654&+!!!!!!32^OPSLfcf??>>'`VW(@53!!!>32!54&#"!(fQnTTr~Lb]pPm&vm&C F&` !!!!!!Dhfcfi``fX23276=!32764''!#"&'# '&467!09gh46{lel473hA?vBx./yzxGp@Ag4tmiqmw AFf^^ FX`^dS3 )!!5!!2654&+3""@ypozu$^][](32#!!!!!!2654&+Xf>OPPOBI??>>'3267# '&#!!3676!2.#"!6Xxskj}۷ir+u}jksvDybDI78ѯ87IDLm{*!!32767# '&'#!!3676!2.#"o1TTLK@TWVWѫ.f0/XUVUINT-L4W1yF`Mw20W1 )#!#!!   Lc3u` )#!#!! uБ'dd` )#!#!!!!!!  F%  y9Lc`)#!#!!!!!! Бf'dd>`=ff)4'&'!!767!!fk>^U:kqIJqM& Hkr3 3rX'`!!767!!4'&'#uQooPK+A>*LM'<'MU1:/U !!!!!!!!4'&'!!76KJqk>^U:k#9 3rM& Hl#` !!!!!!!4'&'#!7OrfoPK+A>*Lʋ>`='MU1:/UoVM#"&#"32632&'&#"#"'&5476;27654'43 54!"673767632&#"4&Qc6C..|d^.F!'uFL]?FHZUI \P '/E_OT$(7d n:; }d&y+-3={'&#"!!!!3!367632{:Z"wwGgĨHESb6V6`E=JV_'&#"!!!!3!367632_:Z"wwGgdĨHESb6zVV`G=JffaX'{7 !632.#"! nw;@r*r54 rr{!>32'&#"!gPb6:Z"w`qV l'1v rf'L `F $;! &7! 4'&#"32765 +5223276767!6Ӈ퟈v'qr'q')BQd"! [(1'&!f;{$%ތH}|Gfm"|H6KZ!jdWnXF4{ 4#"'&76324'&#"3276 +5223276767!6gߗ!]^!!^]!B)BRc"! ['2'&!f;{&ڬgFqqFEqqE6KZ!jdWnf2"B203 !#"'&'# '&76!367"&'#";6762327654'&+#R""ZiZ$ !N! $ZiZ""pP@$Zaaa`[# T #[`aaaZ$!""ON!"wxxv!!vxxw"X{'N#";676762327654'&+"'&'73 !#"'&'&'# '&5476!3767625x=??>w2$B$6u>>>=v9 %B%94; %B 6ʏ55 %B%wTVVU   UVVT Պ윉  霊 t m&'F'` &'2XYfXG&X'fV\!!# '&76!2.#"/wu}jks#3[f87IDXV5{%!! '&76!2&'&#")؜/XUVUIJIOTSIL\2WXRT7*'''7'77'77_x_xjix_x_[~}}|}}~}1Q/"'&'&'&547676763!67676762#] > ^ > f    F #&#"56763 Jg_RX$[ 0L&G 05!#3$ez&G527#5!&z M !2%$'$'&E24HӘh{t\q rl #/;GS_#."#> #."#> #."#> #."#> #."#> #."#> #."#> %#."#>  cc 8 cc 8  cc 8Y cc 8b cc 8 cc 8b cc 8؏ cc 8FJJFIFJJFFJJFFJJFFJJFFJJFFJJFFJJFr- #)/!53!#'7%'%'77#%53%RR:zV!z9yo`yoJ@>@A@¬@yoyo zV!zRRVvk&8uVB&03 )#535!327654'&+=Vy6::5zXujjuX»-1][0-3#32#!#3!27654'&+uufO((('P`XOOX`>B ?;!  654&+327'7+!! zpL7uj`vj dl_c~:L~vc~V^{)6'4'&"37'7"'&'!!67632<==>>=s*%DTuZZJfJZZuυpHcTTUTTU}/.b b./}@ 1/03!!!#\2N@  1/03!3!t`:}: !!!!#3!\B%n#D*'` !!!!#53!'TQ?f!!2!#3276=4'&'&'&#!!!!= feN=$$.%\wu銊#CC77#F`!2+5326=4&+!!!llllͳ>fLLfQvwwv\\S` 3 !!! 3!#!'c22(SSVhhAuN`3 !!! 3!#!',{f{,S ZZqq9DWsW6o('zdo${&z'l!! 3!#!Z(?hA|NP`!! 3!#!f"Y e`{9D`l!73! !#!{IrX{~CQc}NP`!7537! !#'!ffn"ne`a耲9g@~`0l!3#! !!#53ZrX?Sh|NP!!!! !!#53fF"er{9g`2!! !!!QZrX?h|N#(~`!5)! !!Nf"e{9g`t!!!!!!!!8#Ay9D`%!!!!!!!!gfcf'`V !!!!!!8%Ny9` !!!!!!fcQ}'`Vf #!2!#3276=4'&'&'&#!!!!! feN=$$.:wu銊#CC77#NF`!2+5326=4&+!!!!llllͳ>fLLf/vwwv\\S}`se?S.54>323267#"&'#"$&54>7326%>54.#"68aH)9UqSN}aF-6V?K/>e3.x=P[Tفq[9kR25aVNf( - ) #-+0qXBtW22Tp{:E>+<9.t{ EwqcL(_fi37pZ99Xl3D|iQqz?N4>73267.54>323267#".'#".>54.#"qP9V8*LmDJ'D25jiap=hw(b*6W&%-8%9d_[0-]hvEuա`) %&7(؜X5WuCK|W0 JYh;]sA9hY{K    &% TJBFG0D*`Wfo\'zsXo5{'z j !!!!!!x`#A#` %!!!!5!!gij<F` ! !0!f-f `uq 3#!5#535! TT`F` !!!5!5!5!   f-`u??'3!# ! ! !=$$.+wu銊#CC77#!F`32+5326=4&+!!!llllͳ>fLLffbvwwv\\S`A6Vi!!!!676!g|wBW'#V[7-+V?`%!#!#6765!g@Im`*1FpVB"wff%!#32765!!!!!N=8銊#CC9F`%+53265!!!!!llͳ>fLfcfwv\'`VVv)!!!!!!!8y9NVVB`)!!!!!!#fcfg@'`V}V!"'&5!3!!!!:he$$.l#Vwsoe@7#9+d`%5!"'&5!;!!!0UQf $f[V(TKh0+V)#!! !!!9TVD%NVVD`)#!!!!#g@{\`0}VO 'z'4+@p]1@]0X='@O] 'k&u +@p@O / ]1X1&jX{k'uX F'@O]1hfQX {hfk'*umX 1'jn k'u1'j(k'ud$0&j,yYH`TO'q8;'qk'8u1'jffk&fu$+@pP_ / ]1X'1&j+1ffaX'{7ffk'fu}X'1'j~yk'uf1&jL;O'q;F'q;k'uF1'j;k'uFf'k'Lu1'j !!!!!=%\#A` %!!!!!gQ`k&u1&j:E!!!!+532765!#3!\Bfjnͱ>i(!%sx5,on#D*C'`!!!!+532765'!#53!'Tgjnͱ>i(!Qsx5,o'f!!#27# ! ! !IN1mGFf#w%F`!+52767 ! !!gmѳ+0l{{l;Isz"'a=#LPG' ! !!!! !!_GF_Womqdm ` !!3#! !#5v{{TULJ3b] 3#"%476!3!! '&z5::6塒s-0[]1-ju9+ujZ1` %035#"%476;!!"'&HP'(((aufu !;? zOXXO!/"'&476!3!32765!! '&'#"32765Ӕ<=kl<=ٟ, Tjiz5::8sj@<sj ju9OPPP ʛ+7==-0[_/.TQZ` 0#"32765"'&'#"'&5476;!32765!˃P'(((EC%%߇%CKHq^kuR6(QP)6R~ !;? 89k'u )a/.XdOXkS==Pm̎w824'&+5327654&#">3 32765!! '&mSTGG~]^rl#EEON=G`fB=f45-.]V^*) `aTS"'`_B08PL ʛ{532765!#"'&54'&+5327654'&#"567632B0IR)6R~噄C>v|u2987_;<[ZYWtt87l7?p5'=Pm̎wzh<'%",*$#  HGa@??HVn')4'&+5327654&#">3 !!STGG~]^rl#EEONf45-.]V^*) `aTS"'`_3VY{()4'&+5327654'&#"567632!!C>v|u2987_;<[ZYWtt87ly~gR<'%",*$#  HGa@?pay6 3!676!32765!! h|wBW'<=kgA=[7-OPPL 6=+v` 32765! '&5#67656)PR)6R~(~m`*1F`mP==Pm̎wwB"wf |`32765!#"'&=!!!!6+NR)6H~~fc`mP==Pm̎ww%'`Vf! 76! &#"3265!|Sx+rx>{Vctoˍ恈UX[_325!# 76!2&# w[Hɢװ!3ˏw0Pa 32765!! !!{<=kl<=`OPPQ 6=\#`32765!#"'&5!5!6+NR)6H~~inpM==Pm̎wwRn{J^f36!!#3265!^f'Nf&&E$uY.%L%I^ 36! ! ! ! !^f)GFom$#K1%[ql`36765!! ! !!q({l|E$uYLb=#%I]3264&#! ! !!#!=pzzp|1o_mlf%}wV{"26 '!!6 ! !s{{yNf?!{l!w©@ Mb9Im;#"4$)!!!!!#!.Jiyyi'rgۃftgZXU5z.?{(/3.5463!63 !3267# '&'#;#"4&#"?%U~?cx= q}Щx"~MO[[O_w`h1jf~~CD01ngH@>f}unff4\VyT=:H`Zl!7!!'!!!'OEdrX?EODf|NMP`37!#'!!!7'X2I4_efٖL2F4[g``Ζ^f ~)36!!2!#3276=4'&'&'&#!!!^f' feN=$$.#K1wu銊#CC77#[qF`%36765!!2+5326=4&+!#q(llllͳ>fLLfE$uY8vwwv\\S`%If '!!!!2!#3276=4'&'&'&#!!!!8 feN=$$.9wu銊#CC77#yF`!!!!!2+5326=4&+!!!fcfllllͳ>fLLf`V8vwwv\\S'v !!!!!!:#ANB` !!!!!g`}``1>5!.'#".5!32>7.'"P/[<=~5IR[1X[+Li>51./l*  U> D M]S%-24>)! !54."!!%$9X|X8:=6]S%&S\6%54.#"3#".54> !!!k4[EFZ57Y?ڙRRוPBqS/.Kad_J-C€ΌHHޗ=-!4."!5! !!Y8X|Y9$ $'\S&%S]B1ü=>!!2>=!# !:8X|X9ZIؐ[`\S&%S]K6=P'!!!>54.#"!54> P;^v;.pY-lngQ0@dFEc>L,Rwm.)JkcVe74\{Fsw|՝Z\ !!!!! [>3! !54."!%$9X|X8:=6]S%&S\:<%2>=#""!4>$323##".4>;.4+7+-5Nl?t ei:PcbOR_Mx1R=0R@AU4MfL"Cdcot;5!!! .54>;FZ55ZFE[4ZPڙRSه`9YkdmZ:3 !54.#"![3sB$9X>=W8q]S%%N|Wd!!![`EN32>5!#".5!!!l'A0(@+[LrqL[`K~\3&S\ LL ~&7!3>32.#" .5467#2>54.'~ZAS^Qja,,*vӟ]VQ0,CjmH#)i03<^A".0l_ _َ|iclW_g76bRYj@Q)#".5!32>75!3sBْI[8Y>32>54.#"!54> "3267.PkZ,U,0Z-[a*`^WB'%?T\_+`X)-@dFEc>L,R ""1]*3[wy*X03f0BH 3Jb|bJ4!>8V`Ve74\{F:>|՝Z\|!6!&#+2$!4."!5! !P8X|Y9$ $\S&%S]B1.H&"!".5467>7!>33!P`8cI+EQ>EwGx51A3 "?[Q BeERیlM4M2q&)-_=!32>5!! [9W>?X8h]S%&S\6=u): .5!2>54#!!2>54&#"!&454>32)KJZ=!# !h8Y|X9ZIؐ\S&%S]K6=u>/4>7'.#!!2%.#"32>=! .uD{h=GB~2f&>bE%AdFEb>[LRvtƕ\ m 54.#"!54> Dw] H1f'GfB @dFEc>L,RwrƒTJEtV;m^Ve74\{Fsw|՝Z\$O!4.'!!54>2*Ib99cH*:hȯh9CjP65OkDkgD!"Ehju;%<4> !!!>7>54.#".4.#"32>uK,R;^v;.pZ9D*EY0]W1c#Dc?Eb> MfDnȘZ\m.?:  0J4&>LME;Ve7+H]1!1#@]98}=!4."!! !!8X|Y8$ $\S&%S]B1ü=8$!#".=!2>5!!P3sBْIZ9Y|X8ZK]S%&S\+l :32654.'.54>32!4.#" .5!DhFjy0L^.kP=ĈɁ>*C/*@,3LX&vKGLBmO+eZ0C-BrtZxEEza'J8"+:!8B& NpakJVr/3! !54."%$9X|X8=6]S%&S\u)0@ .5!2>54#!3.54>322>54&")KJZ322>4.#"@m0IԋדLM3V~V34V?>U3||4؍CJIF~`A"!B`~eG&&Gee2Z*5".4>3!# !!>54.'"23zɐOOz[^dgsf9T`([)aT8,9>>'N?'(@M&WJx? DݗO*Zo?CrZ3"6]F((F]6+  +t-NhthN-$/60#tX!#2Z`{f !{fx%#4>7>53@6#7cU@5!0^ 4C&LsL!3C&ToFR!o#%4>32#".'332>54&#"Q~@oG%NwQ;`F-""E9`R$x͖V%LvR6fP1$B^9 92@d}=Qy%3!Qi@4`%%#"&5!3265!3265!!5#"&@>eD5/]eD 1$]eDxjil6jR3&`t='oV{!!!>32!54.'&#"!DId *S3P7V a^HK_=#J-TyLQVy ""32654&!#".>325!!!rgllghmmCi]q??p^iCDwLc\XלW\cV{!!4.'.#"!!>32! ?*2P8DIcVK_=$#'-TyL`b]V!!32>=!!5#"&5!M=73P8BIdD`ZX+.TxK0a^`QVy "326&#".>325!!rgllghmmmCi]q@?q]iCDwBLc\WכW\cA !!!!!DbLV{!>32!46.#"!!BJd"7+3P7`b]V $QNI6!-TyL/V {*:23##".4>;.#"!!>"32>7^Y{`}CKmCCi@@[k0TyN%D$Xkb" &(& {Ozh`.&NvvO'IiC-UyK/ 1H/   %A4Q!# 4>3!!!!#"3265F1gqLDCR.lghm`ՕߔJ'%t͘XL.RoBV!4.'.#"!!>32 ?*2P8DIcVL`>##'-TyL/b]VG`!!!hTD VE132>5!!5#"&=4.'.#"!!>32 ?*2P8DId ?*2P8DIcVK`=##',TyM'c\RL`>##'-TyL/b]Q*!!# .54>72>54.'#"xYh$GόH.YW&>OPN=& -!ceuGEfzΗUUzldSuJ""JuS<^NA V!32>5!!#"&D ?*2P8DId^BK`=##',TyM'Nc\!4.'.#"!!>32 ?*2P8DIdVKa>##'-TyLc\6J-?!5#".547"#".546?!32>732>54&'JIdSf:/S?%+Ta0)/13 M{W.=*?)2Q8]c'F5c\7kfY$?W3%O*M&9 $h,L9!,RsHZ/)[cjV{4.'.#"!!>32!N ?*2P8DIcVK_=$#'-TyL`b]~$%83>32&#"!5#".5467#32>54.+@u(..ArdV$v~BIdWc6-*UM)?+2P8Bt[ ($``yF5J-Vkc\5IdD ?*2P8c\K`=##',TyMF` !+532>5B8->%`3XD32>5!!5#"&5! ?*2P8DIdBK_=$#',TyM'b]^V{0%3!!".54>7>54.#">32;;=3W@$"FjIAlM*1F-&LRX1/VVZ3rE=o$7U'3O79egqE>qop>8N1!7)< 7opZ{!4.'.#"!!>32 ?*2P8DIdV K`=##'-TyL`c\ V`-!".54>7.54>7!32673Sf91WxH.T?& 2&V9I)<6128^E'  ,G[/AM3Lb7&POL$)ID@ 3A>F  V^%%#"&5!3267!3265!!#"&@?dD2$]cD 2%^dDzjilTqC&_t>'LnZVD{.E%4.54>323!!".54>7>4&#">).4.MkjL7ZsxsZ7  15W?#%:F RU*@,H]60VRQTY2Xh:7opLti]PD 5L/@kWF4^_,=%,*+2:% *CfRF{"!5>5.#"!!>32!`k&A12P8DIcTf82H-f1\F+-TyL`b]5!!5#"&D ?*2P8DIdK`=##',TyM'c\V!32>5!!!#"&D ?*2P8DIdK`=##',TyMBNc\{-)4.#"!5#".5!3265!632 2$]dx)SLB1D 1$]eDw)SLB1H`t=٤,Lumm`t=',LumV{!4.'.#"!!>32 ?*3P7DIcV K_=$#'-UyK/ b]ZF yJ`!!!B`V-)4.#"!#".5!3265!632 2$]dx)SLB1D 1$]eDw)SLB1H`t=/N,Lumm`t=,LumV{(!>32#"&'!!!5!32654&#"BDj]q@@q]jDM8oghmmhgtԤb]W؜W]b66UZ){R?z1+5?!.=!".4>3!"34.'>1.RqNKqR/E0La1l{CB{nDNqR.a3A''A3R)Ic91`M>eyW;#u # Gv!!5#"&5!32>7!HdD +R1O8Ba^`@J^=$I+PsH8`!!!!EE`}}dp 327#"&'dGHFGVV&&%'_*'3#3#_2.*'L* 5!73#3#K2*3#3#'#5#5!'Ȗ2_'j3#_Ȗj'j* 3#3#73#_}e!!!eD^^~C#5#5!'`3#2dȠ`~:'&ti13#7idd_C'3#_-poNq!!otq~`!!~vEȇ8/(!!f(3#3#/`!!!!ff``0!!76!#"fdF77^z|KJ~*#5#5!''`5    K QX8Y1//0 !!54>7!65!,7!-M9,s^7I,'<)M@\ZL%@(CrRH-,X`6 ܴt o]1K QX8Y ذ/0%4.#!5!23!5-O9{{Il9KL,.VrXX`(   1 //0%&'#"'32654.+53 _G&dn4>M gK yW YhApJX\`(  1K QX 8Y/0#!!5!\rr`<   p j ]K QX8Y1 //0!!4&#!5!2Sx 7.J[t<`! K QX8Y1/0!``X`9 1KSKQZX|/1YK QX8Y /0#"!467#5S(6FG`@shC܊ ` 7  p ]K QX8Y1 //t]0!4&+!! Tw&Zrm`m3   1K QX!8Y ذ/02654&#"5632 nnIT0KkT` ,BP`$ 1K QX8Y/0`wX` ( K QX8Y10!4&#!5!2j:8 ݡ=X`) 1K QX8Y /0!2#!5!26&#!Xh{ˉ^**^{h`@kk@"X7F     }|KSKQZX@8Y1K QX 8Y/0!!!LmKkr?A` -  1K QX8Y/0)! !4&#',Tw`|mXn 8"    !K QX"8Y1 //0!>3 !534&#"!674&XX ;o5S4'# a\H`+mm}$C:_B7K;p`$ K QX8Y10!`LX` *  K QX8Y1 /0%4&+53 !5RA rA>` H  ܲ]ܶJ < `]1YTid]K QX8Y /0!  # 4. , AU`%.0^YxDX1`=  >   ]1K QX8Y 0!7!>JP1W9VaO)7pzh. [B`5   1K QX8Y 0!4&+327"&'&5! ^mP V|e)V$ZGza #H`?  1K QX8Y /ܶ0@]0! )5!2654&+27"&'&57.D 3>h.b`핰6'!GXc1   1K QX8Y0>=!!4'&'8>)IGUUOc[*"lj]\ u``C`7   1K QX8Y{]/0%!65!'!5t8KI=6767!#>76!J;\J"L*4 WHJcVK @-MGYc?/c܄P6..P]DEE`A  1K QX8Y ز/j[]0!4'&+ '53265#5! 2._YO>b 2'`iAZ[522]S Oux`',,1`',,0P`'0,0`!#``!#!#`| "#.#4'&'327653327653#"'"%'##5 b  2 8^e Dh%w`12j{.8+>\VD&&{7F .*57"32767#"'&54767&'&'476'##5i$V/!LT9F"@>8O6.N@yF?C)8."dsh%w`.$$-*  F>]MF*!#^C'q{7F| !!!!!!3#db !!!!!!!!3#b)30d1u 327654+53362!2(&1u9Yb(*BCOF.\4:bR1d(76767&'&767632&'&754Jx%E#pth@GQ6:v{ۭ(A}sOQ<,*.>\#EKO?'|_U'}_^U `'}q>q '~_U$'}&>r!!f^'bR',p^R'^L' f'#[ f$3 7!$'&54767&$3 gZ-ΤKȜfT_`"@yj\ƚ޳}N)?& 'q [}R%676'&'!'I>qOJ.QWy3˽.7=}' ] &!6'4'!! 76eI4f2X75gytbeDA '_ `?654/!765!325!#"'&'#"'#"'$47!3276 :@f$SG%f$B}f\HCqQ: #HFVDNx`iifl&5nNY(htz@J<;6T2_&qY Ha$Zv@$eUĴΪ) :C `' a 0=%4'!67632!#"'&'#"'$47!327676%327654'&#G3J $hw縮n=DNx`iifl&5nNY':D~v;51KnCZ(--{i3c`[ v@$eUĴΪ) :CDh2/7O2 '_c 327654'&#)!!67632D~v;51KnC tOPfw縮2/7O2Vei3c`['oCe *(67&'&7676&76%7 7!$'&54,0.20YwN]0.~xgZ-Τ'a78U&-P1/73QvgYN 7'g#!'rokH'~!=&#"'5327654'&'&767665!'$'$547!32761;5P&#fWRB8D-U "&462k?./>>/.?柟-@?./?@栠y72767"'&'yj/N$!'!32765!32765!#"'"& %1r3#(' .# 'Y31l5WY9!nRe6L2o'*#6yCD>**7"2767#"'&54767&'&'4%6:J5yZp6fcX~VI|epdkAXH,7* @'"% 3@Q.$J!+%}p}L 0:?yE`$ $2765&'&"  '&477t 34'b'43 Zh}}hZBiixx2K!'#"'3 %bQ#`3\S22677!!''!q2]9rR;;Rr9]2ze:^e!66!!&&q2]9R;f;R9]2ze^:eA#"'&'&'&76!'&'&">[caI[ %Z]"!5U)% &O%MM \^Z[B/GXqgkH8654'&"3227$#"'&54767672!$'&547!$2+/#04ٝ1JrbbmgQ=!F3Hh!7&'&567632&#"?pN650B>F:*?m !"(j+(} 04M^'L^' ^'^R'')^' ^'^' ^' '}8[ 'lP[ f' 2[ f'[ 'V[ f' [ f' [}'L]}R')U]}R']}'L&]}'6]}R'g]}'6]}x'6]}'6] (/'L >_ Ur' >_ &') _ .&'H_ &'_ .&'(&_H 'X _ 'X _ 'X_ `&a' r `&a `&a'_  &c &c &eR @&g8654'&"32#&'&54767672!'$47!32%6 $2+/#047C^bmgQ=!q_ &?fI.O&;1(RT4,9*9-Y}i&; Mpv1f/'&&'r~J'&kJ'kH&L~kH&~1-! '$&7!32767654'&54767|ϒ@f3UgN2 %bDe+$?.\^Zc:#=$$d|?O#! 6. *Z2] .47!3! 7632654'%$4767!) '$?f3QX*2u R '`ptqiN eГ:[^Zc:#R\M6 #!w*6d3>T12]=?1&)@k&l9F&lF&l1G'< 1G&)@k1G&1G&1G&R14&'m9&m2@4&m9&m~v<&' 9v~<#"'$47!32767654'!<e}걌(f*7N8=8!efg8-",ckJ6_wޤ~<&LE%~]<&' )]~<&q  +5654#""'&547!327.54767&# 32764&cF1) f~f3%HN5Dx0NW:N^|84,r{(J<*iJSS&:K5"S#4Dr`&9Vq}hCFH 'q &[ `r'q>q `2'x7%q `C'n/q `' q$r$r'&>r' rbRp#r3'&547632&767#"'!'!)l\TXZFY$1iS %1u %'fG=#" & QOG-!nHX8>$&327654'&"327 #"'#"'&57* >>>> *B_5C**C5_||R6JﲱJ6R|ڱee&) 36767"'&547676&#"767"Fj7b[ A-B74_cZ.rK,mXv!#AM311DvAb/ &"326! ! ijj|{j@'&@mstm !!!%Tn[  HH; !!!!l!l"3M )!!!!!l !!!!l!CT!!!!!la)!!!!l)n!!TlXh !!!4Zl=qR)&'.46$ 264&"~52425nnn 7oo7 ٜnnn!!f+X264&"  :R::RQzCꋋ*T; !!;Y|Q 3!! dB)!!!fcfd!!!7d^b !2>4."!!&'.4> ":F:"":F:_O%#s煅s$%ZK--KZK--( 6ظllظ6 V !3!!`d{/` X!!!!#"&7676! 54&#"3vR['F4o;)9t:d)Ģyn~}w>Qc !!!!!UUd !!!!UU+9#3264&2#!!WKGfkG gdpv!!4'&'5n'-  >tC7a3![+-TB"34$!2>324&#"!%4'&#"! f-3)YQRH#CBRs-kx&"r¼v;_c~ !!!!!!45fDD}!!!!!!!!!!5f)f4DDoo!!!c/dd! !oY}GwH-+ #2654&+!!2+or~gGXH,dRNGRd9dX !#!!3Xf+DX3#"!!!"$543!!KGfkSh29pv9d!!!+ !!oQ-X@'!!&'.467675!2>4."d&"uACC4."%!&'.46767!":F:"":F:&"uACC?w'!)ss*fZK--KZK-- 7[\\X:t 6ظ6uX@)!&'.467675!!2>4."&"uACCW ܲQ_Q% !! 47&543 %e9\A &=y~]y %>5>! sؠjpnx{6!4! &4%6b ,Q |)${!325&6!4#"! 67&'&8\]TNVU{Ŋ`޺k㕕RiIKr{7276=$5725!%&'jd##IWh9 zC$nCphTUMP|&5! !$5!! 6t4;_68izA*haqMP%$5!% 67&5! 68it4;C A*ha{H("''$325!765$7%6'%QD7M&ү}9y V!#5HKjjjoiArGs}&''$32=!325!hp}fN#Ѐ|:q8/{ !325!%&''$67&'! 28o8Pr~es6;~Sfno(?Bkf?nBk/ %'$67&'! 25!325!!"l~es6;~8o8P#Bkf?tJkkfnV?2,`325!!#&''.5432325recλ!&`6RV~uЕMQ% !! 47&5! e9\@;h~=j pDy~\xox;2  2Ab$$&%6&%$! '&77$54'&v )ߦyǸ`"sh_ ,S#">6R,2?9J,Ri`T c&T{%%$35&#"%7! ! z6nZYJ*>_"VӺ,2rwe!;GX<C|#3$54%676%$'&7 ̌-(*+]|DbZ*KXR_T i& 4'$6'%! '%$ s#UzHGnNNVa %!ifƊX=,2r Zz(67&5%$5'&746!4#"%${l4: /9DPM"\Z@D0Xj *MS PTtlL%$4! 5'$4lV*rk{hs[; h^B^Eb+&%$!632'&'&%$'&5 7$y %l9A's`VYt/(al1S Ee<,QV0*"%Z<i7/ X-/! 6'&! ! ! 32?632l$p3)vwאr֌3)'"ixFIC'@@^,"'&76'&'67'ҟ, W`k^H5)F2.eWsP!4#"! ȆN=| 1  > *&WA%$ 5 '& [_0~9e}%$ 3!5 54 [`f G~9fP3}%$ 5 '&#'57 [_&&&&0~9e}####%$ 3!5 54#'57 [`f &&&&G~9fP3}####&7'6'&762'6r3217*9{[l僐,.--Tbڂf8x&7'5667&763253% 2AKA |ۺ f@TwdD:0;QF, &'676'&76'k`W r,sWf-2G)4G^254&'&''&7767r! }tc0~sa^:",SVO>62%&'&= %'765&%&!2?'&'&w ? f8@:m{]E&NWO+Nߠ_a?)sP/k7hmu~Sq| &5! &'"66xF#6'poy^eD(<|'LL}! 54'&547632&f p:]ieejdjixz;kS04#"5! $! 4[jGKj4g\?zN.i.x&'7%!#$'CO%7Xђt(bS.%! '&'%! 54'&'&'&#" ! 3232763 Ssa`Y9>',+.6H5)+*9=sY4a]kh]jHjiwE#|X!567&76$7673 7jy %.Z?^O476763676'3!#5676'&'&'&3&76'$CM=!JXY[x5?Gb*gW/A67 *ut7.,U 3533##5#zۺJP*Y* !#&54567'6&,=DAA566"327654'&' ! '&4760S<:NV1r$[ܜ;fLU!4&#"&7&$32!FQHKa[DkQ[UkԯTY 4#"32%! %!5!!ޚFI:,4H9#BB];!4&#"$4! UTc  .?~zD2#!4&'"&5432!\:EW][oBPl?pϡR@ 3>54&#! !5!3 q}TutV{x.w)e%# !%#!)!- W*W?r& Q%!!!= YO 4&#"3>7#$5!63 ig4wCg(vQBx9>Yn2T5+$^ 4&#"36#!!63 X]kc\í'yZ 5B#OR(c "765#%"!35!5!!fYoCyיq]>"T(^Y%4&#"!46)!"63 jmitJPQsv<BPp&L "4#&3!"&' ! 365C)F,<>NqEBX_X_D2#"5!5!>5!a[= O~(%# 547#5!327!r}rtOcX=7>⒞u:lY%!&5%3265!!vQqq>@z>=ƶyQ'Y$5!3>54'7R=aL 5zNŷY.+3>%!#!!! jkqH/<nL "4 32!527&'# ! C+ G$>YX[VW_x@ 'Q+BL"32654&'!#;!#!# ) {~|l[]紺ڸiZXP:#!!!3!!KF=>;wZ%!4&#"!&32’\Y81ikOE%# 5!327!`|>ho>v*&G}8rO &=!326=# 5!327!FZd@{B>vxo=߳QNx||KB9Y%6&#"!!632sp0=9Cf]95#$!$&#"77!e3*G؇@Ws _n_ "3265## 5!3!!ӎdRxn>ɃĿ{l-mY 4&#!!>'$#!!!5#!!2j@5^%RGĻ_QRi7G< # !2654%$43 !.#"HlLlUV[Yt%ډz%#qffY!&'!!!265!7%>4Y>v !!! !5!NqV;$_'5#!!365!_߮o]=UR}Y54&+!!3237L>Ç[J'Ѷ+K8" &32656%$54632!&#"8كuiߗ;A9?JЋɪڜFk%#&'#5!;!.  Ng=K.ryOrD|!&$!;>5!|KZ>u4z0i>j_!%ٯzs'1 2"3264&"326=+!!#.546;5!5!5&632.?]:MG"PM#'H`]DkeYJ{N2f9ee:?M뱍ܳ{d ! 7!3254! ,.!:"De'Td'32! 47674'&5!>*IA_l#(kgE"0-7[5ye\wvAFZ%} %%4&'326%! 5%67&#"'! bgr~t^Q>ԓoY{JBJklZM!-H(qd3Iu)#"32! 476'"!.#'67&5!63  >0s8]lsc{MGJ2HlAPq3Pv~d%t! !354#"!'! C)%6p+$"GЫP[d% t"! 7!7=6+534#"!'!  ?7]‘pDk~lU4 6#"6&32! 7&7%(iolk?,+|U!qT4F|Iq6d<t#"32!263 !#&! ͗j:m:H2F0S^;9p= Gndt! !&5 ovt67M>Gè&$d% U# 7!3=4+53654'! $3Հ!ړ4ijiod34~4!54#"!4#"!4#"!.'&'67$!26263 4jm rm XGQͭT~:rlce+dwjixdamp{`j,mzxnd  &#32! !54#"!5! :GX\4?ACx^ I,喌33m('"32! )!"63 ?Y=$6@`hU%P(b8tV!dt!#"!4#"!!263 yюzej^?7/5*{{d ! 7!32+53254$5! ,.<pٯJJ'rppUd% {! 7!32552'6'5% 4'>o"Gᜟ&nb^PAd2$!#"!5#"!47%3263 2k"#`~ ghS6A<_

uON >w<%C ! 7!3254#"#4+'3263 C=<FT G@!KDNNL#HЩCOrC;bhhd%Wv7#"3!63 ! $=67326=4+5364#"! 㮧/Ʌйeo`Z({[I-*BT,ur?uV}zz"No]Rm xn;d%! !25&#"!'!!F&%@'UfG%wnU4!F֯4<d4 t'67&5!2>3 !5&#"!'4#"!6'^vh2ZɸΚI(a}@=%*%ij d% d! 7!25' 47!27! 7#C@ZBTly`B4$ID*z('&#325%! !4#"#"=6'3263 OT4Q YMEi{2]Mtp`"(,H4U^= Q$r<dd%b ! 5!32+532'6&'!zTI`nBgu;Tގ(ܑ@ꚜd &#32%! !!UQ3,.JS3s#'@S/E (324&'"!26;'&'54#"63 ! LJDZzaTy2~wTU\>[_".}}Q =>ggd66 d%#&!!!! !3274.'5#"3!32u.,%7p?AgBIʦ||lFU('&32! !63Ca=3'4OZ3Y %o:o2%  ''526'&/%7654+532 UJʣM:7Urk՟}Hk\Q2,1@Wd '! 7!327&'#53256+5325&$'! 2(?<12D 2gnKɷ˜UWZIZaJLvp_od '! !3254#53256+53274&5! ,.4";<1DxLt˩_WЄU}smVtzMndt6#"27&! 3$'|GyxD؀=hfXz6;:Ɲ\8`[d% v! 7!32=4#535!% *0G#oD ? r"id% %! 7!72=4+53$!"7% 0+>"O>("#Hؾ/ٳКldw'#"325;54#"! %35# ! 3#3ܩƑj*.Ϯ1kkkQ}ݣd%mt$#"72!"'!5254#"3$!263 0=*N@蝗jh2do)M-Ad$rt!%! %#$54#"!'! 324'!r G^ !5"8מqup,;[[Ʃ rd% d!3654!!'367'!! d4B`ylTBZ@C#7c*ݻ @׸LZ%} %>54&#"4! 325&'%! 47$qh~t^Q%,oYxd$zFakl^Q!-HEF>yy=6l'@v3!2654&#!! ! TMwiffix##ateetal'@vk'@u's) $'&5476$)!"3!jxiffiwMT ate etasl'@v'''&l'l&''l'l&'s'l'sl&&j{j#"&'.5467676;#";jzLB@@BKizË\RRQ5@8]b8@!H@xCC'6&6'\s'NT6 !# $5! "3264&6gL, _^ztlz zsltmzr'@W 4! !"'!"32654&_ ,Lgj_zltz zmtlszl'@vT6 ! 4$!2!264&#"61Gg_zltz%zmtlszT6l'ov Tk'ou  !63 ! %2654&#"gG1j^ztlz zsltmzl'yv#'IT 'R' &Rl' l&R' IT & Rl'!IT l&!R'# &#Rl&$ l&$R&j#{ 3632#"&2654&#"{p/ѽ7e]@EYf6GC?D@C@I{ #"&546323>54&#"ި/p{9fYE@]e>@I@C@D?CGT ' &T &  &#T6!! !4&#"L, __dszr'@W<4&#"!4! d__ ,Lnzs l'@v<T63265!! Փd_nzsT6l'|v>Tk'|u>!! 5!326_d szl'yvA':IT &:R'<I &<Rl'=I l&=R'>IT &>Rl'?IT l&?R'AI &ARl'BI l&BR&jAI{3#"&53326ѽi6?j6@JJ{32653#"&5aj?6iި@JJ@6ʉ8G!!!r#+r'WV)!!=rl'vV8G!!!+#8Gl'vX8k'uX!!=Nl'}v[Q&T 8*'\T'VQ'Vl'WQl&WQ'X 8Q&XQl'Y 8Ql&Y'[Q&[l'\Ql&\&j[{ !!aqZC{!"&'.54676763!!"3!LB@@BKiZRRQI5@8]b8@!H@xCC{ 3!5!$q$264&"  $547!zzz7t'lmmXyt]#T;J'/qT;$264&"!! $5476[zzzp'tϘlmmX]tyT;U'_q8"264!!&54$ zzz '11lmm#]ty8U'_s8U'_sT;"264 '&54$ !;zzzɨ11' lmmyt]T;U'_v &o N'o a'v&T ''Yv aU'w&T 'U&wYT;U'_v{"327654'&"'&54632!C-**+EF,)).Di`W\ :8 8: uIBC3{"&53>53f99g6@II@6ʉ{"327654'&!5!&54632GD.)),FE+**-C4W`i\ :8 8: u3CBI! !2654&#p7@fzp##WPdmT;J'/T;!"3 $54$);pzf@7pmdPWT;U'_8!2654&# )8ppzfZ#mdPW#8U'_8U'_T;! $54$!"3;[fzp#WPdmT;U'_ ' N& ']T '&Y U']T 'U&Y '`8 &= U'`8 U'= ']T '&Y U']T 'U&Y{!"&5463"34ɳVDQInw0.7?k %- k+2ydd܃T !3!5!;*vpr'W 7!%!3 *;v_jl'vT %!5!# B__pTl'SvTk'Su %!#!$!B_?jl'yv?'$T'1h'>'phl'>l&p?'$T&1?l'$Tl&1h'>&phl'>l&ph&j{~ 4&+3#q9г`{;'.#"#"&'532654&/.54632I>SN5Fb~UUUJKP6QY|JDZ+,"& si++/,'+ud}{~ 0#5473#"g9r4`):T3265!# 54&#"!$3 rY.c2Y.c2Nn Nn'T4!2!4&#"!"$!3262c.Y2c.Y nN'nNTl'vT-.#"3 $576!2327654&# !"$'&sL`>f䠱%WW#iGf=f[ݠP3 !2654'&#".VPݴ[f=fGi#WW%f>`Ls~WP}+FS~#WP}-DTU'h_ X'IT'# X'IT&# Xl'ITl&# ']T ' U']T U& ']T & U']T U&{-#"'&5463"326767>32#52654'&#"a30`l`O<$=*?W44j`O=%9.DXwMQPFz0-F(T.sGWNGz0-F'[y!!!!FfKHr'W !!!KfHl'vy!!!!FfLHyl'vk'u)!!!~Ll'{vJ'['n'K'}nl'Kl&}J'[&Jl'[l&n'K&}nl'Kl&}nl&j{#!3!!}ם{#]{ 33 # #EgV265!! $5=zz dlld! $=!!265zz # dlld8!4&"!!54$ zzz++dlld # J'/)4$ !!4&"=++zzzdlldU'_3!264&#!! !#Vpzzp1mll'@v!3 )!264&#!1VpzzplmT!)# $54$)!"3!!1pzzpVlmT!l'@vT!!"3!! $54$!3!pzzpV1mlJl')Tl'2{##"&63!!"3!歳KPMNy:57<k -5- yy2+#$h'264&"&546 0!!%ppp :pTm5(`DD`D!gI7\w+h'r'Wh'264&"!! &54%ppp)}umTp `DD`D7+w\7IВg!h'l'vN#"&4632264&""pߝ`O+wpppKВ5pz`DD`Dl'vN632#"$4&"2Kw+O`ߝ_pppcВ`DD`Dl'vl'wl&{|^f 5%632#"64&"2S2EF>yy `DD`DHIВh=6 $4&"24&#"!!  &476pppTyy>FE>pm`DD`Dn=6^hIHl'@vl'@vn&264&" &46; )!2654'&ppp0LoGTMwiffixj |FgD`DD`@2IВateeta#tAnl'@vs&264&"3!! $'&5476$!32 '&MpppiF| jxiffiwMTGoLgD`DD`Atate etaВI2sl'@v  l' sl& { *32"'&'3!!"&'.5467676"3264&9cF3I6RRQILB@@BKi1GG13GGPrQ(&+BxCC5@8]b8@!I&4&&4&T%!# $5! "3264&6gL, _^ztlz] zsltmz}4! !"'!%"32654&_ ,Lgj_zltz Yzmtlsz}l'vT%! 4$!2!264&#"61Gg^_zltz]zmtlszT%l'ov}%!63 ! %2654&#"^gG1j^ztlzl zsltmz}l'Xv{~'!632#"&2654&#"jWp/ѽ7e]@EYfLGC?D@C@I+{{ r'{ &{ l&{ +& { +l&!{ &#{ l&${'4T%!4&#"!! 6_dL, _]szn}4! !4&#"!%_ ,Le^l nzsT%! !3265!6d_^Snzs}%!3265!! 5^^eSszn { fr';,{ f'<,{ fl'=,{ '>j,{ l'?j,{ f'A,{ fl'B,{U -"32654&5!"'&547672326=3#"'&GSPJKOOi``o_2MMYYYYV;75><75=^6IBc<75=;75><75=9Sc-{ l'?z-{'A /-{l'B /-m!!,!!!!@! A !!!#!!! AA !!!#!#!! 0! AAA !!!#!#!#!! ! AAAA !!!#!#!#!#!! ! AAAAA!!!!A !!3!!!\AA !!3!3!!!AAA !!3!3!3!!!_AAAA !!3!3!3!3!!!AAAAA !!!!!!}WRXAA!!3!!!!#!!WRXXAAAA !!3!3!!!!#!#!!WRXXXAAAAAA #!!3!3!3!!!!#!#!#!!WRXXXXAAAAAAAA+!3!3!3!3!!!!#!#!#!#!!!}WRXXXXXAAAAAAAAAAS,B !!!!!!! mmSB!!3!!!!#!!! mmmmS B!!3!3!!!!#!#!!! mmmmmmS B#!!3!3!3!!!!#!#!#!!! mmmmmmmmS B+!!3!3!3!3!!!!#!#!#!#!!! mmmmmmmmmm!!!!!! !!W67WX0/XVAA@ !!!!!!!y6L6yճfAAjX!c !!!5!!!!w9~tv; #!! !!'!%'! )7%!77'7# sHsGGsHsTHGGGGGHT2@@@@@@@@@?@2  m+/37;?CGKO!5#535#535#535!35!35!35!3#3#3#!!#3%#3%#3#3%#3%#3#3%#3%#3_ Hը]!!!!1q/!' 7/T=%! !%=T%=<%` )'!!!3JgJ~`J\ `#!5!!!!!!!Y+zU+2V`X{,3>%#"&'# 5!.#"6$32>32!#3267%3267%2654&#"waGMzFq}~ HeߋӆsU+w`gpq[QeMOMO> f~~CD01kdkdŨŸUO..f}unLJDMm)(` %24+3#24+2)#53qqw~~wiߟcm(&:jX5{Fa326&#%'%#wJv}ZNMMNZ{kB"%WK}LW$&(a'%#53326&+3JU[f##qaFRWJB` !!!!!! 3`n{1#"'&'5327654'&+5327654'&#"56763 l78ttWYZ[<;_7892u|v>CBAtMU^GZ\]\~?@aGH  #$*,"%'<:('$pL`!!!!fff`L$ZT`!#"&'3265hKG6f4e]` !"!y`` !7!!'7jobo`iC``X'{RX5{X4&    B8(~~|DDFX@%!>54& !.5 20Ư217*7@JPT@TV0VX: +>54&#"3267>3 '# 467'7)A+CN{8,,eP~--^K/w}HO0u|CDjKmFEE!lMpX^{&/=5!.#"676326763 !"&'# %32767276'&#"XE qwv}~~kkHRjk"ކQRdcp<;`hAA\w>??>wu>>>>+f~~!"D0)(WT**؜RVW():f>?;:nUVBVUUVVUX/'{ 4&#"!! |uw}G"!E/8[*/ 3265!! |uw}u/8h` !2+!32654&#hze[MTTM`MFGL+z` #03#"#"!6767&'&54763!!OO['(('%K-+%322?s99nnv HI G>a/0!GHoKJ+z` "";5!!"'&54767&'&'!3['(('[Ofnn99s?223k%+-K IH JKoHG!0/a>G``!3265! $5fS^_Sg``vddv`+{%!323267>54&#!!#ZTp[.w#&`b]hF.pfPl|!5353!323267>54&#!!#Tp[.w#&`b]|hH.pfRn'5{$#!!2764'#!!2764'!!08%9? 7w6515ۺ6555!&UgtY;(88]pf##3h 4h`YH`Z\F`]t`%2654&+57!!!"&'q~X7T94|z},)*+SLi--:;`3!!Q``N`!!!!/`}h``!!6765!!5&'&5f? f ?fll`au2 X 2uavRRvq0` !#!#!<]!\4D3M3'!!!!!!5!#1d}d\QVv} &27654'&+27654'&+#!!2::I%%$%JpNV\\mmWX@,+76,lOy<;D54t=Vv 327654&#%!2#!iWNNKB !! BK=AB}|6A9JJ]_JJ9A6v !!!!!!vd}cࣜv !5!5!5!5!5c}d@$#"'&54$32&'&#"327675#5![abh뉊^VVLOMNNONLK&! z'ut(HHHH v 3!3#!#vf?bvi3#vi 3+532765v_`1%L'& MN&%Iv 3! !#v^;1tHIv3!!vc_v !!###v54ٚAd=v !3!#vV==v #!3V=D=@ "32654&'2#"$76$ozzopzzp、SstjsstsO ?"27654'5#"'&54767&'&54767&327654'&q6886655vaj45gs;:oppp:;sj15kIF"44(jT=332!!>=!!!!=?!a27kG/064Q|@??@|Q4604,=8'W !'!C<v} !2+#32764'&#vG&''&Gpv !27654'&+#!2!'&'&#L!!!!LfsVWZ[2'((r#$#;m9:וD78xSj $#I>i!!#!c_v3327653 '&5v&&WV'&ddfde h,--,h VWWV&g 333! !&颢颢誩``|m7 +"3276=7#5#"'&5476;54&#"5>32FH3?,+-98RmEDUVTZH>?5HI**&)(=L]998[n440, m7 /27654'&#"367632+32767#"'&F$#3@+,.89QnDEVU+*YI>?5HIJITU*&)(=Lf]998[n430 CCmb53#5#"&632264&".88JI89LLL\[8"3^^^m@6>L#"'&'#"&=!&'&#"56763267632+32767%3267%27654'&#"K>^DE,1M 11XHJKOPQPOqTS.?FGWzHGVU+*YI>?5S&%=AP VF$#3@+,,+,9F$#' 8<77^n430 K9##B=d*&)(=mb 264&#">32#"&'#3ILLIH'&&'M.rISTTSIr.^^0//074\\\\47[gmb3#5#"&632264&".88JI89LLLP[8"3^^^mb#!32767#"'&5476324'&#"b11YGJKOPPPPjjhicd%&mb 5!&'&#"567632#"&73267m11XHJKOPPPPjjз%&
=?<899o43NN&%IF''64Z[ZZ8]̗PP ++\\TV-,.-mO3##53mms 3%! !#ms&m*67632#65654&#"#4&#"#367632+;;Fz@?,2@F(4A##)66AIp:BCGB<^YGhm2#+532654'&'&'&#"#3>322EDhA0 G((3rFz??}CC4KR 10Us\74BCmu "32764'&'2#"&6K(''(KI'(('Ifggf00000000WWWW6m67632#"'&'532764'&#"m6568kllk7765(0/5_4554_1/.. WWWW 1111 mu4'&#"#4632('IK('ηfgZ0000ZWWmu327653#"'&50XNJK'(ηgfZ`00ZWWmb#3>32#"&"3264&O.rISTTSIrgH'&&'HILLb\74\\\\40//0^^m3#;#"'&5#535:t…88pp,21w m23327653#5#"'&m F)(3rEz@@?2MMLB 00V5[74BCmA!53233276767654&#!5!#QG9WVU&% laf= ?H.23=mrm(#"'&5332673327653#5#"&M+;;Fz?@,1@F(4A##)lAIp:BC~C<^Y4hm33#m⯯Olb5654'&#"327654'&'5647>32#"'(9E'&IPJ(ogtWH01I2"*@^:[OO[1#/! /0YY/0&'P0PB&H1e4.9/HqdJIk\3#5&'&+532ef!*f+`)S1 *8@ +&#"#"'&54767&54!232764&'&MkXlhghhg!(]LZ"*)*GH)*Z>`'74?KXWWXuZ,Y' 1XW2122TS 2#5$47635676&_YggUjX"T HS$$WH/0F9v6KN! 73;#"&/#'&'&+532c"Fisx/  dFS=>19H-Ti.'(mmOg Odnudm2sdmsdlbwd\sdlb67632#"&'#4%"32654&UNOLz\TJq/xIMMIHMMH TN47%_^^YZ^Syd! sdF^y(>32#"&'!32.#"2654&#"Ju uJUc^[o|xsp||b\\c !65v`%!535#535#5!#3# V{"+!&'&!#53!>33#"&!3276r>#"<fJuυdku4(>rt<(wT0HI0T+wb]|]Y8UT8Fy!!+532765'!fgllͱ>f&&wv..tmb#367632#"'&"2764'P.89ISTTSI89LL&''\s[8\\\\^^///m&'&#"32767#"'&7632../1_4554_5/0(5677kllk866 1111 WW6WW mM1;2'&#"&'&#"63+0#0#"#"''45&'&7632$"]R4./.1_54 @j,~E2llk857 * 11XE-c@0&)W6XV mu/&'&#"327654'&7#"&547632''7'37y"#" JPRHI'(gJ!"gf__xvF<JDS^00ZLHHSWWKJzBH6qA@H6m1#"'&'5327654'&+532764&#"567632M'(VU:::9-;51I)*+'QJNJ$F<%65&9987##((?a10  "~0( PT7#$m#"3###5354763}0pp@A&,,f11mV33#+532767#53ppADp'@v?CBmb,#"'&5476;#"'&'532765"3276=.pJUTTUklB>=?<899o43FN&%IF''64Z[~ZZ̗PP ++\\TV-,.-Tm23327653##"'&m .F)(3:9Ez@?~>R>01V4P7BCmT3#33##5#53ᇇQmmm 3?'&5m<W~GELDC~mT !53#5!#T~ lmT!535#535#5!#3#T~~~ qmmqm%3#33"+01"+5&7637&#"3276j#I 9DG „W(B;AQvX7Cw*!m) 3;#"'&5mAiDEKCCrm133+532?#mCDo'@(sBCZm3!!n40m067632+5327654&#"#4&#"#367632+;;Fz@?FDi@,2@F(4A##)66AIp:BC}CCAmB<^YGhm(#"'&5332673327653##"&M+;;Fz?@,1@F(4A##)lAIp:BC~C<^Y4hm '#=4'&'&'&#"+5326=3>32  G((BDi?23rFz??>R 01U{ u@C4K{\74BCm "&'&'&#"#367632;#"'&5L A.(488Gy@?0AhDI0 1*[s\9BCK4CGnm$ !3!#mlmmu 2#"&6"!3&'&+3276fggfηK('H0 (KI'WWWW60$==$0*00m#+!535&'&7675#5!#'6764'&MggM~LffL('' %''1`AW6WAghAWWAaZ 00M 00m=&'&#"#"';#"'&=327654'&/&'&54632ICCG%nl332653 '&5l4;<4TSSTB88BxBBBBm(#'&53?27654'&/2.%`aW~GE J40$5!J=XXXDC~q_71P<@/(fm# #3ⰯOsm !!!5!}gstXm!!;#"'&'!5!}gt  RiDBktF C@uXmMO!3676#'5!5!25&#"}geNiQ~t\R<mONX-m2 7!5!#"&'532654'&+gf6O62kkHGDCCAaf45gv؏ ?:P|A@<79m !32767&'&#"2#"&76C$(DB)$#'DA*"VWWVVVG?DD<8ivw^wwwvCf!73!CCf3!!CfCf!#'!CvfCf!!#Cv⦲ff 373#'xf #'#373DzDzx ''$X{'Dl'v%^N&Ef:M'%M^'E'%^'Efo\k'uXo5f&v 9k' u'\'\uGM9' '\M'G9' '\'Gw9'z'\o&zG9' '\'Gu&(G'X k&H&HGu&(FX k&HFa'M(Xa {'MHp'(Xp {'Hok'u'z(Xo F&z'Hl'v)''uIf6'm"*\F'Jl'tv+N&Kf:M'k+M'Kk'jB:+/k&Kf:\o'zV+No'zHK'O+'K p'|,p'^LRu&,D!V'Dqk'qu.y&NduMq'\.My'Nq'm.y'NM'/M'_OBM&/'u$MO'q_; 5'/)'dO&/&&O^&9k'u0f'vP9l'v0'1PM9'0M{'/Pl&1Yv'QM&1kM{'Q'X1{'Q'T&1{&Q&ffu&2LX'S&RLffY&2JX'3&RJffu&2GX'k&RGffu&2FX'k&RFk'"u3V^f'vSl'v3V^'Sl'v5'WUM'5M{'_UMO'q; XM&qU Y'F5D{'U-l'v6jb'\VM-&6jMb{'ZV-l'u'v6jb'v&VV-m&6Kjb'\#M-l'v `jMb'\ a jk'u7'uW Mj'7M'W j'7&W j&7&&W&M'>8M`'EXo'8p`'Xa'6M8a`'MXu&8'NSS&X'1]Y&8B&X'qj 'm'u9:'Y M''9M`'Y=r&:h|Hm&ZC=r&:h|Hm&Zv=k&:jh:H1&Zj=k'hu:H'Z=M'x:HM`'Z'l';v; '['k'j0:; 1'j[l'v<F'\\qk'u=\Fc&v]\Mq'=\MF`'9]\q'=\F`&>]'Kk'j:WH'ZF'\X'D''uA)'75#35463!#&7?oL52UvI$A)) AGn@aT5/<EGRH:?Z.Y($I M'&$5XM{&D '4'u$X'D 'o&$M`X7&DM 'o&$NHX&DN '&$TcX`K&DT '&$OKX&DO M'k&XMf&z 'u&$QlX!&DQ 'u&$RlX&&DR '&$SbX&DS '&$PlX=&DP M'z'XM=&gM'(XM {'H4'u(X 'Hm'u(X :&Hyo&('+yuX&HMo&(NX &HN}&(T XrK&HT&(OX &HOMk'XM f'4'|u,kf'`M='|,M'_LfMf'f2XM'{'Rff4'hu2X''Rffo&2MXo&RMffo&2NX'&RNff&2TX{K&RTff&2OX'&ROfMfk'fXM'f'lk'Nub_f'vclk'Nub_f'Ccl4'hub_'clm'gub_:&clM'fb_M'cM'?8M`'X4'@u8'Xk''uqf'vrk''uqf'Cr4'@uq'rm'?uq:&rM'?qM'rr'|<Fm&Cd\M&<F`&\;'|<F'\m'u<F:&\g !!!!!UNN!!5!3#!!!#53ffrrr++c)G&F c)G&F }c)f&F c)f&F c)f&F c)f&F c)m&F c)m&F ~ 'G&'  'G&' Jf''# Of''( Ķqf''J f'' ŧm&'~ dm'' cnG&J ]nG&J >nf&J <nf&J #n@f&J nn!f&J 7G'+ G'+ 6f'+U /f'+N Ķf'+ f'+ ŧVG&L VG&L Vf&L Vf&L Vf&L Vf&L Vm&L Vm&L G'- G'-  Ef'-O  Df'-N Ķf'- f'- ŧm'- dm'- cG&N QG&N [Bf&N f&N 8@f&N f&N ŗm&N Xm&N R!G'/ -G'/ zf'/= f'/N Ķf'/ +f'/ ŧm'/ dm'/ cX'G&T X'G&T X'f&T X'f&T X'f&T X'f&T G&5U G'5  ^f'5  cf'5 Ķf'5 Af'5 ŧ G&Z  G&Z  f&Z  f&Z  f&Z  f&Z  m&Z  m&Z G':  f': Ķ f': ŧxm': cXG&^ tXG&^ oXf&^ jXf&^ `Xf&^ Xf&^ Xm&^ Xm&^ } G&>x sG'>  f'>+  f'>6 Ķcf'> f'>  ŧm'>l dcm'> cc)f&F c)fAnf&J FnfBVf&L VfCf&N lfDX'f&T X'fa f&Z  fbXf&^ yXfccV)G& pcV)G& pcV)f& pcV)f& pcV)f& pcV)f& pcV)m& pcV)m& p V'G&   V'G&  VJf&  ;VOf&  @Vqf&  bVf&  Vm&  Vm&  VG& VG& Vf& Vf& Vf& Vf& Vm& Vm& VG&  6VG&  BV Ef&  V Df& ! Vf& " Vf& # LVm& $ Vm& % &XVG& NoXVG& OoXVf& PoXVf& QoXVf& RoXVf& SoXVm& ToXVm& UoV G& V VsG& W DV f& X V f& Y Vcf& Z 4Vf& [ pVm& \ Vcm& ] 4c)F&Fc)&FqcV)f& ^pcV)y&FpcV)f&Apc)9&F cV)9& p 'k&'u 'O&'q;f'' ֠5Wf V'&' wG VwG!527#wGez\9;\m'ujVf& bV{&LVf&CV9&L V9& f'+ ֠+f f'- ֠Rf!V&- XEf'  ,f'  0\m'u F&NV)&Nqd&N X/&9&N dm&N P,k&/|uAO&/q|;;f'/ ֠f"Qf'  8]f'  H\m'u  F&Z &Zq &Z  EV^G&V V^G&V  9&Z  m&Z k&:uO&:q;=f':^ ֠f$aG'7 ^;;&j l;^fCXVf& joXV`&^oXVf&coX9&^ wXV9& of'5 ֠f#uf'> ֠f%7V&> fmfvwG#3$5Gzeo10!!oto n#/10!!nKn/10!!n$n/10!!n$/10!!1&__J&BBX@ 10!3'dX`X9@ 10!#Td`L@ 10!#Te`X9#d`X +@    1<20!3!3!ddXb`Xo + @  1<20!#!#!TeTe`^F + @  1<20!#!#TeTe`^Xo ### ee`^5; *@  WV W <<1220!!!!!5!VJ#!/3;?@!   W VW <<<<2912<220!!!!!!!5!!5!VJ###!<}'` ]10467>32#"&'.'535II245633JI326J235624IJ336633'AF'AoH !!h}!!!!hh}}^ #@   1/<<220!!!!!!hhh}}}yB V #/3?K|@C3 2211 003%@ *$F4 :02$L3IC1!  C=!'= I7' -L9912<<2220KSXY""32654&'2#"&546"32654&'2#"&546#32#"&546"32654& HNNHGLLGֹHNNHHMNGպֺ׺GNMHHLMh{rs{{sr{ؽ۽8|rs}}sr|ٽڽ ؽ۽٨{rs{{sr{ B "-8@DMW"32654&'2#"&546"32654&'2#"&546"2654&$  &#3  &54$"2654 ZHNNHGLLGֹ(HNNHGLLGֹHNNMNt\t؎NMLh{rs{{sr{۽٨{rs{{sr{۽8|rs}}sr|z ۽1{rs{{sr(`!(`u(`b&  w(`' w&  (`#!`u(`g&  |(`& ' | <#%##'y29190 5%'q'y<91905-$'3'}''Y'Yw'n!7>56&!>32!3#d->.M ^fy]N^@D*h->U1FE"B:*(ǿbY9>K-dM B0_  $'5 $CJ?ơSPPSEFE&j &$ 56$ :F;&FEFESPPS_#3 #ۊ@ v#")' {' { ;!!vh+@55%10KSXY"#3  !!!!!mT"^ !5!!5!!5m^F&""&"'n"d_ 327!#"'ddp_{C; 2###̾農fS3'#"&'.467>3،I326535IR2633235fS'372+r،I535623I532336) ` #!>diu1}j& " #la# %#'-73% %#'-73%== =  === =  oqqp qqp=B<''ldR#"'&'&'&#"5>32326搬 錄ܔ吙錂RPE:=MSPE:=KX #8| #'7!5!'737!!؍1؍؍1׍1؎؎1َ׎) !!!^^^OJpJ J(`P' e' w&  + !!!!!,,,,T,,*,,B !!!!!,,,d,,T,>,,,p,=!!!!hh}1}d0 !!!!!!!!diiiitpD %!!!!#!5!3!,,d,,rr,,,p,\rs9w !!!!!!hhh}}}}}9w !!!!!!!!hhhha</ 4&"32767#"'&547632B@! !LK! bcabbccb@@@AAAAoppqpqqpmO3#3#mQ8. 333##5!5ya$!!>32#"'&'5327654'&#"Lq6^]efNLLLKCC32#"&547632>>?:431j;; )^8``rs?;<9$%IJ$%%$JI%$ 56i{PQuv T!#!TSFy6M ,:"32654&'&'&547632#"'&54673264'&#"C#$$#CAFFT**WVWV*.Q_.0[Z[[^97<79!!>=!!B=>BF00Gi8777jL+/45P|@??@|Pj26dA)532767#"'&54632#"'&2764&#"~8h2i;; */07UVrsA;;>>>?>56iJK|vv $%JJ%$k !!#!5!hHIkۅ%%F!!'FA!!!!''ń{o#&'&47673`....`P)(P}|}~g6764'&'3gQ())(Q`./..a~}|}n?#=4'&'.#"#367632? .H))4:;F|@A>R01Us\7BC</T Nd{C{dmTtdZTud8.C PdaC QdN'T RdTC SdMT TdAT Ud Vd% Wd) Xdoif Ydgif Zdm7dmbdmud:sdmbdn?grdmsgdnSgdmdn? [dmbdDdm%dM"%!!!!!!# !2.#"3267 3P^F^PPVVP`**9  9*)73Ʈ27f9)06&'#7&'&76%7373&'6767#"'#&'B=!72,Ϳ@76 0<:d[bdcuTR!Fi+<V,6767# !2.#"!>32.#"1.bedue`udelo1@0;k$")N)u~ "I77ef87ID: ̦c[M!!!!3#!#5>rgz[X"X}#676!2.#"!!!!!!35#535#5`z\YFMv84uuw|'&>:r B0#4'&#"!!676323632!754'&#"!. Rh78hCUThtYV/X21##Ne9(75UU``/085cs VH)v75TR$m#5#535#53!3!3#3#!#!3'aM~~~n}}}}RlbMxJJJJ P3264&##532654&/.54%!#!! 3!!632.#"!"'&'!"&5=pzzpUFItijIm?"fqffqhcڀs_fcKa?ov""Ա_ml%N9"/:90/ # U~^> 0035+. # BF2654&+!.+!! 32654&/.54632.#"!"'&yiiyf7q^mL'O}@:djptijIm?cڀs_fcKa?ov(?ZgfXspR֔-v/:90/  0035+. #"&)-1'#53'!!7!!7!3#3#!#!#5!73'!!7{X6q66s66n6XzD̅D˺ijzjiK@vvVVBvvBvvvvO ! !4&#!!% !3!!PN+$ooaY*5=Y>&1r@;.*(1.!2*("%!) 2 +) )% 2229999999999122<2990%# '#73.5467#736!2.#"!!!!3267_pKXbXMep_Qc-VY2~cTR78 87NO{v$$ zzOO<!!!!!!#5J|ibn`u!8LȘx'7!!!77!'75H8`::~8-yt#W{rX{sYYys7 (_t'6767632#"'&'327654'&#"67'6767632#"'&'&/#"'&5476323276767654&'&&#"32Nע%;7OKkJ?O+A03'&q++S38=D !?9DL_K>.136> QORJBJ(Q(30`DG4%63x>$ #7+Уc]97#9Xzav24?Le;&2ELyP)+'+>AHJB @@=kbq~Es/4 %UAB`_KBjoD7=AiK}f^[@ 0)5'32327&547632#527654'#"'&#"654'&#"ѦwJw,PYaTkzI5Et|S@,3Z8$)DlX``S㫣lm@.jVBthP#lH+990CF *1!3276%!64'5#53! 3#3#!#!#5%!&'&+g9mmN^qq^mo9g_B7P*PPgX~Ug(gT_g6f[$x$-#5!#5&'&76753&'&'67679}h{ei񘺼d^tgiVoo$*T?pcBuqDeTKF#eiϥ"7?& 6#PU" 5!!!#3#!!!#537!!/3'3 { 3R{{/{{R3[3K3_/UÕeeÕÊX60!!32$7# '&7#5367670!5!654&#"6$3 3#~| Ӓ)6^8 h{{ "LNTML56yx8)5'PL87<%% #L )%#&'$%6753&'&'6767_g9:Эݢ:7h_Q\DGHCZT%;0,R7r~or 7N'(OQ"z!x !!!!!!``~d+g-%7!!!!!.+32767!7!&'&#gXnV fV+HO???f7q^y5 (X} 5y8JM:_-@@XspR C!*%@ _'7!772$5!#!'75B8::Vfix8ytX{rY{sOߩeta!Yys@=3264&#! !#!!!5#535#3%pzzpZ1NSON,֎3!w=!5!'3:w=z!#'73!5Fww͌=z5!'3#7=ww͌;1 3#%3#%3#1>;1 3#%3#%3#%3#!_1=z #'73!'3#7wwww͌͌) %)A"326=%!5#"&546;54&#">32!!.#"3267#"$$32LD62?[A hScSciY']f6eppe:hWPDD..,-_K y EL61!657@!vv#B) *EI%!"'5 54&/.5!2'& "326=%!5#"&546;54&#">32!! c˫6)O/'I0ؕLD62?[A hScSciY'9 LD 3 G< }K..,-_K y EL61!65f\!.#"3267# !2\jႹsmj}Lu}@C?k??D78ef84կ -'&r#$/%/ܸܸ$ и /A&6FVfv ]A] и ии /+015!&'67!!&'&76TT.--.0+-.҃tXWe>W ! xw)'1.#"3267#"$$32!!"32654&'2#"$$A]f6eppe:hWPDD KSSKISSI@!vv#B5qtsrrstqT)15!3265!!5#"&.#"3267#"$$32!!p@ )FU?Y]f6eppe:hWPDD GhD"dUrmJI@!vv#B5Ry&r):In!7632#"'&'&'&#"32767#"'&'&'&!#"'&54763232767676"#"'&54767632D2ᐤL#.$3!.)%!'!!/&7/F+,WP"-tI1(5+,!,AD!#j[R.D)*6*!8U+De %%0!, !%LDt˃*>%+'&%G8@N/ϭ@)49$'H::9U*9<==#;#%3buL/, y^ &'&#"'6767632654'&5476767327#"'6%6"#"'?3276767654'&'&#"9<9%$,,=M,,HG,pc:@Bw9OIF5O9.Q%(HB'( Iq(9.w^$)*&0B%/^y5\Gnu85#.,M)(21tDOTʍ>ZZl5{D&%7{IF9Xau !X3!!5`_IH|je#O@FeM3!3%!!!!!!!p8\\]x}+ ?;!>54&#"!!>32)q GAol.hucm VH9O@Fa^ N63 !676#"!'7!%5Ze gkԯ%=f&P#p/V7D6K:h|JD7#"'&54763232765"#"'&54767632DH)EXّXF+I/4$%BH>>@e)&0B-%2Z>MYҞiOP>>9&+T2"86/Y&] /A"= + -]yM)(jF2632327#"&#"7632327654'&547%#"'&#"^v{x}}ȋo֏z,\l/v~jX>6FF PP5ʷ05^:11::b:~"FLxUBnb_Xċykb[OPLKJ'&7676%2#"'&'&'&#"23276767657#"'&'.#"'676767676 %QPN# 6F &8S$-+s2'nK"??|m-]+%!; X L)+oyV?=[4$ PA(Zkxv1/zgcD9;TXy$)D02.(^ B),\A6%273#"'#67&5477632654#732#"&'!#!#53276'&#"ff9ItυtI=<<=sq?>>rrra^^a+ETT@TTUTV 3%!3!#eWx 4x]xK+CE <%)"264!46!"!!5265  &!!5r>>r>I,W RW *֪~oqqȎ>;VȎ>;T^ '9!2+!3264&#"32>54&'&$  $&546Dz OUUOAЮWWWVy{ήWWWX 0llllBx@9WzyWVVUyzWXnnnn;C0<67632"'67327654'&#"#"'&57&547327654It2݂DIzdM&dmU>"9yEY:?.m((6UE?LPק=+<$~\oA7n=B Ũhb)<(,QB3%! !#!327&+67654'&41\=66=E1mm1]x~#g)ZZ)ff'%!# ! % 7& 676'&-fgk{@{{{}L%lkh4334a@<$ [27654'&'&'#"'&546323276765"#"'&5476!7232767#"'&̏hX&MM])zL5F,D! 3;1X00[Z.9'379GeϟHQrl}\IM=!&'E)TAhOM,2:pZϘM#B.97>#3*M*3D!!9!K.@_u20#"?Gc_3䂈/#>!8Z%,SlJY&54'&#"#"'&5327654'&#"3"'&547632763227767654'&#"HL^eZZfgr82ED2881VN2884@Bfggf\n/$~AB}:1$ $3CAA9Ya+.vuuvjVMMWWMMV[^SMpuvuuk# XW1W{|^1$h{r^Co(BP>;[Yj )Y%-13&'&7!.+!! !27&#676'&%3cT:[E5q>4>x\u1E:PO"m=s@1F~h|hb)tL  %    ji i ji91<<2<<9990KSXY"73#######5ww㪉LqKBM%7!! ' !E4₰|`E \ 3%!!!5!.d#=&]x'x5)R7# 7654&#!5!5!5!!2!#"/j VTjrkY^H-u00rpL7>7s]N'72767654'&#"'67632 !"'&'&'&#"'6763232767654'&'&'&'*#ZMG!MIQnR 'ynMy'ѰTX!<0K ra]?X3%;fX^@#!73*BZ@D^@ 7v_>ne} rwΪIF#2I'&*!DB>2Q5ecrRX.,*4&"5632!1q >CAh@[+Xq. 'mT.<N]232#!727676765#"'&5476%27654'&'&32767654'&'&KBha`pcy!))23I@F0$wtTS(0ch !#E2):|HBSfTi1'&05Q>M:nn.7#!B:yZX$ ^]yk!!25>PHIX1%.!(Ivy0@7H] MQ#;T99#%c% gTrh870@2!.IO!@#7>!7,2@FMVy32._T{w<Y}Y-)% 7673 $54$32!"53!25&'&#"C]JjMo_zggJF__DM3TT<`xGZAEIpP3RQ4OSD6'&"132673# !2Up3Fs*Nghz"?K9U n"Gzt#(DaXI7&'&5476!2#"'&547654'&#"3"32767267!"'&'&5476`Gej,sNV+E2//6' '\oSh]-liōFf|ekA)+>-!>Z`'9QT(+" #)"H[|T$?9]pX`88$6}yoK/S76?#"'$#!!#"'&547632327676=7!&#"#"'&5476!27Q73P1!L,#%(JpR02W^Z91"@1(#>mx6!!}H;m,Ud 0A7+6M?R  cBb8WkLSF?Q.J;$!!J?f/hi v&LWSH 3+"P H )!!!!g##yM ?m%&'&'#"'&5476363276765&'&#"'47632767632#"'&'&#"32767#"'&'&'+19012YqU4/ ,3. &6&< !!"bc:)J4wWgZUPP.\a0.)0>' 4?''Chyo=+uz.2L1ǂde6Pb.,:-$ .48ny"!V"FrjNpZۙ-(".*87`aA?06 "C?Y6%nn;}\ 4&#"322#"&54ID`IFa~ﳶr|tx g6 4'#!5654/&54?'&5477'&5474/c2-i>Bd=VE/b5c2Bc2c2Cc1NS2j?Bdjl,>8?]/c6gUc1NS2Bc1MS2c1MS2'(32#!"54?>3!4'&#!"&476323!2k+"E!$:@ϨD!*Y[A''# I q#= X?*#"/#!"54?>3!!"&54623!2 1= i$ c*tD!$ZkF,(Jib' 2!Q<_c'oA<#".5!"&54623!2< EVkF-)A *|2!Q'Ho{m<z\F 4632#"&3!53#5!pQOooOQpoTQooQOonuyy5yZu! !232$54$#"ehdol\Pfgk-¾ `  ! ! !!!#!#!!!!!! zVV  s?m.mt 372!#Ie%F` 53&5!#3#32767#"'&'&'&5#!#"#463!d.4U"_'165Ic@;6 ^7V)"xfQLW,3$p G x &#T+Ka~=2{ƜV}3>3 3!#"F{!nDFvFuV;c; 3!!4H\]x+3!3%!!!C\\]x+]w ! ! !!5 5-ExwcS46$3 !"$'3254#"3!46uD~y}|^#%,>f]&9UGs\T}&0 !67!>3 #"&'32654&>54&#"g57ocbiE*([k^PMU1ABwCt2FnkBmFDےj5j:0.;6"W-/wGs))p` !!5!!N`#{#d&{' ' Sdd' '&{ Udd ' '&{'{d NXdd' '&{udm'ud' 'td' '&{ Qdm' '&t QdZ' '' Qdu8' '' Qd Pd' '&{ Rda' '' Rd Qd' '&{ TdZ' '&u Tda' '& Q TdT' '& S Tdd' '{=,&,,K&,',K,&,9 '9 &9, Y&9',, &9',',',', g, g&,;';'9',;' &;',,G/f\&9'90L0'LLN&L'LL<&LYy`Y&YL $'L'LY B'L 0'L'LY'[L `['L[ 2'L'L [OX5{F\G{Pk !*3 ) '&'&'&54767676!32654&+#"3Txi3333ixUxi3333ixT10tfet1001teft01Nq9 / !+ +(+( A]A)9IYiy ]A&6FVfv ]A] и(1.+" +"0132654&+'67654'&'! )=l=R;4334;S>jc7>=7dTMwiffixjzWV:2ST2:4:on:3 ateetak  BZc32654&#67654'&! '&'&'&54767676) 5&'&'.546767675#"3l=R;4334;S>jc7>=7OUxi3333ixTTxi3333ixj>S;4334;R=ld7=>7cV:2ST2:W>4:on:3901teft0110tfet10#W:2TS2:V3:no:4f\HX5{fV\# !2.#"3267!&'Lu}jksskef87IDDI<' ''ud Nd?Q   2@ @@ 00 ]1@   990@   <<@ <<KSX << Y5!!dyƑ<Ƒ* @   991  2@ OO ?? ]0@   <<@ <<KSX << Y3'#'ƑwxƑuPQ   2@ OO __ ]1@  990@   <<@ <<KSX << Y'7!5!'7PwyƑȌwƑ* @  991  2@ @@ PP ]0@   <<@ <<KSX << Y#737wƑxƑdPQڶ 22@ PP_ _O O]1@    9220@   <<@ <<@ <<@ <<KSX <<<< Y5!'7'7!dDƑwƑ<ƑwwƑ*@    9221 22@__P POO@ @]0@   <<@ <<@ <<@ <<KSX <<<< Y3'7#7'ƑwwƒvƑw;Ɛ3 7!!#c,4c̪43 #'!5_c̪43c̪43 %!5!73c̪4c43 %'3!zc4c,4d?Q5!!!'7!dyYyrƑ<JxxƑuPQ'7!'7!5!!'7PwyyƑȌwxJxƑs/&'."#"'&/#7!!267676767632 NZN !D:[P_cLW>bc,a NZN $A?VMbdKX=AW\)""!&OG='""'=`,c_""!&V@>&""(WLc_P[:D! NZN WUA<(""&>@V&!""_c`='""'=GO&!"")d?Q53!!#dƾWYƑƑ<WƑWƑ!3''#'5' WƑWƑwƾXƑWƑuPQ'7#'7!5!'73'7PwƾYƑWƑȌwƑƑ+#757377wƑƑƾWXƑƑdXQ5! !dW>HƑ<W‘WƑ\PQ'7!' 7!'7PwH>‘WƑȌw>>Ƒd?Q !5!3#OiƑw Ƒ6* %'3'!!5Ƒ6ƑwhuPQ !'7'7!#3eƑwiƑww\* 7#7!5!Ƒww\hƑw*%7'3'7!!5wƑƑwhDƑwƑwd?(5!276767654'&'&'4#ƑwJ    E4;,-0+,;5D Ƒ  +,x>@9>*+uP(!"'&'&'&54676763"3!'7'D5;,+0-,;4E    JƑw +*>9@>x,+  Ƒwwd?;3276767654'&'&'&"#5!5!54676762#M     Ƒw 0-,;45;,+0-,;4E   ƑM>x,++*>9A=x,+uP;54'&'&'&"3#"'&'.547676762!'7'7!#     MME4;,-0+,;54;,-0 ƑwM   +,x=A9>*++,x>MƑwwdPQM2676767676322676767'7'7"'&'&'&'&'&"#"'&'5#$   "%'-0$+  ' בw 'Z&(%   "(&-0$ w $ -#% $, ' בww"*&  *&"dPS%'!5!!'7'7!r?ƑwAI?Ƒw2'ƑY2Ƒww 7'7v9j#Pu]W)9Z, !#!5!,rƑw~Ƒ[ !!'7'7!~ƑwrƑww<Z, !5!,ƑwLƑ[ 3!'7'7!Ƒw<Ƒww- !7#7!ƑwwVƑwdb 5!3Ƒw Ƒ z%#4'&'&'&"7#74767676 >Ƒww12^YzoozY^21VJG@9!!9@GJVƑwƆvx]Y6006Y]xv.z%4767676 7#74'&'&'&".12^YzoozY^21Ƒww>vx]Y6006Y]xvƑwVJG@9!!9@GJVM 7!!#7!3c,4B[cc̪4'wwd#P '73#'7!5#3! Ƒwi3ƑwjƑwhhw0Ƒ\]"4276767654'&'#7!! '&'&'&54767< <>7ODHL:< >c,a/11/a_trrt_a/11/a;LJVS=7# :;LJSVJL;,cepvvpeZ5005Zepvvpe]47 '&'&'&54767!5!#2767>54'&a/11/a_trrt_a/11/a,c> <:LHDO7>< epvvpeZ5005Zepvvpec;LJVSJL;: #7=SVJLd ?Q5!d d?!!dyƑwƑ*3'#wx#'Ƒ$Ƒu PQ!5!'7P%Ƒ ƑwuP'7!5Pwyw*!37ƑwxƑw!#73ӾwdP}' , `V'  ,dP}' , d?}'5!!!!5JyyƑwƑ_U73'#'#'3ZƑwxxƑuP}'7!5!'7!5!'7jwyyƑwƑw_U%#73737#ZwƑwxxƑwdP' G LBdP' K HBd?Q%'7#5!7!!!!!!~@SwS r@?dVKKWoSSWo6KKdPQ!7'!#5#53533'7'7#'5!)KKSwSخSwSخKK7KKSSSwwSKKuPQ3'7'7!'7!5!7!5!!7'!6@SwSr@VOOKK3WoSwwSWoKKd?Q!!5!!SwSLK7SSK)#'3'#'RTKLRvRKuPQ7'!5!'7'7!5)KKLSwS7KKSwwS)737#73KKTxvR!KKRvRdPQ7'!!5!'7')KKbKKSwS^Sw7KKKKSSSww)7''3'7#7KKKKSSSwwKKKK^SwSSw  #7!##Sqc,vqjqu+cqS '#5!#5'5yrt*dpRpdvpTj! 753!5373pdvpTjYRrtdp! %3!'3FRrtdpRpd,vpjd?Q!!!5!!!?Qv9iwiv2viivuPQ!'!5!7'!5!7!uviwi9vQviwwivZ5Q''#5!773›Ƒwcc ƑccuPQ#5377!'7'7#'sccƑw ccƑwwƛ*!#!5!5!5!'3'!!!!Ƒ,҂6Ƒw҂*3!!!!7#7!5!5!5!Ƒww҂Ƒw6҂d?Q5!35!%5!!%5Ƒ 2Ƒ*3#3#3'#'2Ƒw6ƑuPQ#5##5'7!5!'7w5Ƒ2wƑ*#535#3#7372wƑ-$6Ƒd?Q #3!Ƒw Ƒ\uPQ '73#'7!5 ƑwiƑwhhw7^? 5!5! !!$T_i$$6~ '33 !!,_i$$p$H^P 7'!! !!$_%6~ 7##% !!_%e$6~!!!'33 !!YK_i$$zzbJ$J6~ #!5#3'3!3! !v_r$$pllx|`$6~ #!5#7'3!3! !v_r$$ll|`$6~ 3!3! !%#!%!5#3mr$$M2|`$܌lzlx6~ ! !!!!%'33'37Z$$$__^tt$@@$tt6~ %3'3#!5'3!3!! !!'37__vc̪4<\wrc4bw^+6~ 3'3#?! !! !___-%%$$e Ҍ$$uPQ)5A '7#"'&'&'&'#53676767623'7$"!&'&'!27676Pw?>KJJK>?|{ ?>KJJK>? Ƒf\(( ~ (g  ((\(( @?=wBC3"*c/+ + +ܸ иии!и#и*и*/01%&'&54$3!73!!!!!!##!!a[g"uu C"5N"BwCH3cdh[[[>x>@?=wB%v'% '&76)! !!)P])7KyK1&vo{ o%2lc<'%#!5!276767!5!&'&'&#!5!2}wB""Cw{Ųfe_cCBw=?@>xAAdZx3"*k/ + +++  иии!и#и*и*/01#!#7!5!!5!!5!733>767!7!&'&'&'ba\pu4uW\C"N"BwCH3c[[xx[x>@?=wB%v' )5! 765!5!4'&)5P) 7KyK1)o{o%2ld<'Ol //013!lw@pp120!!!!)u@pp1<0!!!XlXuJ))w O@    91990@ &#)  ) ( ) 8 ]]!! !!5 Bl_{N 10!! !#!5!3!!5!  bbd-W+ии и /++ и 013#!!#!5!QABR>. //013`em%73% %#'mvzzvzvvKJ36r910!!h}LZ n@*      %  @  9190KSXY"3##'%`w͑%hN7LZv& uDIZe&  P #.%"&'&'#"'&547632676;#";%27&#"Mq7;J;Nw^ccWMq7<K:NwQJmnJkmZ-1c@DU36IqtĻo@DU36I?FZb| !,767632#"&'&'#"'&54763227&#""327654&TJ;Nw]ccXMq7;J;Nw]ccXMq7;ʊkmZ-1bkmZ-1b6Iqwo@DU36Iqwo@DUR?FZb|?FZb|%!3!%!!!3&5/ + ܸк 9и01 !!!#4'!&'7!&'&fX32jO\-*u N#Q(H?vq-..-xy)q//901 5'7%%' 6^w=<P Fp37; B<>b_kyPRPX/3#/)bX/ ;+и//9 901#'%3%:F ;EdeeXW/3#3#/))bX/{//и/ܸи ܸܸ и и// // 9 9 9 9013737##'I;J:\,Y{ *eLX+e5J!!! 5EG^5J!!!5fgw^5J76! !4'&#"!5o{ o.8& '  /c9EP'&'7767'&'&'&54767676767676&67>54'&'&'m; }J " mDK6>>?J " mDK6?JKVXKK>? 'U5O9:["$S13(*# b11S$ N/Yeit%'&'776?!'&'7767'&'&'&54767676767676&!67676&67>54'&'&!' mDK6>>?J " mDK6?JKVXKK>? 'U5O9:[U5O9:[":;PLKJ} Tn$S13(*# `%/b11S$ // Qy}%'&'7767'&'&'&54767676767676&!67676&!67676&'&'776?!'&'776?%!)!67>54'&'& mDK6>>?J " mDK6?JKVXKK>? 'U5O9:[U5O9:[U5O9:[":;PLKJ} ՜U5O9:[U5O9:[%Tb11S$ rn$S13(*# /?#4767676767676&7%7&'&'&''&'7767U%#B<\  mDK6&U5O9:[ %AAYw8'~2:)+U5O9:[01</;CPY676?67676&7'&'7767&'.'&4767676776'&'&X', mDK6FT<;Om3F  U5O9:[ &?ǐ,@FF-'q9:80/n2/z-' C'  z-' '  Cy-'  z-' ' '    &  ]g !!!!!!hhQ}} ' ' ' '  H& '  R#"'&'&'&#"5>32326j`k^Xbian ^VRPE:=MSNE;=KR3276767632.#"#"&'gV^ naibX^k`jRUK=;ENSM=:EP .).#"3".54>3232654H#"&&YH32T;Vgj`VnsuU32326!!j`k^Xbk`k^VePE: =LTPE: >K'##"'&/&#"5>32326!!j`k^Xbian^Ve#PE: =MSNE;=KF%6767#"'!!'7!5!7&'&5>32-]q{@iaBLjuƩZvQ]Seian-9@;OEi0(#VNE;gK##"'&/&#"5>32326!!!!j`k^Xbian^VePE: =MSNE;=KF/#"'&/&#"5>32326!5!7!5!7!!!!'j`k^Xbian^Vj`U>aPE: =MSNE;=K튄튄P3%#5!7!5!7/&#"5676326767!!!!'HrF9edXVVbiZYan)@Ă$TgjYVeHrʉK ='&SN#";Qk&UP#!l#;C@!.9* 1 "9*1<-<<219999990#"'&'&'&#"5>32326#"'&'&'&#"5>32326j`k^Xbian ^Vgj`k ^Xbk`k^V#PE:=MSNE;=KPE:=LTPE:>K3&#"5>323267#"'3267#"''&#"5>32RXbian^[,#Vgj`;L3RVgj`m^^,$Xbk`;L.MSNE;E KUPE/KUPE=E# LTPEK7;#"'&/&#"5>32326#"'&/&#"5>32326!!j`k^Xbian^Vgj`k^Xbian^VeFPE: =MSNE;=KPE: =MSNE;=K7S#"'&/&#"5>32326#"'&/&#"5>32326#"'&/&#"5>32326j`k^Xbian^Vgj`k^Xbian^Vgj`k^Xbian^VPE: =MSNE;=KPE: =MSNE;=KPE: =MSNE;=KK#3276?632.#"#"&'!5!5gV^naibX^k`jUK=;ENSM= :EP@  %5 % $%5$[g&Y%Zh6@976767!!"'&'&'!5!!5!676762!!&'&'&[6/07VYYW6 0%AA%0M 6WYYV7 N0/%'H:f<0[2332[39a?H'N'H?a93[2332[00773;0>>0'#!!!!"32654&'2#"&6HdcIHdeGBz0/11-0|DdbcGHd3/0xDCy-03'!!!! &!56z'!!!! 3# $ׅcK'!!!!33#$ށKc'!!!!!!%fpqeqp2TT' !!!!!3!,րMYz'!6=Q!!!!53#5#"&4632264&#"%!3267#"&546324&#"#"3###535463fuu9&CWWC%:4%''%%''2.$M()R)cmk^Vgx&"*DAcct99BF/4 kj6h66h6k!))Yd[Yeg/!(&#LSS;9'J-!!!!>32#4654&#"#4&#"#3>32![6]b"&16(26 S28V35uo :5SN[5SM%Q//7':%)!!!!#546?>54&#"5>323#!5 0+)^2orv8Or?Aftgsi !!!!!!!! '@    <2291/90%!5 5PN '@   <<291/907!!55%&!!5!5 56PN&3!!!!55%!!!!'7!5!7!5!7 5"3I>~H~6\ڠ\ڟPN!!!!'7!5!7!5!755%"3I>~H~6\ڠ\ڟH 5 59696N33QQ33QQH 555569869NP#+#&'#67&'&'&767&'36736'&DD59gi;5FDDD59gi;5FGAGWedYVedۘۘ&%5%67$%'5$7d0wL,ƦvS)^o'oS*[n&%57%'\Z-VpR̩wSXT~ %'7'75%%5XEZVwopR̩SX_'T(%%!!'7!5!7%5%<lSUCBu;L6S]5-XdsEE(7'7!!'7#5!75%7%5ֶDXFL62.B =^2*ςE\fuES$%#"'&'&'&#"5>32326 5j`k^Xbian ^VfPE:=MSNE;=KPNS$%#"'&'&'&#"5>3232655%j`k^Xbian ^VdPE:=MSNE;=K(14%3267#"'&'&'&''75>32%5%%%P ^Vgj`s;3QOVbia Z^0Q[Fl¢=KUPE: E$&SNEEXbrf5-(143267#"'&'&'&''75676?5%7%57'WR9? ^Vgj`s\GE)VbiY13:D ?\ָ̼܂=KUPE:$Ex&SN# ]euE2, l 55% 5wPN l  5 55%PN<<!%7'%%'75%7%57%5%e\i4"*PW<2."W94 Z_k󆑐3^am􇑓g3;5<<!%7/%5%%'%5%75%F??8]] ' o_\\q'V 13{f네􊇑3i놣s %5$dos===||s %$sod=6||6==y%5%5$>V|}0USx|y%%$V>}|0B|SUy(%#"'&'&'&#"5>32326%5$j`k^Xbian ^Vg|}PE:=MSNE;=K USx|y(%#"'&'&'&#"5>32326%$j`k^Xbian ^Ve}|PE:=MSNE;=K |SUJ?67%'&%5$%ސmUΠ< STIGynʳlqB[,=qB J?67&''67&'֐mUBΠ4PSTIGn6m r6B \,|mݴnLNl e>moKM3#!#!5!!5!3 32654'&#,|ppmݴnLNlg le]moKM%!!!!"3!!"'&766nLNl6ΌmoKM᎐%!52#!5!27654&#!56̌6lNLnClMKom&%!!'7!5!7&'&763!7!!!!#";>Q=Z&zQ<Kl<{nLNlBw|BmoKM &327654'&/!5!7+!!'7!5!7!5!XlNLL0<[RCnVΝ%vFQ<&L&MKomM0 B"WlsBs9 %!!'7!5!7!"'&763!!"3!!P@jPhΌ6nLNl6v2HumoKM-9!!'7!5!7!5!27654&#!5!2)3@@jPhH6lNLn6̌}G.HHtMKom᎐l5J!32765!! '&57!!5/<8.o{o%Hb"bHw+=OOC+8FIcxcI5J&  5J!!32765!! '&3##5#5355/<8.o{oMw+=OOC+)!!!!*!5!!5TU !!!!5!U*lU !5!!5!5!UT#!#*33!3$3?"2767>54&'&'$  &'&'&547676!!#!5!TSEFDDFESTTSEFDDFESbc1111cbbc1111cb88\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb88$37"2767>54&'&'$  &'&'&5476765!TSEFDDFESTTSEFDDFESbc1111cbbc1111cb$8\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb^$3?"2767>54&'&'$  &'&'&547676''7'77TSEFDDFESTTSEFDDFESbc1111cbbc1111cbݍݍݍ\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcbݍݍݍ"=A32767>54'&'&'&#"'67632#"'&'&'&5476' ED"#FDSRcbSUDED"#DFSRcbSUbxwvwc`2111abxwvw`c1211aGEacSSFC##"#DEacSSCF##"#Ib0111cawvxwbb0111acvwxwF$7!!"2767>54&'&'$  &'&'&547676hTSEFDDFESTTSEFDDFESbc1111cbbc1111cbE}##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb$ 5O"32654&'2#"&>"2767>54&'&'$  &'&'&547676[HdcIHdeGBz0/11-0|DTSEFDDFESTTSEFDDFESbc1111cbbc1111cb.dbcGHd3/0xDCy-03##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb$+E %#'-73%&"2767>54&'&'$  &'&'&547676== =  TSEFDDFESTTSEFDDFESbc1111cbbc1111cbqqp##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb$!;//3ް2"/#///0/01!!!!"2767>54&'&'$  &'&'&547676TSEFDDFESTTSEFDDFESbc1111cbbc1111cbfp##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb$37"2767>54&'&'$  &'&'&5476765!TSEFDDFESTTSEFDDFESbc1111cbbc1111cbCj\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb^B /3  ް222   ް2/3   ް2 2 2ް201!!#!5!%!%!!88oNz88WB c / 3ް2ް2 / 3ް2  015!!%!!8oNzWB N/3  ް2/3   ް201   ' '!%!! NNNNNz]NNNNB !!!%!!hNzE}3!!#3?3/3///33301#!5!\ff!5!!#rr N?3/3ް2 / //3 01!!!#3!>rr #!3!!#j\#!#!3!!#F\\#!!!#3!jj\rr3q!!'!#3!RNEqY&Y3q!!!!'!#3!7!`:`&qYYrrP3q !!'7#3!##g94|;qY&Ytf\+3q3!!!'7#3!##?!`4ww`qYYtr\ r,#"'732654'&'$%5$%67654&#"'632aVn,@1>1Je@J1>1@,nVa;lhXNm1.'0&:6Y((Y6:&0'.1mNXhlr,$'&547632&#"327#"'&5476.aVn,@1>1J@eJ1>1@,nVa;lhXNm1.'0&:6Y((Y6:&0'.1mNXhl 5' <{ ] 7!! 5'G] %!5 <G{ z6'22#"'&'!#"&632!676"32654&:Bz0.22,0|D_4.0|DŒBz005`9PO::PQ3/0xDCy-03`4B <-033/0<B6`PsOO9:Pz6 2"32654&'2#"'&'!#"&632!676::PO;9PQ8Bz0.22,0|D_4.0|DŒBz005` PsOO9:P3/0xDCy-03`4B <-033/0<B6`z6:5!6767>32#"&'&/"3264&z:/0zBD|0/79QP::OP <0/330/: P:9OOsPY[ 3!5#%5!v x  !5!!#W4 !!!!!5fgwX&^ !!! !!5EG7&^ !!!!!5fgwX&^ )3!!&'.'&MI P5 ?֔$OJL $#? !53"w ! !!Jw ! !8!>>!7wJ!cw[@ 1@ <0"!! !4$_lgiHRPcw[@ 1@ <02$5!! !_4pk/PRHi7' δ9 Xd !!%fpqeqpTTv!!!!!5!7 !! '33ͅbŨb763!!"3!"'.'&7>763!!"3!nA;9XX9;Amm{4664{m_XS#%%#SX_mDX9;;9X(64{{46%#SXXS#%2?!5!27>764'.'&#!5!2!5!27>764'.'&#!5!2FmmA;9XX9;Am_XS#%%#SX_m{4664{D(X9;;9X%#SXXS#%64{{46 <47>762#4'.'&"#47>76 #4'.'&"#X853 '.'&5327>7653X8-*HM.DX!6%'6%7$%7$%ሗX,tLjrfOM Y%7R/VY(`q:}݂\*[x3!!!!!'#5!7!!! MЫ=Mv0'`@`U@x3!!!'#5!7!5!!5!!MЫ=Mv<0 `j`@!!!!!!'7!5!7!)iԻikG9@莊!!!'7!5!7!5!!5)iԻikG9j莊"%3267#"''7&#"5>327 5T;Vgj`VnNPU32755%T;Vgj`VnNPU327%5$T;Vgj`VnNPU327%$T;Vgj`VnNPU@?=wBC3#5!3!!"$$3!!"!5}wy9geCclAbv'% $76)! !53#5!)Pٛ])7KWK1&v5o%2lc<'&  VZ"%&76763!!"!!3!!"!5efſ{wC""Bw}B_cdZdAAx>@?=wBC^v'% '&76)! !!)!5P])7KyK1&vo{ o%2lc<'xX"%&76763!!"!!3!!"!5efſ{wC""Bw}B_cdZdAAx>@?=wBC!!!!3!!"'&'&76763!!"L@g}ֲbcefſ{izb9CcdZdA9#!!#!5!276767!5!&'&'&#!5!2bC#DgſzxC""Bw}udxzZdAAx>@?=wBC#3!&'&#!5!2#!5!2767!5}fy9meCxAbv' )5! 765!#3!4'&)5P') 7KWK1)ˇo%2ld<'Z"%#!5!276767!5!&'&'&#!5!2!5}wB""Cw{ŲfeƁB_cCBw=?@>xAAdZxv' )5! 765!5!4'&)5!5P) 7KyK1)No{o%2ld<'cS !!!!!!Sz@&'27#"''7&5476&#"327654'hwwweݰwwwgV[lk7wUZlk5hwwxݞfwwwߞ7kkkUw5kkkTr8R5:zJB6 3 %! XZ9(dT*'3'w*37#7ww"w*b' &lr*k' &'lAl{c%64'&764'&?DDDDQ33HDHP@\I HUI^;9ONISN!!!m!!5A!!T"!5!!TAb3#5!Wldb!53#l5!%#3WXd!5%#3DX!#nI,$%%$nn!"nn 8ʸ'+6@KV#"&6 3546 +32 &=# &6;5#'54&#"3!3264&#"32654&#!#"3265˭ʏʭʏeHGeeGHefGHefGHefGMGeeGHe`ʏʭʏ˭GffGHefffGMGeeHGeeHGeeG!3!ng:!!!:xUg!!S:!!!:vU3!!!vSh06732#"&54&#"iRA@Aee5 jT@OMJ&e<-0 #"&5463232670iRA@Aee54jT@OMJ&<  '3%!5)!V@QQ@tFDx@Q2 !!!!%!!CFDDV O 3! 3 ) ! 3  xXL&&XXbPXX&*VZ )!3 ) ! # xXL&&MyXPXX&*&+x  #/;GS_kw+7CO[gs!2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%  ) !# 3  # 3 W xXx&&XX  &P&XFf    7'3#vvr&999"9"rr5kk\SSAcc\cc`NV^~VX`^c)yF. !!!!!5!NQ !!5!!'7'5!yFCƑwVƑwo# ! ! ! !ll([Rvvm !5!ݠr0p!!#v !&5ƠT_Cm 5!]p g]!0v  !!]#ƚΐ,Um!!!# q!!#v!! rm!!]#N#]!0v !!!]##sXm !4763!!"{zf+!u0%y!4'&/32765!9+en:==@ne( =F|AEuH<sXy 3!!"'&5!+f}{y%0Wsy!! m 4'&#!!2s!+fz{}%0sXy&'&!;!76<<(en@==:ne+!< TuEA|R=y !#!!2765s{}f+!y0%! z7^?% !!!%#!55[$X^$$T:__! !! $<Ff +   276764'&'&">  &vvrn66\]]\6666\]]\65kk\SS]\6666\]]\6666\!PRZ $%4&"32767#"'&547632573e@! !LK! bcabbccb⪝@@AAAAoppqpqqp41[^>32#"&'!'%5!%26&"Ju uJ%Qf#{yy{b]]b`jRP[@.6!3!3oNdxN &ۺ+#+#+A&6FVfv ]A]A]A)9IYiy ]+ + $%+$01! 4$32"! 4$357!3!NKKgg L7h׬z@+/ xN 4+$++A&6FVfv ]A]A]A)9IYiy ]*91и1/+ + +.'+.01! 4$32"! 4$!!5>54&#"5>32NKKggo.*OC6uhSXL7h׬z@'%D%7A,C NlxN D+B5+B+A&6FVfv ]A]A]A)9IYiy ]A55]A5)595I5Y5i5y5555555 ]5B9,5B9,/A,,]A,),9,I,Y,i,y,,,,,,, ]ܺ&9;9+ + )"+)?8+?2/+2/2901! 4$32"! 4$#"&'532654&+532654&#"5>32NKKgg|rN^j@][]dXMKJ;x_^IeL7h׬z@_0 6135-.)/%|}UpxN )+!+!+A&6FVfv ]A]A]A)9IYiy ]!$и&+ + "#+"и#'01! 4$32"! 4$ 3!3#!5!5NKKgg BKL7h׬z@Y5УxN 9I+&3+&+A&6FVfv ]A]A]A)9IYiy ]-9A33]A3)393I3Y3i3y3333333 ]99+ + 0)+0+#6+#01! 4$32"! 4$!!"632#"&'532654&#"NKKggS?!Wcu;S[[S3wiL7h׬z@\$=(F>?F(xN '@+;+5%+5+A&6FVfv ]A]A]A)9IYiy ]A&6FVfv ]A]A%%]A%)%9%I%Y%i%y%%%%%%% ])%59+ + "8+"2+201! 4$32"! 4$"32654&.#">32#"&5432NKKgg6666677ai1gqn@޹GL7h׬z@u@II@@II@*g;  xN "#/$/ܸ#и/A&6FVfv ]A]A]A)9IYiy ] 9!9+ + !+01! 4$32"! 4$!!!NKKggxl1L7h׬z@xN '?K!+=+1F+1+A&6FVfv ]A]A]A)9IYiy ]A&6FVfv ]A]AFF]AF)F9FIFYFiFyFFFFFFF ]%F19%/A%%]A%)%9%I%Y%i%y%%%%%%% ](=9+=9+/4F19%7ܸ+@+ + ":+".I+.C+C(C94C901! 4$32"! 4$"32654&%.54632#"&546732654&#"NKKgg=;==e˽f$pq32033023L7h׬z@L:;;99;;:apS{{Sp |]]|-.-..--xN 4@+>)+>/8+/+A&6FVfv ]A]A]A)9IYiy ]A>&>6>F>V>f>v>>>>>>> ]A>>])>9A88]A8)898I8Y8i8y8888888 ]+ + ,;+,5&+501! 4$32"! 4$53267#"&54632#"&2654&#"NKKgg_i3frn?ݸG5885677L7h׬z@)f;!AHHBBHHAxN &2>+#+#-9+-3'+3+A&6FVfv ]A]A]A)9IYiy ]#ܸи/A99]A9)999I9Y9i9y9999999 ]9$и$/A'']A')'9'I'Y'i'y''''''' ]+ + $%+$01! 4$32"! 4$35733!4&#"3267#"&54632NKKgg|'D')*''*)'ÏL7h׬z@&*jmmnnj5!jl!X3 !@ <j 5!!5!!5!r#B#B#j<l !!!!!r#B#B#XXXm 333mjjjm !!!@@@mjjj<j 53353353353X 5!###ljjjX !5!!!5!4l t,> 3!!!--Axj 333!xjkx 3!3!kA 5!5!5!3,,=jX 5!333jkkX 5!35!3̠= 3!!!!-- ABx 333!!xs  x 3!33!!-skA jB !5!5!5!3,,X !5!333xtjk X 5!3!5!33t,  !5!!5!4B 5!!###sjjj 5!!5!3!!t,-sjB 5!5!3!,-XAj 5!333!jkk 5!5!333!XkA!5!5!5!3!!!!,,--AB5!333!!###sjkkjj !!!!5!5!333!-s t,jBkA 43!!"yY[p~| 4&#!5!2[Yxp~|j 5!2653#xY[j~|qj !"&533![Yyjq|~*m3YѲ/ Y*m#3*/ Y*m # # 3 3*iSjh5!|j3?hj5!h}j3@hl|X!@?hl!h}X!@@l5!5!!5ijVV333PP?@l!!!iXVV#!#P@P?@;\;?!O?;j!Oj;!Ok;!O@;!O;!O;B!OB;!O q! ! ! !' I!] ! 3 :d'bm #'+/37;?53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576('l #'+/37;?CGKOSW[_cgkosw{#5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 'm 59=A35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6ZB;YBq:g!(@;n'n;!!!;(' @;'n'n;!!;@@ ;!!!O;n';'n'n;!!'(%! %!!!,7r+uv ))xxp) )$7632#"'327$%&#"%632#"'~~~~eMM>yJJJJJ6````qq|qq#uv@A%91990KSXY"  9%-p) 327$%&#"%632#"'MM>y````qq|qqr' '/7?G%&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[p) %/36%632#"'327&#"6767&'&6py AAAA,+-,,-+A@@Rqq|qq%%mܱ[0$ %@%|"p) )73276'&#"7632#"'327$%&#"%632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qqp $  $pkk]Ak^p $  $27$%&#pkk]<MAk^a``p $  $"3pkk]<MAk^``p $  $%&#"pkk]Ak^>``p $  $327$pkk]\LLAk^>``p $  $"327$!pkk]<MMgAk^```p $  $"!pkk]<Ak^`p})6%63"'pRqq)#2y|q*q(32>54&'."!623IJf654253ED3366fJI426532&< ( $%632#"'327$%&#"!IMM>y_O````|qqqqH( ( !#%&#")%632OyyMMqq>~``  3327$3!#"'$@1>qq``) %63"æqv`) 2#%&#u)q>` 527$3Muyv`>q "'$33yuMq`!)%632#%&#"uqq>``!03327$3#"'$uMMuyy``>qq!% !% !%! !%!$'`)32>54&'."467>2#"&'&o+()h:;iR+**(iuh*)r5352456fJI325wh))++Rh<:g*(+*)(픂235624IJf6633%!%!!d r<%!%!!We r<%!%!W7 r<%!%!W7 r<% !%!!!!+c,b r<<!% 4632"&! W>>VV}V2 j>VV>>VVJ !%! c  !%! b  p(  7& $  %;<*X֖% !!!!!!,7,rWb<)) Ie% !!!!%!!,crWbM)MM^??@7`d?\gOOOOy>*<?v^h"3263#!5276;'4?'4?26u'6"gP39.4! '*C0.xV#m14He '1l1 Z+dd?33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5:+#9,p!j[%+ > 7VCCc":8}V .e3B=Se` e9*=9 3@=}k !=Z4^ 5_gow!M73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'4327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"4?'&54327'4327632#"/#"57#"54?'&54327'&27632#"/"57#"54?'&5432&'67&'67&'67'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&327632#"/#"57#"54?'&5432O~ )*+')+(@&'$||e?/A}]\B-71SLoWj\vLL)(0/ (( .1(%%,* # $ )*f$% +) $ #*+f%%,* $ $ )*  \o  [ %)#&'%&)#`#$ *) $ #+,U  Q  0 E%% +) $ $*+*EC*Z*,)-)-*,%&%&fБfU 5HhfeefhH2pu^QFs棥sKQGh!99!  !77!  4 4 22 K44 22 22  11                   7        %&%&%'%&%'%&22  //  g               44 22  !2CTev+&'&54?6?6/&2#"/54762#"/54762#"/54762#"/54762#"/54762#"/54762#"/547672#"/54762#"/54762#"/5476%2#"/5476%2#"/5476%2#"/5476DQ=2`{4&/<) g>i#@3e E $   $   #  #  #  $   #  $   $  U $   # " $   #  aG<s-8PZy9} KW2{0R^j ,: . 4 . = ,  ,   -  -  -  -   .  .   ,   -   !! WV9`8 !! 7 ! !WVDu9`8N I 7%7&54769 }V&7A 6$ 8'^4? !2 7%7&547!&'6I@Y%14HFS"="l-2DC[9 &! 4$32 4$ #"&54>2JJhhq0^mNMn2Z^Z2K7iwBNmmN1Z00Z} C"32654%"32654&%#"&54767654$ #"&767&54! ggJIhIhhIJgg[ZQoy y}WZ[zADgJIggIJggJIhhIJgU\\Q srW\\^} A4&#"26%4&#"326! 547&'&632 $54'&'&632hIJgggMgJIhhIJg#@@z[ZW}yOOyoQZ[sIhhIJggJJggJIgg ][[Xrq Q\\} "32654&7#"32ɏǾ/`T_ȐɎ;P12Y}1"264&"3264#"54327&5432#"'&'3xyx& کZTdIU  k)5AMYdp{3'%&76'!'4%$53!76=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'. [&riX(tRSu(Yiq'LW쥨驧r^]]^ !! !! .- . *)X,),*))+. .- . OyyO vKK9__9KKݧꧦ]]_""""s!!""W&. - . - a),**)))) / . - . p%-5AMYdp|5#!4'&'5#2#"&546"264"264"2647>'.7>'.676&'&>&'&7>'.%7>'.676&'&676&'&53!76=3%'676%27'%&76'77&'$%'#7%6'&718楣. . . .  - -Y - -))G))))U*)>- - ~- - VFwDcD C0B DcDwETc==F\J $06# J\F==cS@@1AeA1@@H磤椣筁 . . . .E - -- ,1))),(9)())u- , - - G77W6 W77Gl^ ee ^l(q,&$pp$&,q(u !!'!Pn8hv "!!'!##+572367676MoL)>u eI3?ba8hA:F;/Itxv !!'!  ##' Mo_h[ei[i8hi[ef[l[@36273 ##'5) U.WW1@ US Vdv#,5>~3+&=43+&=4%3+&=43+&=43+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5\:V\9\:\:]:&]9[\::+#9,p!j[%+ > 7VCCc":8 #8d#7$6$8;$7i$7 #9pPL  )Z. ;6ZV Z3%Y63 .87p  />Eqw!674#!!6?676'&#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53# ? I :W0 96;E,Q 2:&l6x0 bm! ras"\>%Ef~e2U6g!6V#p5C+ C ? P9 B;Q4XmM;YV /M(=H: ,qLUD)8Wqke-Pm{NW =$ U  /0c)H?2@[nDF8T$.L !' !T4XKGwL5_K !'7W4Z~wDB&547632632%6#"'&'# #"'&'&6&'&547676xJX%&XWX:\8 [Ez##FM !9@!#jL)_(Mi#"?8" MF##y4hok@mmr*%te2' BB90tU%) "ft(f" )%Ut09CB '29>3#"'43727$'#"$4727%6725676&5&oJ7.b;7!"&546767!7!"&54>3!6763!26P+=6/2D>R+>2,+v*>>+2  ,2 =,2  =,3>,2463!2!2#!!#!32#3#!>*v+,1>+R=D206=+P#,>3,=  2,= 2,  2+>{!C%4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!&'63!67!2I0!6SS SS: SS>SS]]J]]]]h\\, Bv*>K%39KILKIOKHLKIhghghghgE?-L!D72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SS cRR SS?SS\\K\\;\\]]!A*>K{!C%254+'3254+'!254#!'!254!&#!"463!!2!!#!3#3SS?SS *vA!,]]j\\\\K\\IKLHKOIKLIK93%N-?EghghghgiL!C32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS SSb SS'6a!0J)K>*B \\]]:]]J]]}O!%)-15 3656;2#'7+"/#"'+"5&54775%"'5476;25'7&56%635&56;374765'75'76=4'&+ '"'4!#"'&3$365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5%75537'7'3533553535'32767&5%2?&#%55'5757757751:e,$?F?Y>F_LA3ELH3,8LYLlEF'!0< k#gF  EeY!! Gp&iq9 :^N$%`BCf F4"4._?ee3&{E(1-+!$Kt8 -   $Gs sM rEF"2 >_plTErf^5.>=9|5"-l)d ,&>vv]cccWpC-+ d8 Bpp>W]oaxvuPp82,D ^8, ^B$K+ "1R[+e*;GW QU I&? gpo% w ^SA$ 2 9i-5n02D|&IY^Pw^%\??\OWC ,,1 /211/=;7777=321811{908hN%b\Dh,)h?17I21!122223 21&2%2#"'&=477654'#"'5473Bq4|l anN ilm b 9 b؍MOb>YaYƮ58l7P P@ $0<FX + &=6&# 3 6=%&#"';27!5%67%!&'&'2+"'&=476r cR~UY082.ԍ_W_V"+}IR8D).P9H'S]ٱZYHYoX(I_ ;.2lOP%.G6R%&I8d 8Pi>'67&&&'6.7#"'&'#"'$76'773.#'6'5676&&5476'&'%&&8DN$$ UE>!]J([Fhy *m.2\=w\`|:S?ED:@@]?]1fix pFFTD'yr,48eL @v(Nr%&&&+F 7!N &".\S$XE/KC\a*0/'rSCٟ C (RKpF|bphc'R"J$d1F[q7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656$'67&'6'&'''5$7676'&&'$'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5& '6%35&'.54>23#67!&W= y /_I[l*O F_VhB" "@.,<9tJ4Vt1P QJqMi vhpHI!:JJJ B7m\J_/ ?o v!"t,`s&*_~P1>5='g=@24<1 -s[,*&sd1PT>5J@=)j<42JCYT_Y)*)X^TY{ #m7 "J}>  "H1 $ &b5 4CUE '(!`9 !,(MTE + }r}A" 7,)f[4f AD <@0&9c?"V+GoMK~aG g9s &0@k"?c*GEKX Gjt9hN&\6 '''' 6\%N$&'6&'67327&#!65#&3yyys~w ccޱqZre[c7 7 c ,35'533#3!'#'5!5!5#53!5!5#!!-ʷ}} ckvG G @<<3ffX苜qXGccGJ 326&#!2+73 ### 3(ttvgnؐB(33#!!#'!'57!5#'5735׫$"q~q+!#!573#'5!3!'573!#'73!#'5;jjŠJss<wѡIjj8/w{,32#' 3%+ &5%6323'#57'53^VQ6>ѨABؒ6ʞG2k >Y3~||~Obs32732753"'#"'4323$4'5;+"'#"'53275'&'&5?5572%#&'&5%634%476=%@.!%,BE,#!-Q2" $nL/PuHED832#"&546324&"26%! !  Őb{=&*<<*(;E;R::R;KJ67Ϛ{ɬ)::)*<<**<<*):<'L67I&b'bb &b'bc &b'cb &b'cc &c'bb &c'bc &c'cb &c'cc  <BHNTZ`fl3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$ b)dLQk KRt!% c'd&//^000NN|P_Pfp88poQ`QyNNP\ Qgp88pmQ \Py,  M N>&`7" bK*V&"g{ M Mjn !-=4632#"&%462#"&! ! ! ! 676 &'& Q;:RR:;QBRtSS:;Qtu <=CA$32%s'l(;QQvRS:;QQ;:SSu tC<=@%8338H,'(+jn !-=4632#"&%462#"&! ! ! ! 7 767 '&Q;:RR:;QBRtSS:;Qtu <=CAs('s%23;QQvRS:;QQ;:SSu tC<=@G+'',H833jn !13264&#"32654&"! ! % 767' '&'Q;:RR:;QBQ;:SStRtu s$32%s'l(:SRvQQ;:SS:;QQu [8338H,''+  "*2:AIX3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\ H0e%FKSwZGr=;=NN$E| 1 ?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA+ +"'5$76%&'547327676=&#~jt1/Q}](+VRxbO P >nS]] =fP+! &56;2'5$%75#"3ui1.P~N](7P,VSZycOpO >S\^ f0:1>7#'#53'&'&54767&'&=33676=3#326'&i($lm$(($[Uu&tU[$&uU[[UV$|ddb e|$% ZSSZ %_TYYT-&  6& !!#!5!&yEߩPSCL"~|| - 6& % 767!5!3!!cE!%zG#Lޜ~||&  67 !7!lE!Ypipؤ=Ug\uS5264&#"#43233#!5 z{ym㗗y{(|j#53533#632#4654&#"#*jjoon}mZyH{zF2 1"32654'#"&4767!!53#5!!3!!#3!!pOO87O:=0LmkL/>Λ2  1O79NN970LؙL1KӘJJ-'<%#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy?! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<] !#"#&5463 67!2#6#"V⩁9k]ts]k8X1((1Eu." 6&'67>3"#"54767&'&#52&͕LVa{.+ؔ)0zHUM\&ϖ=Bll)'ҕ*l8lB=j&'5 %$ 56?6'[W4ZZ//[[5 @Eo$8"3264,'5'&54632264&" &$#"&547>B_^^- ͓hI^9l ͓hI (+|T!%lgMLx)+{T!&lϔgMM  <>'.463227#"&5454&#"&'&5476766&IAKK@ߴGdAoc.%&3tu/3u]o:JKAKLݰ |XHwyo†<>bQs-.cx68<32>32#&'567''#&&#4'3>$4&"?w(K>R0D32>32gYYYD,1:?$)v$E?w(K>Ro}vvxJv<aAktAO]ƀwϧ  ' 7 !5!?=lXll=?l=Xl=lj'/27632#"'#576&#"4'5267>327&'"SkQmyz,~zi2@:$(.-)zW] ݾgvxaX[&ŝ9{ A3276327632"'&#"'&#'327627632#"'&#"'&#'Es- 1V865+)|m^aVp5W7805Dt,1Wn6+)}m^aW784V8705(GG$3LKGHb 'HH#2MLGHaA!5!37!!' 3(ͦ '3_76`S@ʬARc $Td67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill %LOhnlD')----+)QPQ((QPQ)+/ 6klj$?6FWWF6?$jlk6 }++--JHNRh|&'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32767>4.#"327732>4.#"327>54.#"732>54.#"M_ 6694S55.+C55C&.66 V\+55 c$M##$ 6$#$s`%#$d0"%)h #"#_33@]22-"40446/*33UJ"+33^1/K=0T* ####  #&$$&##&$$&#  B #### *"$$" U!'-2!35!#3!53573#'5#5!35!75!!5'57!s\\ss]]s JRRIJ~֛E77__vtt4!v7CQ^&54767&'&'5676767&'&54>32! 535#5##3654."!2>4.#"  <$))+N-N*)N-M,**%:  @ v<-MTM-?K5:66459<5&?HPPIK* ')+K**K+)' *KIPPH>&5<:6uN|l||l|-I+N))N+@6:55:5Q*3V6&7!&54''&''67.76;+"'5#"=6&'76767%25#6&' 3Z(-6  Z8. ,Z0H &h6%`+EH )#M+=;,Zga#iR6U k''M.+`xo8:.@s.P mz "x?.#1p#41`&jD"acLHJ ~447| JlL"0 P[32>4.#"32>54.#"!5&54767&'&546767&'&4>32'&'.#":e79e89f76e`[S &(*UM,N)(N-KV)&& \@ECApd88dpg669:%N&KRS* 'TM**MT' *SRK&N۠:9}qyyq}c $Tdhy67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"!57!&'.54>3234'67632!P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill %LOhnlD')----s=BDw@>=))==AwDB=+)QPQ((QPQ)+/ 6klj$?6FWWF6?$jlk6 }++-- !yCB{C!$$!C{BCy! JHLP&'4>32"'4>32&'4>32&54>32&54>32#!5!5!M_ 6694S55.+C55C&.66 V\+55 c$))_33@]22-"40446/*33UJ"+33^1/NNOOU%)5!5!!35!#3!53573#'5#5!35!s\\ss]]s ^^/oo#E77v4@4767&'&'5676767&'&54>32!&535#5##3  <$))+N-N*)N-M,**%:  @%v<5&?HPPIK* ')+K**K+)' *KIPPH>&5<:6n5|l||l|L".7=6&73#!&54'''7&''676&7;2547#";65'"3=QUU+-6 E|]k0krd0c G&h8E+`%s H>4wM-',Qo8:$whPSmh**z1"0@)5"@YR0.&54767&'&546767&'&4>32; &(*UM,N)(N-KV)&& 9:%N&KRS* 'TM**MT' *SRK&N۠:9C##"'##56'##"/547?^'5@_*SU&/UL ;Yԧ9UP(` XI.s222732#&547636=4'&# #4'&#"*t pz&=<xQ>hG:V Hek%PF5NP B|-&pA&NFX &&5 <F:^;" V gdG7236;2"##'65##"'&5476;235&'&=476e x<JT`(GeRUdfB3 VNTMT,P$ 66$0_ u3dUdt_}s*$"Rt0XX__/ik=ZG8*F 1 . ъf)MC =g9EkO 9!(-);&  ]t!y" & 2| ba$ U+  2E35733!&54?'7'7!!"'&%#'73676'77'7'&'676ի,&T>=c$(wK9.U:Cʈ%`T??5̈'8/a\MOHK$k$823!a IF 7=c`O]BA6$k#- kNA! 1DW!!5>7>54&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676]T@1$J=c$(wK9.U:Cʈ%`T??5̈'8/]U1)8(3&ncQ&D- mMOHK$k$823!a IF 7=c`O]BA6$k#- kNA! (=Pc#"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676Z _3lFHe5^\VOosHGJI)`VKm1Sj,&T>=c$(wK9.U:Cʈ%`T??5̈'8/S<\el23-2['&')b YK4JMOHK$k$823!a IF 7=c`O]BA6$k#- kNA!  "5H333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676yy,&T>=c$(wK9.U:Cʈ%`T??5̈'8/Rv_`MOHK$k$823!a IF 7=c`O]BA6$k#- kNA! 2EX!!632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'67612hFL]5R]]R'PF ,&T>=c$(wK9.U:Cʈ%`T??5̈'8/_ptcdrr@89@ SMOHK$k$823!a IF 7=c`O]BA6$k#- kNA!  "7J]"3264&.#"632#"&54632&54?'7'7!!"'&%#'73676'77'7'&'6767DD7:BB=F"W\]8uu&M,&T>=c$(wK9.U:Cʈ%`T??5̈'8/Av@@vAf`5(sa_t MOHK$k$823!a IF 7=c`O]BA6$k#- kNA! .A!#!&54?'7'7!!"'&%#'73676'77'7'&'676&,&T>=c$(wK9.U:Cʈ%`T??5̈'8/2{MOHK$k$823!a IF 7=c`O]BA6$k#- kNA! ':7&54?'7'7!!"'&%#'73676'77'7'&'676,&T>=c$(wK9.U:Cʈ%`T??5̈'8/MOHK$k$823!a IF 7=c`O]BA6$k#- kNA!'9HR!273!567&#2$'76+&67'#'6765'533!273+#'!"/47*:!Jca# fi*11Za(}ypPd!^t/TT}75 b\V/V'f::p ?)\ ) 9s s%00%2<J\e3 + &=%62!67#&'&#36&#&#"3274/"34?3'35732?5##!'53aoPS<&3y: SO B2_5N vbe)PK  L$=j"AjOL5_k, ߋ~y}/M<4{1;C,[_ei' [)$ /:BR`j # &5%6; 65%&# !27!57&/#2#&'676+%!#'#&'47'3!27##'%!#"/6g^_b0h\{\[:5:QmMM[-w,ldN VNG+Q'XYtTpXYSmEb,#4' FV ! Y1 1_ Ug,17H27&' # &5%6367&#'.7&67263'#%; 65%&# aWg^_Wa+{|<b0h\{\&XYtTͿWzzWapXYS1.2!2!!7&!"4#".54767267   0# Uq{|}@!/(S*E.َer(Y$h?}}|r<.32#"&e|e(<X<ħñ"32#"&$2#".46e|e(<X<ħñ"@<#"4.#"e|e:<#"< !<"#;zch =B4.#"$32>4."e|e:<#"< !<"#;"< !<"#<@;zch =B54.#"##"'5##"$'&'0!5!5&'.4>32!!676767'%''H&(G()G'%H(%'V W3WImuw>DE}AB|GE=md^JW4W Vs'H''H'(H''H`XAK|@X1(ԁ3"|}DD}|" 2/ "1X@|AX1# / 673&/'67 &'"&'6?&'3 ' K[]><+Gg['fBBe&\h?(K?]\K !;32TD$ #@F,MMMv E8p_Lc1  M**+ B@0"AR/0?wA%od/D&3.YaQ/5#3$"uI' @3/u= =#n- .... y3% % 32+#".7!"&'&'#&=4;7337_8)0/_^aM`1/ 9534?GG~F6F~GG?>D9/C}"632&'.'#!#!#Ҹ62K#+~~R!Nx_TV_T 'NQ9;:;PHi?CD|))Z) 132>4.#"367#&7&$735&'.4>22[02[24Z1/[)'5*.XA323#67#&#"/&'&547&"'6%676V n*[n%'ZxL0<{2;&b;>/2:.m*nW)'$o`0LP;2F<;(e:2/"7LL75MLZ'&4)PNPUQ74(4 3(4:XUPNR ("@Dv>0&8a>!U*~EmLK}`G f7r &0>j!>a)E~CKW Gis7g:M57LL75M-Z '*''*' Y (5[J5( \d (5J [4 ''&.FR2#".54>&'767&%76'&''67&'&'&'6767654676'&7>326'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&$$$$OG362ecce74GL944m/122102/.303112.OF}68ge"w?>v"rt #87! ":;@A<:" !66# sr*./13/.UVT\<>"$!! !"#">kcg86|FO 93399 <>#"#><  "$ZTU./43..V5$##$59gTVV9Z^^Z9++VTg9'(''&()I8:9889: Z_59eUV-, <8.>euvc>-7=bccb>7-?cwud?/8MWZZW **D@@D+8,-VTe95^&)(&''(DA:AD.*!Y[[Y!& )p~67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"%2#".4>'7,3 3%/0),7=*'0*+3.22'Q YfT,1'').UfY Z98 "2 B2;F_ XB?2C 3" 894ihgikce"S[XVWXZ#ejpMcNTvJKr?VlLWW7p jk%n^*V{ww[11[ ww{V)\#fd-#JM 7B/""0C7 NK",df#νhhοggQUXXUS !!Y,q@I@,qȤ7TU7S '!57|,q,Iw,q,ɤ窪8d %3!'#!52#"62#".54>" h9|M463%&$$5 O Dn; $$$$33'554#$/[QwGSGUW GJGZ*1=C&32632!!#!#!5!&"327&7&!&7326&#"6'XP}}R?99XezfH9?A:uutLFF"~|| -  GP8lGrr[0 $,8>& 67& '&'&'&!7!!! 6'&265"ut.77!u$lYoip@qDi4tEu.$rl,36l%eUg\xuvSc?\7 =1lHr-ؤ-9E6'#"'!!#!5!&'&326!7!%"327&7&326&#"suuW~WdP|ojp?9:v8?A:llGrE, || ~LDJg\u HOU(&  6&32!7!!!#!5!&yEߩPhpCLn[u~||  /M#"'&'&'&54767676327'7'%'276767654'&'&'&"(F3"D"&%#C:bV`ZZ^;D"&&$AB[X]:3G9:]:F=~=<.,/*??z?<.+.(!$HS\[Y[VF=*%%'>HS]ZY^XAA&% iiD^29i..=+../:9CG5>+../:9 \2:a(EVUb_UVE@( %CEVU_bUTG(Hij:ο\ij+.<;BA;<./+.<;AB;<./4/O!!#"'&'&'&5476767675!5!' 276767654'&'&'&#"<-Z@E$##$EDVRbfNZ@E$##$EDV18kbbjC9:/..+>5GC9:/..+>5疑 (@EVU_bUVEC%##(@EVUb_UVEC% kajP/.<;BA;<.+/.<;AB;<.+ /O####"'&'&'&5476767632333'7 '%3276767654'&'&'&#"ܖU (@EVU_bUVEC%##(@EVUb_UVEC% Uܭkaj/.<;BA;<.+/.<;AB;<.+<-Z@E$##$EDVRbfNZ@E$##$EDV18kjC9:/..+>5GC9:/..+>54;2"'&'&'&5476767"327>7654'&'&'&RUEG"##"GEURRUEG"##"GEUC9;\.+>6FC9;\.+>6#&BIRUb_URIB&##&BIRU_bURIB&s\<;BA;<.+\<;AB;<.+42"'&'&'&5476767RUEG"##"GEURRUEG"##"GEU#&BIRUb_URIB&##&BIRU_bURIB&J;"276767654'&'&'&2"'&'&'&5476767R#$$#R#$$=>3443>==>3443>"$)($##$()$"06"@21.2@?FI?@21.5="$)($##$()$""$)($&#$()$'R 5%%%xr6׊eMM^xxV)7654'&'575#!&54767'5!s_vR$N::N$Rv_{aT,X@X,Ta{4b\)1%==%1)\b4ߴ:`\KDDK\`-&  6& #&yEߩPSCL"~{Y,!#!5!326& '6 !I(4~uP|Gjt ~|, !!#!5!7 >>!VL;|| oJ,737!!'!!#!5!'!5!{{~zz~zdz|{||R{|xT% ! !5! #!7!# #T??LLwJ|A|JZt|J,$264&"&7673% %&uuu>hH]%VgVYFhݦuuv#gGέҔEgDX!#!5!&'&5%676'!HfN)]H;btWUJn|3Lu.:;͢8%|V^m3 76= '&  7654'7! '.54676! NΫ.8l?ΫNΫ,spppsppp>9`VhhV`"xx  hVc`VhhV`cVY9QN9ss9N^Q9sV^ -E  7654' 76= '& 76= '&! '.54676! ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9ghVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9sV^m !1?U! '&'!  '&'&76767 76= '&  7654'7! '.54676! x8;41 ::; 9٫NΫ.8l?ΫNΫ,spppsppp>9d]]c]]] Փ`VhhV`"xx  hVc`VhhV`cVY9QN9ss9N^Q9sV^!-;K[s  '&'&76767! '&'! ! '&'!   7654' 76= '& 76= '&! '.54676! K ::; 98;418;41 ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9]]] ]]c]]cehVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s- ,"&54632#"767' 2654&#"@a^CF[^ccZ礡}[D>XUAB]~Lޜ~g]䤣أlZy'#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&s* $+$$$ #*#%>aZ% NT>%  #HH  ")mROeb     0         $&$  ' D"&%  $ #  mR )Ky           V!Er26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&.&&.&m,mQjP (!N!"(!'CVf& &bZC'!("!N!( PjoQm,.&&.&q    l?W,># "#" "  " "#" #>,W?~    lOYx3!#!"'&'&'&547676?6767676'&'&'&#"#"'&'&'&547>763276;%326767654'&'&'&#"6767654'&'&'&#"32eOuRd2  HH#   %>TN  +Za>%#+$ 4$$$+$ 's   *    * OK) Rd# !#& "*"D '  ""! 2   T   :      IZx-4H67&'&'&+"'&'&'&476767632%632 #"'%#"'&'&'&54767676;276276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&476762I  Q\C--%("(/*0.,+"( /X]\9<\X/"$)0*3')"* %1*0CR[        22 2 2 2 %'   &J  &%C\d#_*]OhXC%&  J&   O]*       ")&`&"'$"/' <%ZS  % SZ%< /'* "%5"-($# ;8\= !  !  " /VC "  !  !  [uV/+    V^n3276767654'&'&'&#"&'&5476767632#"'.54767&54732#"#"676767'&#"'67654 ozwbd011.f_zx|wbd011,k9995ulsp:995un*D$lQ$" 6*D?"5'K(2- #%>   :7 331cdvwwqi`4331cdvwxD>mwn<;;8rowp:;;BV0/+"8:D@*|sa  -F(7 "*=8&0!2   1-5$& 6:B4V^,Ji&'&'%&'&"632%676767654$2"'&'&'&5476767"3276767654'&'&'&'2#"'&'&'&54767676?!*$ 1$-+h+-$F3782* !?1 $> > 9|wbd0111c`zwbd011.f_zxsp:995unsp:995ulwIP"2-.$  "" PI $.-2!v   31cdvwzwcaf31cdvwwqi`43d;8rowp:;;8rown<;x,A-57'36%33#3#!2#!3#3##$'#7$@d5{sVd]F0 0F]dVs{5⒒d@( jPP,PP` 0 ")- !676762!"'&'&'&54!X$#R#+/RFF$#R#$1Sh,  k-"s!|K476?6763&'&'&547632676767654'&7632!54'&'&76'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476/654'&76'327654'&'&327654'&/%4&)"$0JK&  $)7    %1'# #6 +-L __^/s4* 1( .266 |/(1   \   #:7  lS&   x71]% /~[#<$  o_%?,: *(;Y)$X$+|=L!6CX&PY89Do6 b'n2  83eF] 4T&  &  /50$?- 1@& 3l K  C"P1 :07@D:5XI6.D3[+-1:   q/A8   g+jl9Lp{7654'"'&#"+"'&54?67676763276323273#5%6767'&#"6"/67#"27632327654'73654'676547&p/l0&J!cS%YE]{@C"$4>-;% ,(6Y>m!N$X6"/,(4sS?X$U>"sJ?K(`./4+2K2.0>S Zp0+1^' ;cs  /^"|Y/ 428ۇϕl%%ot5oA='Y$ aT* ''G+- %_kj~r}jL`І|\gK@/.85c($")3SZ67654/##3276?%%54'654'36767632#"'&54767632'%;66I   }g A6qn       -> 9@  H67; zh| 9 >6!q     B5> '-EL4'&'&/767675'7! !'!654'!4'!!$4767>2"&'&'!654' 33 ^^^RXI#J2VlP# ~!88!~ Uppph,p<((zd")3SZ&'&#"227654'&'''%'654.#"65&'&'&547632#"'&'&6#"%  I66;o |>A%6!q       9  ;76H    |h> 96qm      BX{[#C'%%.'&"27>7%$6%"'&'&'&47676762%'2&%k      Aڙ> >dIID`qS   SqGYq > q)&%$64'%%&'&'&"27676&22"k**!q``q!3W 2327632#"'&'&5476'( > !~GH ".4F+@xH )0$'*' 27277632#"'&'&5476'( e` }{*279HFb@yJL 1 -A  ' 7 Ɏ877Ɏ77ɍ8ɍ? tt7tt7t7tt7uB2632#"'&'#"'&54767'&54763267632676 Q   x L$3 z(   6X3  6*=P*> "#  Q26#"'#"'&'#'&'#"'&547&'&54767&&5476326763276T 디% $$YyX$ zc0 + j :  (̢1#: _& #- Խ =1 '2ĺ pD #!!!!!%!!!!!!!!#!5!36HVBBXBBUHVPBXyBpD !!!!!!""p"p"#pD35#7!!#!5!3rrsrspD!!%!!!!!!r"p"#p"#Rb !!#!5!3ppEU l3!!'#'!!#!!3!5@,r,,_ r,,_>v #!!!!!'!!!!!!!!#!5!3hm_|P_H_pDQ#"#3;54'&'&'!"3276767653#4'&'&'&+3!52767>5{dZYIB,$22$*DE]Vh{%'GC_Rl|lR_CIJ{hV]ED*$22$,BF\Zd{%'GC_RllR_CIJ&%IB`Oo|oO\FG'$zdZ\GB+%22%+BIdz$'GF\OooO`BH&&{dZ\GB+%22%+BId  #!! !!! 373#'7#ZAA:Llحmllmzlmllm|}}|d d}cT`C54'&54762327632#"'&+"'&5476=#"#"'&476323(L,68x86,L zFvd0000dvFz L,68x86,L zFvd0000dvFz zFvd0000dvFz L,68x86,L yFvd0110dvFy L,68x86,LV^&'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&   R.-R  R-.R "  *!""! ((\(( !""!#%   " R.-R  R-.R    %#!""! ((\(( !""!**!""! ((\(( !""!#%    R.-R  R-.R "   %#!""! ((\(( !""!*  " R.-R  R-.R   Sa4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632($ ((& :.:806$&& )D+:!  '228:/3&$$&3/:822'  )2/@!  '&$6/r/6$&'  '?03'  &d8:02&!$&20:=-2& (20C,7"  &d8:02& $&20:=-2& (10?!  '&$6/r/6$&'  'D+:!  '228:/3&$$&3/:822'  )2/@' ((& :.:806$&& (T`0267632#"'&'&'!&'&'&54676763267632#"'&'#"'&'&'&5476767!6767632#"'&'"'&'&'&54767#"'&'&'&5476767632!#"'&'&'&54767#"'&'&'&476767632&'&5476767632!#"'.'&5476767632&'&54767676Z   ( &            <   4          % (      (   2     6           %    <    %  (   W_276767653"4'&'&'&Wsp:995ullu599:ps;8rown<;;j>-'O^__^Oq44H4"hdd0!% %!-@jjjk**37'7 #'xxxx.xx.x..x  pD #'!5!73!GFdFGrEGdGErFGqFGdGFqGEd@L     - FOFc,OO,cFd,PO,dGOP T` '!%%%!%% % -wD{wwf#w%f{wwy||y{xxf#w%f{wwxEy||y % %  Zp/AppA/}}ET`     - Zq NqqN  NrqN qrT`% % -ZyllylyyT`%% %% -ZtGcVGttGVcGGstGWcGtsGcpD/3%!!%#'''%!5!%777xo:U.cF.d;UǩoxoU:e.Ec.U9oE.f:UūoxoU9g.Ff.U:oxo9U. 54'&5476276767632#"#"#"323232#"'&'&/"'&5476=&'&'#"'&'&547676323232?&547'&#"#"#"'&'&54767632676'K,68x86,L qA'C<4GW>L d  f L>WG4L d  d L>WG4L d  f L>WG4L d  d L>WG4 +F$H$F+ > ;<5 AcJ2QD++DQ2J (5H,'9,J&0f) T|\`j4OO7g`\|T 'g/& H,9',I4( (3J,&9-H &0f) T|\`j4OO4j`\|T 'g/&J,9',H5(""'!$(:UJJU:($!'""nF"276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632=>3443>==>3443>x>%85670-)-%8/>0!-)-02;>/8%0 )-02;>/8%-'&$>/:#-)-02;>/;))-02;>/8%- 06:4/.&"./4;=16'+&1,"%&!6'+&./4:>1:#"$./4:>16'+,4:>16'+&./4;=1nFn%#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/7676767654'&'&'&#"Z 0%8/>;20-)-!0>/8%-)0-<1:3%>-%8/|/8%->%85670-)-%8/>0!-)-02;>/8%0 M=  H  C# B/g  H *x#$   -7 H  g/B    $#x*%",1&+'61=;4/."&./4:>16'.5 1=;4/.&&./4;=1 5+'61>:4/.&"./4;=16'+&1,"8_/$   $/_c.,b" $#  !I?30C !'#  x!  #$ "b,.$  #'! C03?I T`-[3b &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762:   $4 $$ 4$   % !()-+,)$"! ((\(( !"&',+-)(!'7'&"# ,*2% !()-.))$"! ((\(( !"(%*-,*(! #2*&"# "&'     !  4  !   4  g       i 4  !g  4   !     oR#$$#R#$$  8 < c7 < 7    8 < d8 < 6   %),++*) !$3R  R3&!-(-%2(&"#%(.2$( &',+,)) !$3R  R3'! )),,+)$"#%(.2$( "   i !xg   !      %     !  !   g    "$)($##$()$"$  % %% %  V^<\l"276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676% %-z35++++53z35++++5pWDM69 ;9JHSWDM69 ;9JHSsp:995unsp:995ul}}(.35<;53.((.35;<53.("68MITNLJ;9"68MILJ;9m;8rowp:;;8rown<;}}"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632 654'&'&#"#"Z*1%85e %ZF\ +m8BS/?JV@6RTXN6@VGB1QB8n* \FZ% e53e!&ZFZ *n8BS/?JV@6RR6@VGB1QB8m+ \FZ&!e3*1%8~> +F$$> +F$H ;<5 A~ ;<5 A+DQ2J (5H,'9,J&0f) T|\`j4OO7g`\|T 'g/& H,9',I4( (3J,&9-H &0f) T|\`j4OO4j`\|T 'g/&J,9',H5(G+DQ2J$(:U$(:U3!'""!'""A''7'753'75377537'7'#5''#5'7#5'7'7<B-OS2#"327676765!"'&54$3!57!##"'&'&'&54767676#   ?>I-7އv3T%+>CPNHiDG-2/&D9  . !-8=DD_o2{jTc@F'%.36<@M137+4V52&'&547676762"'&'&'&5476767Zy*,&&%1]~|45,--,54|45,--,5(+&014|d΃fz410&$(F*.46=<64.**.46<=64.*Nf%C&%&547676762476767622"'&'&'&5476767Z{&%1-l./&%%&/.l-1%&|45,--,54|45,--,5ġS410&$%%1/66/1%%$&014R*.46=<64.**.46<=64.*nF(%%&%&54767676247676762Z_75EAAD6556DAAE57_qKFD6454FCNNCF4546DFKoX'#"'&'&'&547676763"'&'&'&5476767632rJFD6464FBNNBF4646DFJp`84F@NLBD6466D@NLBD66^~* i654'&#"632327632!"'&5!267&'&#"#"'&54763247632327654'&547632#" 6+Jo.^V|;-˙it36?̺fQMeEJS?(*$ s]vh2K)*NL13^v:Mc*ZeC03N35%&-Kt\K%9S >BWN=!$?$8(F!5{^?ZN676 547&'&327#"'#536767&'&'&5432&5476323254'&5432?-BO>Bv06('K`dC+(k$'eM?$#=Hb B=)+8=.m9eb PB>$3g:=TEB7WPfG+1KHP<Ff#&T'0P+A'<}DC/'"05276767654'&'4rceNS((((`hm@DDF/CD}>C/GFCG !&547>2;0!!676PJKBA<! !$ ! "#{! !{54&#">32!5!NKKggɈXԺShu6CO*.qL7hlN C,A7%D%xN 6Ÿ7/8/ܸ7и/9*ܸ1A11]A1)191I1Y1i1y1111111 ]49.+. + !'+!+9*'!901! 4$32%4&#">32+32#"&'32654&'>NKKggI^_x;JKMXd][]@j^NreL7hA}|%/).-5316 0_pxN S//ܸи/99ܸ+ + 01! 4$32#!!535#!NKKggK"L7hߣ5xN *+!+A!!]A!)!9!I!Y!i!y!!!!!!! ]+ *+ +'$+'901! 4$32>32#"&'32654&#"5!5!NKKggiw3S[[S;ucW׿!=VL7h(F?>F(=$\xN 21++#+A]A)9IYiy ]A&6FVfv ]A]A##]A#)#9#I#Y#i#y####### ])9/9 +  + +01! 4$32#"&54632"32654&#">325.NKKgg766666676̹Ȣ@nqg1iaQL7hI@@II@@= ;g*xN + + 01! 4$32%!!5!NKKgg.L7h*xN 1=++ +A]A)9IYiy ]A&6FVfv ]A]A ]A ) 9 I Y i y ]#9/9;9;/A;;]A;);9;I;Y;i;y;;;;;;; ]5+ )+ +28+201! 4$32#"&5463232654&'>54&#"2#"&546NKKgg=;=>?<;=p$f˻e#q0330233L7h;99;;::G]| pS{{Sp |-..-.-.-xN &21+-'+-+A]A)9IYiy ]A&6FVfv ]A]9#9A'']A')'9'I'Y'i'y''''''' ]+ + *0+*01! 4$32254&#"3267#"&'4632#"&NKKgg͸Ȣ?nrf3i_O76588567L7h !;f)HBBHHAAxN $0+(+("+".+и/A]A)9IYiy ]A..]A.).9.I.Y.i.y....... ] /++01! 4$32!5##7#"&54632"32654&NKKggِ&*''*)'')L7h*& nmmn =(F  76767654'&'&'!5%3!!  '&'&'&5476767̆mo5885om4mo5885omP\|~}~~}>@@>}~~}> =A_  76767654'&'&'!!5676767654'&#"5>32  '&'&'&5476767̆mo5885om4mo5885om)4 \)NBCkPQT`aFnoIkl\|~}~~}>@@>}~~}> =Om  76767654'&'&'#"'&'5327654'&+5327654&#"567632  '&'&'&5476767̆mo5885om4mo5885omttBAzyLOPUDWOPJJx??zBLL\R[PGjkr=\|~}~~}>@@>}~~}> = +I  76767654'&'&'!33##!5  '&'&'&5476767̆mo5885om4mo5885omh*˪+\|~}~~}>@@>}~~}> =?]  76767654'&'&'!!67632#"&'532654&#"  '&'&'&5476767̆mo5885om4mo5885omz##$#utKSLHMVA@AC\|~}~~}>@@>}~~}> =,Jh  76767654'&'&'"327654'&.#"67632#"'&7632  '&'&'&5476767̆mo5885om4mo5885oml@@lm@??@=|}~~}>@@>}~~}> =$B  76767654'&'&'!#!  '&'&'&5476767̆mo5885om4mo5885om\N\|~}~~}>@@>}~~}> =+BNl  76767654'&'&'"27654'&%.546  &54632654&#"  '&'&'&5476767̆mo5885om4mo5885omsBBBBCBBBhtdthuABtԄ9tihvvhit0\|~=>>>kl>=EggOOss\hh\]hh@>}~~}>@@>}~~}> =<Lj  76767654'&'&'532767#"'&54632#"'&27654'&#"  '&'&'&5476767̆mo5885om4mo5885om=|m@??@ml@@@@J\|~}~~}>@@>}~~}> =+8Ca  76767654'&'&'"32654'.  735733!  '&'&'&5476767̆mo5885om4mo5885omT,+VUVV++2QPPQΠP3p\|~-,g%&݈@>}~~}>@@>}~~}> = (!5!#%  '&'&'&5476767{\|~}~~}>@@>}~~}> =#A676767654'&#"67632!5  '&'&'&5476767lkIonFa`TULkCBN)\\|~}~~}>@@>}~~}> =1O>54'&#"67632+32#"&'327654'&  '&'&'&5476767irklGPQ\\LLBz??xJJPOWDUPOLyzAB2\|~}~~}>@@>}~~}> = +! !335#$  '&'&'&5476767hno\|~}~~}>@@>}~~}> =!?67632#"'&'32654'&#"!5  '&'&'&5476767CA@AVMLHSKtu#$##\|~}~~}>@@>}~~}> =,J2#"&5476.#"32654'&#"67632  '&'&'&5476767Pm@??@ml@@C|=⇆nmϵihVGG/ TU<|=\|~}~~}>@@>}~~}> =$!35$  '&'&'&5476767>h\|~}~~}>@@>}~~}> = $0N2"'&476' 654'&'>54& 74632#"&  '&'&'&5476767YtBBBCBBBB/tBAuhtt-tihvvhit0\|~lk>>>=>=EssOOgg]hh]\hh@>}~~}>@@>}~~}> =.L%3276'&#"32767#"&'"'&547632  '&'&'&5476767!C>?=ↆmmдhiVHG. TU<|=Al@@@@lm@??@\|~}~~}>@@>}~~}> = %C2#"&5476$  '!5##7  '&'&'&5476767e22dedd22TUUTBU¡\|~-/g#&%q @>}~~}>@@>}~~}>uPj !!5!!Pp#@pppt 7%FN4NGuP85 zD<22pJJt '-ZKFGNuP!!u\lE>~~>uu2"&'&'&5476?!".'&47>3!'&'&54767>2 p4, ,$ $, ,42p "2" puP8!5! %JZPJJuP8!5! %JHJJuP8 #3#3#3!!5 xx<<oJpppJJuP8 55!#3#3#3oPxx<<΄ΊXXXXu^} !!Y$%PD! 6>l>>PD ! DR>l>>P  BlvvuPb3!5 5!"'&'&'&u##+*15J1*+##0+*%!JJ!%*+uP847676763!5 5!"u##+*15J1*+##0+*%!JJ!%*+0!! ^r{VXeoouP855!Dq΄Ξ0uj%5!!53  !<9h9>uj%5!!53  !<9h9>+Z !73#57!!+ Id&+ъ2&+Z 5!'53#'!!!+dI|&22 !'!'!53 !Odcndh 2 3#5!7!!! ndnd;ch dd !53#'5!'! !]n2n22r-hJdc;dJdd 7!573#5!! !2+2n2nr-hLJd;cdJ<!6767632#"'&'&'! <'CZmo~yti^Z...*^Vqo~yti^?)X6nGCZ.//+]Yonzqi_X0//+]>Iʞ BP "&*.37#37#37#37#5!!!!3'#3'#3'#3'#<<< 7&#"7'7 !%*BF8WU{FC*9oX:WubP 55!5!!'!XXddPRt '327'' !!iFB*8X:*CF9XUpt>2%&#"6767&'&"67632&'&547676767tBEHY'#&N'$X$)./,0+""" /%Hp*G&/$##*0,0.+"W!'&'&#'ZGGCuaP/4767!"!47676763"'&'&'&5!3!&'&5P%T)#$"/*11*/"X$#)%eeZ'&$(0+.!"-+0($&'Zet2&'&'&'&54767#"'&'2767&'&'32t)H% X"""+0,0-+"$'N&#/'YHEBCGGZ'!&'&'$W"+.0,0*##"/&GsPX+B6%"'&'&'&547676$47676762"'&'&'&'&'&547676762$/+z > _$#R#af#R#) >xbQu R$'68"   vc<.676767632#"'&'&'&%&'&54767&'&5476A ''+/54<3o8n23'9%%bb%&:?$ fLLf#&#/:&'+-23-+'rr'+-32-+V2e"'&'.54?654'&'&'&#!"#!".4?64/&4676763!23!276767654/&546767622 Z rrd Z   c     c  2g"'&'.54?654'&'&'&+"#!".4764'&4676763!2;276767654/&546767622pW\xj  \W    4  uP^+#76767&'&/3#6767!5!!5!&'&'PSJl R&GG&R lHSi*n: :n**OUä'66'U=;JHd)))dHJ;=n>&*'$&76#"'6767> 7>{J<p1 GM+ SR-PAdmR j:&567$'&76&#""j+MG 1p7 mdAP-KS #u ! ! j.u-1[ 3%!!!!(U2xxx[ #3!5!!5㢢xUx2x! !pp ! !p &HH&IIT` '#'#'##'RKKR@R"~KKLRVb#73373737@RKKRRLKK~"R]z?3276767654'&'&'&#"7#7676767632#"'&'9! ww "3\^wvlyZ^2103\^wvox[9! <:LHUYGK<9!>9MwWOw\^2106Y^wvow\^2104[.]z?#"'&'&'&54767676327#7&'&'&'&#"3276[xovw^\3012^Zylvw^\3" ˑww !9>IJVUHL:< !9!9 !'7$"!3!&'&'&'!#!2767676w 1cbbc1 1cbbc1 -ƑTSEF" ee "FES "FESTTSEF" ȌwGAvcbddbcvAGHBwcbddbcwBHƑ ##EFS $ SFE#$SFE####EFSd Q   2@ @@ 00 ]1@   990@   <<@ <<KSX << Y5!!d KƑ<Ƒu Q   2@ OO __ ]1@  990@   <<@ <<KSX << Y'7!5!'7 w KƑȌwƑd Qڶ 22@ PP_ _O O]1@    9220@   <<@ <<@ <<@ <<KSX <<<< Y5!'7'7!dƑwƑ<ƑwwƑd Q!!5!! x(SwSK7SSKu Q7'!5!'7'7!5 KKSwS(7KKSwwSd Q7'!!5!'7' KKKKSwS"Sw7KKKKSSSwwd Q !5!3# Ƒw[ Ƒ6u Q !'7'7!#3e[ƑwƑww\d Q!!!5!53# xKKSwSKKSSu Q!7'#3!'7'7eKKxSwS͖KK\SwwSu Q#5377777!'7'7#'''QcyAcƑwmccƑwwƛ,@V,,+V,,@'V,V,,V,,@'V,V,,+'V,V,,@'V,'V,V,@V,@'V,V,@'V,V,@'V,'V,V,@'V,V,@'V,'V,V,@'V,'V,V,@'V,'V,'V,V+V,@'V,V,+'V,V,@'V,'V,V,+'V,V,@'V,'V,V,+'V,'V,V,@'V,'V,'V,V@'VV,@'V,'VV,@'V,'VV,@'V,'V,'VV,@'V,'VV,@'V,'V,'VV,@'V,'V,'VV,@'V,'V,'V,'VVV,@'V,V,+'V,V,@'V,'V,V,'V,V,@'V,'V,V,+'V,'V,V,@'V,'V,'V,V@'VV,@'V,'VV,@'V,'VV,@'V,'V,'VV,@'V,'VV,@'V,'V,'VV,@'V,'V,'VV,@'V,'V,'V,'VV+'VV,@'V,'VV,+'V,'VV,@'V,'V,'VV,+'V,'VV,@'V,'V,'VV,+'V,'V,'VV,@'V,'V,'V,'VV@'V'VV,@'V,'V'VV,@'V,'V'VV,@'V,'V,'V'VV,@'V,'V'VV,@'V,'V,'V'VV,@'V,'V,'V'VV,@'V,'V,'V,'V'VV,pV,p,p@'V,V,p,p+'V,V,p,p@'V,'V,V,p,p'V,V,p,p@'V,'V,V,p,p+'V,'V,V,p,p@'V,'V,'V,V,p,p@'VV,p,p@'V,'VV,p,p@'V,'VV,p,p@'V,'V,'VV,p,p@'V,'VV,p,p@'V,'V,'VV,p,p@'V,'V,'VV,p,p@'V,'V,'V,'VV,p,p+'VV,p,p@'V,'VV,p,p+'V,'VV,p,p@'V,'V,'VV,p,p+'V,'VV,p,p@'V,'V,'VV,p,p+'V,'V,'VV,p,p@'V,'V,'V,'VV,p,p@'V'VV,p,p@'V,'V'VV,p,p@'V,'V'VV,p,p@'V,'V,'V'VV,p,p@'V,'V'VV,p,p@'V,'V,'V'VV,p,p@'V,'V,'V'VV,p,p@'V,'V,'V,'V'VV,p,p'VV,p,p@'V,'VV,p,p+'V,'VV,p,p@'V,'V,'VV,p,p'V,'VV,p,p@'V,'V,'VV,p,p+'V,'V,'VV,p,p@'V,'V,'V,'VV,p,p@'V'VV,p,p@'V,'V'VV,p,p@'V,'V'VV,p,p@'V,'V,'V'VV,p,p@'V,'V'VV,p,p@'V,'V,'V'VV,p,p@'V,'V,'V'VV,p,p@'V,'V,'V,'V'VV,p,p+'V'VV,p,p@'V,'V'VV,p,p+'V,'V'VV,p,p@'V,'V,'V'VV,p,p+'V,'V'VV,p,p@'V,'V,'V'VV,p,p+'V,'V,'V'VV,p,p@'V,'V,'V,'V'VV,p,p@'V'V'VV,p,p@'V,'V'V'VV,p,p@'V,'V'V'VV,p,p@'V,'V,'V'V'VV,p,p@'V,'V'V'VV,p,p@'V,'V,'V'V'VV,p,p@'V,'V,'V'V'VV,p,p@'V,'V,'V,'V'V'VV,ppVp,p@'V,Vp,p+'V,Vp,p@'V,'V,Vp,p'V,Vp,p@'V,'V,Vp,p+'V,'V,Vp,p@'V,'V,'V,Vpp@'VVp,p@'V,'VVp,p@'V,'VVp,p@'V,'V,'VVp,p@'V,'VVp,p@'V,'V,'VVp,p@'V,'V,'VVp,p@'V,'V,'V,'VVpp+'VVp,p@'V,'VVp,p+'V,'VVp,p@'V,'V,'VVp,p+'V,'VVp,p@'V,'V,'VVp,p+'V,'V,'VVp,p@'V,'V,'V,'VVpp@'V'VVp,p@'V,'V'VVp,p@'V,'V'VVp,p@'V,'V,'V'VVp,p@'V,'V'VVp,p@'V,'V,'V'VVp,p@'V,'V,'V'VVp,p@'V,'V,'V,'V'VVpp'VVp,p@'V,'VVp,p+'V,'VVp,p@'V,'V,'VVp,p'V,'VVp,p@'V,'V,'VVp,p+'V,'V,'VVp,p@'V,'V,'V,'VVpp@'V'VVp,p@'V,'V'VVp,p@'V,'V'VVp,p@'V,'V,'V'VVp,p@'V,'V'VVp,p@'V,'V,'V'VVp,p@'V,'V,'V'VVp,p@'V,'V,'V,'V'VVpp+'V'VVp,p@'V,'V'VVp,p+'V,'V'VVp,p@'V,'V,'V'VVp,p+'V,'V'VVp,p@'V,'V,'V'VVp,p+'V,'V,'V'VVp,p@'V,'V,'V,'V'VVpp@'V'V'VVp,p@'V,'V'V'VVp,p@'V,'V'V'VVp,p@'V,'V,'V'V'VVp,p@'V,'V'V'VVp,p@'V,'V,'V'V'VVp,p@'V,'V,'V'V'VVp,p@'V,'V,'V,'V'V'VVp,p'V,pVp,p@'V,'V,pVp,p+'V,'V,pVp,p@'V,'V,'V,pVp,p'V,'V,pVp,p@'V,'V,'V,pVp,p+'V,'V,'V,pVp,p@'V,'V,'V,'V,pVp,p@'V'V,pVp,p@'V,'V'V,pVp,p@'V,'V'V,pVp,p@'V,'V,'V'V,pVp,p@'V,'V'V,pVp,p@'V,'V,'V'V,pVp,p@'V,'V,'V'V,pVp,p@'V,'V,'V,'V'V,pVp,p+'V'V,pVp,p@'V,'V'V,pVp,p+'V,'V'V,pVp,p@'V,'V,'V'V,pVp,p+'V,'V'V,pVp,p@'V,'V,'V'V,pVp,p+'V,'V,'V'V,pVp,p@'V,'V,'V,'V'V,pVp,p@'V'V'V,pVp,p@'V,'V'V'V,pVp,p@'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p@'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p@'V,'V,'V,'V'V'V,pVp,p'V'V,pVp,p@'V,'V'V,pVp,p+'V,'V'V,pVp,p@'V,'V,'V'V,pVp,p'V,'V'V,pVp,p@'V,'V,'V'V,pVp,p+'V,'V,'V'V,pVp,p@'V,'V,'V,'V'V,pVp,p@'V'V'V,pVp,p@'V,'V'V'V,pVp,p@'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p@'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p@'V,'V,'V,'V'V'V,pVp,p+'V'V'V,pVp,p@'V,'V'V'V,pVp,p+'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p+'V,'V'V'V,pVp,p@'V,'V,'V'V'V,pVp,p+'V,'V,'V'V'V,pVp,p@'V,'V,'V,'V'V'V,pVp,p@'V'V'V'V,pVp,p@'V,'V'V'V'V,pVp,p@'V,'V'V'V'V,pVp,p@'V,'V,'V'V'V'V,pVp,p@'V,'V'V'V'V,pVp,p@'V,'V,'V'V'V'V,pVp,p@'V,'V,'V'V'V'V,pVp,p@'V,'V,'V,'V'V'V'V,pVpd?Q!!!5!53#O9MG89!03\^wZMw\^2106Y^wvow\^21YGK<9! <:LHUVJI>9! 5 9:LHUow\^2 !3\^wvlyZ^2103\^wv] A4'&'&''7327676767#"'&'&'&547676767'7!98GˑM9>!9IJVUHL:< !9>l<D:8INxWXXxtsݓ.7&54&'>7!2;#"#!532654&+W o" /O /l>>l5UU5NI8:XD<stݔxXWg % 5<' 3 5j'  #3 < { 'e   ''6UU'e  '''cUU'e  '''cUU'f   'fU::U'f   'fU8U#u  u-3!3!!#!#!5    333333#######5Szzz      :O :!!" 767>54'&'&'&$  $'&'&547676zeig44hi}&eig44hlzVGFFGrGFFG.48fj~fh4666fj}fk34ūʪ:O6B" 767>54'&'&'&$  $'&'&547676!!#!5!zeig44hi}&eig44hlzVGFFGrGFFG  48fj~fh4666fj}fk34ūʪ  :O6B" 767>54'&'&'&$  $'&'&547676   ' zeig44hi}&eig44hlzVGFFGrGFFGsqrq48fj~fh4666fj}fk34ūʪqrqs/ ,& ' '  /c#5!67676&!!'&'7767:# mDK6I%'&'7767'&'&'&54767676767676&&'&'67k?J " mDK6>>?J " mDK6 ՜U5O9:[>?JKVXKK>? 'U5O9:[":;PG*# nb11S$ /D65'67673''&'776?&'&'&'&5367676&] ,:dh^##B<\  mDK6'%*-6H mCK6;B5>\/h[aUTE>&U5O9:[ $A<]Y]7<7*,U5O9:[/c'!!!!67676&!!'&'776 ] lDK654'.'&"67676&!!4. mDK654'.'&&767676&'&'776?&'&'&'&4767676!!A8+.N&N//44//N&N./( mDK632326#"'&'&'&#"5>32326 5j`k^Xbian ^Vgj`k ^Xbk`k^VfUPE:=MSNE;=KPE:=LTPE:>KPNC ;B#"'&'&'&#"5>32326#"'&'&'&#"5>3232655%j`k^Xbian ^Vgj`k ^Xbk`k^VdUPE:=MSNE;=KPE:=LTPE:>K %!!'7!5!7%5O’OK>uMc u̵N5!!'7!5!75%O’OK>;ju 3:3267#"'3267#"''7&#"5>327&#"5>32 5C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajE KUPEq,KUPE:E LTPEs+MSNE8PN 3:3267#"'3267#"''7&#"5>327&#"5>3255%C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajE KUPEq,KUPE:E LTPEs+MSNE85!5!-5 %%\ri!5!!5!%%55%\iw:&#"'&/&#"5>32326!! 5j`k^Xbian^VePE: =MSNE;=KFPN:&#"'&/&#"5>32326!!55%j`k^Xbian^VePE: =MSNE;=KF ")#"'&/&#"5>32326-5 %%j`k^Xbian^VePE: =MSNE;=Ko i ")#"'&/&#"5>32326%%55%j`k^Xbian^VgPE: =MSNE;=KoiB!!!!55% %%|3WiB!5!5 %%55%Ei,55%-5 %%vi,5%%5%%55%QTi{ 55<1 5 5<1LJ11  55%3#<1 5 53#<1LJ11m!5!!5!5`NPm5!5!-5:[ 555PPNP[55-5#;p$.#"#"&'532767676325gV^ naibX^k`jUK=;ENSM=:EPKNPp$.#"#"&'53276767632-5gV^ naibX^k`jUK=;ENSM=:EPK%,!!!!.#"#"&'532767676325gV^ naibX^k`j|UK=;ENSM=:EP[NP%,!!!!.#"#"&'53276767632-5gV^ naibX^k`j|UK=;ENSM=:EP[-@ $!!!5!676762!!&'&'&!!A%0M 6WYYV7 N0/H7'H?a93[2332[0~~K|}CMuuUSx|y 7!!!'7!%$>~~K}|CMuu|SU]a!5!5%5$-&obn%$ffuW]a!5!5%$bo&-nuf$%a %5$!!!'7!5!7!5!7-&ob,JXv2Jv2D%$ffuWXuWuWa %$!!!'7!5!7!5!7bo&-,JXv2Jv2Duf$%tuWuW;F#"'&'&'&#"5>32326#"'&'&'&#"5>32326%5$j`k^Xbian ^Vgj`s ^Xbk`k^Vg-&ob PE:=MSNE;=KPE:=LTPE:>KR%$ffuW;F#"'&'&'&#"5>32326#"'&'&'&#"5>32326%$j`k^Xbian ^Vgj`s ^Xbk`k^Vebo&- PE:=MSNE;=KPE:=LTPE:>KRuf$%y3>3267#"'3267#"''7&#"5>327&#"5>32%5$C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiaj-&obE KUPEq,KUPE:E LTPEs+MSNE8%$ffuWy3>3267#"'3267#"''7&#"5>327&#"5>32%$C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajbo&-E KUPEq,KUPE:E LTPEs+MSNE8uf$%q5%5 5P#PPNq55%PfP ! !' hC@?)C?r@h 777!% LC@C{?C@C? !7 7hC?C)@hC?Ch@ !'' ! L)C?8h@C@?7^P % ! !%7'!55![$$/]^$$%%-___7^?% !![$^$$6~ !!6$$$6~ !!~%$!' ?@h ??7 7@h0h@! h@0?7^P % ! ![$$/^$$%%6~ ! !! !Y%%$$$$ug #75!5!7ތwUƑ4&Ƒu g8 '!5!5'eƑ8w&ƑM? 7!!7wUƑw4ƑwM ?8 3'!!'֌eƑ8wƑ%!%!!W7 r%!!!W7 %!!,7r=zp~lO76lNf$@ $!  %2999991@ ! /9990@#"$! %KSX9Y"$]@ !"#$66EEVVP&ee`&]2654&+;# ! !.#yiiy{x3 326=mEHrVepcM"UhCsUst -Peetf]+l^j^Ÿo'..[%m)B33!;!"'#&5#33_>\oMA^;3ÞN7:[>t7y )54'&'&'&#"!!67632!!$$.p@@fQ[[nedgo77#WVb./ww3q!!#!!!K&b+1#AL!=y!! 3!#!fwKK-\% !!!!5!s!7A\` !!!!5!uN`fb'5!!5# !226&#"mb_+ނyzf9%!#3265#!! !9NQx{TV#% ' !!!!!Z_5Xg+c'%!!>3 !"&"32654&mb_ނyPVPzy:{0!!!2#54.#"twHf]ee/'A` df LfDXZ}(1 XP|\k23X'{&"26  454&"6MQsPPtP GCEkU|}j}PPsOO988b \  q` !5!5!5!5!53`Sgtd33!i\5.#";#"'&'&'&'32654&/&'&54$!2{hYuғNzUNOA7H2K |~[fg {78LPa&鮻 ¯^$_6#"$7327! !$36jq,!m\ΟT2;P-KCFF.DZT-J%#"7#"7!327!327'!!@r8\À$Cm¯议讯i\-_ -6&3276#27!7#'!7!"!$!2$!2oMp%rtH8 U@,7/-EnDV-;;1AP.%!!!%!%7!!_gQCA'ď?RBUCE3:YEoB{o S{x~Z_$32!6#"!!,S~bDz7Q_T. `%#"7!727!!A:e|;¯=T$_%#"7!327!!#532$2<h{8;BUIO讯WݳZ-!!$32!6#"t]KJ<=Q~hB8QV%`27#7!6!6 !6#"Oˀ$:"1wtqiy֣3AǨYD3 7# %!3VCin,E*H'jJKp'ֲ\-XC)Z.`!6#"!!$32$32!6#"={_Ё\D?[)}[ğ| `NZ%_ !76#"6 %'73 5&#"!!66'}TZxd>11#஫iweJ|n<^$_! 7!%`6(p=$7$=MZ.# '!327!&'!%&' }a_ӯt",(PdRYQr|7dǿZ _)7#"6#"!!6!2327!Y(OkŶ< dgi91宫^Z.6"!!3#"$72!Xg;*;UYVCW! !3 7675!7632r,R*1>/!QH$2aav;<[.%!7#"!37!YxO,8|hsNK>l1A5U.x_%!7!#"7!32%!wjJ:"y;Fs>F܏\$ 7!6! 6%!!5&"% QDief)*Uw3*+ r29RM[n'q !4676  '&%2>54."q_OO__OO-;IRI55IRI5 %6vv66ww6?.*9 9**9f"%6$  $!327676!&'&#"?`?扉!J_UK !K_VJ .;zzzz P'N"P'Nf" #>7!!6$  $!.!Et!t!??`?扉p?!! $]$;zzzzgm[id ) ! 5!7!dSSffڗ:kKid !! !5!i\ٖ-:ksZ %!5 5!7!!ZddؗӖ- ,c !!!)!$~$R}+ '1 '9(P"4EI4676  '.%2>4."4676  '.%2>4."!kY.YkkYYkP%dpdJ++JdpdJ+rkY.YkkYYkP%dpdJ++JdpdJ+y:l'UU'l:B9qy# ) !! xS qge !!!W}X$Y$O$ !! !(} mRqNgf" 6$  $67654'&|:NN9?`?扉H%:Fg?%%;zzzzM}O[ȇ>fS" )&""''7&6$327267654J:U>±ݜs?ñoU>|'NC.Kۭh;zLgz 0&NC͍? !!!!}}}$$$O$,) !!3xS{*I !!!!!!dy!! ! ! !0AD= !!!!F}}$O$$O$ !!!}7g  !!!!!!K$o$!$ }}8; 3!!!!!/#)&#"327# /!"'32#"63 76!2#cllcr||rcllcr|ww|r1!#35#3!3!3#3#!35##HH"#JJH 3!!!%\q=,!!!!!5!!!!#hH"#J?3!!!}}$Wx 4'! $5%!!hB>dU=#mq 1A2>4."4676  '&2>4."4676  '&9IPI44IPI4q_OO__OO09IPI44IPI4q_OO__OO;+'5:4''4f0hh00ii0;*'5:5&&5f0hh00ii0f"#46$  $&%2>54."f?`?扉>|JJ|}Izz❞zz͑CNNedNNf>".327767654."46$ ' $&>_^UF%J|}Ir?`?D>d͑CN&^#([edNNczz❞b =z )!!!!!~$8$9yd? !!!}}X$Y$O$ !!!!!p|}Wmhhmhh6hf"#'46$  $&%2>54."!f?`?扉>|JJ|}Izz❞zzΑBNNedNN$f".2>54'&''&#"46$ 7 $&I}|J%BU^_>r?`d>DdNNde[(#^&NCΞz= bzzf(1 "&547"3&5462264&#3264&L|T%%T|p32H33#%23$#33fejvvO??OvvjMmMMlN5!#3H->.Mi ^fy]N^@D*i|->U1FE-"B*(ǿbY9>K-%dR&  :!!!m:!5!!m3&!!!T-!5!!TN'6'6'6'6'6&6'6&6'6&6&6'6&6'6&6&6'6'6'6&6'6&6&6'6'6&6&6&6&6&6&6&6'6&6'6&6&6&6&6'6&6&6&6&6&6&6'6&6&6&6&6&6&6&6&6&6&6&6&6&6&6&6&6'6%3T! ) $54$!3!#"3!1pzzpBml9' j7 k)!!!k#Nf*q.w )! !!wAR!LWf\&f\H\q=) 901/-65)m";!! $5467.'!3Jyiiy폐O}@7q^ZgfX 5+֔-pR ' '9+4 =.#"!6!2=ITc\_X\t&4=:';<] ";";.54$)! $546[^^[tutu|$*fBPNMQ<bcaa$+m '$ '( )!!!!!g\%##V#=,ff28)4&#"!! yy>FE>=67 k#"3! $'&5476$)g jwiffixPP#ate eta2''1``=!!!!x h=}!!!!xx5i{jlX`+t <5"'0'&#"0# '&54767!32767632324&'!aayTQ|@NOTysjiÑjjsyQNQ?|QTx@v@@v@܍U0,-00-,0Y` `3#"'&'&"#"'&54767!32767632324'&'FV42epPvlmwPpe24V36*&9E]VW\F5&*6`『KEEKKK㠱dŸ~JR QJ~dd #&(`&q03!!#! ! %"3254hhhgt%±{Z+Xjkc[{!#! ! 3"326&E!", u||uw}}`8(8B!!!!!!!!!-_})}%RXZ+ {"-!5#"&547#!!!6;54&#">3 "326= HfoӆsUst/ pq[Qef]ˢ>4>`?.UO..lLJDMm){v!!3!!!3>!!\ph:]qAdE[s4`5!!3!!!3>#p?oddjkX{!!!!"326& ! Bh/xYW3B8(8f 'yT'y&X{'yj'y:j':Wv '/7?GO%3#%3#3#%3#3#%3#"264"264$"264"264$"264"264$"2642+ '&' &547"#"&546;&546 676 3#Fޓhhhiig޲hhhiigRhhgwiig޲hhhc9]]ź87;]]:9sIFP뇇݈ꇇꈈꇇ2뇇뇇뇇0뇇뇇뇇X̬\dfʬ\ʫZee̫ZҜ f#!!!2!#3276=4'&'&'&#!!! ` feN=$$.wu銊#CC77#F`!!!2+5326=4&+!!jllllͳ>fLLfi`vwwv\\S j!!;# ! `{x32#!53265H.pfQnilfL 77#'b]Vtv\ F*!!!!"'&'327654'&+5!!! `R~VNRQST1TN !pgts="J&&55cf45^Hz)1!!!"'&'327654'&+!"&5#;5f^W|WOzmsqjfQRTS*Ա>\'r`>N !qgst%)5855cf54%N7Rnc{3%&'&547632.#";#"32767# $546,9l78WYZ[<;_7892u|v>CBAtMU^GZ\]\~ !SUge 0:?ALO=6AEifFE#'?%啿` !!!!! Q`%jb{V !!!! !!!!!L-_})hg)}^_}B%R5+%RX{ 2=H"326=%!5#"'#5#"&54$!354&#">326763 "326=6;54&#"pq[QemH]JH"ӆsUstiktt/ pq[Qe;!Yqӆ^LJDMm)f]f]ˢŸUO..5 lLJDMm)QnUO  ! !!!!%"3254hhI_})c ư°dd-'5RbX+{ +5 ! #"&54$!354&#">3 6"326="326&!EIo"ӆsUst%pq[Qeiw}}wu||{6(ˢŸUO..oo}LJDMm)B   !!!3265!.=_})6y%R-zX{(3%# '#"&54$!354&#">3 265!!"326=]^ <ށ"ӆsUst/ K̀fEpq[QeVOˢŸUO..+z)LJDMm)  !!! !!!F_})5=+%RXB{ ("326=5#"&54$!354&#">3 !pq[QeH"ӆsUst/ gGLJDMm)f]ˢŸUO.. !!!!!!!3!L!^3 3!3#"326=!#\H"ӆsUst/sgpq[Qe9f]ˢŸUO..wfmLJDMm) F>!!!! !+3276?L-_})dYG[*$%R>#OXFA{)4!5#"&54$!354&#">3 !+5326?"326=\H"ӆsUst1f)H^^p[SWpq[Qef]ˢŸUO..wz 6JJ:KJLJDMm)D:X5{ ~!3#! !!#3ff+1^!=Ls !3#! !!#53fNNK- %!!!oMl_^!%!ffhS> !3#!!#32x !3#!#3mf!7' 3#! '&#376"!&'&!3276h̤ ͨ gaCCa+FaaFΦΩ ZZ]] y{' 3#! '&'#53676"!&'&!3276C!}ޣ~"w>$$>u)*>wu>*{wݾwU2JJ2UR[:UU:f + 6! ! '! "3254!"3254fnmhhgg°°°ddjkX{ %"326& ! '! ! 6"326&w}}wu||!EG" w}}wu||{Bȇ8(8B!3264&#! !#3#!5#3=pzzp1_ml} V^{"2653!>32#"&'3#!5s{{yfJu uJw©@֤b]]bWWFB&! !#!#"&'&5476;!3264&+u1<@9rND~wPpzzp!"G.+17h[~qkmlFV#{$0"&'&547632!>32#"'!&%7654&"C<@9rND~w2.fJu ݖ)r`==y{^!#F.+17h[~qkb]4VTff #"3254# ! %!''7f¾ˆfgk(Lf L lkh\,^@rcD\Vy!%#"325!3#!5#53"326&Ju uJhryyrsyyc\IG\c*WW@!32654&#!#535!3#3 !=pzzp1]mcenF--7 V^"26!#535!3#>32#"&s{{y&fJu uw©@\\b]]!32654&#53!3 !#3#!5=pzzp1]mcent200 V^"2653!>32#"&'3#!5s{{yfJu uJw©@b]]bWW8])!!]\%#V`!!f`V3 5&#"!!>32ؓxsto6|wV{3 '&=4'&!!63 Jfpl *΀f܇\vs<5F/ N`!l=!5!5!5!l>>!#@ 991@ ]0!!h33^@ 10#+Fp"&'&#"3!3#;!"'&5# !2.Yyjh&%glnXj+T"BKB/.vyX7 !!3!!!mzNA{3!!4&'.#"!!>32 H.pfQnV n#'`b] +%#$'&''745!27!&'&#3267#5ʥځ4`A|yANieb|{|bOx|Ju͆:!x%{  uJh$ic^[<<w=+RGb\FU%'327!545!'H.p@:fQndE$h% 7#'VNob]wQ19Zo~HH0?#(!'7! 7!.#2767&+=AL&3 AFHO}@f7q^5y4 ?5h5-Ac$4KO\_-XspR -0u_ {.#"%!'7!>32/]/J; $ %fE}*(/XFwHH0=ne/.#"%!"$'32654&/'%&'&74$!2{hYugsAiӎ⏏ |~[aA,h {78LP32%"3264&^K=BQ  cXGOOOh-4RηT34}UwKOOKJNN9FA>C9GF&&-1//6.01-!````` !!!!gr+y##T! !# $54$!#";!1pzzp+lm9 3!3!! mXXl%D+=m!!m@ Z! !! ! !!wsnD`=+o=5!мb'c̠P6h'3#ŏIhh{#4'3#Ţ\}4`3'3#ūeN>b#76cPXQbhXR64XS#XT6h3#hbhXVh$Qb4$R6$S#43#%}d62V[b4$V4QdbRd3#30>#X`6$[bVdQ033żtd! 5!3254!@SL0?1$?d #32% 5%6'&'!D>7WGlW+Ofj8Ut!b3NH`:d "#"32%! 5%36'6#"!! F+12qi5ZY\ HpS=DcxmTEd 0#"3267&=!2>3 $547&#"!&%eTY矌9v"?d oΡ_F? ?!qfv:3!6oqgh]=FQe! !3'4#"!! %]=" ud! 7!32=4+5364#!'! ]O$q\l xGuڞ'< '>?4#"#"32%! 5467&5! *f>|xK*-8^"4Z@FT \AAX(d $4#"32%!674#! !6>3  ~l ͋=s0\d$MD,HAdS!4#"!! SyIIka;o)d! !2=4+5354'!Ny^s Ǭls~d8%67$5!263263 !=#"!4#"!&#"6!.#"9S{*姕loy ʈĮm@2)nBw`Vɵ;yyla"4Zd &'"32%! 5%254'&!! M<3 :" !pQ #"32%! )!"63 bl^>,V5 ,Yb& n !4#"!4#"!!263 M)yyt3-ۖu7,d! 7!32=6'#3274$! IgOxcd?{qgMd! !32%'6%5%Gq_R {gYd%!54'"!4#"!5$!$$63 sixu /*ol(NwoN! !32=4&'7!>3WU[PÔZ!7254&'! 56%'R?15\J1z 2_%! 65&/%776'532_{V-G5͝hA6ZݥQu?SݠvEa!^w߸wm/T}ڐd%! !3254+3254'#3254!#53 GEEF0ҹuz5BډMB`{dTxnco& !3254'#3275&+3254#5 >1ʺ,/?4ԤJE{Ibdq~Qp9dj 654#"27&! 3 %!0 gZhhv ?Czd! 5!32=4+53$!%FʘE$s7ad!! 5!325+3>7#!327!HιeobdGĞu ۵j ,d$#&325;4#"! 47&! 3#3Gd+UBX{wi^dP *#2!&'!5 56#"! 56%63 ClQFA$W>R\.#327$76#"!!"6%!$!2SIr#G %]]*Y$O6H"/NiFhI(2 :(jnn7S :#36$47&'!.#"'67$%&57!325&!1H JC3&kJ24"3rT0/';* 1!j@ :AASMl=s[fd5VaYEVgn!!! 7!3254!~3,.!:"De}'Tn0!!!!! 7!3254! s ,.!:"De0 'Tn !!!!!!! 7!32545!U  ~3,.!:"De 6'TЊn!!! 7!3254!vL,.!:"De'Tn!#!!! 7!32545!l~>,.!:"De''Tƀnm 3327! 7!3254!id,.!:"Dem[O'Tn%!!! !354#"!'! ~C)%6p+$GЫP[n%Y!#! !354#"!'! LdC)%6p+$YGЫP[n% !!!!! !354#"!'! 1~C)%6p+$ &GЫP[n%m 3 7! !354#"!'! #C)%6p+$m[qGЫP[n(!!! !&5 ~ovt67>Gè&$n(Y!#! !&5 Bvovt67Y:>Gè&$n(m 3 7! !&5 Hovt67m[>Gè&$n) !!!#"!4#"!!263 ~0yюzej?7/5*{{n)0$!!!!!#"!4#"!!263   yюzej0 9?7/5*{{n) (!!!!!!!#"!4#"!!263   ~yюzej q?7/5*{{n)Y !#!#"!4#"!!263 BfyюzejYK?7/5*{{n)m% 3327!#"!4#"!!263 Fyюzejm[?7/5*{{n%u$!!! 7!3254#"#4+'3263 '~N=<FT G@!KDNNLHЩCOrC;bhhn%u0(!!!!! 7!3254#"#4+'3263  r =<FT G@!KDNNL0 HЩCOrC;bhhn%u& ,!!!!!!! 7!3254#"#4+'3263 1 r ~F=<FT G@!KDNNL& q HЩCOrC;bhhn%uY$!#! 7!3254#"#4+'3263 5=<FT G@!KDNNLYHЩCOrC;bhhn%um) 3327! 7!3254#"#4+'3263 l=<FT G@!KDNNLm[pHЩCOrC;bhhn%u' #'# ! 7!3254#"#4+'3263 ܘh=<FT G@!KDNNLPHЩCOrC;bhhX' ""326&!"3 ! 7.5463w}}wu||_`>s!Ey4{B##%R8>e)m''F@ ) !E#T(<2<<1@ ! '!/<22<2220#"!54763!#"!!!!!#354763LffL2fffDNNWXDN``NWX+B^@   ET<2<<991@    /<2<2990@p`@]!!#"!!!!#35463iJK:k$7DN``N'B@@    ET<2991@  /<22990!!!"!!!#3546{L<)7DN`N'@*.V@+ 0,  $E"&T/<2<<<<1@#.$+ *$!/<<22<<2220#"!54763!#"!!!#!!!#354763)!LffKkfff\iDNNWXDN```NWX'B)M@ +  #E!%T*<2<<1@"# )# /<<22<2220#"!54763!!!"!!!!!#354763LffLfffDNNWX)DN``NWX'H-#"!#35476;2!!;!"'&5#354'&"Lffֺffq\XY)DR`NWXXWN%NXYNDjU&547632!!;!"'&5#354'&#".#"!"'&'32654'&/.54632~Ƈr\XY+(E;2-'s_f12&%a?Y_ownkpqtij$ r?@u_]_\L%NXY?0&$)&80%005+ (KP%4:90 fU!"'&7676;#"3!'&763!#&!3265!!5#"'&5#!5#"'&5!32654ihls44)Q,7<&G.pfQmefQmcfhG.p`^]RWS`8bz,!Jp[.w#&)b]wvТb]wy|*<#& hD!&!5#"&5!32654/&763!!!3276=!!5#"&5<-0QmhG.pOQ,7_G.p@@fQm,"X\Тb]p[.w#&7bzL69#&VW0b]V f?!&!5#"&5!32654/&763!>32!54&'.#"!<-0QmhG.pOQ,7]Qn H.p,"X\Тb]p[.w#&7bzb]Von#'/V f@G!!#"'&5!3265#"'&76763!!3265!!5#"'&55#"3,nQmbfhG.pihls4bG.pfQmef΃`Lb]w{|*<#&)^]RWLp[.w#&)b]wvS`V V!&!5#"&5!32654/&763!676323265!!5#"&=4'&'.#"!<-0QmhG.pOQ,7]l[nG.AfF6[mH.C@@,"X\Тb]p[.w#&7bzZ6/V*<#&)u/VH1 #'WX/B`&0zu= 32673 &u cc Ȯ=FJJFB`&DdN`676745!#!3୏0!K'Ah{@`b8q~lC% T` !!4>7!>5!Wi>]6^g;f>^I7^hoKo&SqRoo(XuTX`#!!5!ڷrr:`!!4.#!5!2m ,QfM șa=.JW Tn\2# ?\X`!2#!5!2>4.#!X_$$_RzJ--JzR`AiiA!7U[v[U7!X!!!!@!K5rxvV:`)!2!4.#:7݉8;^Q`<ئ[|)nQX` !4&#!5!2c8݉8̏<``!4.#!#"'53265#5!2 &O?VeK2.C{uHZ[GXR&:]v.S !5!3!    ('"@('@('X'"@('X'"\@'`&'C'`&''`&'X`'(XX`'!)X\`'*`&+Y`',Y`'-m&/YP`'0 X`'1X`'2X7'Q3Xn&05X`'!7`&8`&:`&0;C`'!=H_&>X`'?(`'9 @`&A'",X' q(X' A2& ;X8365!!!%'#jUf\[Q[)=W@;$?@vu ^& ' UX'R XX'R ^& ' jX' XX' ^& ' jX' XX' ^&'U'RX'R ^&'j'X' ^&L'La'LpXa'Lp J& J'!J'"J'#J& J'!J'"J'# f&[ f& ='l ='l f&[ 2 f&='=' f&[ f&v< =' =' f&[ f&i =' ='}R&]g}R&g}&]6}&6}&]6}&6}&]L}&L &_X\ 'X\ (/&_L > /'L >1E2%! '$&7!32767654'&54767;#"ѽϒ@f3QgN2 %bD$0#7AK]$?.\^Zc:#=$$d|?O#! 6. )0$1G&< EG'< $G'<G'<1G'REG&(RG&)G&*1G'EG&(G&)KG&*K~<~ GL&;#&'#"'$47!32767654'!( i0?+]豌(f*7N8=7!ef a ;b-",ckJ8_w-~<'LE%~ G&4LE+a'LpXa'Lp   !(0 !!!"'0#"'&547!;5424&/>54"vT-i>f3%.8eA%damq%7K5"S90q{d:1v  \'qFl&qFl&Kl&K `2&qx7% 2&x7% `r'q>q r'q> `C&qn/ C&n/ `&q & &r ,S'  UX&R XX& RUX #!3276=!UD@bD,1fsa\,1jXX!#"'+3276=!;XnMMnbD,1f1,Dbmm,1jj1,$r,SjX'MXX'N  #4%$3o brIG?.Z 52#&$b or.?GI '/&'&#"#67632],$V5Hqpo?t?# $0)JI '327673#"'&'],$P;Iqpo?t# $,-JI:t^'t^i: u^ik ;# '&=!1)fKrsfT(LL":v^:w^'w^i: x^ 'x^i:y^'y^iz^'z^iJn{^'{^i(O&U|_'|_&U}_^&}_^ `'}q>q '}q> &U~_ &~_$&r}&>,'}DU'}pMX'}pNU !;!"'&f1,Db@Dsj1,\a^&'UX'WXX'W bR&p,'^R&R'j'RX'R ^L&L'j'RX'R f&[# f&='q='q f[ f/;#"'&'&'3 7!$'&54767&$3 &#&I=TBVyG<2mSgZ-ΤKȜfT_`" Bq.o?,ii7=-RWy3R}&] }'  &_ &%! 7676'4'!;#"&75OI4f ":,IKVQ9beDCmey" };, &_ ' `a cF%765!325!;!"'#"'&'#"'#"'$47!32767654/!J%f$B}f1,DbP1XO=wQ: #HFVDNx`iifl&5nNY':@f$8b2_&j1,47 Ha$Zv@$eUĴΪ) :CDhtz@J<95-%#!3276/!765!325!#"'&'#"JWbD,2f-SG%f$B}f\HCqQ: #HFNN,2i$b;6T2_&qY Ha$84#"'&'#"'#!3276/!765!325!;!"'CqQ: #HFSJWbD,2f-SG%f$B}f1,DbP1X Ha$`N,2i$b;6T2_&j1,47 `' a c' 5'* 8'*  c 9F!"'&'#"'$47!32767654'!67632;#"'!327654'&#-=DNx`iifl&5nNY':3J $hwG-*BVXcCD~v;51KnC v@$eUĴΪ) :CDhtZ(--{i3c29#x [2/7O2+%#!3276/!67632)"'&%327654'&#ldbD,2fChw縮ng_LD~v;51KnCrr,2ie5{i3c`[2/7O2'4%)"'&'#!3276/!67632;#"'%327654'&#^gg_L0ldbD,2fChwG-*BVXiD~v;51KnC[[7.)!(`X?$U50EUC0&q|!3%#"'&'+3276767632;#"'%654'&'&32x|@hu>7.$lMK/0|K$"& (<;'%UC0&?`X?$Dei#";)!(~<&~ G'{4U&MWCX&NWCbRp %&'&'32&5!;#"'&''"'&5476_)-Daf#)D K\GBl8:j=(3 #60!ȎR,"#A0D +9654'&#"&'#"'+327&'&5476327654'&%c'.W:B^zikON6 $x.m"*<z$J<-&!-#9Һ49Wqg$ >HEpb&>2=8C!$= \$/6763$!!%"'&'#!327654#"3254'&#xWxWx؈-IT_dH-66-Hd_TIĢU@hxxh@UDM419GvG914MD `q !0!"'&'&547676763#!7676&'&;4 c]bm_Y5 ?_אַWe=/'*#$"zQT4,8*:79Q[eJS6@)'-'$r,S3#'$'&7!32765&'&'&5476763 ;#"'&#"ľT@fF36 0J2LgV5=nZD-9B)i[eD*#("% %Tb/I#&,x &r ,S' jX'MXX'N$'| ,''| ,D$'} D''} T $&~^T ''~^T$!"'5767!6765!$;IVjhjO j%fB[A*%,yA+7T'%!"'5767!6765!;!"'&qjhjO j%f1,Dbr6%*%,yA+7j1,?*2h!% 546?>54$#">32!tB*D@^N]yfQV`59@jBihB--K>9Yb(*BCOF.\4:bR1ddT !%!UU!uou}"7>54&#7>54&#63 !"'S0Sz~f{qihGElkz7XVd@  l4~ 33!67676'.'Ȗ *@JL hѴ2 %&T]Yl %!%%0B0B0HPHP !%0B0bHPf #3!3#f0,}, !!!!!pp+w2# $&6$ >7!!!%!.zzz : zt$$:t.:$N{{ : {{%t;t.;%t)!, )! ,$s9z #!,}  3  !_33C?3_3v R3  !_C?_v  !!!!!!!!,v2222+2233'2"&464."26$ $&6$ _zYYzY'KK~~KK~zzz : zYzYYz~LL~~LL{{ : {{_654$#"#!63 NԬs[vX 3! !3>>+>$ 4."26!&'&> f8ara88ara eԿeDra88ara88f: :v뉉2654& #!6TdqԎ|~i$  >^8^L^^d %!% \L\|H!!$,x 7   'NHHW  %)5&'&547675!6764'&ԭŇ,Ň:1cc2e:1cc2&|{'&|{':.-ZZ--ZZ-dl )7!,nf}L4&"2 7& $4&"2 X|XX|ݧtX|XX|9|XX|Xrr|XX|XX !!63$654&XԀ%QOX %"'0! %654&X,9+OQd4!!!d,U,T+UdT2"&4% zYYzY YzYYz}usudT  %UUusu}xdz !d&@v5v !5!5!)5!S2SR= ']bC7'cFX: 'b:b; 'bc<= 'b]H'b'b&bbH&c'b'bbH'b'b'b H'c'b&bbH&c'b'bcH' 'b'bcH'b'b&bH'b'b&cH&'b'b H'b&b'bcH&c'b'bcH'c'b'b H'b'c'cbH'c'c'bcH'b'c'c H&b'c'bH'c'b&cH' 'c'bH'b&b'b H' 'b'bcH'b'b'  H' &b'bcH'c'b&c H'c'b'  H&b&'b H&c&'b H' 'b& H&b'b'bcH'b'b&ccH' 'b'bcH&b'b'ccH'c'b&ccH'c'b' cH&b&'bcH&c&'bcH' 'b&cH'c'b&bcH'c'b&ccH' 'b'ccH&b'c'ccH&c'c'ccH' 'c'ccH&'c&bcH&&c'ccH&'c' cH' 'b&bcH&c'b' cH' ' 'bcH'c&b' cH' &c'ccH' ' 'ccH' &&bcH' &&ccH' &' cH'b'b&bH&c'b'bH'b'b' H'c'b&bH&c'b'cH' 'b'cH'b&&bH'b&&cH&'b' H&b'b'cH&c'b'cH'c'b' H'c'c&bH'c'c&cH'c'c' H&b'c&H'c&c&H' 'c&H&b'b' H' 'b&cH'b' ' H' &b'cH'c&c' H'c' ' H&b&' H&c&' H' &'  3 !#!!"\xw9:4]xi+"+33%! )327&#'327&+67654'&676'&4`7fa|cF<]SC. -fxxCC#3!3 #贴&r]xo@; %3#'!!!4xxxx !#!! !3!3_Gb\}Դ!]>+]ff%% 7& 676'& ! K{@{{{}LLhhg4334Ь01ddjk-@654&/&'&54.#"!"$'532654&/.54$!2~sLL;;Ѥ:'R{hZtӎ⏏ |~Z {Ux]\3(5TUQ:O舼3(1kH5DD]b{T(<65[\e]Z%(=%%  !!!)#3 \x]#%&5#676#!3265!! 6~-?-~rplx**x V޹"6=  %! ! 3!0Xx]A+=h%#!# ! ! 3! !*5*>{YZx]==+o2@%#! # ! 3Uy(6xxz[! 3!3#\x uX{#,4%34'&'!5#"&54$!354&#"5>3 5#"676Դd+H#,\H"ӆsUzz@\G;q:4C*SH0xT%32#"&36a\Jt u[Gb]\]$?hDGX6{ .#"3267# !26]Mx]]xL\TWV/XU\ %!!%7*7l zy[I #%267.#"%#"32!!#3C{Ju tJ\,Ŵ[\Gc\II]bXcehX { %# ! !32%!&'&#"K"=Zrx~i~fD015:9|c|w|x97Fx$xZTV\FJy (4<6765#'!!"'&'5326=#"54323276'&#"2 B1xogkf^[Ju uJebjjbw/'jj'a'jwx!65b\CA\cvu3.b/nN%)!4&'.#"!!>32%34'&'3 H.p\WvԴMB  Ĵnn#'ub]Vx2TH%!A1.$1 3%!!!!\hpxF16765#!+73265!!Z4Mx>fKh9UGs\<3!!3 #$x\tHѼg$du(%&5#3#"&5'N3LfT 2U9~\sFn{!M334'&'34'&'4&'.#"!!>3267>32!4&'.#"MB  32%34'&'3 H.p\WvԴMB  Ĵnn#'u`b]Vx2TH%!A1zpX'{ # ! 327&#"676'&!EG$~~RgeQQegR%~~{8(8(x>xH|1xx[VI{ #"327&>32#"&'!!3#6'aJu tJ\Դ;Gc\]bpeGDh\VH{ %"3267.05!!#"32#0D^Jt uty\GLb]II\Xi*{3.#"!!>32$R/]/\E}*(p-p`nejb{B>54&/&'&5432654'&/&'&54632.#"!"&'7U?~3k>5>|4bktij$%m?c`cڀs_fcKa?^_o}2 &:/*[E% &Es%->?FD: "daƲ ::=@47 ,_`γ##7 #&'4'!!;!"&5#53?2j$x{KsXբ&K#D\OxsNxkxJdD`%)3265!!5#"&5#&'&'&'&5# H.p\Wv,MB  <`n#'b]xεTH%!A1p` %# ! 3!ZmxpH`#3#3!!3! !'yp(\` 3%! 3 ! #\d(^pxe9geF`6?'#%3+532767! D1)H]_q> k|!qx6JJx1 Y\` #3!!!5! NNxxxp '$%f\&9'()f*+kf=-q./901ff23ff45-6 j78 '9=:';<\q=X{D^EX5{F\GX {H'I\FyJKLFMyNa{P{QX'{RV^{S\VyT{Ujb{VW`X`YH`Z `[F`\\F`] ''() '*+\q,-ff.=/q0 '1923b4ff567ff8 j9:ff;'<s\=7> c)yFV_0GVU`HY($In{JYVUKV{LX($M`N=`O=PT`Q`RYVUSX'{TV`UV^~VXV5{WX`X+`Y `ZVj[4V`\V`]X`^;e g{i$foc{VjF^~.`kb/'%'&'676! ! &#"320&&1&00&x@'&@/DQRDDRQ"//!J/"y"/Imstm %3#!5%!!!r6R[TxHxHx%%367654'&'"5$ %!5654&5<|>Ic6\D%$XŹSB-yxtY]3neclԵcw| w!&.!"'5327&#!5!27&#"563 65467>4&4%tU0480,C[ DϹ&d8XqEPJ~ D {x < }@+E Dt\3 !#3!3#!!5,\/6]RxQ# !!63  '527&'#6676'&!#0W?0mm0]Hx^VY0k{'W-W&# )632# !2'& 676'&'&#"2PYkuEʾ&7-xi/D}!mVHNp7@ :jX)oac.!0 3%!!!y>+Q]xx]}'/8BJ.54$! ! $546'&'67%6764'&'&#"27&#"32%כm,CD,d#44#D5#dd#7AC8789BA79BAD,lm,)ž)*ސFQ!">F)$FF(}V"QS!n )%#"3 !"'5 76'%327&"AYk:4?ʾ&: 7-xi/D}!mVH !v&Y@ :j)oc.!b/\3#}jF !;3#!. Y_$ F !; 7!'!%3 YٍF %=F !;"4767632"'&'&!'!%30&$I Yٍ$$% %=F !;,048"'&'&4767632"'&'&4767632!'!%3$$%$%$ Yٍ?H%$HG %=F !;+AEIM"'&'&4767632"'&'&476762"'&'&4767632!'!%3$$%$H$%$ Yٍ?H%$ JHHG %=F !;+AW[_c476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&!'!%3'H$%$%HH$%$%H Yٍ$JJ%$J%$S$J %=F !;+AWnrvz476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3'H$%$%HH$%$%H&$I Yٍ$JJ%$J%$S$J$$% %= F !;*@Ui"'&'&476762"'&'&5476762 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632!'!%3$H%$HJ&$UJHJH~J&$ YٍRHJ%$HG$$%$HGH%$H %=F !;!476762"'&'&!'!%3JH Yٍ$$% %=F !;,048476762"'&'&%4767632"'&'&!'!%3JHd&$I Yٍ$$%%$$% %=F !;,BFJN476762"'&'&"'&'&4767632"'&'&4767632!'!%3JH$$%$%$ Yٍ$$%H%$HG %=F !;,AW[_c476762"'&'&"'&'&4767632"'&'&476762"'&'&4767632!'!%3JH$$%$H$%$ Yٍ$$%H%$ JHHG %=F !;+AWmquy476762"'&'&476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&!'!%3JH]H$%$%HH$%$%H Yٍ$$%.$JJ%$J%$S$J %= F !;+AWm476762"'&'&476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3JH]H$%$%HH$%$%H&$I Yٍ$$%.$JJ%$J%$S$J$$% %= F !;*@Vk476762"'&'&%"'&'&476762"'&'&5476762 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632!'!%3JH$H%$HJ&$UJHJH~J&$ Yٍ$$%HJ%$HG$$%$HGH%$H %=F !;+/37"'&'&4767632"'&'&5476762!'!%3rJ%$$Jm Yٍ@H$%$%H %=F !;"8N4767632"'&'&!'!%3"'&'&4767632"'&'&54767620&$I YٍJ%$$J$$% %=H$%$%HF !;,048Nd"'&'&4767632"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$%$ YٍJ%$$J?H%$HG %=H$%$%HF !;+AEIMcy"'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$H$%$ YٍJ%$$J?H%$ JHHG %=H$%$%H F !;)>SW[_t476762"'&'&476762"'&'$476762"'&'476762"'&'&!'!%3"'&'&4767632"'&'&476762'HIIHHIIH YٍI%$$I$II%$I%$S$I %=HIIH F !;+AWnrvz476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&4767632"'&'&5476762'H$%$%HH$%$%H&$I YٍJ%$$J$JJ%$J%$S$J$$% %=H$%$%H F !;*@Ui"'&'&476762"'&'&5476762 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632!'!%3"'&'&4767632"'&'&5476762$H%$HJ&$UJHJH~J&$ YٍJ%$$JRHJ%$HG$$%$HGH%$H %=H$%$%HF !;+AEIM"'&'&4767632%"'&'&4767632"'&'&5476762!'!%3rJ%$$$%$Jm Yٍ@H$%JI $%H %=F !;+AX\`d"'&'&4767632%"'&'&4767632"'&'&54767624767632"'&'&!'!%3rJ%$$$%$J&$I Yٍ@H$%JI $%H$$% %=F !;+AXnrvz"'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&4767632!'!%3rJ%$$$%$JV$$%$%$ Yٍ@H$%JI $%HH%$HG %= F !;+AXm"'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&476762"'&'&4767632!'!%3rJ%$$$%$JV$$%$H$%$ Yٍ@H$%JI $%HH%$ JHHG %= F !;+AWm"'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H Yٍ@H$%JI $%Hz$JJ%$J%$S$J %= F !;+AWm"'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H&$I Yٍ@H$%JI $%Hz$JJ%$J%$S$J$$% %= F !;+AVl"'&'&4767632%"'&'&4767632"'&'&5476762!"'&'&476762"'&'&5476762 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632!'!%3rJ%$$$%$JI$H%$HJ&$UJHJH~J&$ Yٍ@H$%JI $%HHJ%$HG$$%$HGH%$H %=F !;)>SW[_476762"'&'&476762"'&'$476762"'&'476762"'&'&!'!%3HIIHHIIH Yٍ$II%$I%$S$I %=F !;!6K`u4767632"'&'&!'!%3476762"'&'&476762"'&'$476762"'&'476762"'&'&0&$I YٍHIIHHIIH$I %=m$II%$I%$S$I F !;,048Ndz"'&'&4767632"'&'&4767632!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&$$%$%$ YٍH$%$%HH$%$%H?H%$HG %=m$JJ%$J%$S$J F !;+AEIMcy"'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&$$%$H$%$ YٍH$%$%HH$%$%H?H%$ JHHG %=m$JJ%$J%$S$J F !;+AW[_cy476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H YٍH$%$%HH$%$%H$JJ%$J%$S$J %=m$JJ%$J%$S$J F !;+AWnrvz476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H&$I YٍH$%$%HH$%$%H$JJ%$J%$S$J$$% %=m$JJ%$J%$S$J F !;*@Ui"'&'&476762"'&'&5476762 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&$H%$HJ&$UJHJH~J&$ YٍH$%$%HH$%$%HRHJ%$HG$$%$HGH%$H %=m$JJ%$J%$S$JF !; !7Mcy7!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&476762"'&'& YٍH$%$%HH$%$%HJHF %=m$JJ%$J%$S$J$$% F !;"8Ndz4767632"'&'&!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&0&$I YٍH$%$%HH$%$%HJH$$% %=m$JJ%$J%$S$J$$% F !;,048Ndz"'&'&4767632"'&'&4767632!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$%$ YٍH$%$%HH$%$%HJH?H%$HG %=m$JJ%$J%$S$J$$% F !;+AEIMcy"'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$H$%$ YٍH$%$%HH$%$%HJH?H%$ JHHG %=m$JJ%$J%$S$J$$% F !;+AW[_cy476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H YٍH$%$%HH$%$%HJH$JJ%$J%$S$J %=m$JJ%$J%$S$J$$% F !;+AWnrvz476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H&$I YٍH$%$%HH$%$%HJH$JJ%$J%$S$J$$% %=m$JJ%$J%$S$J$$%F !;*@Ui"'&'&476762"'&'&5476762 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632!'!%3476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$H%$HJ&$UJHJH~J&$ YٍH$%$%HH$%$%HJHRHJ%$HG$$%$HGH%$H %=m$JJ%$J%$S$J$$% F !; ":Pf|7!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632 Yٍ$$%%$$%J%$0$H%$HJ%$F %=%$J&$$%H$%$%HH$%$%H F !;"9Qg}4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762"'&'&547676320&$I Yٍ$$%%$$%J%$0$H%$HJ%$$$% %=%$J&$$%H$%$%HH$%$%H F !;,048Og}"'&'&4767632"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632$$%$%$ Yٍ$$%%$$%J%$0$H%$HJ%$?H%$HG %=%$J&$$%H$%$%HH$%$%H F !;+AEIMd|"'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632$$%$H$%$ Yٍ$$%%$$%J%$0$H%$HJ%$?H%$ JHHG %=%$J&$$%H$%$%HH$%$%H F !;+AW[_cz476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632'H$%$%HH$%$%H Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J %=%$J&$$%H$%$%HH$%$%HF !;+AWnrvz476762#"'&'&4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632'H$%$%HH$%$%H&$I Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J$$% %=%$J&$$%H$%$%HH$%$%HF !;*@Ui "'&'&476762"'&'&5476762 "'&'&4767632"'&'&'476762"'&'.76762"'&'&54767632!'!%3"'&'&5476762"'&'&5476762 "'&'&4767632"'&'.76762"'&'.76762"'&'&4767632$H%$HI&$UIHIH}I&$ Yٍ$I%$II%$0$H%$HI%$RHI%$HG$$%$HGH%$H %=%$I&$IHIIHHIIHm!5!!$ fm !!7!!!! %=m?'m"2#"'&'&47676!!7!!!!E$$% %=&$Ih?'m+/37476762#"'&'&476762"'&'&!!7!!!!H%$HG %=|$I;$%$?'m+AEIM476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H%$ JHHG %=|$$%2$H.$%$?'m+AW[_c2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!N$JJ%$J%$S$J %=H$%$%H"H$%$%Hq?'m+AWnrvz2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!N$JJ%$J%$S$J$$% %=H$%$%H"H$%$%H &$Ih?' m*@Ui%476762"'&'&%4767632"'&'&476762"'&'4767672"'&'$4767>"'&'4767632'&'!!7!!!!HJ%$HG$$%$HGH%$H %=$H%$H3J&$JHJHJ&$?'m!2#"'&'&47676!!7!!!!E$$% %=kJH?'m,0482#"'&'&476762#"'&'&47676!!7!!!!E$$%%$$% %=iJH&$Ih?'m,BFJN2#"'&'&47676476762#"'&'&476762"'&'&!!7!!!!E$$%H%$HG %=kJH$$%;$%$?'m,AW[_c2#"'&'&47676476762#"'&'&476762"'&'&476762"'&'&!!7!!!!E$$%H%$ JHHG %=kJH$$%2$H.$%$?'m+AWmquy2#"'&'&476762"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J %=kJHH$%$%H"H$%$%Hq?' m+AWm2#"'&'&476762"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J$$% %=kJHH$%$%H"H$%$%H &$Ih?' m*@Vk2#"'&'&47676476762"'&'&%4767632"'&'&476762"'&'4767672"'&'$4767>"'&'4767632'&'!!7!!!!E$$%HJ%$HG$$%$HGH%$H %=kJH&$H%$H3J&$JHJHJ&$?'m+/37476762#"'&'4767632"'&'&!!7!!!!H$%$%H %=J%$S$J?'m"8N2#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&E$$% %=H$%$%H&$Ih?'IJ%$S$Jm,048Nd476762#"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$HG %=H$%$%H|$$%;$%$?'IJ%$S$Jm+AEIMcy476762#"'&'&476762"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$ JHHG %=H$%$%H|$$%2$H.$%$?'IJ%$S$J m+AW[_cy2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J %=H$%$%HH$%$%H"H$%$%Hq?'IJ%$S$J m+AWnrvz2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J$$% %=H$%$%HH$%$%H"H$%$%H &$Ih?'IJ%$S$J m*@Ui%476762"'&'&%4767632"'&'&476762"'&'4767672"'&'$4767>"'&'4767632'&'!!7!!!!476762#"'&'4767632"'&'&HJ%$HG$$%$HGH%$H %=H$%$%H$H%$H3J&$JHJHJ&$?'IJ%$S$Jm+AEIM476762#"'&'476762"'&'&4767632"'&'&!!7!!!!H$%JI $%H %=J%$J$$%.$J?'m+AX\`d476762#"'&'476762"'&'&4767632"'&'&2#"'&'&47676!!7!!!!H$%JI $%H$$% %=J%$J$$%.$J+&$Ih?'m+AXnrvz476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&!!7!!!!H$%JI $%HH%$HG %=J%$J$$%.$J$$%;$%$?' m+AXm476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H$%JI $%HH%$ JHHG %=J%$J$$%.$J$$%2$H.$%$?' m+AWm476762#"'&'476762"'&'&4767632"'&'&2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!H$%JI $%Hz$JJ%$J%$S$J %=J%$J$$%.$J4H$%$%H"H$%$%Hq?' m+AWm476762#"'&'476762"'&'&4767632"'&'&2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!H$%JI $%Hz$JJ%$J%$S$J$$% %=J%$J$$%.$J4H$%$%H"H$%$%H &$Ih?' m+AVl476762#"'&'476762"'&'&4767632"'&'&476762"'&'&%4767632"'&'&476762"'&'4767672"'&'$4767>"'&'4767632'&'!!7!!!!H$%JI $%HHJ%$HG$$%$HGH%$H %=J%$J$$%.$J$H%$H3J&$JHJHJ&$?'m)>SW[_2"'&'&476762#"'&'&47672#"'&'&47672"'&'&47676!!7!!!!N$II%$I%$S$I %=tHIIH"HIIH ?'m!6K`u2"'&'&47676!!7!!!!2"'&'&476762#"'&'&47672#"'&'&47672"'&'&47676E$I %=m$II%$I%$S$I&$Ih?'HIIH"HIIH m,048Ndz476762#"'&'&476762"'&'&!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676H%$HG %=m$JJ%$J%$S$J|$$%;$%$?'H$%$%H"H$%$%H m+AEIMcy476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676H%$ JHHG %=m$JJ%$J%$S$J|$$%2$H.$%$?'H$%$%H"H$%$%H m+AW[_cy2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676N$JJ%$J%$S$J %=m$JJ%$J%$S$JH$%$%H"H$%$%Hq?'H$%$%H"H$%$%H m)>Simqu2"'&'&476762#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!2"'&'&476762#"'&'&47672#"'&'&47672"'&'&47676N$II%$I%$S$I$I %=m$II%$I%$S$IHIIH"HIIH &$Ih?'HIIH"HIIH m*@Ui%476762"'&'&%4767632"'&'&476762"'&'4767672"'&'$4767>"'&'4767632'&'!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676HJ%$HG$$%$HGH%$H %=m$JJ%$J%$S$J$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%Hm !7Mcy!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676 %=m$JJ%$J%$S$J$$%m?'H$%$%H"H$%$%H JH m"8Ndz2#"'&'&47676!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676E$$% %=m$JJ%$J%$S$J$$%&$Ih?'H$%$%H"H$%$%H JH m+/37Lav476762#"'&'&476762"'&'&!!7!!!!2"'&'&476762#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676H%$HG %=m$II%$I%$S$I$I|$I;$%$?'HIIH"HIIH JH m+AEIMcy476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676H%$ JHHG %=m$JJ%$J%$S$J$$%|$$%2$H.$%$?'H$%$%H"H$%$%H JH m+AW[_cy2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J %=m$JJ%$J%$S$J$$%H$%$%H"H$%$%Hq?'H$%$%H"H$%$%H JH m+AWnrvz2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J$$% %=m$JJ%$J%$S$J$$%H$%$%H"H$%$%H &$Ih?'H$%$%H"H$%$%H JHm*@Ui%476762"'&'&%4767632"'&'&476762"'&'4767672"'&'$4767>"'&'4767632'&'!!7!!!!2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676HJ%$HG$$%$HGH%$H %=m$JJ%$J%$S$J$$%$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H JH m ":Pf|!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'&4767632'&' %=%$J&$$%H$%$%HH$%$%Hm?'|$$%%$$%3J%$$H%$HkJ%$ m"9Qg}2#"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'&4767632'&'E$$% %=%$J&$$%H$%$%HH$%$%H&$Ih?'|$$%%$$%3J%$$H%$HkJ%$ m,048Og}476762#"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'&4767632'&'H%$HG %=%$J&$$%H$%$%HH$%$%H|$$%;$%$?'|$$%%$$%3J%$$H%$HkJ%$ m+AEIMd|476762#"'&'&476762"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'&4767632'&'H%$ JHHG %=%$J&$$%H$%$%HH$%$%H|$$%2$H.$%$?'|$$%%$$%3J%$$H%$HkJ%$ m+AW[_cz2"'&'&5476762#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'&4767632'&'N$JJ%$J%$S$J %=%$J&$$%H$%$%HH$%$%HH$%$%H"H$%$%Hq?'|$$%%$$%3J%$$H%$HkJ%$m)>Simqu2"'&'&476762#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'&476762'&'N$II%$I%$S$I$I %=%$I&$IHIIHHIIHHIIH"HIIH &$Ih?'|$I%$I4I%$$H%$HlI%$m*@Ui %476762"'&'&%4767632"'&'&476762"'&'4767672"'&'$4767>"'&'4767632'&'!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'&476762'&'HI%$HG$$%$HGH%$H %=%$I&$IHIIHHIIH$H%$H4I&$IHIHI&$?'|$I%$I4I%$$H%$HlI%$gm "3!254#%!2#!"54!xxxxAA,Gxxxyxxygm$03;#"'##65##"5476"3!254#%!2#!"54!3#'!#A; lB;;Bl ;"xxxxAAK Қ DDy~&%Nkk̛N%&VxxxyxxyUgm$0I#"'##65##"5476"3!254#%!2#!"54!!56754&#"5>32A; lB;;Bl ;"xxxxAA"?XhU4zHM98y~&%Nkk̛N%&Vxxxyxxy?rn81^BQ##{l0gm$0Y#"'##65##"5476"3!254#%!2#!"54#"&'532654&+532654&#"5>32A; lB;;Bl ;"xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zy~&%Nkk̛N%&VxxxyxxymR|yOFJLl?<:=svcE`gm$03>#"'##65##"5476"3!254#%!2#!"54 !33##5!5A; lB;;Bl ;"xxxxAA5by~&%Nkk̛N%&Vxxxyxxy]mygm$0Q#"'##65##"5476"3!254#%!2#!"54!!67632#"&'53264&#"A; lB;;Bl ;"xxxxAAy^^a`<~B9>>Eoo4h6y~&%Nkk̛N%&Vxxxyxxy_ MLKJq ffgm$0@`#"'##65##"5476"3!254#%!2#!"54"327654'&&'&#"67632#"&547632A; lB;;Bl ;"xxxxAAGX3333XW33331221DD &9:DTTXWll122y~&%Nkk̛N%&Vxxxyxxy45[Z4554Z[54bg KL1LMONuv gm$07#"'##65##"5476"3!254#%!2#!"54!#!A; lB;;Bl ;"xxxxAAiH3y~&%Nkk̛N%&Vxxxyxxy0gm$0=[j#"'##65##"5476"3!254#%!2#!"54"32764'%&'&546 #"'&54767327654'&"A; lB;;Bl ;"xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/y~&%Nkk̛N%&Vxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$gm$0P_#"'##65##"5476"3!254#%!2#!"54532767#"&547632#"'&2654'&#"A; lB;;Bl ;"xxxxAA.1220DC #<9EWXWXkl122Xf33XU5443y~&%Nkk̛N%&Vxxxyxxyg KK/MNoouv rh\Z4554Z\44gm$0>JQ#"'##65##"5476"3!254#%!2#!"54"27654/2#"&546573A; lB;;Bl ;"xxxxAA2332233yty~&%Nkk̛N%&VxxxyxxyVVVVVVV)t'gm$0=#"'##65##"5476"3!254#%!2#!"543+53265A; lB;;Bl ;"xxxxAAA@1(TFy~&%Nkk̛N%&VxxxyxxyܕFE`Tlgm$0J#"'##65##"5476"3!254#%!2#!"54#"&54632.#"3267A; lB;;Bl ;"xxxxAA<1e9ɴ9f0/j6||{}7j.y~&%Nkk̛N%&Vxxxyxxyt"$$"gm4@L"#"&54632&#"32#"'##65##"5476"3!254#%!2#!"54VX~_ Ua`UU`aA; lB;;Bl ;"xxxxAA,ۥ(j8pny~&%Nkk̛N%&Vxxxyxxygm$0;#"'##65##"5476"3!254#%!2#!"5433 ##A; lB;;Bl ;"xxxxAAjixy~&%Nkk̛N%&VxxxyxxyazBmgm!-0867632 &547632"3!254#%!2#!"54!3#'!#7>T>}}?V<7xxxxAAK Қ DDv>G-;n;-GAxxxyxxyUgm!-F67632 &547632"3!254#%!2#!"54!!56754&#"5>327>T>}}?V<7xxxxAA"?XhU4zHM98v>G-;n;-GAxxxyxxy?rn81^BQ##{l0gm!-V67632 &547632"3!254#%!2#!"54#"&'532654&+532654&#"5>327>T>}}?V<7xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zv>G-;n;-GAxxxyxxymR|yOFJLl?<:=svcE`gm!-0;67632 &547632"3!254#%!2#!"54 !33##5!57>T>}}?V<7xxxxAA5bv>G-;n;-GAxxxyxxy]mygm!-N67632 &547632"3!254#%!2#!"54!!67632#"&'53264&#"7>T>}}?V<7xxxxAAy^^a`<~B9>>Eoo4h6v>G-;n;-GAxxxyxxy_ MLKJq ffgm!-=]67632 &547632"3!254#%!2#!"54"327654'&&'&#"67632#"&5476327>T>}}?V<7xxxxAAGX3333XW33331221DD &9:DTTXWll122v>G-;n;-GAxxxyxxy45[Z4554Z[54bg KL1LMONuv gm!-467632 &547632"3!254#%!2#!"54!#!7>T>}}?V<7xxxxAAiH3v>G-;n;-GAxxxyxxy0gm!-:Xg67632 &547632"3!254#%!2#!"54"32764'%&'&546 #"'&54767327654'&"7>T>}}?V<7xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/v>G-;n;-GAxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$gm!-M\67632 &547632"3!254#%!2#!"54532767#"&547632#"'&2654'&#"7>T>}}?V<7xxxxAA.1220DC #<9EWXWXkl122Xf33XU5443v>G-;n;-GAxxxyxxyg KK/MNoouv rh\Z4554Z\44gm!-;GN67632 &547632"3!254#%!2#!"54"27654/2#"&5465737>T>}}?V<7xxxxAA2332233ytv>G-;n;-GAxxxyxxyVVVVVVV)t'gm!-:67632 &547632"3!254#%!2#!"543+532657>T>}}?V<7xxxxAAA@1(TFv>G-;n;-GAxxxyxxyܕFE`Tlgm!-G67632 &547632"3!254#%!2#!"54#"&54632.#"32677>T>}}?V<7xxxxAA<1e9ɴ9f0/j6||{}7j.v>G-;n;-GAxxxyxxyt"$$"xm1=I"#"&54632&#"3267632 &547632"3!254#%!2#!"54VX~_ Ua`UU`a7>T>}}?V<7xxxxAA,ۥ(j8p0v>G-;n;-GAxxxyxxygm!-867632 &547632"3!254#%!2#!"5433 ##7>T>}}?V<7xxxxAAjixv>G-;n;-GAxxxyxxyazBmgm!)0 00"3!254#%!2#!"54!3#'!#hfxxxxAAK Қ DD xxxyxxyUgm70 00"3!254#%!2#!"54!!56754&#"5>32hfxxxxAA"?XhU4zHM98 xxxyxxy?rn81^BQ##{l0gmG0 00"3!254#%!2#!"54#"&'532654&+532654&#"5>32hfxxxxAA\e9}F4wCmxolV^^ad_(fQI7Z xxxyxxymR|yOFJLl?<:=svcE`gm!,0 00"3!254#%!2#!"54 !33##5!5hfxxxxAA5b xxxyxxy]mygm?0 00"3!254#%!2#!"54!!67632#"&'53264&#"hfxxxxAAy^^a`<~B9>>Eoo4h6 xxxyxxy_ MLKJq ffgm.N0 00"3!254#%!2#!"54"327654'&&'&#"67632#"&547632hfxxxxAAGX3333XW33331221DD &9:DTTXWll122 xxxyxxy45[Z4554Z[54bg KL1LMONuv gm%0 00"3!254#%!2#!"54!#!hfxxxxAAiH3 xxxyxxy0gm+IX0 00"3!254#%!2#!"54"32764'%&'&546 #"'&54767327654'&"hfxxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/ xxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$gm>M0 00"3!254#%!2#!"54532767#"&547632#"'&2654'&#"hfxxxxAA.1220DC #<9EWXWXkl122Xf33XU5443 xxxyxxyg KK/MNoouv rh\Z4554Z\44gm,8?0 00"3!254#%!2#!"54"27654/2#"&546573hfxxxxAA2332233yt xxxyxxyVVVVVVV)t'gm+0 00"3!254#%!2#!"543+53265hfxxxxAAA@1(TF xxxyxxyܕFE`Tlgm80 00"3!254#%!2#!"54#"&54632.#"3267hfxxxxAA<1e9ɴ9f0/j6||{}7j. xxxyxxyt"$$"gm".:0 00"#"&54632&#"32"3!254#%!2#!"54hf5VX~_ Ua`UU`auxxxxAAAۥ(j8poxxxyxxygm)0 00"3!254#%!2#!"5433 ##hfxxxxAAjix xxxyxxyazBmgm !! !"3!254#%!2#!"540xxxxAA1GG}xxxyxxygm#/;>F65'&'&547632&54 632'"3!254#%!2#!"54!3#'!#U9H5?K1||1K?5I9xxxxAAK Қ DDL C4$jj$4F LxxxyxxyUgm#/;T65'&'&547632&54 632'"3!254#%!2#!"54!!56754&#"5>32U9H5?K1||1K?5I9xxxxAA"?XhU4zHM98L C4$jj$4F Lxxxyxxy?rn81^BQ##{l0gm#/;d65'&'&547632&54 632'"3!254#%!2#!"54#"&'532654&+532654&#"5>32U9H5?K1||1K?5I9xxxxAA\e9}F4wCmxolV^^ad_(fQI7ZL C4$jj$4F LxxxyxxymR|yOFJLl?<:=svcE`gm#/;>I65'&'&547632&54 632'"3!254#%!2#!"54 !33##5!5U9H5?K1||1K?5I9xxxxAA5bL C4$jj$4F Lxxxyxxy]mygm#/;\65'&'&547632&54 632'"3!254#%!2#!"54!!67632#"&'53264&#"U9H5?K1||1K?5I9xxxxAAy^^a`<~B9>>Eoo4h6L C4$jj$4F Lxxxyxxy_ MLKJq ffgm#/;Kk65'&'&547632&54 632'"3!254#%!2#!"54"327654'&&'&#"67632#"&547632U9H5?K1||1K?5I9xxxxAAGX3333XW33331221DD &9:DTTXWll122L C4$jj$4F Lxxxyxxy45[Z4554Z[54bg KL1LMONuv gm#/;B65'&'&547632&54 632'"3!254#%!2#!"54!#!U9H5?K1||1K?5I9xxxxAAiH3L C4$jj$4F Lxxxyxxy0gm#/;Hfu65'&'&547632&54 632'"3!254#%!2#!"54"32764'%&'&546 #"'&54767327654'&"U9H5?K1||1K?5I9xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/L C4$jj$4F Lxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$gm#/;[j65'&'&547632&54 632'"3!254#%!2#!"54532767#"&547632#"'&2654'&#"U9H5?K1||1K?5I9xxxxAA.1220DC #<9EWXWXkl122Xf33XU5443L C4$jj$4F Lxxxyxxyg KK/MNoouv rh\Z4554Z\44gm#/;IU\65'&'&547632&54 632'"3!254#%!2#!"54"27654/2#"&546573U9H5?K1||1K?5I9xxxxAA2332233ytL C4$jj$4F LxxxyxxyVVVVVVV)t'gm#/;H65'&'&547632&54 632'"3!254#%!2#!"543+53265U9H5?K1||1K?5I9xxxxAAA@1(TFL C4$jj$4F LxxxyxxyܕFE`Tlgm#/;U65'&'&547632&54 632'"3!254#%!2#!"54#"&54632.#"3267U9H5?K1||1K?5I9xxxxAA<1e9ɴ9f0/j6||{}7j.L C4$jj$4F Lxxxyxxyt"$$"gm#/;MW65'&'&547632&54 632'"3!254#%!2#!"54"#"&54632&#"32U9H5?K1||1K?5I9xxxxAA3VX~_ Ua`UU`aL C4$jj$4F Lxxxyxxyۥ(j8pgm#/;F65'&'&547632&54 632'"3!254#%!2#!"5433 ##U9H5?K1||1K?5I9xxxxAAjixL C4$jj$4F LxxxyxxyazBmgm +!%%!%%"3!254#%!2#!"54decb`bMxxxxAAnξ;3o(T"(Uxxxyxxyjn ! ! tu u jn  !! ! ,=C`tu <=u jn ! !  ! ut~<A tu<=jn ! !  ! ut~<A tu<=jn ! ! ! ! tu <=CAu tC<=@jn ! ! % tu `Au {@Cjn ! ! 0 tu Au {@Cjn % ! ! +aC ut@C tujV#+3462"7"32654$"&462"32654462"6"&4622>7>54&'&'>54&#"&547&"'654.#"'72>32%%"&''%&/'%.547&54632B\BB\t- .B\BB\, -o    lN.  ;qsV6C70AIbbOSC**CSObbIA07C6Vsq;  .8L+ʏ]KY YK]+8ggg=>uggg=>"6''6']6''6'$9]W>:LktLJ73(#XQik\B?&STTS&?B\kiQX#(37JLtkL>W]9rlȡ~3D#@mm@#D3~lȬr Kj - "(,"&4632'2654#"3#"&46327'7#5%32767654'&'7>732>7>54'.#"&$ &/.#"3276%2654#"'747'&'#".'.54>7>32676 767>32+"&'&'&'&'& '326y2>=32>=-5nnI3=>23=>S39?*nB?94iEB9?B  R' 8%/6 1.4&++ #?Y==Y?# ++&4.1 6/%8 'R  -*?9 9 !;+57? B:),#3A32%A(77(A%23A3#,):B ?75+;! 9 "`  B6Ĉ6B  _# 4aa7k~nnnnAnnnn-ںMғv$DK;7" D;KD$v h5WM' 1 *L7.4(#"NemmeN"#(4.7L* 1 'MW5hNA*,PI  ,9 :kR4_5"2S''RNNR''S2"5_4Rk: 9,  IP,*0(sBD0H.&&.H0DBs($'&=j(2AN7327327#"'#""'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''\E[:TT:[E\lJDEI>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy 0( ,@ *tt* B g굤g  &<]ii];& l m nmuvmmm b@,,@bdx==x.L #$-G0,a&0$4%Ca,0G-$#  ;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu: a a :uAwj9|BQW.>. .>.QWB j %1;Gh462"7"32654"547632"&462432#"'&"3265473267!"& 7654'>54'&#".#" 632+ '.'&'#"&'&'&54632676&#";67&%32767654&'&#"RtRRt78,%,% RtRRt%,%,78j`;j|TVZGqpGZVT|j7aij "Y:8mm8:Y" jia (+G&<5t5<&G+( tRRtRh11R $ $ tRRtR$ $k11TXLTr˚,0^1ioE55Eoi1^0,|,6[?Ki{pn7LL7np{iK?[6,|R:3/{W``W{/3:R jn ".49>BF4632#"&%462#"&! ! ! ! ! 67##%67#5#Q;:RR:;QBRtSS:;Qm<=CAtu XLL Hd e;QQ;:SS:;QQ;:SSC<=@u jj *%Z*Rdf jn #/5:?CG! ! ! ! 462#4&"!462#4&"! 67##%67#5#1<=CAtu Č=T=)Č=T=XLL Hd eC<=@u ŋSwwSŋSwwSj *%Z*Rdf _jn #/Y~5#67##67#%! 462#4&"!462#4&"! "'&/! &"&5476?&7! 4'#"'&/&'&! 6?"'462#4&"!462#4&"! ! ! ! ! %!7276Č=T=ɌČ=T=tu <=CABW!\ʎ\ŋSwwSŋSwwSu tC<=@j{u\\jn #/;AJ"&547462#4&"!462#4&"! ! ! ! ! %!7276AL6Č=T=ɌČ=T=tu <=CABW!\ʎ\,8"+6,#5 ŋSwwSŋSwwSu tC<=@j{u\\jn %+3%%''7'7! ! ! ! ! %!$76|'MM٠MMtu <=CABW!\\'nnUUnnu tC<=@j{u\\jc*5IW_7767 '&! /! '462#"&%4632#"&4$! ! 7&%654$! 6! &#"32s('s%22<=RtSS:;QQ;:RR:;Q ۼCAJKCݰG,&',H923QC<=99*;QQ;:SS:;QQvRS\\ t[\6JQrrQJ6nnj0-9J%462#"&%4632#"&'7 767 '&! ! 6 %! 7/M?RtSS:;QQ;:RR:;QMMs('s%22<=CA*go;QQ;:SS:;QQvRSno>G,&',H923QC<=@** t/0jn'297 767 '&! ! ! ! 4632#"&-%s('s%22<=CAtu Q;:RR:;Q'MMG,&',H923QC<=@u ;QQvRSdnnjn'3?7 767 '&462#4&"!462#4&"! ! ! ! s('s%22,Č=T=ɌČ=T=tu <=CAG,&',H923ŋSwwSŋSwwSu tC<=@jn 7CQ462#4&"!462#4&"!27&'# 3 536! ! ! 327674'&fČ=T=)Č=T= &?)   #I=#   )?& >2<tu <=CAs('s%22%?A>ϾDLD 1GG1 DLD>A?%*u tC<=@G,&',H923jn#3<! 4'#"&5"&=#! ! %7767 '&!&'&! 1<=Tn즦nUtu ss('s%22`C<àOddddOu [G,&',H923;jn)5!!5!2767!! ! ! ! lʎ's%2~tu <=CA',H929u tC<=@jn%15!4632#"&%462#"&! ! ! ! LvQ;:RR:;QBRtSS:;Qtu <=CAq;QQvRS:;QQ;:SSu tC<=@jn #5!!5!5!! ! ! ! tu <=CA凇yu tC<=@jn )7! ! ! ! 5!5!2#"&545!5!2#"&5451<=CAtu x:RR:;QVx:SS:;QC<=@u -Q;:SS:Q;:SS:jn *6B"&475!%7 '%4632#"&%462#"&! ! ! ! PA6L6= MXMXMQ;:RR:;QBRtSS:;Qtu <=CA5O66O5Eonno;QQvRS:;QQ;:SSu tC<=@jn'35!"&53265!"&53265! ! ! ! L6Č=T=7Č=T=?tu <=CAqŋSwwSŋSwwSbu tC<=@jn%1%'4632#"&%462#"&! ! ! ! 9g9Q;:RR:;QBRtSS:;Qtu <=CA{{;QQvRS:;QQ;:SSu tC<=@jnB'! ! ! ! 7"'&'&#"'67623276762&__Z<=CAtu _4) FF "58 yFF "54( FFy\__C<=@u _Wi"bc(!__9("bb("_i"bb"(9_jn #/;4632#"&%462#"&7'7'7'! ! ! ! Q;:RR:;QBRtSS:;QPA<NvX..XvN>#u tC<=@jn")6BN2#'&5&76334764632#"&-%7'7'7'! ! ! ! j<2> &@(   "VQ;:RR:;Q'MMنPA<ϾDLD 1GN;QQvRSdnn>NvX..XvN>#u tC<=@jn $0<462#4&"!462#4&"7'7'7'! ! ! ! Č=T=ɌČ=T=PA<NvX..XvN>#u tC<=@jn $0<7'7'7'"&53265!"&53265! ! ! ! PA<NvX..XvN>ŋSwwSŋSwwSbu tC<=@jn ".8>4632#"&%462#"&! ! ! ! %5!#"&5!#26Q;:RR:;QBRtSS:;Qm<=CAtu ČU=T=;QQ;:SS:;QQ;:SSC<=@u cŋSwwjn )394632#"&-%! ! ! ! %5!#"&5!#26Q;:RR:;Q'MM<=CAtu ČU=T=;QQvRSdnnC<=@u cŋSwwjn %/5! ! ! ! '7'7%%5!#"&5!#261<=CAtu 2MM'MMČU=T=C<=@u UnnnnŋSwwjn)5F%7 '%4632#"&%462#"&! ! ! ! 676 &'&#&MXMXMQ;:RR:;QBRtSS:;Qtu <=CA%23$s(ʎ'onno;QQvRS:;QQ;:SSu tC<=@%8338H,'',jn"-9EV%'6762&'&"%7 '%4632#"&%462#"&! ! ! ! 676 &'&#&yFFyT;MXMXMQ;:RR:;QBRtSS:;Qtu <=CA%23$s(ʎ'9("bb"(9<<donno;QQvRS:;QQ;:SSu tC<=@%8338H,'',jn)5F'4632#"&%462#"&%! ! ! ! 676 &'&#&MM+Q;:RR:;QBRtSS:;Q/M%tu <=CA%23$s(ʎ'gno;QQvRS:;QQ;:SSou tC<=@%8338H,'',jn(,7BFV676 &'&#&! ! ! ! %462#"&%4632#"&''6762&'&"%23$s(ʎ'<=CAtu (/M?RtSS:;QQ;:RR:;QMMyFFyTL8338H,'',C<=@u o;QQ;:SS:;QQvRSno 9("bb"(9<<jn #4O! ! ! ! "&53265676 &'&#&"&54?&'&532651<=CAtu HČ=T=%23$s(ʎ'F:M L6 M:F=T=C<=@u ŋSwwS8338H,'',bQ?7#+6,#5? RbSwwSjn*6676 &'&#&%%''7'7! ! ! ! %23$s(ʎ''MM٠MMtu <=CAL8338H,'',"nnUUnnu tC<=@jn!-9' 7 676 &'&#&"&47! ! ! ! ___/%23$s(ʎ'B6L6<=CAtu \___8338H,'',#5O66O5C<=@u jn ".4<4632#"&%462#"&! ! ! ! !4 !&'& Q;:RR:;QBRtSS:;Qtu <=CA''EkjE;QQ;:SS:;QQ;:SSu tC<=@Fa`LtuLjn)5;C%7 '%4632#"&%462#"&! ! ! ! !4 !&'& MXMXMQ;:RR:;QBRtSS:;Qtu <=CA''EkjEonno;QQvRS:;QQ;:SSu tC<=@Fa`LtuLjn NZflx32654&#"!&'& !4 ! 4'#&'#5"'#5&47&'##"&'##5! ! 4632#"&%6754&#"326'#"&546325&'&'67%&'%67%tJUioOLr7EkjE?'' <=5D%Dm8D++!"D"!++D8nD%D6tu q"!# ##  rLOoiUJt#!"$ g!"$!"+O# *"!$RluIOoo`LtuLF7C<;.)nY6G$@<<=j<<@$F7Y*.żu !!# OooOIulR #!!y (  &!--! jn '-5' 7 ' 7! ! ! ! !4 !&'& ______tu <=CA''EkjE___X___?u tC<=@Fa`LtuLjn)5AGO767632#"&53265!"&53265! ! ! ! !4 !&'& U% $  ';Č=T=7Č=T=?tu <=CA''EkjEt2  "$ŋSwwSŋSwwSbu tC<=@Fa`LtuLjn %+3%%''7'7! ! ! ! !4 !&'& |'MM٠MMtu <=CA''EkjE'nnUUnnu tC<=@Fa`LtuL_jn =b%!4 '7'7%%! "'&/! &"&5476?&7! 4'#"'&/&'&! 6?"'''MM'MM.tu ];6L *+ L6<\<=%&-)//)-LFtUnnnnu%&69 96&%C<9-ǚ -9jn*6462"4632#"&%462#"&! ! ! ! ,ԖQ;:RR:;QBRtSS:;Qtu <=CAZԖԖ;;QQ;:SS:;QQ;:SSu tC<=@jn%1=%7 '%4632#"&%462#"&462"! ! ! ! MXMXMQ;:RR:;QBRtSS:;QKjKKjtu <=CAonno;QQvRS:;QQ;:SSjKKjKu tC<=@jn#.:F"&47462"%7 '%4632#"&%462#"&! ! ! ! PA6L6ԖUMXMXMQ;:RR:;QBRtSS:;Qtu <=CA5O66O5.ԖԖRonno;QQvRS:;QQ;:SSu tC<=@#<5nk&462 &462%'%%7462"5.'46767 #5476764&"#5 '#54&/&'&'."% 7547676767>76767&'& QRtSSIQQuRRMXM~MXȖԖHVh=;;=hVH&z':%i)8^'ny'^8)i%:'z&Lw l08< 3233<80(SuQQuSSuQQvRnooԖԖx>[1'Sk ߰ kS1[>$n9(#mq,%@76?62>?''! '&&''7&''%4."#462!4."#462&'32?67#5#"'\>xcev>rt6;#y]M4f굡g.G *tt*  &<]ii];& ikhdtt^b e11B1Č1B1Č:$(2+$) `3H:G??4.x==x%B DG}KSB$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu: a a :uAwj9DMDVW$@"<<@6 @"O`DQ+ZEEY,Č+ZEEY,Č  c'F aa C `j?H]654.'&'& &'6?#"'% 76767%767#"&/27#"'7327 $'&54732"&546?4''7&54>76?62>?'#"&/ '&&'4."#462!4."#462&'32?67#5#"' *tt* P,3,04f鶢f.0,4.RȂ\>xbfv>rt6<"x|%7>4Zfd &<^ij]<& hjZ4<6$,4,tt*$0B2Č0B2Č:$(2,$( `4H:F>@4|(,.f>v::rAe.*',,3<%WLi?l:1wv85j?gD`(<3,.x==x%B DG}KSBA6%,4JDME9jwAu: a a :uAwj9DMD44,%6<3*hb]p-o+ZEEY,Č+ZEEY,Č  c'F aa C :j&*_27#"'7327 $'&54732#"'267#"%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4632#"'&7">7&#"'&'67632327654'&#"\>xcev>rt6;#yprw??52H:u}M4f굡g.G *tt*  &<]ii];& ikhdtt^b ecC>]0L!(C8$0+E8C%$M/2-;Cc .* ,@.x==x%B DG}KSBh ELME N$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu: a a :uAwj9DMDVW$@"<<@6 @"O`DF_W;E !I+ /!-! CB*&_z 5=jJ7327327#"'#""'72%654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''>32#'&'4632%2347632#'&546\E[:TT:[E\lJDEI>zz>Z *tt* B g굤g  &<]ii];& l m nmuvmmm  :-.>>1@/=# -:  #=/@1>>b@,,@bdx==x.8t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu: a a :uAwj9|BQW.>. .>.QWB0B=1JJ=B*HGrB0GH*B=ϾJJ1= =j(7Du-'"'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''2767!/MMMs>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy 0( ,@ *tt* B g굤g  &<]ii];& l m nmuvmmm ʎ(s"5gonno=x==x.L #$-G0,a&0$4%Ca,0G-$#  ;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu: a a :uAwj9|BQW.>. .>.QWB(+H65=j'4i#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 76?%767%72>?''! '&''7&''7&'54>76?7'7'7'27#"'7l+Q (F65/AFeN$0+EdFB/56F( Qy 0( ,@ *tt*  B f굡g i];&  l m nmttmmm l &<]PA<wdev>L #$-G0,a&0$4%Ca,0G-$#  ;s.f>v::rAe.$A+B,E@y>zwvz>y9L,B a :uAwj9WBQW.>..>.QWB`*9jwAu: a:=NwY.-YwN=.x==x =j'4e#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''62&"%6 &#"27#"'7'%%l+Q (F65/AFeN$0+EdFB/56F( Qy 0( ,@ *tt* B g굤g  &<]ii];& l m nmuvmmm GFF`T`Ȑ[>wdev>MM{/ML #$-G0,a&0$4%Ca,0G-$#  ;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu: a a :uAwj9|BQW.>. .>.QWBcc_<<`.x==x=noo=j ,4d"&545"'7276?.53265!"&532656 & &6?6?62>?'' '7&''!2$7%767%7654/&'& &'%%BM 6L6nv>[[3 M=T=7Č=T=`n &<]ii];&+ l m nmudfvmmm ;Yg A+tt* B ?5O66,5=x..c?SwwSŋSwwSڵ`|jau: a a :ua̠|BQW.>.* .>.QWBz>y9L,B+Qb::Tnk+B,E@y>=j4s{654.'&'&#"&'%% 76?%767%72>?''! '&''7&''7&'54>76?!&'& !476327'* *tt*  B f굡g i];&  l m nmttmmm l &<]EkjE?(___ڃs.f>v::rAe.$A+B,E@y>zwvz>y9L,B a :uAwj9WBQW.>..>.QWB`*9jwAu: aGaKtuK礣~____jn'29676 &'& ! ! ! ! %4632#"&%5%%22%s'l(<=CAtu Q;:RR:;Q'MM8329H,'&,@=<Ct b:SRvQQUnnmf@10!#f;@ 1<203#%3#mN810K TX@878Y@ //]!#3\#@  @! $  $999991<29990K TX$$$@878Y@\             ##+]]'&'&#"#465463232653#"&8- (kW%J';'%'kW&F#<2j'<9j810K TX@878Y@ //]#yE@ 91<90K TX@878Y@/// ]!#'#f4߲DzyK@ 91290K TX@878Y@//// ]373f߲DzP S@  120K TX@878Y@///// / ]332673#"&`LL`=<<=w*10K TX@878Y!!w @O?]1<20!#!#ı`#!##53#73#'3# 3#3#'3#}}d 3#3#'3#}}d3#3#d 3#3#3#3#dd"%'$&7!327676'!;# +~@f3HT͜1@"f62kK4)MM \^Z[B/IVqgK-MEUXMXXN ,:;#"'&''$&7!! 7&'&54767632654'&#"P}/k@:Gd7k@f3HY@ 1shƍW4$c{xx--@:b@RQT4,8*:79Q"#UXMXXN %4'&"27>"'&47623J22J?@?@@?@$2%&2@@@@@??R'&)}')'RX')'R 'j'X' '}8h'}h'} 'lP'' 'V'&'& 'q &v< ='q' ='q'<&G 5&&YP #."#> ``(=<<=FB@%  11221/2990KSX@ 66Y!!#!53265!Z`[nlfL<?yv\<` !3#!#53f`JD`!!3#+"'#5$%3"'"3276f8sZlq 3@h^+f&`0cvL9.XR'q>XXY'cqXR'Xq>X6u'X4Xu'Xdu'lq du' q aAR'Sq>BX5v'XaAY'ScBb5m'wtaAu'xSCcpo'u"yCco'uQyCc5'ua>'Pl>6u'PN> u'Pl> '<PCct'nuCn'Z!!pp53265!!"&ITc\_JrX\t 4 &'Y &%! 7676'4'!;#"&75OI4f ":,IVQ9beDCmey" };,8''X','v@' &MX@' &N r' > 5  KSKQZX8Y1/0@ P ` p ]!;#"&5fLf{\}X+o`&`3%!!X\pxF`6767#!+732675]>^#%,>f]&9UGs\p`'^M`&_G!!!! !#3!3#q# %!5 K&ztXK e&zuXK&tzK &zwXK e&zxXK &wz,$&}w$ &}x3!3f+#3!3f+#3!f+Xt264&"#" 3:R::RNY'Cꋋ2r\t264&"!"'!3&54 3:R::RmcNNc''Cꋋ2\rr\264&"3&54 #"':R::R'YNCꋋ2\rTm !!!!yYYQ |m #!!!!YYQ |; #!!!YYQ |K! !!3?BdK ! !3!3g>?Bd#3!! >dB 3!!!3fcfdd #3!!!3fcfdd #3!!!fcfdd 3!!!37/d #!!!37/d!!!7dl 2>4."!&'.4> !":F:"":F:%#s煅s$%ZK--KZK--( 6ظllظ6  !2>4."!!&'.4> ":F:"":F:%#s煅s$%ZK--KZK--( 6ظllظ6 T 2>4."!&'.4> ":F:"":F:%#s煅s$%ZK--KZK--( 6ظllظ6 V !3!!`d;` V !3!!`d;Q` V !3!!`d{` XP !!!#"&7676! !354&#"3,R['Fv4o;)9t)Ģydn~}w>QcP"#!!!#"&7676! !354&#"3@R['Fv4o;)9t)Ģydn~}w>Qc #!!!#"&7676! !54&#"3@R['FvC4o;)9t)Ģydn~}w>Qc} 3!!!!!UUkd} #3!!!!!UUkd #3!!!!UUd} !!!!!3WUU9+}I !!!!!3kUUH9+ )!!!!!/kUU9#3264&!!23WKGfkg %dpvdq] #3!!23#3264&g %?KGfkq]dpv#3264&3!!2#WKGfkg dpvd!4'&'5!!! >(n'-7a3tC#!&'5!!!5(n'-Wr3tC#!&'5!!5(n'- Wr3tC!!3{[g-T+ #!!3[g-T+#!![g-T+BB$34$!2>3234&#"!%4'&#"! f-3)YQRH#CBRs-kx&"r¼v;_c~BB&#354$!2>3234&#"!%4'&#"! f-3)YQRH#CBRs-kx&"r¼v;_c~B$#354$!2>324&#"!%4'&#"! f-3)YQRH#CBRs-kx&"r¼v;_c~! !!!!!!!T5f4gDo!#!!!!!!!h5f4gDo #!!!!!!h5f4Do)!!!!!!!)!5f)f4g3DooD#!!!!!!!!!!h5f)f4g3DooD}!!!!!!!!!!T5f)f4DooD !!!3c/dd !!!3!cQ/dd !!3!c/ddK!!!oYHX+K !!!!oYPX+!!!oYPGX+` #2654&+!!2+!or~gGXH,dRNGRd9d` #2654&+3!!2+!or~gGH,dRNGRd9d #2654&+3!!2+or~gGH,dRNGRd9d !#!!3!3ffD+#!#!!3!3ffD+X #!#!!3!ffD+X3#"!"$543!!!!KGfkh2d9pv9d3#"!!"$543!!!!KGfkh2d9pv9d3#"!!"$543!!!KGfkh29pv9d! !!!!!Tg+! #!!!!!hg+ #!!!!h+K  !3oWm~-+K  3!3o$~mm~-+ 3!o$~m-+X)!&'.467675!!!2>4.")ss*&"uACC4.")ss*&"uACC4.")ss*&"uACC4."&'.46767!!":F:"":F:V)ss*f&"uACC?w'!ZK--KZK--t 6ظ6u 7[\\X:t )2>4."!5&'.46767!!":F:"":F:)ss*f&"uACC?w'!ZK--KZK--t 6ظ6u 7[\\X:t@ '2>4."!5&'.46767!":F:"":F:)ss*f&"uACC?w'!ZK--KZK--t 6ظ6u 7[\\X:X+!&'.467675!!!!2>4.")ss*&"uACC4.")ss*&"uACC4.")ss*&"uACCT*JV65?#!2764'&'%$4767!#r6 '`ptqiN '% v 6 #!w*6d3>T1$#!27654'%$4767!;!"'#w N '`ptqiN%=P30_'4q6 #!w*6d3>T*JVE&$)@k&)k&)k&9Fr&Er&E&&E&EEG&()@kG&))kG&*)kEG&(G&)EG&*EE4&(4&)K4&*K8&2U&LX&L84&Z4&X4&8& U& X&~G&4'9{U'W&WCX'W& WC~G&4'){}')&WCX')& WC~ G &4?{ jX' XX'  @ <2991/0!!!33h=^qd!M@*   "  "<2999919990!3267#"$546?>5%!!iAm@84`VQew\N^@D*ii1Q~d:3\/FPDB*(ǾcX:=L-dXu^y/_<++r em!r23f+B{s/) mRo b\}j331 fwwf3ff)u 1 =+'\^fXX\mX{'\RVX\j7dH)7\}J+RomZm {u+HdHdHh1 1 1 1 1 1 fwwwwA!fffff-fXfXfXfXfXfXbXXmXmXmXmX#XXXXXXN771 fX1 fX1 fXfXfXfXfX\!\wmXwmXwmXwmXwmXf\f\f\f\R A$,|3RRt#ifXfXfX VfX)))jjjju u u =dH7\\\\\\{'}tQ4ffX!t\Xwhw{fX\| 3R Vfl_fLXAt)5wju 7a:\\..T Lu.T LJEZ  q L b\| pp1 fXfXmX1 fX1 fXbXf\f\3RfXfX.Y q L b\f\ OL1 fXbX-N1 fX1 fXwmXwmX/fXfX)w)ju e\y}EX\\1 fXwmXfXfXfXfX7\\1uj\AQV 01 wmXcT\) 7f\XX\V\mXmXytn\nnnV\\X&33]]xVVVXXEXsh_{NN3#j#jjR{j].\7dH7\x\ Y uJJJJfnzXPV\JJ ?\ \ =\&o6'=.R.jJPJnnnnnI.Vj+   //  sm^s^m]] ToowVK n DM/B\eK K\e5[ KbVg;MfXg\kT$pp qppph-jjXfXeX3[a5  '/1 1 w\f31 fwu f+'s7FctngcsYtnYX=sYXTVX;X+gB)4ZX'gXgX35pIi**_{.ofXfXw|GZr-fxf\l*W4^Ol^dfu97oXf('fDDfDww fA <^  +;1  {w ^ffu +;f+'lw dJ d)fXX.vsmXdnqXX7q)~(<#?mXmX(.Xj#Z(n7fXd(3 fX otQ}fX   0`YXfX >t b`fXfX871XrXt0.S:X*wZ d3nn0n2(v 0#sqfXu 77+') w~w~w6z 6z  3 6q+tw~v1 fX1 fXbXwmXhmXhmX d. YfXfXfX+;7+;7+;7w~.J<S:X*+')+')Z F%Z\ 6"+ OfX ltn^q I^q?f\=dHn #^xq 0#t6-7:6SvM~5 $.=uukQ$u=$lSu-eZtvQ"Q"&Q" Q$zQ$$6$"~$x$$ ZS$$y$%Zy/Z?d_._e~~i_Ro~~XXX4Xo[XXXXXpTXfCJ9CX(wP'VV B 3U b  }} OOww K'kU~bUUy;=KA \W 'kVh        }}}}}}}}}s Ow K K K K K K'k'k1 ,1UUU111111~~~~~UUUb>Ab`XY7^<Xii. 7LX 7XXX{CCw  RQXXX*VQQWW)KMM`{2Q(b&TCi@ZlEbxXIP*8\O !30*,,4@2ccQXGv Z Z`OnLT;$2Pe O$cYL@ (KYYYLL: ZEOY]_Y<Y$YKD1nddZdpddh4ddrddddndddd<dzdddl(ddmdR2ndxdmdodmdddddZoed21 1 1 1 ======% % % 1  1 = 1 # 1 #=z<{f@f@({({({({@{z({({({  a1 1 1 1 % % % 1  1  1 # 1 #{{sssbsbsbzozozjszjsz{  0"sTTTT;T;T;T{{TTTTTT;T;;;T;T;;;{{8888 8 8 8}{c{}{TTTs8s8s8sTsT T TsTG{{G{TTTs8s8s8sTsT D T D T 8 8 D T D TG{TTTTTTT{{{cTcTcT T T T T T T T s \T s \T s \T s \T{555555555{({{CC8TTTT{1h1h1h1hmmmm a #{nnsszjsc{TTT{{ { { { { { { {{TT { { { \{ \{ { {{ /{TTs8s8sTsTG{55 5 555 5 k{{M { {!{!{ { l{!{!{Y  |  y  u qO yq7bX(Xii(xtnZRPXXHXHXHXX[rh#+#+'7dH\*tP7rh?qwv/vqvqv#@7vvv6vv7v7vH@Ovvpv&mmmmmmmmmmmmmOmmmOmmmmmmmOmmlnv8S@!mnmmlnlS@!7v] mOmOmmmmmmmm@mmmsmmmmPmOmm~mmmVm`m+mmmm2lmmWm0mmmgmCCCC1 fXfX\\\\\wmXwmXwmXwmXwmXw{'f\/\N R!3R3R3RB$)VVVfXfXfXfX))))Djjjjju u u u 1 71 7=dH=dH=dH=dH=dH+')+')7\\\\\\dH7fX{'{{'+Y1 fX1 fX1 fX1 fX1 fX1 fX1 fX1 fX1 fX1 fX1 fX1 fXwmXwmXwmXwmXwmXwmXwmXwmXkfXfXfXfXfXfXfXl_l_l_l_l_7777&cccccccc1 1 TY{tntntntntntnU[/k   p n@7HXXXXXX"w  lggggggggq y dXXXXXXXXE  9cctntnXXggXXcccccccc1 1 TY{   p nXXXXXXXXE  9ccccccc1 1 a51 wwoE)/,AQ]gggggg)^^XXXXX '7mwV RoRonnn    BBBB53''V BB(( ((( (LL/)Vh>Fd/)3/ls=d8x( dp  <m8aNTMA999NoNgn<{mZ8aNTMA999NoNgmmmMmnmnOmnm DmoMf<}V$ $ <O>< "Ff Xg @===>=) ])f +) ')IN ?JjL Enf@Si,L( ?'  \57731 lT}SvKw yM;Zg'?y FZ QF<34uX*FmCTapHdHd dHdHmHdHmHZH8HdHaHdHZHaHTdE1   a +'' A'f7  ) X\V Ok OkfXfH<duddu dud\dudududdZZd.ddduud`dd_u_ddddududduZududu76H6666666Hzz6u`ududdud7u71 bZ;ww`,,,,LL)dR3 VLVLVI,,bb5555n \N /zzZyz``555^^PPPPWWPPPPPPPPzzzYWcc ~d~d| a aL C,,,,, C,,,@rxxdxxdOl- 8 8 P 8 x PXc 8#]]ssss7'P\xxxxxxxxxx<<<<<<xxxxxxxhh''''''''''''''''''''''q''''''''''llgg'''''''''''''''''pprppppppppp7p7''''''''''ppppp'''',h,d,,,,+,}}_}} ,,,B,d,,,,,,,,,,},,,dZd2E\,,,,,,,,,,,,,,,WWW,,,,,S,,,,,],,,,,m,,E,,,,A,,,U,,Q,0,,,U,,L,0,C,,X,,B,,X,,,x, ,,,,,,,,,,,,,,1,,,,,,,,,,,X,X,j,, T},y,},),,,,,,,d  f9  gT YxDVVVVVIVVx+5X3ppppR >pTVSTWW0V000002p@TTTTpnnTVaaTT,f,z,z,z,z,xx>NnX~#9Uwlfxxxxxxxxxx                    uuuuuuuuuuuuuu++<uusunjTV. Bu xd xu xd xd xu xd xd xu xd xu xu@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,du__::: J776676uuMM''''$$"pMM   )fB3R\\b1 c: =sH7NBNXx\M\h JSWJQAT(AU/PVTAPbWkPJTqTTAVwTe^GTD\7PhZbTVTVZGV_YPZbZ^FZcZGZ;W\[U#\qffiishc1 1 wwjff,O`qwP9w9Wqfffff+'fw1 wff,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Tu u f33=ff\ww)))1 1 34==+'1 1 wwfuk2dd15| >t b` d8( dq[{es^Lq fXLfX @fX: Lu w @fX3v3vLLLRsRs@ tnxj jX F X oX `X `XH `XDeX?  VvS@xX! @fX! FFf\! ! 83swl%3R)tv7wT @b"67#Bbb"67#"6bb"67#"6bbB7#"6bBdd9d7dedI<(ddd Mdd$nddedZFddBddZkfd d2d ddd_dd/\nnnnnnnpnpnpnpnnnnnnnnnnnnnnnX{'+'''w'(j     [u'QNNX\IXXX`((((XXX~YYo{YXXXXXpfC9CX(wXXCX xD xD xD xD xD xD K = K =}}}}}}}}11111111~3~~3~D HkUDDUD::i::::JUUD xDb xD xD}}}} O$ O$  OOwwuwwwuw K ='k6k=Us$DF]~3~DbHUUDDDTTTT2dTdFx:{ d:l(R2d\Lddddd,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,||fV<Wf ( =r2X[X[mX /\nnnX[\-j7d<H(7\1 fwwf3ff)u 1 =+'\fXX\mX{'\RVX\j7dH)7\1 1 w\f31 ffwu f+'s7csYtnYX=sYXTVX;X+gB)4ZXZ;(Iio_{.b\}nb\}j ///////////////////////////@///////////////////////////////WWWWWWWWX xKW= @WW Y_WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Y_WWWW#WW WWWW: Y`W:W=W=W=W=W=W=WmmwxD =6k=DxDxD&]xxxxx4xxxaxBxaxBxaxCxCxCxaxlxNxlxCC=ss$DDy}EXz`X``YYY777l<X<<iiiiii...   777LLLX   777XXX,,,,,,,,Jt}}}}} O$ O$ O$  wuw = = =6k=6k= +1kss111$D$D$D3~D3~D3~D$ 79k:;Y<&:$&$&$&$&$7a$8$9u$:$<<$Y$\$$$$$<$$$$a$&a$*$,$.$0$2$6$8<$9$:<$a$<$$ ~$ $ $ <$ D$ r$ D$ r%9%:%<%%6%8%:%% ~% % % &/&6&&&&&& &&"&&&& K& K'&'>>?h?x@|AAABPBC0CCCCCD<DLE4EDEEFPFGGGGHI8IPIhIIJJJJJK<KKLL L8LlM MM|MN\NO(OlOP(PPQtQRSTTxTTTU U8UPVVWXpXXXXY<YYZZZ[[H\x]<]T]l]^4^_$_d__```aDaaab$blbccTccd0dpdde(eefgggh hThdhhi$ipiij8jjkPklllm mnHnXnpnnoXoppPppq q|qr$rlr|rrs s$s4sDs\ssssssttt0t@tPthttttuu$u4uLudu|uuuuuv v$v<vTvvvvw8wwx@xxy<yz(z{X{|l|}X}}~8~~L` d ,<l\,D<X4,P$xpH$,<48`t(lxPHH4LP<L lDTxxD <l,Xx$@\x x,$h8PtxT 8X t$(@Xpp,D\t4Ld$€(Ô$ŰƄƠ$hǰhȐȬ<ɴ<ʠ<ˌĽ̜0Tl΄Μμ4Ld|ϔϬ ,D\tЌФм<TlфѤѼ $<(@XpӈӠ84Ld|Քլ $D֨נ 0H`p؀ؐؠذ4ٰ,<Lڬ<l۔ۼ |ܘ@hݐ8ޠHߌ߸,`hH Xd4 0\X0L@h8lDlhx H`` H<Tt(p L``|0@``,P  T  X      <   x  `T<tXD\ t8t8H$` pT0   !l!"P""#,#\#t###$$$0$`$x$$$$$%% %8%P%h%%%%%%&&@&`&&&'4'x'''((0(T(l((((()$)<)h)))))* *$*<*T*l******++,+D+\+++,,D,\,,,,-L-d-|-----. .$.<.T.l..../ /8/P/h///0P0h0001P1h11111122(2@2X2p22223$3|33334444t44445<5T5l55555566,6D6\6t66667,7L7d7777788,8D8\8t8888899949L9d9|99::0:::;;P;h;;;<<<0(>@>|>>>???0?H?`?x?????@@ @8@P@@AA A\AtAAABB4BLBdB|BBBBBC C$C<CTClCCCDHD|DE8EPEEFFFFFGGG0GHG`GxGGGGGHtHHHII4ILIdIIIIIJJ J8JPJhJJJJJJKK<KLKKLLPLhLLMMM`MMNNN4NtNOO(OOOP PdP|PPQQpQRPRRRSpSTT T8TPTU<UUV$V<VVWW,W<WTWlWWWWWWXHXXY,YDY\YtYYYYZ\[ [l[[[\,\D\\] ]$]h]]]^^p^_$_T__```0`H```x````a a`aab$bXbbc4clcd,deTeef4fg8gghhiiij$j\jkdkkl4llmXmmmn nn,n<nLnnopDppqqxqqr<rssxssstt(t8t`tpttuu`uv8vhvww8wTwwwxxHxxxyyz<zdzz{h{|L},}}~\~TtP|TP`4H\p$8@8\d(X8p |X4D8d| $<Tl,D\| ,Ld| $<Tl,D\t $<Tl,D\t4Ld| $<Tl$<Tl,D\t,Ld| $<Tl,D\t4L $<Tl,D\t4Ld|,D\t4Ld| $<Tl,D\t4Ld| $T(@Xp4Ld|,D\t <Tl4Ld|,Hd| (@Xp0Hd|(@Xp <Td|,DTl,D\t4Ld| $<Tl,D\t4Ld| 4D\tŒ¤¼$<XpÈàø(@XhĄĜĴ $<TlńŜŴ0H`xƐƨƸ00000000000000000`pǠ0H`Ƞ Dɬxʰ ˔0\̼$0PhψϨLД\pѨ 0LҔ,H|Ӵ4H|Ԕ Dդո HpּDא8|||||||||||||8٨4\ۈۼ<x  4H\p݄ݘݬ$8L`tވޜް|4x tLh4PP80d|  pTT8HT 0t 0@Ph4 ,   $ l  h h|LLl\T$Dd ,Ll $4Ll,Ddt,Lt<l|  l!!"$$@$p$$%%`%&&' 'h''(@(|(()0)**+L,--`--..H.../p/0001@12202X22223343P3l334D4445(566D6677`778<8|899@99:0::;;`;;< <`<<= =|=>(>>?`??@<@AhAAB$BhBCCtCDDHDDEFLFFGGHHI|IJ<K<KKLLHLMM<MMN NXNlNO@OXOpOPPPQRR RRS|SST$TtTTU VWYZT[\\\]]@]X]]]^D^_ _h_`(``axabc(d detfhfg8ghhhhhhii$iij@jjkkXlDlmTmnnlnooloopXpqqHqrLrrs\st<tuhvv\vw$wwx$xxxy\yz\z{{\{|4||}\}~D~4$\t(tXH4pl@t8\t D,TTL($h0hh0hDH|\tDTP0``4 \$4`| Dd(H4(`0T< (`0TxL0h,8xlT8lӤPԐ$HlՐմ Ddֈ֬0T|פ$T؀ب$Px٨$P|ڤ$LpۜDpܘ0dݘ8pިH|߰4`4h L <pX0`,Hh4Pl<Pl0LhTh|$H\t4L@P,Xt<X (Tp,Ht$X,<48H(P t L| <TlHp Lt ```  0 X       l $dxDL!@!x!"d"$%&&4''(h))*+P,/01,256067,7889;;<@<==4=T=t====?`@<AABCtDDE,EFF`FGPGHdHIlIJK@L LM MtNNO`PRSPTlUVX,Y$YZl[8[\@\],]^^_`<a$adab$bbc cdte\ghhLi`jk|lmnoXpdqrsttuvwyl{4{||}}}}}~~(~~PH @PDT4\|T@l<H@d H\$hthX,,h0ƐǼ$ȼL ʘːT̼ x8|$ϔPDt8LlLh@t@ l<d<@p    H4Ph$xd  ,XXPx L   !D!!"0"|"#$#|#$$%4%&4&'t(T(*+T+,P,,- -T-|---.,./H01 12l334 4h445,5x5556 6(6<6X6t666677$7H7l777788$8H8l88889(9L9x999::$:H:d::::;;<;h;;;<<4>4>h>>>??$?H?d????@@<@h@@@AA4AXA|AAAB$BXB|BBCC4ChCCCDD<DhDDDEE<EhEEEF(F\FFFGGHGtGGHHDHxHHIIXIIIJJ$JHJdJJJJKK<KhKKKLL4LXL|LLLM$MXM|MMNN4NhNNNOO<OhOOOPP<PhPPPQ(Q\QQQRRHRtRRSSDSxSSTTXTTTUU<UhUUUVV<VhVVVW(W\WWWXXHXtXXYYDYxYYZZXZZZ[([T[[[\\X\\\](]\]]^^D^x^^__X__` `H``aaHaab$bpbbcde0effDfffggTggghLiijjk|llmnhnopqr<sstXuutuuv v,vhvvw,wtwxxHyyz8z{<{|P|}4}~L~8\d8|0x$0 xP(| LxHDp(X(d8\(\TDh8`X 4,(t\Lp(8,<x8X`(8HXhPXt$t0@tdt$Pl8d4DHX@l8 ,P`x 8Ph(@Xpˆ ¸0H`xÐè 8PhĀĘİ(@XpňŠŸ0H`pƀ 0hxLjǘǨǸ|ȌȜȬȼ(ɘɨɸ ,pʀ,<Lxˠ˰̀4L,΀ dϸ8|мt(Ӱ$ԀL\l|դ@h֐ָ$Hlאװ4`tؼ,\٨ژ4D ܄Xހ|H48HX(PDhP8X$\|DT|p\l|tlP`0$H\p 0DXl `<8(X tH\l`8 pXh8@   X  (   X  4 X4PPTht`$ h`x| L x  !T!|!!!!"""4"L"d"|""""###0#H#`#x#####$$ $8$P$h$$$% %$%<%T%l%%%%%%&&,&D&\&t&&&&&'''4'L'd'|'''''( ($(<(T(l(((((()),)D)\)t)))))***4*L*d*|**+H+X+h++++++,,(,@,X,p,,--,-D-\-t-..,.<.T.l......//,/D/\/t////040D0T0l00000000000000000001 1h1|111122202H2\2t2222223 3$3<3T3l3333334 4D4\4t4444455545L5d5|555556677777778\8t88899(98::;0;H;`;x;; >>?x?????@|@ATAlAAAAAABB,BDB\BtBCTCD<DLDDE4EDEFtGG,GDG\GtGHHILI\IJJJJJKKK4KLKdK|KKLTLTLTLTLTLTLMMMNNPNNNOOOPPDPxPQ\QQR<RRRSS`STTTU$ULUUUUVVPVlVVVVWW,WXWWWWX$XLXtXXXYYDYlYYYZ Z8Z`ZZZ[[,[T[|[[[\$\L\t\\\]]@]h]]]^ ^4^\^^^__,_T_|___` `H`t```aa<ahaaab b4b\bbbcc(cTc|ccddeDeefLffg gLgh<ii4iij\jjkl$lmmmnoHoop$plq\qrlrsxsttuuvvpvw ww,w<wLw\wlw|wwwwwwwwx xx,x<xLx\xlx|xxxxxxxxy yy,y<yLy\yly|yyyyyyyyz zz,z<zLz\zlz|zzzzzzzz{ {{,{<{L{\{l{|{{{{{{{{| ||,|<|L|\|l||||||||||} }},}<}L}\}l}|}}}}}}}~~H,Dx 0@P`pLH0(`T Htp\Pl,(d <0@ҌՔ(٤`\ܘD<th$ \|84pHD  |8,"@$'*x-../01X2D3\45<6P7@789:h; ;<=>?@PABC|D,EEFG$GHI4IJK\LdMLNNODOPQQRSTUVWYZ@[L\]^ ^__`$``aPabbtd|gdiklmoDp$qrrtu$uvwxyz{l|$|}x~l$lDDT( |<\04tDHhDd0T l@`0H`x @p( <Xt¬8TpÌè4LĨ(H` <ƌƤƼ0H`xǐǨ4TȨXɐ0hʘ Lxˠ̄(\͐l DtϨhдLј<h\ LԄ4Ոռ(\֘0ל8tجd Lڀڼx܌ܸD|ݬ(dt ,PtT $<\t ,Ll,D\t4Ld| $<Tl`Ld| $<Tl,D\t4Tt04N+x @!>2  S ~ - (4; ;; 0      1 d  " : %:K h;% ; ;Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain DejaVu SansDejaVu SansBoldBoldDejaVu Sans BoldDejaVu Sans BoldDejaVu Sans BoldDejaVu Sans BoldVersion 2.37Version 2.37DejaVuSans-BoldDejaVuSans-BoldDejaVu fonts teamDejaVu fonts teamhttp://dejavu.sourceforge.nethttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Arev Fonts Copyright ------------------------------ Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the modifications to the Bitstream Vera Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Tavmjong Bah" or the word "Arev". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Tavmjong Bah Arev" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr.Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below) Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Arev Fonts Copyright ------------------------------ Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the modifications to the Bitstream Vera Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Tavmjong Bah" or the word "Arev". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Tavmjong Bah Arev" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr.http://dejavu.sourceforge.net/wiki/index.php/Licensehttp://dejavu.sourceforge.net/wiki/index.php/LicenseDejaVu SansDejaVu SansBoldBold~Z4  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./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 Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./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{|}~      !"#$%&'()*+,-./01234 sfthyphenAmacronamacronAbreveabreveAogonekaogonek 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 zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EDuni02EEuni02F3uni02F7 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0351uni0352uni0353uni0357uni0358uni035Auni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0487uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni0514uni0515uni0516uni0517uni0518uni0519uni051Auni051Buni051Cuni051Duni051Euni051Funi0520uni0521uni0522uni0523uni0524uni0525uni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05BEuni05BFuni05C0uni05C1uni05C2uni05C3uni05C6uni05C7uni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuni05F0uni05F1uni05F2uni05F3uni05F4uni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni0657uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni066Euni066Funi0670uni0674uni0679uni067Auni067Buni067Cuni067Duni067Euni067Funi0680uni0681uni0682uni0683uni0684uni0685uni0686uni0687uni0688uni0689uni068Auni068Buni068Cuni068Duni068Euni068Funi0690uni0691uni0692uni0693uni0694uni0695uni0696uni0697uni0698uni0699uni069Auni069Buni069Cuni069Duni069Euni069Funi06A0uni06A1uni06A2uni06A3uni06A4uni06A5uni06A6uni06A7uni06A8uni06A9uni06AAuni06ABuni06ACuni06ADuni06AEuni06AFuni06B0uni06B1uni06B2uni06B3uni06B4uni06B5uni06B6uni06B7uni06B8uni06B9uni06BAuni06BBuni06BCuni06BDuni06BEuni06BFuni06C6uni06C7uni06C8uni06CBuni06CCuni06CEuni06D0uni06D5uni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni07C0uni07C1uni07C2uni07C3uni07C4uni07C5uni07C6uni07C7uni07C8uni07C9uni07CAuni07CBuni07CCuni07CDuni07CEuni07CFuni07D0uni07D1uni07D2uni07D3uni07D4uni07D5uni07D6uni07D7uni07D8uni07D9uni07DAuni07DBuni07DCuni07DDuni07DEuni07DFuni07E0uni07E1uni07E2uni07E3uni07E4uni07E5uni07E6uni07E7uni07EBuni07ECuni07EDuni07EEuni07EFuni07F0uni07F1uni07F2uni07F3uni07F4uni07F5uni07F8uni07F9uni07FAuni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EBDuni0EC0uni0EC1uni0EC2uni0EC3uni0EC4uni0EC6uni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni0ED0uni0ED1uni0ED2uni0ED3uni0ED4uni0ED5uni0ED6uni0ED7uni0ED8uni0ED9uni0EDCuni0EDDuni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15DEuni15E1uni1646uni1647uni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1680uni1681uni1682uni1683uni1684uni1685uni1686uni1687uni1688uni1689uni168Auni168Buni168Cuni168Duni168Euni168Funi1690uni1691uni1692uni1693uni1694uni1695uni1696uni1697uni1698uni1699uni169Auni169Buni169Cuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D77uni1D78uni1D7Buni1D7Duni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011 figuredashuni2015uni2016 underscoredbl quotereverseduni201Funi2023onedotenleadertwodotenleaderuni2027uni2028uni2029uni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038uni203B exclamdbluni203Duni203Euni203Funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0 colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni20D0uni20D1uni20D6uni20D7uni20DBuni20DCuni20E1uni2100uni2101uni2102uni2103uni2104uni2105uni2106uni2107uni2108uni2109uni210Buni210Cuni210Duni210Euni210Funi2110Ifrakturuni2112uni2113uni2114uni2115uni2116uni2117 weierstrassuni2119uni211Auni211BRfrakturuni211D prescriptionuni211Funi2120uni2121uni2123uni2124uni2125uni2126uni2127uni2128uni2129uni212Auni212Buni212Cuni212D estimateduni212Funi2130uni2131uni2132uni2133uni2134alephuni2136uni2137uni2138uni2139uni213Auni213Buni213Cuni213Duni213Euni213Funi2140uni2141uni2142uni2143uni2144uni2145uni2146uni2147uni2148uni2149uni214Buni214Euni2150uni2151uni2152onethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189 arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF universaluni2201 existentialuni2204emptysetgradientelement notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2214uni2215uni2216 asteriskmathuni2218uni2219uni221Buni221C proportional orthogonalangleuni2221uni2222uni2223uni2224uni2225uni2226 logicaland logicalor intersectionunionuni222Cuni222Duni222Euni222Funi2230uni2231uni2232uni2233 thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni223Euni223Funi2240uni2241uni2242uni2243uni2244 congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225F equivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Auni226Buni226Cuni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281 propersubsetpropersuperset notsubsetuni2285 reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294 circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4 perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22B0uni22B1uni22B2uni22B3uni22B4uni22B5uni22B6uni22B7uni22B8uni22B9uni22BAuni22BBuni22BCuni22BDuni22BEuni22BFuni22C0uni22C1uni22C2uni22C3uni22C4dotmathuni22C6uni22C7uni22C8uni22C9uni22CAuni22CBuni22CCuni22CDuni22CEuni22CFuni22D0uni22D1uni22D2uni22D3uni22D4uni22D5uni22D6uni22D7uni22D8uni22D9uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EAuni22EBuni22ECuni22EDuni22EEuni22EFuni22F0uni22F1uni22F2uni22F3uni22F4uni22F5uni22F6uni22F7uni22F8uni22F9uni22FAuni22FBuni22FCuni22FDuni22FEuni22FFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2307uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230F revlogicalnotuni2311uni2318uni2319uni231Cuni231Duni231Euni231F integraltp integralbtuni2324uni2325uni2326uni2327uni2328uni232Buni232Cuni2373uni2374uni2375uni237Auni237Duni2387uni2394uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni23E3uni23E5uni23E8uni2422uni2423uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2638uni2639 smileface invsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni268Cuni268Duni268Euni268Funi2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni269Euni269Funi26A0uni26A1uni26A2uni26A3uni26A4uni26A5uni26A6uni26A7uni26A8uni26A9uni26AAuni26ABuni26ACuni26ADuni26AEuni26AFuni26B0uni26B1uni26B2uni26B3uni26B4uni26B5uni26B6uni26B7uni26B8uni26C0uni26C1uni26C2uni26C3uni26E2uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2776uni2777uni2778uni2779uni277Auni277Buni277Cuni277Duni277Euni277Funi2780uni2781uni2782uni2783uni2784uni2785uni2786uni2787uni2788uni2789uni278Auni278Buni278Cuni278Duni278Euni278Funi2790uni2791uni2792uni2793uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C5uni27C6uni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2906uni2907uni290Auni290Buni2940uni2941uni2983uni2984uni29CEuni29CFuni29D0uni29D1uni29D2uni29D3uni29D4uni29D5uni29EBuni29FAuni29FBuni2A00uni2A01uni2A02uni2A0Cuni2A0Duni2A0Euni2A0Funi2A10uni2A11uni2A12uni2A13uni2A14uni2A15uni2A16uni2A17uni2A18uni2A19uni2A1Auni2A1Buni2A1Cuni2A2Funi2A6Auni2A6Buni2A7Duni2A7Euni2A7Funi2A80uni2A81uni2A82uni2A83uni2A84uni2A85uni2A86uni2A87uni2A88uni2A89uni2A8Auni2A8Buni2A8Cuni2A8Duni2A8Euni2A8Funi2A90uni2A91uni2A92uni2A93uni2A94uni2A95uni2A96uni2A97uni2A98uni2A99uni2A9Auni2A9Buni2A9Cuni2A9Duni2A9Euni2A9Funi2AA0uni2AAEuni2AAFuni2AB0uni2AB1uni2AB2uni2AB3uni2AB4uni2AB5uni2AB6uni2AB7uni2AB8uni2AB9uni2ABAuni2AF9uni2AFAuni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2B1Funi2B20uni2B21uni2B22uni2B23uni2B24uni2B53uni2B54uni2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C74uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D6Funi2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2Euni4DC0uni4DC1uni4DC2uni4DC3uni4DC4uni4DC5uni4DC6uni4DC7uni4DC8uni4DC9uni4DCAuni4DCBuni4DCCuni4DCDuni4DCEuni4DCFuni4DD0uni4DD1uni4DD2uni4DD3uni4DD4uni4DD5uni4DD6uni4DD7uni4DD8uni4DD9uni4DDAuni4DDBuni4DDCuni4DDDuni4DDEuni4DDFuni4DE0uni4DE1uni4DE2uni4DE3uni4DE4uni4DE5uni4DE6uni4DE7uni4DE8uni4DE9uni4DEAuni4DEBuni4DECuni4DEDuni4DEEuni4DEFuni4DF0uni4DF1uni4DF2uni4DF3uni4DF4uni4DF5uni4DF6uni4DF7uni4DF8uni4DF9uni4DFAuni4DFBuni4DFCuni4DFDuni4DFEuni4DFFuniA4D0uniA4D1uniA4D2uniA4D3uniA4D4uniA4D5uniA4D6uniA4D7uniA4D8uniA4D9uniA4DAuniA4DBuniA4DCuniA4DDuniA4DEuniA4DFuniA4E0uniA4E1uniA4E2uniA4E3uniA4E4uniA4E5uniA4E6uniA4E7uniA4E8uniA4E9uniA4EAuniA4EBuniA4ECuniA4EDuniA4EEuniA4EFuniA4F0uniA4F1uniA4F2uniA4F3uniA4F4uniA4F5uniA4F6uniA4F7uniA4F8uniA4F9uniA4FAuniA4FBuniA4FCuniA4FDuniA4FEuniA4FFuniA644uniA645uniA646uniA647uniA64CuniA64DuniA650uniA651uniA654uniA655uniA656uniA657uniA662uniA663uniA664uniA665uniA666uniA667uniA668uniA669uniA66AuniA66BuniA66CuniA66DuniA66EuniA68AuniA68BuniA68CuniA68DuniA694uniA695uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA728uniA729uniA72AuniA72BuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA748uniA749uniA74AuniA74BuniA74EuniA74FuniA750uniA751uniA752uniA753uniA756uniA757uniA764uniA765uniA766uniA767uniA780uniA781uniA782uniA783uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7A0uniA7A1uniA7A2uniA7A3uniA7A4uniA7A5uniA7A6uniA7A7uniA7A8uniA7A9uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FF uni02E5.5 uni02E6.5 uni02E7.5 uni02E8.5 uni02E9.5 uni02E5.4 uni02E6.4 uni02E7.4 uni02E8.4 uni02E9.4 uni02E5.3 uni02E6.3 uni02E7.3 uni02E8.3 uni02E9.3 uni02E5.2 uni02E6.2 uni02E7.2 uni02E8.2 uni02E9.2 uni02E5.1 uni02E6.1 uni02E7.1 uni02E8.1 uni02E9.1stemuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF429uniF42AuniF42BuniF42CuniF42DuniF42EuniF42FuniF430uniF431uniF432uniF433uniF434uniF435uniF436uniF437uniF438uniF439uniF43AuniF43BuniF43CuniF43DuniF43EuniF43FuniF440uniF441uniF6C5uniFB00uniFB03uniFB04uniFB05uniFB06uniFB13uniFB14uniFB15uniFB16uniFB17uniFB1DuniFB1EuniFB1FuniFB20uniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29uniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3EuniFB40uniFB41uniFB43uniFB44uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4BuniFB4CuniFB4DuniFB4EuniFB4FuniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB82uniFB83uniFB84uniFB85uniFB86uniFB87uniFB88uniFB89uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB96uniFB97uniFB98uniFB99uniFB9AuniFB9BuniFB9CuniFB9DuniFB9EuniFB9FuniFBA0uniFBA1uniFBA2uniFBA3uniFBAAuniFBABuniFBACuniFBADuniFBD3uniFBD4uniFBD5uniFBD6uniFBD7uniFBD8uniFBD9uniFBDAuniFBDBuniFBDCuniFBDEuniFBDFuniFBE4uniFBE5uniFBE6uniFBE7uniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFE20uniFE21uniFE22uniFE23uniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu10300u10301u10302u10303u10304u10305u10306u10307u10308u10309u1030Au1030Bu1030Cu1030Du1030Eu1030Fu10310u10311u10312u10313u10314u10315u10316u10317u10318u10319u1031Au1031Bu1031Cu1031Du1031Eu10320u10321u10322u10323u1D300u1D301u1D302u1D303u1D304u1D305u1D306u1D307u1D308u1D309u1D30Au1D30Bu1D30Cu1D30Du1D30Eu1D30Fu1D310u1D311u1D312u1D313u1D314u1D315u1D316u1D317u1D318u1D319u1D31Au1D31Bu1D31Cu1D31Du1D31Eu1D31Fu1D320u1D321u1D322u1D323u1D324u1D325u1D326u1D327u1D328u1D329u1D32Au1D32Bu1D32Cu1D32Du1D32Eu1D32Fu1D330u1D331u1D332u1D333u1D334u1D335u1D336u1D337u1D338u1D339u1D33Au1D33Bu1D33Cu1D33Du1D33Eu1D33Fu1D340u1D341u1D342u1D343u1D344u1D345u1D346u1D347u1D348u1D349u1D34Au1D34Bu1D34Cu1D34Du1D34Eu1D34Fu1D350u1D351u1D352u1D353u1D354u1D355u1D356u1D538u1D539u1D53Bu1D53Cu1D53Du1D53Eu1D540u1D541u1D542u1D543u1D544u1D546u1D54Au1D54Bu1D54Cu1D54Du1D54Eu1D54Fu1D550u1D552u1D553u1D554u1D555u1D556u1D557u1D558u1D559u1D55Au1D55Bu1D55Cu1D55Du1D55Eu1D55Fu1D560u1D561u1D562u1D563u1D564u1D565u1D566u1D567u1D568u1D569u1D56Au1D56Bu1D5D4u1D5D5u1D5D6u1D5D7u1D5D8u1D5D9u1D5DAu1D5DBu1D5DCu1D5DDu1D5DEu1D5DFu1D5E0u1D5E1u1D5E2u1D5E3u1D5E4u1D5E5u1D5E6u1D5E7u1D5E8u1D5E9u1D5EAu1D5EBu1D5ECu1D5EDu1D5EEu1D5EFu1D5F0u1D5F1u1D5F2u1D5F3u1D5F4u1D5F5u1D5F6u1D5F7u1D5F8u1D5F9u1D5FAu1D5FBu1D5FCu1D5FDu1D5FEu1D5FFu1D600u1D601u1D602u1D603u1D604u1D605u1D606u1D607u1D756u1D757u1D758u1D759u1D75Au1D75Bu1D75Cu1D75Du1D75Eu1D75Fu1D760u1D761u1D762u1D763u1D764u1D765u1D766u1D767u1D768u1D769u1D76Au1D76Bu1D76Cu1D76Du1D76Eu1D76Fu1D770u1D771u1D772u1D773u1D774u1D775u1D776u1D777u1D778u1D779u1D77Au1D77Bu1D77Cu1D77Du1D77Eu1D77Fu1D780u1D781u1D782u1D783u1D784u1D785u1D786u1D787u1D788u1D789u1D78Au1D78Bu1D78Cu1D78Du1D78Eu1D78Fu1D7D8u1D7D9u1D7DAu1D7DBu1D7DCu1D7DDu1D7DEu1D7DFu1D7E0u1D7E1u1D7ECu1D7EDu1D7EEu1D7EFu1D7F0u1D7F1u1D7F2u1D7F3u1D7F4u1D7F5u1F030u1F031u1F032u1F033u1F034u1F035u1F036u1F037u1F038u1F039u1F03Au1F03Bu1F03Cu1F03Du1F03Eu1F03Fu1F040u1F041u1F042u1F043u1F044u1F045u1F046u1F047u1F048u1F049u1F04Au1F04Bu1F04Cu1F04Du1F04Eu1F04Fu1F050u1F051u1F052u1F053u1F054u1F055u1F056u1F057u1F058u1F059u1F05Au1F05Bu1F05Cu1F05Du1F05Eu1F05Fu1F060u1F061u1F062u1F063u1F064u1F065u1F066u1F067u1F068u1F069u1F06Au1F06Bu1F06Cu1F06Du1F06Eu1F06Fu1F070u1F071u1F072u1F073u1F074u1F075u1F076u1F077u1F078u1F079u1F07Au1F07Bu1F07Cu1F07Du1F07Eu1F07Fu1F080u1F081u1F082u1F083u1F084u1F085u1F086u1F087u1F088u1F089u1F08Au1F08Bu1F08Cu1F08Du1F08Eu1F08Fu1F090u1F091u1F092u1F093u1F0A0u1F0A1u1F0A2u1F0A3u1F0A4u1F0A5u1F0A6u1F0A7u1F0A8u1F0A9u1F0AAu1F0ABu1F0ACu1F0ADu1F0AEu1F0B1u1F0B2u1F0B3u1F0B4u1F0B5u1F0B6u1F0B7u1F0B8u1F0B9u1F0BAu1F0BBu1F0BCu1F0BDu1F0BEu1F0C1u1F0C2u1F0C3u1F0C4u1F0C5u1F0C6u1F0C7u1F0C8u1F0C9u1F0CAu1F0CBu1F0CCu1F0CDu1F0CEu1F0CFu1F0D1u1F0D2u1F0D3u1F0D4u1F0D5u1F0D6u1F0D7u1F0D8u1F0D9u1F0DAu1F0DBu1F0DCu1F0DDu1F0DEu1F0DFu1F311u1F312u1F313u1F314u1F315u1F316u1F317u1F318u1F42Du1F42Eu1F431u1F435u1F600u1F601u1F602u1F603u1F604u1F605u1F606u1F607u1F608u1F609u1F60Au1F60Bu1F60Cu1F60Du1F60Eu1F60Fu1F610u1F611u1F612u1F613u1F614u1F615u1F616u1F617u1F618u1F619u1F61Au1F61Bu1F61Cu1F61Du1F61Eu1F61Fu1F620u1F621u1F622u1F623u1F625u1F626u1F627u1F628u1F629u1F62Au1F62Bu1F62Du1F62Eu1F62Fu1F630u1F631u1F632u1F633u1F634u1F635u1F636u1F637u1F638u1F639u1F63Au1F63Bu1F63Cu1F63Du1F63Eu1F63Fu1F640u1F643 dlLtcaronDieresisAcuteTildeGrave CircumflexCaronBreve Dotaccent Hungarumlaut Doublegrave arabic_dot arabic_2dots arabic_3dotsarabic_3dots_aarabic_2dots_a arabic_4dots uni066E.fina uni066E.init uni066E.medi uni06A1.fina uni06A1.init uni06A1.medi uni066F.fina uni066F.init uni066F.medi uni06BA.init uni06BA.medi arabic_ring uni067C.fina uni067C.init uni067C.medi uni067D.fina uni067D.init uni067D.medi uni0681.fina uni0681.init uni0681.medi uni0682.fina uni0682.init uni0682.medi uni0685.fina uni0685.init uni0685.medi uni06BF.fina uni06BF.init uni06BF.mediarabic_gaf_bar uni0311.caseEng.altuni0268.dotlessuni029D.dotless uni03080304 uni03040308 uni03070304 uni03080301 uni03080300 uni03040301 uni03040300 uni03030304 uni0308030C uni03030308 uni030C0307 uni03030301 uni03020301 uni03020300 uni03020303 uni03060303 uni03060301 uni03060300 uni03060309 uni03020309 uni03010307 brailledotJ.alt uni0695.finauniFEAE.fina.longstart uni06B5.fina uni06B5.init uni06B5.medi uni06CE.fina uni06CE.init uni06CE.medi uni0692.final.alt uni06D5.finauni0478.monographuni0479.monographiogonek.dotlessuni2148.dotlessuni2149.dotlessuni1E2D.dotlessuni1ECB.dotlesscdoI.alt arrow.base uni0651064B uni0651064C uni064B0651 uni0651064E uni0651064F uni064E0651 uni0654064E uni0654064F uni07CA.fina uni07CA.medi uni07CA.init uni07CB.fina uni07CB.medi uni07CB.init uni07CC.fina uni07CC.medi uni07CC.init uni07CD.fina uni07CD.medi uni07CD.init uni07CE.fina uni07CE.medi uni07CE.init uni07CF.fina uni07CF.medi uni07CF.init uni07D0.fina uni07D0.medi uni07D0.init uni07D1.fina uni07D1.medi uni07D1.init uni07D2.fina uni07D2.medi uni07D2.init uni07D3.fina uni07D3.medi uni07D3.init uni07D4.fina uni07D4.medi uni07D4.init uni07D5.fina uni07D5.medi uni07D5.init uni07D6.fina uni07D6.medi uni07D6.init uni07D7.fina uni07D7.medi uni07D7.init uni07D8.fina uni07D8.medi uni07D8.init uni07D9.fina uni07D9.medi uni07D9.init uni07DA.fina uni07DA.medi uni07DA.init uni07DB.fina uni07DB.medi uni07DB.init uni07DC.fina uni07DC.medi uni07DC.init uni07DD.fina uni07DD.medi uni07DD.init uni07DE.fina uni07DE.medi uni07DE.init uni07DF.fina uni07DF.medi uni07DF.init uni07E0.fina uni07E0.medi uni07E0.init uni07E1.fina uni07E1.medi uni07E1.init uni07E2.fina uni07E2.medi uni07E2.init uni07E3.fina uni07E3.medi uni07E3.init uni07E4.fina uni07E4.medi uni07E4.init uni07E5.fina uni07E5.medi uni07E5.init uni07E6.fina uni07E6.medi uni07E6.init uni07E7.fina uni07E7.medi uni07E7.init Ringabove uni2630.alt uni2631.alt uni2632.alt uni2633.alt uni2634.alt uni2635.alt uni2636.alt uni2637.alt uni047E.diacuni048a.brevelessuni048B.brevelessy.alt uni0689.fina uni068A.fina uni068B.fina uni068F.fina uni0690.fina uni0693.fina uni0694.fina uni0696.fina uni0697.fina uni0699.fina uni069A.fina uni069A.init uni069A.medi uni069B.fina uni069B.init uni069B.medi uni069C.fina uni069C.init uni069C.medi uni069D.fina uni069D.init uni069D.medi uni069E.fina uni069E.init uni069E.medi uni069F.fina uni069F.init uni069F.medi uni06A0.fina uni06A0.init uni06A0.medi uni06A2.fina uni06A2.init uni06A2.medi uni06A3.fina uni06A3.init uni06A3.medi uni06A5.fina uni06A5.init uni06A5.medi uni06A7.fina uni06A7.init uni06A7.medi uni06A8.fina uni06A8.init uni06A8.medi uni06AA.fina uni06AA.init uni06AA.medi uni06AB.fina uni06AB.init uni06AB.medi uni06AC.fina uni06AC.init uni06AC.medi uni06AE.fina uni06AE.init uni06AE.medi uni06B0.fina uni06B0.init uni06B0.medi uni06B2.fina uni06B2.init uni06B2.medi uni06B4.fina uni06B4.init uni06B4.medi uni06B6.fina uni06B6.init uni06B6.medi uni06B7.fina uni06B7.init uni06B7.medi uni06B8.fina uni06B8.init uni06B8.medi uni06B9.fina uni06B9.init uni06B9.medi uni06BC.fina uni06BC.init uni06BC.medi uni06BD.fina uni06BD.init uni06BD.mediexclamdown.casequestiondown.case uni2E18.caseA&%$!:$#"!:"!: d}}      Y    & Y @ &  .A@}>,,G}G  @ 2 d۠d%%%   %ё%Д #&̑ɻ]ɻɀ@%]@%dĐ::2  }& @ ]%]@..@   K%%%2 ~}|{zywvwvututsr}qpo,o,nmlkjihc h2gf2ed ed d@cb c b a`a``_ ^]\\[Z[ZZYXWV@VUTSRQRQQPOPONONMLKLKJKJIJIHGFGFEDCDCBA%BAA%@?@?>?>=< =< ;d:987656%54554 4432 33@2 10100/ .-,:-,%,:+d*d)(''& %$#@+$#" "!!@  %@ K}K%%dd   2     @   @d  d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++DustRacing2D-2.0.5/data/fonts/LICENCE.txt000066400000000000000000000000551360473665400176320ustar00rootroot00000000000000https://dejavu-fonts.github.io/License.html DustRacing2D-2.0.5/data/icons/000077500000000000000000000000001360473665400160115ustar00rootroot00000000000000DustRacing2D-2.0.5/data/icons/DustRacing.ico000066400000000000000000000410761360473665400205600ustar00rootroot00000000000000@@ (B(@ hr*K ,"Ir,p|1|369=AzF~KOV\dlszo ] s  {wtpmjgdb`^_YR FvV yCnr    Ǎ0M  V [ zsnga\WRNGwAo@mCrLS[acefeghhikosvz~ ,| ?s1!#'%                      )$$%G^r =Wz:} !"#  +,/%&,"' E h$ } X%P|d}cCi=`4X*J.O/O,J.M1R5Y:^?@@@><<;;:998:;;;;994=DE# 9h;MH:DLMNNMMNOPPPPPPPQPPPPNMMLLLLJHHFFHHGGHIJKLMMKVVT&~Lm>T[PKYYZZYWUTSRRQQSTUTTSSRPRSRRSSSPMLLMNOQTWXYXVQYRMbo ;J]]L]]\ZXVTTRQOQX_^[a_Za^Y_[V_YT^XS^XR^[U^ZU^XR^VQ^WQ^WQ_WR`YS^WP[ecSONOQRUUWXYWPNSICz^u ;AXdO]abba`]\YUSV`fbdZSf\UdZSaWOaWP`WPaWOaWO`WP`WP`VO`VO_VNaWP`WO`WO`ZSVLIIKLOPQQONGMLD=h&)| >BQ_PT[\__``_][Zag^Wh^Uh^We[SbYPcYRcYQcYQcYQbYQd[ScZRbYQbXQcYR_VOaYQbXR^daTNKKKLMMMLJFNKE7Oy<;KOZSLSS[e^XWX\aid^laYlbYj`Xf]TcZQe[Rd[Rf\Sf\Uf\Tg]Uf\Uf\Uf\Te[TYQJaXQd[SbZSZcbVRPP[kfONKKOPK.)zD3t'3ROWWIUToVVZUx{XUO`WOaWPbYP`XObXPcYQcZQcYQg_Ui`Xh^Vh^Wg^Vh_Wh^Vd[SD=9QJCWOIWPITLFKMITUSnkRQQZSOM(Mj"t(SUY^NZ]^hd^aDQQ +%!SJCcZRe[Sf]Ui`Xi`Xg^Uf^Vg^Vh^Wj`X`VP,+'WgfYYZZ[ZKXUQJ2A*g*T^`m_[ddchqc\UF?9dZSj`XmbZmc[mb[kaYi_Xi`Wj`WlbZXOI  LF@[lkUPKHH6O[Z?"]3/_~,?Lkoxxaoqpt}}wiXN9/(*%!#TKDf]Tod\rg_rg^rg_pf]lc[kaZlaYoe]`XP0+&$ #  $")'$753SOLRqt>322635?=>A@55.!4vB{_zvnk\Xvxxvvvuyoxoypxoxovnpg^f]Vi`Xf]U[UO\WR^ZU_[W_[W^ZWW[^TZ_RGEFEGB<6Q#UnC2Pymc`x~}{yyyxw~v~v~v|spg_e\Ud[S\UNWQK[UQ^YV][W][W\ZYT_hVbfPKKKLLG=-*:5@<8;7372/630,)&,*&'$"&$!&#!*'$(%#($"($!++)1992;<6BE5tj9j!N-` Y%m"%$n_%vShv:8ZgLC"p$>D/NYr"G\uN9o|5yw&b:2fv %&1f{E`f!ZiHmvob'/2Zi4p&@F 0P\$ZtM_e<^t3gx &(.]p;`t9r#>C -KV(`w(Ay5n} -2.fzKaH:hn+??'64".-&%         *)// ::'KN2i{P48_ntxsmkgc`^_\\QOPQB?GVXUG8#(byXlw^&:QT]aerxrgbgggaahlD%ڲ+ӟSԅSd9DdL???????DustRacing2D-2.0.5/data/icons/DustRacingEditor.ico000066400000000000000000000410761360473665400217270ustar00rootroot00000000000000@@ (B(@ ! $'5 N,f5 y< |<p3V#A* ")38=LSGX`N^dUeiTdhO]^AKK.43 &%            "!!#!!$!"%N3b9}ELC u:\-? ,$""19=?KQCQVHX\IZ_GY^@QV9GI.78!'&  NIwBd:F-3( 012*67"+*  #V6G7+D?=BFJMXabowfsxgty]kp  "!1?) _ekr}vtt2R9uR }Y \[]_xV[A 5&>  ubmpLSV@=.d"*#  zc_D(-  QWZ./2#"$(!2X>d"W˧e˝Kʕ=ʓ:Ǒ71(wcfJ;+ ,'',/$R{V0βw޿٫_ԞHӜFљB˕=Ž3$yhfJ*#"&  4*]a:׻Ɠة]͘AΙCΙC͘@ʕ<Ő4*ydfI:)  !"" ":.ij CܾǗէ\̖?͙BΚDΚC͘A͖=Ő4%xgfI*   %$"$'$' !=5&ur/OݾÒէ[̘A͚G͜I͛H̙F͙E˖@ő7,yegK<.> ffffffffffffffff ffffffff f f fffff fff!f+ %"$)'*&#$@<0q+LݾƘժd̜L͞P͞Q͞O͝NΝL͛I͚EŔ;,}$q&e\2!AMm;j8f6]4b4s4x3u.a .L,@!+*,+)*&$%<2 e>Ĝַ׺ЫaΫ^Ϊ]ϫ]Ϫ\ϪZΩYϪYͦSǡKA4JJ%  j&6!24:/5<)19ihXk!8ƞݽֿ̛ѵnϰcΰbίaή_έ]ϭ\ά[ΪWƣM=>kd>   g$," "'3;B,3:%)-edVy`(~>Ƿ̥ٹӬԺϮeάaͫ_ͫ_ͪ]Ω[ͨZͨYʤRH=6vyI=oshgjif`[Y\ckrxz|}}~!0=*+, !##&##%mv{ksxfou2,$E7kyWqʯzɥܻͪԮmϤZ͠P͠O͟N͟MΞKΞJ̛Gʗ@5%ukT?6       #& ' * * +!."0 .-00152$9+A+C.I?il%EY.02/&&(&&) "ryzrxykqredV+03g7vkjK{;ͪr˥ė֬iϞN͜J͜HΜHϛGϚEΙBΘAɔ;/$rwV>- &'((*-"#'  G kJydns/-.1.020140.01/01/12,$+5>d X49BjLGЮwǢ̧ὈخkСT͝J͜I͜H͛FΚDКD̘@Ǔ8.!rkM;*    ^]\FHO',7+4A>GR$>Emgqt/125/13126ABF?@D<=B76:%0STUY_e67:/n7Y/mx{y8565138457344FWXJ GCAZM6qU9ϫp޿ɥęիiϞN͝K͜I͜IΛGΚE͘B͗@ɓ9.#ngJ    133 $% !7:=#$&+l>b #$/&)* "# #$:67;88=9:;772I^]C%%$8(gJ{B lڿěܸլiСUΜI͜I͜H͛FΚDКD͗@Ǔ9.!nN9    !  /hBg')+/"&$>;<A=?C?A@<<'AYtG"A ; !;)$*'GA,vc9WήvȢɡ֯oСTΠP͟O͠OΟNΞM͝KΝJəC8/y)jd7#L[JrLxKyLy Kx IvFsCn@j=f;d9c8a6^5Z3W.Q*J*F,J-L+K Gp Va |Ow #/ !#!#"C@BA=>>:;.''!"A\)$*Qenͥش˘ڿԵlҰaѰ`ѯ_ѯ]Ү[Ԯ[ҭY̩RáF9=fxC478:88865442122221/.+5?@)]//67#&"JJM;556/0A;GESlɩµtŌ޸Ƅ׸iֵcմaմaֳ_ֲ]ղ\ձZЬRŤF<=~fGEFGGHFEEFFFFFGGIJKKHQUT2e#%'/ "#(,+452`ip:674--A=?T!f ?VYMKYYZ_wͪvötԧݵЙŃغoֲaհ_կ\ծZ֭XحX֫UϦMƞA59flGEJLNMMLMOOOPRUVXXWRZWS+wDGI/%'&DFD==9`hrRX_B>?@@BIn ;M_\L]]\ZbvϬkӿٮܱٯ`רV֦R֦RץPפNעLסJҞCǕ7.w)zd1RQGUYUW[XY[XXjiRPOQRTUWYZ[ZVOVOH x8<=/CEC;<:\ZTSV]esJMQOYb>s ;D[dP_bca_cwЭzt͚էȐv۫^ئTץRפPףNآL٢LؠHќ@Ɠ6)t&mW2UIA[epU`fYiu4,u >BSbRX_abccfnͧcͲn̠͡s۩YئT֤PפPأNأLסJנIҜAȔ6-u'}a-UK>[SK]UN]fcRMKKKMONNMLGNLF>!BXSSORTOolea_W857BAEXcmRXa)F~ ]SJ_VQ[omURPPT[[POMIOPL8'LUXVA;<>BJ#y+TTY\MY\axp\^Tz~563I;%b"@׶Õ㼂pܬ^اTئRإPפNأMڤMآI՟Bʔ4fA4/)&0*&)$!:;7Wy|VX^WUVQ\VON2:DL3LUXVYSyyn^_^LSV@<>?:>A<=DADB=?48K[)U]_iZ\cbbfkflj%#   T>}2P߼ǔrܫ]٨VإQإPؤOؤNڥLݦJК<~Y  FAD=>A;<>BJ?;>0kPgkus^lnnr{~ygXO& $iI x,Ϊpᾊ佁sޮaڨV٧T٦RڦPڥLڢD̗9*b"3+  FB?O\\@3.-10:IN$2:DL?AH?BKALUBOX05:GACD>@C=>C=?B=?:473AMBvjwyy{ueZdTKkaWf]ScYP`VKdVD|f=:ƝQɗtޭ_کXۨUݪVآJ͔..HzVd`XIJM?<:FC?ECAJHECin2++-1-%'#%w.^v!0"23@Q:FR-18),0?:;A;<@:<A;=A/+0+1cxnu}nen^V{p{p{pzpzoueu8=ѯu翃weܫXۧQҝ@)6j{yxefhSPOKGDJIIKNMBt|<=>;<63/F? 2$#B!.I)" #3-/4--3-.3-/602:473AM'*3rEjwnl]W~uwwuu~tzizS@ɟU͜{ޭ[Ӟ?Ǔ22QfdaZXWaaafkkb{}biha^]ZHf&*f%wR]jZ /  '"&'!#%!"' $.(*/+0"!'Cֳz㾅۰gѢOƗBId~|zuts~|hjzKJn##d ?jwm: *&*&"&% ##% #&!%'!%'*3" &ShWq&,tmjy}zzzy~n\D7-7X̽yxcbuB@joxq=! !" ""#""!'y&x%z7fqo54m:rq@"&Sh%,u?itnz}wqzt||w}t{ryqxpxp~umubu]s]{nYwrjfe~98loH "/9?~Gqmripyqi~um}u~v|syqwo~un{slzskyrkyrkyrlyrkniiigjyw{}{ZXpmO          %,2+*X+64XSYZ[qs\UP^WPg`YhaZh`Zg`Yf_Xc]W[UNZTN\UPYSNTOJUOJJEAFC@NJIda`~|~|z}~|ztrxb`skS    #1-16[X+m   543edcnop][b6SQn"XWk<[Yhi][j^\kb`nhgr[Zp0.n ] 7*)N>LS2!r26CCBtssvaovZ~|~|z}~|zXTeYTfB,+m f#  3& 35;>D;%Zv0^k OMMsahkE][bSQnXWk[Yh][j^\kb`nhgr[Zp55jp@   '% ,&$`K%$&6)).54i}!35URQusrfff/VT[LHfOL_@=MGCSVRaVRcXTeYTfGEZ -   ,",3& 5;>D;%Zv=Uc0ao XUTurqacdlihkgfe`_?97HB@gb`idbkedledZUT    %,&$%$&)).GCD6:m/3XUTonlEFFnljojhlhe;744.*_YSlgbohdnhc_YV   #,!@77C:88--;00=34=UcI]f1am XVTpnlacdfedrokokg842% WQIpjckead_[SOM   )3&"J?<ND@E85H<:J>;GCDUTUJE|(DG  YWUonkEFFEDBvto?<:' ZUNhc^hd_b[W0+(%.'!  ) J@>MD@J@;OD?TIBTICTNOVgo\`_ZRH{zDsq?jh;ca:`^6\Z8\Z3VS7[Y2XW4\\3^]AcdgsrkigňUVVQW`nkh~zokd\~ F?=E>>]WU\USWONWONYQOXQOUTUPMQTp}bistu|zqnqpoeadgkigeyus>>@" %MO=WUX.,-(&(#"#3.0512+()IDGa\\\WYXSTWSTVRSTOPTNO(&&.,,&-0#3;$B\XYSPRLILLIMMJNNILNJLPMQTp}bistu|zqnqpoeadgusr}zywzyvzxwywuwvswvs{yv~|++&,,)-,),+&  =:;*(( )''+(((&&.,,&-0#3;$B<8OE:vfuhZ_XS+,,GEDtrpL霙o 4&$51A (   % gamƷȹ../JHGѶ'#1,J 98:9864 794R 5.-+5 -),"  ,$U|̻Ⱥö445+/1554",3@DTWfa +4:;9738>C?T6/($!( (& xĴöǸ´|v578#(++, #16642 2 6:A8J!     2 #!"SSG61A Ƹöqh`*)'#-&# )+, ???????????????DustRacing2D-2.0.5/data/icons/WindowsEditor.rc000066400000000000000000000000621360473665400211360ustar00rootroot00000000000000IDI_ICON1 ICON DISCARDABLE "DustRacingEditor.ico" DustRacing2D-2.0.5/data/icons/WindowsGame.rc000066400000000000000000000000541360473665400205620ustar00rootroot00000000000000IDI_ICON1 ICON DISCARDABLE "DustRacing.ico" DustRacing2D-2.0.5/data/icons/dustrac-256x256.png000066400000000000000000002154401360473665400211310ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYs  tIME9tEXtCommentCreated with GIMPW IDATxԽiw,9%xfHz[DFdgUewUOuTInf$FswȜsftޓ\B !(p*p8/U@%{\b<u D ?{z݇qig<tD 4d*BLv=v=)!.r D BPRH)A$ A8"(P3 f!C M;{x#><>Cθ /x+^g<LjqN $v>xz|a@ vp``b{\w"@US¯//Hq;PHk( C  . bLH9C8p8ſ<=={"$bc*DnI@YPW9JZHo9""ʵUYh=%ڎ?FA{O)d )b0gr%W>.<-H;[!zi./$DQꌊ )ry/QsDv'PedbΈs4Æe3AX1͐ * ,bݡ;c{3hp)a ̱ c$Nbf a>|T]1c.N@vT)&E|8!9!;sy!ᒃ M8`0bXGZ4{OOOGOx`"9:kT7 y;/_:C&Jo7ʩc|HW#%d ףفI3zs9kR"ܼ3LpPsAa  K2R.$U$"$$H͍]~d&.03@HH@)%S6Hrg<@" D 3j0A<-~LgJ\.x'9.H)!KF@$@E&̌!x΁uqΘBB OxzzrFg`H,&䜑(y1g0ܝwyv}!nW[v7@ctowAƻѨ~so60_n; AkIyp"0"Ⴧ`7]1~ U!E*X` DVbLl?B)utCTA*w>HZF0BRd( 2,z"| !ƌA eFL3hd$Rdy8bK&D%Tr8p8=1]NH)B$A`9%b,1‘C#zo#ἃs fv;&do f5@>'߮oLb5\{Yܫ>HEU3(Cq F>Fqz? Lqe 8 ë" ¸9_v5PXTR,D 9:pѝv {_ ؕP@dP (dpLH3˄)NHyAʂT@ P@y1'wU|vi7>ju%l둴dj΋?q2,o8Gw~ E( v}tfOS0d6?_*afx5̡bHRS+1Z|_ZCEW6A.Qt\wzWu矯vՙZ\J"&8#M C!eYI2ơ*]jA y=#= \0=;^Q X|8@D8Ke²LUG\f|e/|_e0!#;S댾A%w'[u-kh6[J7m\7ƯWH;kEv#TCӍ=(T*@X>>tN"Jbv,FA6:}`Ej[E@9#hPLb!!'N1"3RNwr A2AQ@˅ C᠝c~w*pʫK%g*ЈEEgE9ԎAn-"+"I240;< ln=$gIӂi`& a4`gO/s+ <0;-ZJh% D ƈ, 䖐=ȦBmSlcૻz~ttʳp65s1gG{IIg&jPJgCsw!`dA9g [7>mQ.H* @20y-f }@gaD΂,H8MH9{l>s9 d*dR]X+Wnwv+NµF$\&E ޳~~seel)R"jo۵5K ڮP5>-}ܲUov %[tl\ꕴI`wG-, 2;9xvVl3Q+a?bRJ8X3D`=q>WlX7X-]"h@Ζ<7%`Orp MULGE/\PNNj2^&EV@E`.xy㨊#t/yO r#r]-fjshe,{<=Y%GK!YCWr$ ` &([yS@X--aUܤPY{BTԟZZYu*}Mw oTU@6@ss@J aO8 ;i9 jكJ|pMM)FI1=+eex,\KSo*ھWovZr Vj1d \@rB<҆SquH<$p_)l' Gp(Lv ˍH$$W(_C(5iiiyz6HW;-i `uorM%JF6̭ts1-6VlYtΠ^^3 m+[;~wN'x6[ˮZF@8(ݫP!Tl{ŪW'PAKQlzHw@\޷T4PD؃EM`a݉r1;}p'v֒^RŜ"^ةb#G$H$"O'м.%  0CtEЍ RXb b*i$sWD^0:T59t%Aik7}k^LhW=(]{}0Pn,;0dpuκ5&l(xEWϲՙc)Rw$VP_h=`7u&R B9\U w鵻հ+L+u57`%#Tf4zexZSq/ 02#L/8 18` !/ .r(C yr%FdoEJ6ޜU̦څcN `D(&RaI!-KJAڮU(( }X;hK*x2ƍNo}\r\^*'"#&0I8cX&i;RCeY0 x!N3:v v:.JQ䜱,9f9ÐD}X7+hEܑB*z+֢gyK%F\ GY}jmDUBDg,BuMk= gL*IJyE88+7Mq^&%" `=.  ץՖ3f f(&07ۜu7QA,P,(M>6PJF2=a:_܉jP*NBsR)_<xXmN<ܧ4#h Ĕ0`Vҡ716ኪsw9N^f,~ ^9A(&,&g&[@8r/~8")7)--Imm+Wu%>I3o/3?x/ǜ03 0~G<<lڕېr=ZJCoRXMqH:`bNJ \NUYJK(=#@躓RWaz[ӌӍT|XA1 }a㊊d^UC.EQbΜLiJlHv"ͧiRkF`4ZS׈Σ `L/_taa!|rx_?<@ q`p߾,֮sKPzr=F0⫝̸5R" oxZUzv_]U`j?u*Zum釼]7;| iMi}^5OW rR0Za _s[f0Rt :zn3` reAؘlJvZ ;xخGD1f. D3vR+ߒ T" r3pZbRq7+q={ppHYp:zOxLJS#8M9Zzӎ DM+@ew>)]^3Q5NڙRFԺ)Cp3a5inșJUi[+nSZo" !r-@`R7l(ژau\x˕{^/QCVSP(lj ؊.PIԮ\Di5]/M[^W:*@iPlKLE8JI!=8[Dpa~?M,KJ"`4'a1A @R;iF&,).u""MvgV*]vzB f&^bLWk+Cd5-Y-mN-y==hyGd:וW݋߲ m.*)^Ѹ暹'MgJM~E;, 1/d;ˆ &̑xSsHSZC$wn%Z_}}E#5;u˚L\3a2PUox- qp8)ҞNx}}5+.賆O̻7!kњBMI> ݈?i2 ~2<*(pmg@15fx00|u8C$d]")9=81?P(yws0)W" ǝJS)%3ˬ2!gap9_1v=R/Pwߪ݇5"d7+m+6Ft7;6SՑVHJWms*I7 Dtokב-n<=.JёW훐hm]߲#k-P=gf]kg$Z|bcnE;,Aw]?03L~ޔ$rnT0F<<>  4]O9.AAꬭkXFq%2]$(L|4vټ3Ju!캩m] _>2MCw:ZKwӭ, 7"Okxt-A\;mڂҧ6R lLKTښBr≭ k ;Wj@t*qǸÇð8. oBB͛l(UR=Lxo!!9@UL/O-s顚WކeȖn9\ Xig IDATD^VQZ)/ʷD$kI˂2Dâ8w~G| *=*WTr6P "pTJLJ& IXbF2PfT3R 8H}4r77WA΂i/_?taY#|7Uk= vEց^Ӏ[ZbH23"n*ͳ4L_?gHWujZIT$j>]騁+g1 v~ytkֱ.`:UB0D!9ۖ5ŕz%ƭVE$ɆU\% y4X 9.Fi~g?~g<<xq{KP9 N s{Wʉ*!!\e4Uڤr2&kLӄe^RFJ&+8Xdeʌy1BVGǤqUQNE1EZЕI"G:j!.=XuPzIWs VіgrQ)D)[Yٕh#&X .H=VAWS)PA ֕QFdS):Pn-ZVrU>c*l7TlȨ Ἲ;ZGrEk|eB%•Κ}H&M p\T =a 8x'Vȩ%;G6/͘/9 pQ;3r^;v{8V\ 4!Ű Vb318ad{Ĩx =|9|rg"m]ȶD=>Pw~)VR0gNwW !aF8** -u$ f=a~7x8#)8bŒK7lU#Ú}% M)F<쀧x$ Ƒ0!0-1.G7vg** V^尚Plzz},㮨W^Be1WbPrN6`hNtWxB^.H "09y{0-fE1O"&rNxy92/^NS2ǐ5i0bD*CmW|B?XC{32 h"=<0`g|/\N[Ugn@QnJ%Wqn"&bu. mqKRT5q 5*+DMx:a0nPqa(H܂w^ :T챩;`4nG<=a%vPewծ^=P-VrM賗mU6BqMRN@ 4ّ醴69F ]xdPwF($s4 K |"K_~IzAg\0-1ݪ #1?~?xz?`|ϭQ6L:Zj5۲pE:2PYD;&WWZhXƨFK) u{Zx$pͅ _lRnQCia D1y CP.+rLJ=~1O>z||+?)Bƥln罩<9#dB8ӧ??G{H6ŴʜEb*SLZ*ld?6.oal Ơm NTXvFb)ⲴAUUWB&y0.6cnC+[B?a~)pT0ZLvJPk(2lHh^ajFۼ:n o:+:s(N$]it6MQsmd9.Fˋ0Čar =9s(G*mnpp|1 4a^"R6( 0gOo&_I%b:uVKo*7+Nme"[u)F_K sL6]@̘ 9E a{,{ =X̓k hS,t?5yشKWg\5AqCagȿ̸|QCZͺT? b4NӜAEEvSI9dQa3מJ+kyD1v/[[K T[}h5X?sV٩OU@h4IapEʥ|XyC< D~aq Ht?`U1iOx>|] RFKM8'v{hθϘgkZ@VY+fiU..Y+3ޑY +{U4OgLqid$3uLKsSZ4m`Ydj}1Rj:FCzWmeS'Tuq8 Gד)_|}N̂v{)V:sWq9K) cҼ UJXʝB Ps$6?5M{-,hm`kǨ?uWWe ("g{, (GT\v|Y$ q02i ӈo)7k`"Fk&TfaU!*UR4`Y >6USw(,URn(m򀀜+jZ;v#AXK9GsCoui:-9s{pO}@0(6Nӑ,\R. qMpjk 4b2ÂGĔki ~2a2b*x^)ڕRsijy|MɹMӵUX=رr!K,VSGG.FZsusb2s$"Mnft=nZZ;ÀO~|0 ޏ׈˜ XK=b&V5Ǘg\.RJZsSpc p v:AXSHZ5M R )5nR5iI1<ݻwx܍"Hj-vϵs=ABN )Ŝq ơuۥ,z 3&XDBOePfpN*ZE5p_Sdw>d2Âøi93^˄yIeEnJ0Yv-w M#|JW%Gln"/p?~4=39bE!sIJPM7w?OO8Aӌ ߞ_^^_q&}[~2^D;"VkՕT@,i<sœKib"bSenps8;g?)E|{_'/'+'Ę0[VJ'a/|o:qdo}k]w0釂~^e;}Kјq KDZ|6 %bYص^;wxw{|$X|_|o.Pdba 0[q'VH %8_.pӊf)=1a 1IrqKLv  tK.}%( -Ɣ2O= IDAT:ܕ7 9.X ۴2!c@€<<=r>rz}d- ^ѓ{G?=?<)+CgOx2ک[4bkD&W\ lG_U`tXbrASX)&400"")^dJ$!Z u F-CqL J|}I3~ ԋ@ZGF{׬ bL _'xxz/)!fUͮHtp9Oe <2Xb87~܁ O.<>%[@LCp| Ġ@#;D8`ce,]~o0 v"LDDM ? iC.$ri9k^;nWߌi-xL$/YdOb\I!iۖԳҺU¦r~44#jDaၿo<=}dڭnvjq %я w/(pղ@G8q-g밶IFb?ysiy!f#0? <ipc(i4[ն]ógw ԱfX U'?s:)9][RrڲgӉ{~_7?'jnYIKQ>%f7[ tp=?}ϏN$Y5Y l6}׎!`$y"0&r2\Z#bΩjWh@sFad 𦄋,ۭ*]Q{cs4Vt?t!bS[Mkt-on=<<}I>~t[v-WMgجoo>?9Sr-&Ihi,mV+΅`q ivspXV 7-nGv#d@yi?]٭(ɸNYDk']4"|XKREۦ0ǃ(-̩\ѕxd~:ZH?ށ)&ygٷY"1]1˂38k)ƀy5d;|Yl%jlWs ctyzyx9ʺv#өy7*,mh\Wͦ]]GjhV璂0jL HW@_6UHd1%$l4 ]un2sX#}ˊ0V s5ܪEF>u b5JdpΦLJ:&׶fq- ͪ囷 iO?]Úbb#?ȟ7פuwǑ}?gaq5ܭJ*6c}Vk\q?(dN,mՊ(9)4Zh\4Zȱ(zc;pYXGL?we.J;+h)աKePR\s64@9nkW8+X^)~ _|jͪUN s +?r[7Oyg@" H] o[;ֱ q \XwͶt+< 3Sd'&mueDS' J\ٍfQ fd.ȼ䄍Ő52,?\( ƀ |PK01`E$bH/ZvmZ-FhLJyVCǯ FZݑgzsj#vچ¡]gIs8'[w[qZhض+U.ށ݂7 tBB  (7y8HبaTA1! !4ғoU؝TSD<}5_Uea5Q[RF)cd1Y)e%I!b%GM9CU|[opa`|z$|~ ?M4l[)ϤO;(0p<nh@ JjS y̴.a2 pp: i= vhnt'[qv5Eׯx{5ywӓݕqX[8@sȽ<ÊB3H#!Cچ4hlDꕐ9u/ ֏tin!8)FWxudJm H@)12xa.swTDU"1ASq1Ӑ+ZeĄ =a7$1IwNC.:<>bw|}6iYMDjxnX0p剑{ ?R!%'4t]HNǝҕf:8#0! o-onYmn:{<)!fn,/S/k)ƨ^)}Finj_.u jqb;y-H^]]եГ )<pihiȸC$ˍpt$ʘ{G#x#:qaIΉ2Nϸ-\;-p2+| ye]_Fͧ j)JEƈ@Co9,^xl kaQMЮc8FװݬqIɒXy)WތmNT@(?}5n(L" S֥*nJ!!"![Ph5WT\ zm^_B=0Yb+&- cw p]o8mm?:vC MC\ĕ#47Ɉ4Q|֏O+qAdzCؘ9{ZM"@ҳbћXcD<| gk |~$;PqXz|q v:DiaYA00FW6[k Ьqҭۛn=>9XTmaĠ_~{,Kr#% L59z'O) AIU*dy<]+2T,<kepƳ7&/fyWjH2.\l3Ue#z텧|c3njef,fydSX0QGK44U!*S LiitjȣL+B1惔)ߡ\K0f⭇OIJ&0Sg쁧u]*4Fha\-뵡k!GD g#]n\q? FY֦H@J xO9}5ƼRrKMizKY!tZ#ưWQ Xr~O1Ldoi Vu7_o7ͻ7D[N}`8c.Id%!3<=ãGpwƁMԍ6_ڛDŽSsPʊ5A*˃| .n3dR+՚=.W]]2֬a:^nd V5J_gֶW"]̻`ۭIe&&QiR#CۍfcXѰA-C0S;Pۿ|Co'`.ʻ>JA{"Y_zʧOG{!NF\Ti,Ku/_TjUFe, > Rڤ{&d! kofza^$ %D3?@6ǯ"C޼ull"]*Fk` J/g\aHn/8W|ۥ97r_^UMZ_gVeW6 xm6lmu^~gVr"}:r{y6mdmĘBkӃN^|brLԑi*r-=@ؤn!c/~ĐZR<7S,6 PhcRXd${Td,e&Gw[7 _޽S[:C*k.ِu 0(>ou4bhjql!+[Ny'JW+ҦhĔS:FB ֜:ҳt7tgz_u (]c IR<:F5X=bݿC&!ZQ{+IOwF0vxmFiƠB/b+*z/XGm32BoOfٛj Q^Ԓ)7nըTcIpK:Sy 'f;ļZY?{3.K^ ).< Xt ܬ7o"A;{tU%ݬl=F#NOdp:F{\9 Fve~\4H,Ju&ufq6AL0iɮ4&FjA"F0Qi& w8[NK8DZYRȸnr.@kJj'xk&U1G%tDi&6FYC# pش@ qmAvd= .Pq4g%F4:Rir6Tj?G ϻ" T@f҉1BRLJ[Ǐ?}o1ܼuڀȘG<]nyio ?Aӊ?(co00 >$VJob4惕K'L@&zEVlqG)% rm/u;+j$ոǗƺ$s14}/^Z)6j.j:a$Jvy t%w 1w3j#isv 9FI:ÙԯR, ̙ Jgkخפo\ ׀ OqL1\! PXҁi"Cz8a Cd 'АF!7sS^HE)Ro~5VMXn%d] eM*Ylh.//Uk^(qR9^"UZv, =͊MCDWvlװY[hq$wcnΨvB4ӈimg -V488NW"7eaDPXh1@qM֮8 ue|3un2՛m`bIM0fmﮅ?ß⇟6͛k   tbYf mY#EM6J.@{d/n3 muK敏F:jrRd[\~3*go:kM> OfӚP38O~F18F ߼7;˟⇟yoi7)I(AG4u.34(kF[lE\ iB95Wg4cpxu U΄4* s)fR%ӢKAL7zgR:? )Zi7*!oؤAKyuzXk +hw>ϼ0ΐ2+T8 q8WN=kwQW'e+.i("Nbg&d-c\p 7M sPw04݀3؀r/􁿊4Sl6傶#Yxj RZ%b@JJhOk~ {upD%Iqh>nf)ɨA%aAFc iC 1Vx)-.giTy's Kv9;e1Z\4%(3ST^&w rbղa. `Vd6H,Jᤚ,%I󽀉`awT{[ QYimKE7P8XG/ n;@.^;X8#;TVNZ5)L0kNl&7dnW5|ۏ_}]]#*QA\>H(`olr8M 1 !@cGDNƜHGzb-nUἝ{REAjW2 tK_rB:^Y ~/ ݟ4qcq^&$쎆I9asZZZEr~8eLLNl֚伔ȵʓ*d ?1_` ƿɸ,9y2|!U{40’PTp@QM^mwWwk7}|-vuH[|Ӏ&E-t%|f$97De +OaqJ>A\;&ZB_êP/\b_+}4 L_ϺXy$[?-R!|\XWWVyA<^CI!unB4.@>&t!&'sךъy^{ [jn!5e$_(&ɱNŽL$L3ڵ'2|RU :ӿƝ7m6|}:L ߀Q6ƴ;j |B>I}n}2Œ,0 ]mtQܛA]j7[Х_כR}USNni7MU_8{tʦ1L+4*B{jQ8$$0Nj mdYaEΈTRpZ1S@\ ; %5S&#zD>_V@π@5@܂t]t]q,jI97e ǬzPl?.{L1E#;e/hyM%oH*솙A: 8 J/=+q8e]r"aD#cTlp/{rΛ4iT9٤yVBc-@VQsH&po~v?~xGwuV`-"Ƥ$BɵlFIOAgÅ|O"R]yKg_ܚ kW^7.'sC `Nsִ6(cA+/+—%Y/C&=MRjMaIpJ[$Y ك>\0Pf-kYo-E }ď-L 8h^YWFK?/ ipCWS/ a|IUɐdTҚ \ |h pûwik M-Y^ߑ3b\pV֒OF8ߏ.#i8tfbFӔRIY43 ]9_:F$1.c jK(]%;43\F/{񘺀IOB+AeXW tx7+F pqw!>%z)Oug ?Ks+Z=RbQ#sB[8u Xn6_| fɸ1.Vc-xG7cpT&ZRUo ? x@yMK.V$]" +/^1F|spǙCq~x/^hRu꛳s!i"Lh.rKXL&%JU\dyK@A؟ Sԧp$vuIE.rM-0wi9; U,qhqd<^5%T&OKp6 \ZWA9Reu%b"vxMSM\+ɸw1,i&~6+xw }l _{k mSJ;80*|V1 N 19c0ۿy#r 㴊*Nڝ__A-];bQ"kxm;oK⊤ER+l(2 p7̗q(ݞO&;/zþt}'ei 1PϺ2bV #Vh ~:ƣg8SG9s.EFW*s.Oy ]R^, ѡF1u̎8E7;/5|~wۯXlqkM Dy\1!Jꐊ평 f|H6I?B!Иcͫy,y1O_"\dȠ_T1E' "f0r&[up;DK-$8FW椐h"֘B|k/u S.ޜ;AɰU<ǔx`T[PaMkc*4Zde7LKۏjsa^MFZY/|k͆nӥie'/-)QtŇX4M IDATĊo!0 0 cHS͟sb+QPzd_Ћ?5;j!@nӒ}`.|~Dp袔$B&#n'R GA+O'sŢ0 )>~ $+uD]ujeBC~%:ړlƂb ;C?tt tb& 265ffҡZt^ѺTLvYP:3 h:`T-]Jt 4f& Ê"o·_|͊kvSUR;mtˎ;Vyv emla=T!I+ קӾcy{O]*ٿz*WRλʌc'DAg&E4X1u,|lxnv,bbVr97LrÀFA\qgXمFG0 <'ND\ 0% ⟁-zO0t&^Ri$'&mDvYgD+lc$Y}0WճLh8|^ΣV,/ճX1x<':a4 y%0QܜfM: ~=gFi@`=6v'~O+'eV%-Q$ JbҙN /T- 1g/ҍdO6EdW8)]ku+Fz+|vef'NK|vAv~cGYe4q&57!x0&@%>ކ Lr{ _˥",,O3t("M s"ЙIyV`,Xu@ NI\S:XEǬSpZӉHp) ٹBz>D{JpI*P\f!H 5s(\ ۏCa#0 jB8/Bv0aU bM)He>o:4-RT$%y;bt3.r|U~'|`{۲rIk"xn><f0awز(Q}% 8b 2SJ|ЧeQt+$uaM] 9s4MMړ(I5QeJ•lԦdZ[T!ոZ3Őo2GtN~a(XCȯQp-و, Tĺ qʱ0LNp 4} 0jXgٿȤyA*&Vk8>O!rF/?YqQ!*B/ЋЋpPe [LJ*W*"W28O:dXeZ Gu9j4spK5΄01L)|uN-eN^]./*x>q\{W<2ww=s׌Xx8xi1D\bƜ3 ,"!nwi; !@n4191oF?Z5FH+Wß!R[/OdDՆU(G99s۹Ǩ\e@ 3RBj7\vCӔ:ltDF޻b;piЇ:w+^=1GEȸ*bPM|w?̷R8ZXvPF @M_*yltLrcGSm.X l1yQm@X1fXK痠VS4[I"W{P60-8Wo0[-e\eaab`A@B, 9Fճ!%fUºƚ-y٠A_oyC8<NoW QUjgP*4r*iğzoJz blC4#LjeO,rh;R9Ov9`ŗ%XOj&tyu4E£hM%/!eq|;e^3}c 8`ŇX 6,spJZEhL3XRy٥ aE*v\O 0K ߅gʸ}`(n1 s"($VŴǔ.dsSaDۼx?G7@d;QcdaN<[¯_o_;Y5݈ s<BUp(P&FbHOg۟SCQ&cpDM)䎖OgT<ÌvҎ'M;4t*9ͪqm;N<1A@HT;á]@s^D‚eYsR=z Y0x{ - 1UW˅xFfw܁Ҥ[u%D0؄1S|{I8-h^ok*@ iC624f!cJ9 iQߘdc8.F G.}M"\bXE$)0z8`^bXzX̷iDUƺU}Uvu7w.Ekq:M8oK2D pmH;%f48g04@rϤr󰯇jsMH$ 8/x= V:Y_\z0_Q%U=%_DNYB[l]AYW# AD($Д`LupaӠŇ03b$ p=t7&`8MֵK XiĴV\ǍEZzHOqa \lPbcÄrg'>q=+cCU&"t:+x{v6x= ^9xNgx&5ԁ6Ax[4ѕle @1RÂFDx}^Ns% c,@-qq;lsQ)ujE[U-jc+Noa1_/ 5חp8r:^c 8l GRR[r1zLD Hi@)Y,`$^` ?ΰ. $E8Fi kD-S/ F$bLJ7jX[rH~[YSmϑtC{;Ya^;oFWUJu~-tw}fSQiJfr—/'|2×W׳E9|OÉp8Ɖ`Myycq[RZVw[ۍi&yA;1)wdNsq CH0 "(g@aqAJKK_,:a,5"%-" Rv.208V9|98M~0ހ- =܅47YNI PcqGxm>ᶌXq4|Yks1aL#a ӀibF۫[cL3GYdr܌ D`NW; v( X DmzFڭ:$%TS rg7^%q~]g:\LQ% 2o_F/ד|x GF^9(piؘtna#RvӑzJx=D=:-QjuAJ2#! 0kH^i; .lprVK0T`9t#*dy"|9%p"A,`]9nL($TB2~brfHvHy ?Gn*|`{!MV(c 48&??MHty.7]q\fcJiF+)zEP3ȴ_yҹn==`n`s4 ?ږBu:ۯ WE q4x=[|{s=ogL` itrF778p,c蚦|ʯ7XtS8de`,x;.x2a,x)  |2rDd J+%3n y)끜 mq zNCRYufyҶ/3s!H )g[Z4 ] `{O~'ز) 'i[˞35!\$0X@ rrqM-ډ-&o[7MaSN*?k5+uv Nד}N!btfk-Y>EH" OVf6s"@)$+`ċ ƍ́ SspiBF5Ĕi!Ro.1U;=-Seʯ$4ܚI`]˭R_tu d]E"e X[n#pC Լ00'7/__߀//)tNgLGtXSqJ$Bjz6Z[ lWӂce ۧhp80~yM=3j8gӀ?`bp|W`{u*&ð)b fY8Uޜ0:qtx98ÂӐ0XWF!iV@o-= XӼֽ<  3 ;4|@8 1M ˜[1TeckXK0N`YWIxd\gB̌,F\=0GF4t>}5_wʢ=39u~}ukZ~jơLkdk}TcZXINi/oq gW ^ς 8u?tG%ӭ%20jnUCBO ]AZRd/`vƣ J-w lX U+ yiaE\>#9(8%e oRĪMp:xƈ.› ƔZX`n&G3h+LGfD%Qq%_S=Ԃ a,e8hA3a\w \ QEFMNj($*B! |d ?4:& IE']KO_Vi^cYЧ-I^%n1yr6di[WktX;(xL}\}-ŧ^9}%7Bb1EEoRNtkMsS&t`B[0ފTIK*nd]<~R(ccb:Y|}x|)$%Q;$|յӹFuT|yvq &k\@@U\4K~0opǷP IDAT42&x8QRXUusʫIݧ4jv5;f *k3z`ArAR=㇦mk57˵>$VnwۏB-Xd-{gE΂1M a##%M{v}w :=0U; `{݈K[`rq61L#Ҍk@׬ʰ,,j1.HqAXnepo&j*8X'00ab5 [h֬zi8il]1!1̠ EZc*b)AZnܽV M)]j;23r%v)&Q]tv7Sv] B"@^gk6eV L~F;=C228_^3}&x{8??[_e #\RN(3)v`yn$CvbO*98 ^<& <`cNH׫?//MKbxG Sa:(0I0YK7Z X HjԨzSEQPdtrιđѭBS7nDB[mӃnZ8dCܺɈqZ MXOˋT|gl| BU'0l /]f }B$bP] 4 [aІ-W̴ Y$5Ap>Ryf|{x-qz՛p_kI3!wrkcV6eis9+ȮW.($!scӐppˌ9&,1gYxx~[Udq ,3A"FM8ER 3Oh#4#+(`0R `-I,;Tv 3Q@Ry3Y[n]Ҵ/h)F[.iVzd3d&4؊khI.c9){(@v8rns5 {>S%%ЪYڈMGQ PՏlnHvɥQ0t4e|{KۗooQp:g^ӫKㅴQm}jssކ|/kQK[k].cXC& i9 U4@Ą墝 1XG S!cqyDzbJ5H@C3A7Cp+@&`X庅>ک'FWr$kH3P<[_f=m ݫM"wn+GB%_NSgQSB|3Bф,I Wl A~k5(YywzzIHwcr:jFs^G)4}-ikE dH%|y828#.ptclN@R13=Р#w, q>2`,مW@qU`yX;)<{k]XA -uZ̪F]CW-H8Iq9JxS5;f_ݠ4_>Nm5~ߪ ~Y>Av`YY+U ~ҰBZݨ JBV0 /S0q̘N9c:;+ɴ1D{`ȸVAnjeC 7&OiA ;p3FD0bڋ9?r|(պMGL/jbŇa\n4h0 i8t0b"8\BKiW[(^o6IJ(dLPs;fQ 3n< uova"P}'`aJ_Nbq[ԮZ+nWS\WeM":B‘|| aۨ4*[2Ni!c<1cԷ-t;`(HON](oGLݶf*&↸]\R mi'$8튛,~-̬sN^>WL& K34 8Lx#y-ZFH-(qBGEIԑ!q[8Ohڤs4[ TcԱ_?cZ/@Fʻ.VP⟏q̈C'|ܙtBT >yfQ/l~HV1Xce}uaL\n(pV=0LaTg&cy]}>H.?V}V`gKfe/w7ϑhMZfQʻeǪfe/'m%cY‘q `aoˌ5rvN[8|p/<#?) ?. *6?Ao2g$F(Z$#r\4Q!󼹌Da: Èm%8*0 p#>KpR'mo !&2;ncuɢ}Hn6e#Tpt-?nȿ%3f ˯b~b` NPY5àu`SVkqJˆc W H f*އ~T^PbS>ퟎt(N||g ׳zs:qG\ybU)ٗf5)!8MnE$ LL zg0J ۬kpL#K4»UT5)H@$yQ khywx0_$K\_Q0qeP4))m"SM:/z?Jӫ-ʘ0 b``Hx@C._mXKQtb6^ɏdCBQم:$q7؄ԜAr cKa ^xgrր)bgb?M wཁ13nK:󦮢5o]ڎSJ:#fƒs`̑H0ZG͛PS*$,@eIis'ν~/r9t2AwQ&zP邏n/c{H\[P2ՕGeҬ9 h VpM"IRnvKG'f౸;6SF@ OUXaȖɪ}"K=Z`ds MT⭜a`8`oጁ!B )%|^f|\f\ T*Q\b&Iǀ9ri뮚AnF@9CRFkČl-8[h{q~7='To='ww wG!jxbp*vP7M<-S@p#s5XSu~E}}C0H^ٍTQ/gkI[rB190h )eyu {qpu#.?xr 5@FHd1-uS @9@rvrmJwG$$9!_"%BF$Y2]ۛڼ@:7Gh6\!(6`%x4MNUjӡ:c{ [MvoJMOcAKI#x9V*FLYAal5Ϣ$!esrEZH]|w0nsY/}{8n ?oqyIzc*5 D9cB-8RI2e姒 yxML˂0UUw@,| \,|Suk}ɓOxC?m'/mo4g"@+凝<?>׫Fy4JúrƬ AJ:s3M*Ez$BHFw)Bn|u2"n˂ e.Qa D|^g||,)`FM fʀ͸PqeAW%9 Z (?35p# { Q(K. ;̎qu2?;1Z|̠ݿ vgqd`}'/ujzjv-1Ni/th ԑWhsNȲ)Dۨvms o`&ɶ[K>b)mY;gk΀) *r^b^)wޒSx*6\Vr[-6/^/߷BkhjkEMZ|3 ֆzK]}ym[WֽzϗHxq%;!ȓ0[7<;[_{NL1k:ZdZnU4"*s?$Wbj[)BBN9!s$"#ƨH*i~DnyVaoW|:ce<6rAg; ,Q 10fd$$,@XFJj ,a|~&|p6bj7nzCo:#.e +pBk;hfTXֿSOXVjkެboh]QRHڿ>PQsåVSU0e{DЉ*Pl?ܹz]BЫ+==YbϜlFJWX,Axop|s8 n0嵥҈X8.k@\b60nRJegqeɈ!`W|\f,KBtȉX$.3cYEgo3_י0W05+|7 H'WfQ-Wvy6.|-spS:Q1(,F-d IDATES =%9 pmW)dߟ7 V9gRؗdCU/Aڀk7 ȩ ͹y@@e(ۮ@ jEvTktG/3F}QdulcKK56. [Vf" g!U ZY޲rϷa B\ȳR 7|\n瀔1u%y& 7ObLuLI1n7v[ooAL@bzPJ@L98JZu }~\nd54݁GW޶ul?NDwï2=*(jN\}+h[XZϻb?kDa-m&g{ry$β޶&~ݍ%I2\ :Hja(©5RerNb#eۋq"8_@;.YoZ`p Ncfp|V>7rZ-)yaBJ Iȧ!)Y`/W KILycT)w)M'rq{ |\odw}!Q[͕ k2 (e3B̈IrV+(v'R֭AV m!`D 2o7k6v{aSl61`;ӎ]|^)Huߍ<᮳ o$wҩ+vx z<6>uHwKTLʂٵT/AQRx?Zq-4Fn-rj&NG8H*ծ$2*aD c#ebÂ%DĘab n`aC)"W3(+;z 5+IHA)E?},}E'aU4y0-T!', % B^]ch Lv/Y(KPBbz1}[nKo7AZ̮aŊsg>rw]܇q-o)&N@K:riSӸs(ᒏi0VHd-Dj1Zt<M.s1k`'|;| bE*#@04J i*3`y3aRYf]Y Uf!mj!V?\ SAY4 q߀$Y&xca,Pڗ9gf3jxd B-A$bJx/Ə~= βk`}/}z]QzPTiwxғn9)8Ee v+vv,Xc k<Ը3]݄ay!mָi8pn$́A Z{fksl-RN1" _ 6Z E:?c/!h BKƈjGfP2&8k!"ˌ$ RSiAب[2jgn mK9lZǽ$;E~J&+U?Vd~N~Ad 鰕,( ۛߊ .ͨVjquTo0 3C8ccNKHieZ.@"pd0AHTc{0kzujK̅[HL9`fV˰; rRO7))VJa2 ",9"TWI@+4M8N D!W);m\Z}4ݩsUdR-.4yR~}*ϣ=WOb W=o-q)&Rteb1l,`={Z2)>Ĕ[T0GEm$b£BS|9\ DJ V3ل ᜃ1"`QyZ_He1SIU@X! J&30xQdn@oI)B[B|nb !i@dm xcq8LZf(k1'p I- 9vfrʹ}sCWzrxLܢ[F9["ᖎP$ϙ˨AV~1{Lӄi`rs+֡252t!M\BɾzvW5 Y3Rp& hٛQɂDL)V-H { )ge$Lu?Imkw]Sՙ9p:tr T,0t0MGX7؁J~!!<#pPCK@*]T£H**d5;ݾ5 z 0F<MVE NUI2(S[l\66RV}:bNӈxa0u;1EϠE;cwa(@fa#O'\g$l~N%6p#H&(gGD5ց xo&;0@Gq:vuыaO+cD*獙jH%7o;ܿGpb Q0Luؾ?x v-Ae7`tC[w93bΈ+c]KLjkP'kd:9JRX'[KXv@$AwCO70G=h8`8>WHNppF;Zq:QY9&LOI1/5vqtBbަ:C*H:SI4 Mȟ2iHϜXW}F;Bu`(̽0a:`L;ؠ`>R: t}#1wr'EBG=>|:םx; wpȐcPqKćK6e*R ddgW aWMW"HB1i*$fo]q4HԿ| F 0p8p9%˂V"mrqpԿ)tRn4\wgm3akH63lcǔӕ;2{rFfW ށ`'kgҗ#3FxXSBFA6wk/M tm.r oxi]cOtBJ! F80zz9ryF>l2YSz8-!0O j6AN-xv-@e+DWmrFw uNY0XeNtP!,WIy IXg`ag2!Nˆx` EQOiEJЀRSyGۉ4/z BQ4t- &P=+sBL :2q|cvMMA-fw.@3q̼Fs#BNkT+lR &]1+?7}3it8pwG@ #$g"2m劘z0 &PE!r䣒If86DsʈK Fpvaߒ.QՑrt>* $kstɅ田38,1!#Vy<9){p0G@=V̗3O}‡㧏ꇞSs?o.Vg3K{ޕc{iPA$ck,yxORoNs'EJTYBY5n{&Z笠hyM<ŀC%: $1 {9H N d O-5sVE"@<`e:Goٻna0\YkT)xeaO(ޘŔ2y| ΈF!YY ~| Tlu|*.Ži|Nue[#n{"NA[*?%_Eukg0T.K9sQlʅ(VNCz¹)nlhЛ`6)q\N8??tz|y1,g<}xǏHiYrJQ(x<8 ̧OXNOXN'.p(`(@ گcFdUS`rεe}e:[TQf} WF¤K˥ԇheY|:at41B^,3*y|<,0MĬH޿~{|2#\/f"l>g`;OER])J>wh Jndu *EkVZKrʿ0tʍĈq|xӮ~#.S)A0NX;b1/JJ J"2xÄG66`ErW^qA0 xo*FFp;lNaVǃ=25'&SL'àw:(mA@{0)ᒱ,SeKs2O?t^>g Κf[ߙb0 M**uS"5*7)vFep!j{MRˢ/Pݔ3\gKq~~Ƈ~>LJ?|zBJ D)S1xiupeh-E:~X6MpÄDpeL0a1#i4xLHx? [R3&[%@<b7!4:jҜ3dYr`8![ GyG| ˌh\_Q>[5qL#s u((ם:eK_ApR>BRrxxx@^<>=tz|BJQ\K&# aa )h 5#҂S .<>|YbF0s;`hp7G`|" MX|(mt| tԛ-+ S,DWBM 7JM cp# O8Li Y*ӜYÀaPo5Iq#xj5K UYUb]WHx!5wE];;eZ\[lN(^qbtX/#Lheߗ*S)\p>@4 .Aq\NNfȬ(y|2Ϡ䁻7o=у !bzennWs. t[7Ue׆_I @F91/XG۳o>1gkizC5.|h eptk`]h/~B WqdQlLnC+OWbs(nv&jǕJ-vCfƲ1/3#c90$JMCLFLv. yMMx8߽woq,x3fV/SQ Z&"1eF2ik,Y2,.QG)aj·:WOXp^5"m[M ks&,ȔWlvrJA h::>?"LqkX-_݅BϠLc\aCcѕ-7fP7ʀi;ӄuԷ, `cɧǖkt]#E1!sV.o~O |0;̉|G|9\'RRz9'q,Tp:!]+h@DYQ820(W0_;NO@Z@0ڜȉM0"zE?,߭tUI$D{ veҽ9¶u+j&7@]O71u gs?ul UJ r}N|A Qq)%Z0yE.)bYWTKD׆o{W~/ 1(ϮL IDAT,TTe84Tt`h+^v5-A KÚ*X &A~Ep0xp@' \L^JVUDbMh B2pevWI̝ x>7e#ZW3mtcGS2.zZD[k.^>So-pkvz{ +fVK4Ae+;4vrX%S@KS(n&Ι('b/U>xS%9o^u WBRV*/̆#H8*,ʎ"8ћ{7ۏgho pde\)na]g:kȨ V\@\-kކ|ヸ}[!j0뜋sBqӲUb0 2i/h~mq8{wXHW5s: GQ1 E x'@Ё+G{1FWG_}oEWBy\Ky̘pXaiUǂyh4Z'm.%9ډL,?wG81ayγU\kVh árk'D&&~ȹ(&9/`! 'iD`d;tYؾ|YKk{Nw ?s+Wz\Un|Q{6ۨތj"yt.N6L)휕vn{@WiR\ߛ3Khśg_h[k[]Ӄ Ŕ̯ڂhTvrmkrN|K=? ) i.+aM%;~Ч()z֮Go*6>YYBmW6c=! Η2g$h"0 ,xc;~L:,قOrUس}4h>X0̴̼؛GA-2]٧Ο..Ē3K>dʉϫXtqKTH+ОmNympra׼}GAlG[u'hYuA,H.^ˀàA? ft<]'XNm|M"tNu|J ^WRgPPJqŭ1XOxȐuix|x:;,#;a2!dA]عKsYv!E,5f)ﶂHj-7iɼ %8_jyo^h{eKXU~֮n;ۦW:=RB^ no^^lgN}rۻL5TU摮|2W\oNPϏeSWL8;\Vx:E왵A]_Hpc9 *#d܄ cኧj;̸ ~xCÌy]9q[<"Y UR|n|\-\w1i >c);t5ҬAB>H4_dgyoJ66nENea]vp~g[]cuSοV`uӨe=gݰ_A] 2"&ݮBD]F]@ޔ] >q]YSǓ"8* HqZ}yDZV 6fk)Eeyp9=a~qY=>;/u\!!5%2&wqa^OgpZk"ݦk GmLSóGt'wN- 츨Iz93 tY<+Q2>w# Ag @@ۗjEdvz`/ ! F ߿0 ,VsVFPkLx2"k- [D/ ׁJ/AnZ-_ lk:[,'Ќۢ9y<τdzeuHTp3ecWg>ĹqZfxJ?- R~5D,C`G>=>a>_, x/~=p粢]Z$"ʜ^6 p}vRz5]R\@r(Fhf$rc:^7g,*"@> >k#H/})< "Pz!3x1 ҍ`,nHmmӅ#=" իHֹ_2n $X{!Fke'ا8WAaKZ|pXgƏ/%5G(' ^jT$]]+noȺ۟Pwȍ GMh^@g/79Dk؀@D|)%kPhS7s}1h mF7 qop K#uU CFH] .gO?'c NgWcqFN' j6_  ˙G^#i yViiF(23iu;{@]FisEm.mB+W3WO]0 {#O:>boCyn&nf*7o]"Qre(D__2 n7x}ާ]u$֠,ȑq~^ |xR\L6lbkB8M9ܺS 뢗+ioRYb@,SPӊyY,+bT2 N_~E0 ?8-|s_Nۑj4& >qW H}M_P"wjO$>AkKno9Ytx6Yf#^ޮݥSذR>Nn0bx]*/}|7ʎfؓr Qrs@gƧ;pYk Փ]i-gV? y{!dN֛U+JP@hNܒWg+\fƇ=2,%*bʞx;iwvcIcF\2.'Ƨnj:?(x\kE6i3bRi¨uWTD2kC_U<37"!b .lR7ĄsIQ} z<wGTP1 :oGf#^(:~Ժv̚*S+N}Jvf/suM\<81Xτ eh6hxO;gmRjIN9ZL;)o (4)m<:p}>ۜE>ڕHk vyWQnjB&ٹuFz ]&mab";J̮e Q.%#㏟H?|>΢X(\6~*W/9YaB.$JW݅#8AN嶣r7H3,.: A 3$1:ÁfF80.08r=ST'ͱ d Πo+[+:,Ef-,lCfc9[!Ҵ@ G^!\DŽnj$,B4N9/k0 S8".Pgꑩr0#!-clԭ)٘l+k.MNcZ0k V?u 3;X[[EWPvk"1! !%`I,x: ?iGO"d# sMKl˾Ru- cAnh/8xbx{0.2 ^IDV"~v8)88{qG{Ǹs/nfSclҾ-p̡OS  [lN:b ׀ORU$WTQ:R+Kf&!#Úx8|<%|< >\B8%`-3>u Ĩx0V+ *p&ձJOUE^Ap8 eDDD.$v3!GEºc 9Bv {^p¸+!bQ5KYפQI u6:(w*iTvy#2("#32p_@P٤:&:}GǍ(Iw]+è^/Y8޴gMfi:x!F^!ͫ|(}zN@Rӣ*/toݢ㰎Xv07U[i/~wGŁ*O:ܗ즢9K;~~,gLZ[Y@& )8gex/t{kK´`w5R] %&MMǝllBdMz5BD[Dʄ'M~]>2gqW|UMRG=*bu Hr5 1F]5pIP[dz ,bJXv0O빚Y{lIMh]=F]VkssKKs sseފ^HgsxF-" "^(3s.dR+5tǒJ̊_~ XA8G/56^JOBu%z{لw8 BD>% yu ܜ04trĈ~/Tм]RObIgXD!nJ7…H+/[RFTЮ$>q8 ܛY=𸭗 L  `A `vqB]^,bGYSo\BA5>e0\'3u^ 3. ܢ1 Kx k_<泪Зq *Vn9"ܮ定;;+}fᾔ%ܒf@"5t@} ikg ؗ3/e7Q? A4?"O pݚO΢ 'w)$ @R/tt<K _`fԆ3ЛTX9[jATDTgŹe\> o8?/0Q1RWkߛO3+ϝѹ%8x <0"V\i$ *T ~7viЯXѭs@ :fYCn?NRVrudߔ0j^ /vq;ʒ{    O,[S?5\g 8S@DQی):~h9WmnǘBRv8(w\T͝Dre*9"0ѕ;k8hrtѿY|@ a{x74w$ 5?juz:ac]lk!J_2I1ꜗlH[?T9)~:5T-:"Tmzva+/JClz?GB԰V,W,gkv檴rmQgᎂ)zhJ~*κ"gNd]Lk#'Ņsu|HIW $ 2WC"P(Ttذ]-0IϦuTeQ Vp +4z9*\kz CpC: HB<[vaAsMNL_s@ {-6Xm2l6Ơ{q7#WEƚC}^`3K$,f,rs1Z7'pp^6pe|^hZe N` ֞g[IFj l47RhJղ)`UPL>UUe _.(MZyn{ ' DdD[e^yssv53]/ (^؈x}՝Z),,54:ZLRec*ɲK*Mo,YZ78ﴋY$$]S݅c^㯖 b~*KX{|$ȖJłS *P84՛bPl CTt[ R{u2l[2 5eW9|:r5ߤ)=~,T%4h)\F!sT!H }S|Ub^9T`LԳzbwRgdw'R+[P\FNJ&6_o~HT[14VLF/_j}`*4$(IDATa+G8MAzV@D#\[Y*EX79WR}'{{1`'Ph1XXMA{U6)k *iڐeA7޸)R_֔w8lt#GPRFz9=y 4(=KzPZzJx&3)0~fFt^׵l?TTv"!mjǝF!/dr4]z#~4㐲 }zL,ߋXRuk:b;:WD \C7|6Վ/+_ 08XPVNoe6 #96g ,ޡ27u6_ЁeFIClLn-Y(zmShel0msy6`7Xts #Aw%k@5(bh _zSϒ%u͋ǪѹQm44_ &|rXuC4F+? w8q98+eF)%fHf$1u^Ex3'@-PԈz4Tn'tdE:6 L[Yi]op#NΗb^V,KIJuYRD )FSEc9FU0Bu.e>YmO+78 uJϠSR^ wΪI 4@%5q'֌2֔Ƅy^1_Θb+׈u].+֔RBL}~POb_4.`%(GMdӮ,Z2ZsC-A[@#AcaDr*"5,e,Xג%X׈e=!)%pNH)#e JEBM/zM y9 [F%҆zuT{dB% ⫣ `TBhs[l"3op!Aẗ́bLXׄb @e̋fk4`QRLXcDNɨ:eȠAB^gocxJ6PAdo*m/?mND/0 aY@4}ArH9[ 3XMe~`Yf̗:#V2$bN8x=~;nQHWn)\hv@!!Q1K;s&N=wpk]P,G!{q`7,XyArYp\p:_p9_,wѿQm(͵^/igw_YحEgÙahP{vH7g 3WgVK5U_8aGq׀@ + ce 2ϸ/y^‚˼`Y4^x=A6ێwKL#Sm ۼ޿*t2}v}A@~ӄa00ǀaa<hc lә 80 X:`Yxs!Z9|,3 .e^1MRJÎƂolQPwIwX2:t'Upb# "<aa 8L)`!`<ἇws!w-x|2z Cg 9 xSҞ<|qh'\f\fRBfSgE5?sC X--3 䜙d ?uLd-0+!_ 1cD~C a!xx4( aa0 #q0àE8icQpat2Bݨ)|8^sD@€EN0xKl4xipp80@6VXzHUN0 !08|7k& l "ňu(ӄX-3X{I쯰 tFrj@MD3#۝C"+( ^yAH+$ ( @008M88&0(H݆ O)u{qH@ C4V1fy^,4[;+քyOD]6>_u8QcԾAf.Ddx)ÉTchAopҊg4 bHWH^%bg>b bFÄ8bG CF2C:S3'`Y6Ǩ)Vw5&,eIJȹ!7C3`B RUR_njMm7`|uViP~^@f"Gܻ\wwro`$Hb]ufa 'H^iH#$/@ZҌ,RKan/ƀipS/8b3c)'h t౎r)ci eT2^leS:dTl٢fmv~?AI@Wҧ'4Y-"2unno! Z ЙT#TMiN6c|Dv@C4{ɐ)A3{/Hy*+|^@W$KwH' a a0FE&Nq0 pW3G- pd*Y.&+R̈RD1F!% k*rAW16vt ?=wnˎY Jg0٬/5\GuR؋ !nB$+(`^@gPh+\^cư0KH0x4'*#tPdMDWN;# |2S:B\:EH9zQǍ1fFzb~q[j"W>/-tK]UJ+l93~k g>X +Gky[K="Gw2o =]lFlJ 0 A羢a<2AnDv#p#\P1dx 4BB!Y`EN fH 8YHW! cp 13Ӡ0桂i7K401.id:-H Ff &r\AH`B\9j>K `$+o ӕ޿?kֽw3YܟټpZE;zo[A웑/T1(d P?b]j0߁|z" E\Rx7 a@44 G`8#8nBFDT7O0$dHBF 0pyF3(Zv`21\LaG 0K,y_LwD'^fuNG dFV_yRKv:vYUwr s熠s1[P f0b xJv"&E1@"LNj/z1]P]5$45BƚDЊ\86>~RF; ʁR’y> 1d(K]}X+VA*'hWԽ?Z$tT=X+2ѭzde\pk_ єVGf@J#)&hMl0g!>R ;˕Afm4920#eg&~̱Wg [)޶ Iy&~>Ԋ܏_O,׬Gݐ=,.<3bd銥 ݪOF;!@C$hBc6{Ɲؑ4R] RX3gW~BpFe6m9M;QJ);?؞8"p+)1LCk= B>RƀR <9Xו?y9};?*z ٽf_t2Fݱ oѹȾ5[zo2dk_<|=Ή'4ŌWMVl 9u7&"'w5/10I,xX3TNوywQw&'p 09/۟.(ӂvу.._ayq$e$iFYc0(!J (lҝjABz9b)Q4uDXҌ$Kq@Wy 0LZB"RUQ=@R04fR$U\PG'&luZQ383).,au@+qRhRBА c x*)l3qp4+_1ׯ3y8 XiIc<ffɡ.˲cv DSB*%TE3fRlcO1 N96@yOe+p$9xu@4{ UNs@=Xro£Yݻς \vŹY1c(˒ހ\{ܼ4E677~t0㝧i: ZOXO)u=7xPjRBjqR;( /x B n?"шbpuns-ƹY:8&n${IwFk]|~{_XY\ڼLdc!eQRU%;Pc%/ t1<jeȲ 5;{ =Z4@edv:غSU%demeʢ@0>sܾ_ht@*: ,BH^EJE#PȏykO-@GE1CTH/I2a8PE }$Yrtϋ/UlUQb=7`Ȁ67vY9xK+X&{y !@)hLw2yxn{8opod=Ryui5ͷ^g~an2JCQ @JBeyǍ}UEik\B3Ã;Iorle0HAYpx>荛h4Ziοg|s=%) /qXTeIe*t] yDPUw! > 2T vK!αfhy2Nr^xݬ\ W.,/^b 7~zf Z%U@a@vw6q$2aʊF` [ݏ]Z:}^UΫcrz]!;,//}\eyd2)qN륜(#Ee;xЁ^:3=O|ꓟ/yqWUz:F]yb<5jEJ' Rh%yz T, ۤIwuMcg9[kM( Xi+XM@,m\2TpTD1ZԵ?`O@!5:p@ crNNx[e2"nDāf~/-.5>:=;lqp^!E]> ]Y\g34o Ji↪o'P-CvivH@7 d$*:_8Wtr1KPWy%OW!R#R !!..:EF ւTXDs%y1F i lFt>_$dukFUA֊Pנmp) H GI Zi[D }.{C` H4G) ^.nX[ '<._LUb`y[M5c6Gf 3"(" hts=a|ߝ[<obe=ok4j2YmwO߳ԯ!I'ctBѠh&Rc=PӉŠ&sHU&L1ݷ^QFZvsFm2獵 J)Ó~ KMiZg#9{ߢ2T1kϙb81*4v,֐O;g=Z4%'m 5+3RgtfgxwJ/dR5A#(j AtmV‰{;k,x]]Rh4:8Yg=R P1EG+> H"Rh]BԔ;Cϝs9*fg .mlI$KhE҈V.F T 1?1H!qbDSX"{A{">~dzxFd_-Q5CRQ2FB8_#> aɜ6/-rmsU( /J,ssYg(%4,'p!Y<Ô%2C_PR4;ta<z;ӗ~ OP??B+y09b32t(*ƣ1yFբ h@A(rU~o|JpuT^@2q-iVRSj#b ,i5I XH SzAFwɳJNG#NOx|p@:lD4v )bI3zt kdl\+i + C =<_Ϗd4qlB#@S͝cx /-g/GW%P%Ӂd0 I$My1X*k)K+,<7G+nrpq` Pfmrg C=z jF`&NY]90H4Rсd]<_Og<7W#Aiow#wϼVΛC &U/JSMA2ʗ>hpt.] ([ȍk-.ZA?UdY'ߚ*6Z!z,2袴w⏼VT?qw2ÓcrKk*Ie?_@pa/ B3dD8 98Y\^?emn/0).ݢ~pWXޤUd^# EU9I! ̱u ~ s BA HeP2V?Z8֯[5Tγ8 )ڻzqkH8"A cg '\X;3,s\\Yfma(ٞ9NKayq:9JS y2BONXt)6m|KqC}*ssǬ_L!N ҁm#o|C>;;\v#C0m$)[ONmF!ѱ>9At!4Q binUmN2IqZ˴yOaJ,e4B;95χ#x᥊ gOri{p? |ӧwt kW}.mnw\@Z,E-J!H f "<5Z 8UcꭓYk/:BqAem;R+JpsS)'bCփRY:3pG8_g , \A?<˫}p}qunN1#!B1IqȠ9Ό4Uek~8W(ټL'nq8v'%մ֋׹)HdyH [WIPViV .VkR XY xj~LJ7uJi̢;< i,UHid9Bv3*0Ճ:̰JiNO&e%u8(( a UAs.k!y`h6Z>C! xiV2?i !A4r AU O^9XwnU>p"Fr c6> pLhC^X/lqtA QJhx/lxD-ݡB F5[Dvͽl\6 X;7(s]feNu8BP*v<pl:\4c\PZׄ󖲪(\Jebwͥ{6n9hmCK !&ԬYH*[F'1?Z]F8$ 'W9ŽuQdR 3ޢ1\L^dlh)t.y<߾ǒOB 8($yw>kEOl}8SJKgIkSfW98X멬X0\=b;렬<@KUtŐA%xfMh:tU) :ʏ}Uç1/vpD`iq$UoӪ@irvvF RcxG?F6ko8l+ZÇH d\G~in5yV3ZBEYf,lvYZZ l̶Ͱr'%qO7;J[|N&;w(=ީ%)p֞Kݿ[(d\UEh0YxE9څ!GTe>:9Qױ57LVo\x7[7y-@pp0$PYDx["|6ꑽ{_M)ʊyʲP0 I6w|W>inӌ5s >xŦMpޡD~(ϫ-/9"x).wQ:`[OF9ܹjkSBVdلltBo`һ`5ߝ:꩓ל>8Gf,$O;VWW dp^<q>['(O(Y.ts)jG%kX-l ,#"k-[W WG.Y^hEYs' i"Ϭ^csiN>'"=2kzq<Öc1 ֿ;,cUuy1#heͼCTbP`ޅE)  j*6QYEYzyRю5R먈)[Y:iല%$F=ruPyCRNps<6 h@zqSEFVBo,$gsDT|}| xD!RQZWmm ڱ`2qDzӌ*'8nm&,̨,ej(l,T!<9 TcZL\`\+g50'hÚICPO@i!2ӹW֑U%I2Z:A{uzpiםܒ_qĻ??!n "mIDAT˲~RAfBڝ5+V tH39GZIWL ԓV%@:q󍃬,Ɉrkpz]&4P`AxVCPIVXTYFV"~A2v t i:";ݽS>OcF9gPSwj8Ơ@eNLY%Uf%,ChpSڒ&#tLuzݿُ^?%β QvqT,QeyJVE?RVJ' EUiOɏw~ջ/J$ 5huN,n]W?޿2~64Tj/ت:٧~ʝ7{rJFQ 5&t"|%U,K[{EY! v}+g|)I4B֙B Ajp"~c*)ACѬz7, m۴Adn cdN yQo3Ou 4Z))a@A@e,b& qul4Cl?Fwh aJ.A %k u:H cF(p!E򄫨nD\jR?x!r= %-qЊ#xTA\IVZnP.}XD .:-'4#b tMtD{Ңqpc41H2MLB tk`bkޙz3HegR?"8N_1ElD  ROgjoIENDB`DustRacing2D-2.0.5/data/icons/dustrac-game.png000066400000000000000000000114651360473665400211020ustar00rootroot00000000000000PNG  IHDR@@iqbKGD pHYs  tIME2DtEXtCommentCreated with GIMPWIDATx{%Wukq}̝;sg4i^Yd Q E`吀qb쀌\!JQ(R˶GJcbHH I3h={h cdq׭]}N}z{}kjjjjjiW{ܺ?}}{~wFkd>h:6I1R}ĚgALFGo9pܧy,?'5 }_yv羑풥i//+ȋHQxJ>B|81FRTjY13r~ޯ?kOxKxEmw佒^/ !}@bYCsH&Po$fӱf,+L\>6[zG޷~bb8 ݢ~/v'=7ponWvh4gܛwΝ nY/sN^y&w{5sz4}unb,3W c'ftf\۷>yO_[>NoQQ^-:o/^?y[Z;ffG>U_17Ëy_x<6^;z씼xzd]{\w0P쫿eW|C5On}?o\?K?ɗ=^[hcZ (! d)bbrh~_|{G}͍v\Z)V-*j+sĕ-ar z5Se:vCL AH%m1}M0#6ql i@+]nm7Evd<hukO01zBФAD4R"0y;~bۯZ֡EIEC6÷KغV 51U9ĀH+`m!^#mm lbqi Tl43JxVOnG"X0 66Ukyd  L7W,(C P3zNS$jN4d5I5qLL-nKٮzg?|w+F>>>P!>mTE" ygV̗t|Cu{*r`?_|U[U[U[U[U{(|0IENDB`DustRacing2D-2.0.5/data/icons/icons.qrc000066400000000000000000000002071360473665400176320ustar00rootroot00000000000000 dustrac-editor.png dustrac-game.png DustRacing2D-2.0.5/data/images/000077500000000000000000000000001360473665400161435ustar00rootroot00000000000000DustRacing2D-2.0.5/data/images/about.png000066400000000000000000000175021360473665400177700ustar00rootroot00000000000000PNG  IHDR88jsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxypՁ?ok$[>01GRYB@`w!* "l-K2ِJBrûr\&qa;/Yhf$K#~K3OOՔf|^+B"" DD€#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#"i1HZ 8"ŀ#4044!DoN8'z}Y<|PN. hhh@cc#pf>nllDcc# EbG4 űc,cbFӃ/prp`ʔ)[}}=0sЀ&,pDPww>/;hkk;^PwϟX,h4?hX |^z%\|p8Z0&'NNÖӢh' $ s9XjUy*ݻ>~\&d bttY_#lW+2 4Mq€#٬j$h$z{{-9NA麮״i hurnpp24'H^+Ӣ(~ѤDlKQ\;M o8aM2hj%Bxؓ#nm6+V,Coo/\.\w7UQnx>+0 ZZZӟk֬ixᇱe˖Yhx hooͥo< z{{1ىt:]ʕ+r`<C)SuؾV^ԶzkKm| ĽB|%D#|0:;>»a\]'< /DQwpM0SKr wђ?7y|~1gm%ΎPP0jR7#t晣*ɓۥiZM4rJ[0[lDB\󵴴>@<裖avJޖ: zn[{「[!R#P-.sq?/iW^):[saLV='2ӧ[γ[EggȶX3 ^]$xCd|rطo}We_߈O>D![%C#tW{^@/FOȮZ%Z%GMZt---wa\$Og̘!^|Ez鯧L}@شi9b[u}}}x<%oa%LB$IܺJ$PKȽKZGtuu76mW%o>d2D"amp;`pprT*x< զt:=/uTU+!_.vF8yM~{=!UUmVä8`~qyL&Si7L!. 6J؈3g@o/N72>mhZf1aB@&ɆܗX̟u>a[>3lG(D>ٵAD*^-0<Ƅh)^/-[Vx Wc !FKL>q4]p,bϐ׋+VJ9 ;xᅲWI~l6[O6~mر_|zzzrn52|5tڟdvsQ0TU<=vpBڦR;yJ`8,Yp8\u*3.ݓLB)P==E4vCf+n7t`+0vbi40)@X,45?gf̘EQrprFhw{.*ǁR/0B(g? .pQ\}էL BXjvqJ,[V6ݻsBШu =.î]?yBtb…Xp)r}}=;<fD,K'OK-3g:;;sUUͅڵk#X 'N@0i7-@|ˑdjpv\:ƞ={Caԩҥ|p\;w{-Zk׮+f1N/GK< ί-!kL>t1%+Fuvw1 x6'N@y(kZ_۷ѢqDy*9Kj===5?DgQۯ~+/^ };ȓH`ΝpoB(4[[X+n3p"5ݙax(CYJG`n4;D]^:gQvww# tK7E+3ϠΙdpq[{쩬xR `B>5V ΞqiP.CUO9t0̸P?CW_E 7˷݆V8{u *EњCpN4[[nŲeˊ#<`;C-ŃA g@&wO*%5],|1TJ?q&n w gܽ٥Klַիxq&sl6+*E",4M矏_~6m*XB>×_~9tBUq2fL6 ƾ}PdâN8x`jR N}Nss17X5 /r .[K.ɱgAǪ$ j=TUU؈o[nw6L4H5(g /vRnݠ_KQMZ&3ΰUMzo/E}ڊދ#w܁W\+fͪZ>:USJpx~ }Ǔa=kT !l;k;lnn͛qFxBh81}:ߟCЭig*PՅJ Às`z$Ȕ)e?+W3f!Pl10 ˞_A׹~/Ў(0VqypiCCh}U(g]62(w LmnEaWՅ[oU; ~8tfͲl.pֲ]5y?݉/P_SHYeڱcAq0 OBS t7Lj#_?ĦB5kp8+ 'E>E2OSUp^2 8B7ʼFSOኆ27 .HKT*UT|0S"^/'\ &?o<Đo2`Ҡj=3x 3Ç~u"]^JPyľ~ =}:0=|8_}x]͎<}˗?Zo!DeufBg .5\w[oe9vuBJp$な\ jZ?^܉{BXR5 8 ,]gˑ0,^$mYm#>{}u뫉}0\P}}}FvnVR~߀I^xlLzbŊ;WJQ!_Bة3eAw:6mx>¦1ap|;v@hrRm+7qPqj wCJ[#ގ^ۯ"HΒ3TR{1\}}=LRRyEQt:dlذhjjc=gCWxh`ǜN Z3/ǕW^yt:w]~C!lLx 8Y(y~#;m^/TaX'N+V7~K8œ>|xt]#p3m~=&~HfDud}> #Gzl%HC18r+^Hx}:Ew]\r%/lK0SO?Kڎ:̟?T b׮]سgOe,CN'kçLs8hnjD}gw=RߏǏ)xp:сm۶ݖ:B!xc :thTWB0'ڵ+o3@ @ ޽ضm)?t-,XΝ;E׋G7m7Q~iLEQ 6l@O?-˚(WjnF$Aa6v[fΜ+Ue^oGE|zCX3`c]#WΜ/DjRVEQ~~{Zk1)nx\xl6/ç:2_4Fyپt:+%Y]A0 ] 0EQhwt`#\܈N3wpon(pݹc\.8ܴoX,s=r]=Z%Cp5:4$,2 R2L~6E:o\c3/0di; ^Ǔ UǓؼiVp߽ed(pv( ` %"T* t:D"1jPKXaT*nVg9mlPq}hiiACCN\׬GZ>o%%80X6462Wig&ټl2*`>d2ѣG9vcc# L&sGL;ve]z444`̙5kVҁv%L&`0e-Vg2sXߘr+d8\Y3yd2:kӁY5зY27?dc:5'\MHns΅au} t:~f-0csQ:.R)$ dY躞{RԨjp#w&*JƖ&z)#Mr/fxdDTe ΌpABqB v1jUT___eV+Jry^RX,jZ.j\.RTTb///ZT*ۿ{oooXZfryooV=??VrjVjrzX,*[JFngYRy}}=88:{{{T* v;rQx}}}ttT.xxx(///T*m6ϙ7j6777dUVKyxxVRe^Yyfy}}}yy;888<yy9<<|zzT*Vk^{rliQo<==yj^o4Qn$yTr\noofqjzrr2LKjz}}-T*v[.+JTZ.ͦ^FtZ+fzz~~~^{{{ϵZ-J{{{EQTU[vZZVT4ϋx~~>>>v0"Qj>z.NNNkZm6JRTuRy~~.(rnbnJq8ZT"*(ʕJ%$JbXn6jt΍u"zX*jUVf)bf3RL/_f3|~~~pp@rZ.rTן=w\ׯnw^?==UUVvM4MsXJ)ŝ?BtkV#fS|e>͆d-vVry2zQTVj1lAt///([/\T6f l6j56R.899羒׳///(b^jYx\Ֆ˥kZj"}l^/..뵯o[ovFl6r@nZ8f)Jv`\{JRVp5+^ͦ^VZ͇#8NyݞNԒh6t:}}}mZ֕9ӭVjGXI_nمfVlfzMV*(^__%///łSA2܃J"lǟjuo-q'WXVɉO?}GXV°lqttnn7x}}mrtq^ L^/GGGbQZ[nr:j0|vGWm۫S퉸B=88899;lneܚ nCJ%"okRov_ћ&u3EA? `8&P2ʳٌȞ5 D!Y}7(R!skh0Z"SrYSܳni^7NjբPyzz:::<==q47M[^l6tA0m4ɤ?>>2.X;N< N'$v\ \.x.btx"6h4h^/nV}^.fsN&Rtt5qBKKf3Q ȕ%;G])04̥{v=n132YHzhcyvX,ކ[ZQHN$Qo6L3WVHmvʢ9ju~~ ƠJj]}yj5}F3Ţ1Ʉ6v?@T*FJɱ3rh42ϻh䩶-i-rрlv]^s=) )=^W ww{/>}:::< GGGB Eө딖 81\RHqk۷o<0A||!A-h4I 5ƋkIG\%'b+K}zzjZ{{{+Ţ^8 Wx<*jJryy)%lfQSׅwGGG\-0PIUl[ bzzzf z~pp0L2`Tv[V+bfzXӧO^NerWvVbO&r8Lzj+ڙo{Gp~^-(káTOOOc\.X;8Rɳ.~h8aԷ$b iv- nq0u؉@%wwwry6Ƴr ju2x`d󃃃bV@l K[P*&ӓG~~~W~Ez+^&؀@^^^ fI#Vwwwɷm6PSra,j:::f \5 aPzνMV-^.ͦVp(qܽ}h:x9'4g'o6Tt:3EqppƥR wbHZ8XObnYi/ɴeF@:Vs_@b5( V 6G4鿭V" 7N(Jw{l6T0*BvKQ_a|e[_t:! 鄾sHBR:Lv$7o6r,:NY(f9N9 ^w}}-kxQB%Y@+At]V']_~(&IbшZTtG`8c0@`C)^w`K7~R4W;hgnChp\՝Q\.ݱ/~'I&"$7j-!"PU߱۷o^j5f¡aZ`4/riC~AG^^^áO~4l~/}EbE~ca)5MDJK%f)z^Rn”dDi=>>&TK;3=t[v;v:r¾dW|>'΃|1@ Y0ۂ` D-zM CN[ժ*;/.!OC(fr8-"+.F?N@ϥ,?`0%h4v;g B *AF( k l!ǩww|<~x~Z ý^z^֛T¶5úZ_aph[4f9s2 47bV/K.B;_£rY=Na ,!Qa: n1$@b8>>xxfs2RW\.9ŐV0iƅH{T~7eS6:n*J 5Ypgb2^tJxβ;Ps296;ޘ7'{g彽=Lf̹ ށj@q q䘂IFH@o ^)bm@%G^.d2;%t?y2P &h4FC"NRZ;qgwvuzUV^,0+MD?PWiX VKuN[\#Vz=Oc`j7rɈ䄳XnG?L2Q`~^TB!+-Mϟ?q RZH;S(&-wt:NZR7B=b9|iy@\__KA%Ef|SyAb/')777lipi7x Vׯ_^N$|Wp.!Lzo:AćV_)ĊڍL/טVp!<+/W3BiAT|Dsϗ"0څ|< y6PVK^ :99NN-G)#4X ~5R f~#*iPL*۔RaJR`mf8gN]gE NPNvFKl6SϮjGFU|^UpU@HO]HrNE-•l &u:Fԯ`t9Z]\\d=ͺ.R#4[. >_/Υoҏ@]hI(& }SjY9Jw)ߦ81piđP+E9>>Nᩮ:AEquue£w'wOnI eTͨ0N"t+=Lη@pXH(z[movB`m BBF! ~wČ[ 6&0C":oNLfǤ^H۔;Uf2z1CSƫ[.bL]TEtEEp+]@igggyz- L<@5ߜxzZOS:ƺֱkܡržcC`9 "RNű9 K &L/e'ps4fr"+N-vJ,qԋM%9l^VYO>!vST@NfŲJ%K.uڑDxt6$K)<ʶr-N.F!;vr0~iA*qqx#>ep0ަeZco%e;VaJ۽]rO*S μ{G֩],w'DxٴLQoi_S)tnvG{fxT\. )F#N;D¢(`؃@9 e8~_ CR1  _& 04'h$Ldq ]DN)I{FyhA/!,C#/ +J0JA8&UȿcǻN^.]%n\aW~_#*M@fz o2>@Q֍!cDRUd'-GqClRt:r믿fpI;nk2/K#5G,aY2eM`e&ѦWOtga9|]y~cXAIz.0V ) Aه<Ą #lĚѬǏezC6T*@?N!^oov*k_w0ciz~ss#FtCa5L&FD#@7#~fd [E؇"]׃MR)g' @WF0gOQQ=O@!ɐ'''iVx;onn'GwڨSEN^ϊVC11D:==r Ѽj}Vt:Pʭ?*0{SAAfFb&Ri nf( %)P(.//SbsFq񉏏#H13`ć=yeB`UbS]+tG"]lLo(͝HO M1 u:$L( ӣ pռisM⭾.~?NFA(-o! Ϲr8΀ZP?JPdpȟkZ%}0F !DM8[.b|0/Saqi %k;?a= xL48) L6!L0jc׈8q< T*Ch2ȷ_)BJwG}/uD=" 9zRk hěx,%S 3Geqe, -K6ΟwinZ%RtvvwKe1o3mA30uғi)*MIFū+dtl5u/%,g~x< C,k >>xZN9mMh=yL7 }V[1Y'=7{ӑ<uiCm1'2!"W0k3rlpN׈h;RDl]q~~nR7xGʸcMsd?ӚbRFi5bKdpT!E~C]q:M>b]ݹu9]9<5I6 9-cTٮ䔨z J*}埁4?F0XAd,6 \eB8$bPٽEEz}uuRs:bxYM1|$×n?{PQ4ezfh(.Z\giTZ\ps:I QąyGȟHɤ_DH Կ% Ҩ-N }zbY:f#.ɜK>h]ꌰ#;C~AE5(B+v`oe3]OQPlZ` ._,P<wJFnoߡJQ`bj=JBx9<{QonYo:Yjk%xZ"N'S 6̅v W8څɂUԩ>Q67f 敠m'?!N !WO\drqqݥUa\.á^9\7MaYź|>GD0P ^;Qr,~0tNcqiEn 6M~${n"LuCɋHF .cCy&D! -M'XqvvLCj:YQjf262#Ea f! ֹ&7'̄Չ'fm1@6FM:βP`>`0XV鴚&?]niYxؑ6 )`'?|H݆2bGߖK JApчȪY o} %<`"sM҆Zn65#=lˮ^~"8=W 9"6?d{HV"[0}A)_6mwGSteD Ax3X }z2 ZFdwkg: oVHt*_#5H}=(ɧe.'xJsߕ`0Pg³˪ԑJOw{ȿ8{jKh4fYXT<HP> .HO<>>T*h/k& &nbAH/ R t6GH/T/[4x@V^?>>NC+P[IL/ 0N.T\.``IbrlPjD eѨ:^HR ]gB3 uv31w *>ۚ8%%tRpDRz1%! @ZPe{`+eg)`!X,w kwwfmWWW3H6AC*CT Ɏ -FV`I˥=їbGPccT9t%&/}&NKr Rhbx-(:h HSJT{Q]6Hf*ÊT-0"v aXFTWHS> R 2S߽;\m܀B(\^Ҧl2-cή(CU{夆mUhFH?: s,iXnYp8RaӐ0yI n4zC8mbeKjj5q4vlX,K >rʆ;HmM`0 4 Ex#Ԕ@DY: ojTA40R r0{UK,Y&IBc_H9h42C1=?7àI& h[G'P46X.E눥,cBCiK vyR<\R~_Gr㘆W%2XwٌnKC(M4pȔWc ǍFJ XntRcPAew-7/L&֛I@ w28@!}@M1m8nnnkdL0d2J7sz0~R">I*Jo6_?#D׿5%B=Wr^_^^}0 M0jaze uQ*R%#Lϕ-p vAv!=; Di~Tښf f~߾}f3ux<>==nOx)oon_AG$.TV` qsKqQVonn'V-8s45.`f F\I pWΉ':DQ]R]cK!#%SPB{rrx8-'kuc)V8<<S_F% R{XY!p ,0DT<8L/D(j)- [\ 5QzC㝜0N LiV2 Eq Ex,CnQTũl rO8*)t*;ٍע:\.jŅf]Ã{'Ța:sFc-`pwwN "fsQdyvCYf>eCQJ5y o pv*5-*)B[ub'z=9dQ <O%J} h!WJ @^iWP~7DB8:)$81l|ɏjOcrIɷ|)KV+닋 )YY-\.ҫ+[[ ^. 0RW_k홏n)1Qln =gPBsi6be qW2I5,.䥄KJ{? t%K[C CL2Ԙ*RvaBKPA`<88C3ʱP<-)g4'@WhMW߸G?c6Єp$_(PVrYL}z. ٘f"J%+Dt[!4]X|qvJ"O2ƴXgggvJXO,ia]0@}p2ɩ IDAT9z7 ,N' .L;fKeXFo^/-Bl4 JQ#̍B] I"-"F#eE`uB*rxN'&|>G VcA'S 젛G63zLSzsBx+N+vzb0)߾}Û:w>;;3^gpzh36CB"I&`LK xgME]+ns|*2E1<LSk[x:j)Ȱ2*wwV3 :?bPڭ\]]//…pi"C;x|P&nP&`|鰌l@(Z󎩁r y2db%4w#xv=;;sV8$e.3=.\\3]?0IW ̔%힞~i{;>)ͤ:= Lt#ԃu/wOGN2jى2ejOqˁ3n,p"eoH)T~ݮU&u;%VӔj'?D1P+5|7Ld3ۭnx,W2o=9R"6 wwwdyɸ'Dx\LM8d0j`?5i75-;uJS!TE`_']0%/B;CW)HN(ӓ ~0 (FH _ B 6MeÉ[C<rKjA JpZ|oosaCɿsZDŀPK)(JǙ_-Q2 H=#jxBq'IOOO$zPdhբz I[*_sXjUQɖgM:4 (y ιj*O@K4Zi{ hAלKuе?$`}'&N'MRݮ;LA(nXQ53NBQ~`x<`#` j+`p(QWHMvc'&NIJ++w. `* gJ?i䯨e' iPӳBunz&b\K'M Ņ27P1<{}ss#N Օ}FK^z[#.D(`d5]2]pǟʪ10AP{j2x5Ñ ^[6?Ni3QT ]12 t0ԁ+wьN2˗/IdLtڷ6882R,ۡ SZç5 A!-@^Af)Ar=OLgS҈Rޞ6䳓0_~)±nK 0.7+JMTIkO#J\p\j@ŋ2Ae+ˎI[d2l)SN5X)3%*Z`z1H8֏5痻9g՟^=WUOdPv_s!oT*$97ް9PBV|d-@*m.YՒFf= [l{>RL dT]%xxx(EBF q)WMb5mVoI> rDS*`<3?Na;[v\I g8맟~rj3bnV$V 5pt yi1￧ǥ%=+`oX!eDJ4dL4i!PNri69¼fmPLif6b:???WD}2@; +)\2N &VT_*Z dPQEE<[x}=u0;9F?^]]taD6i5߿8tMC4sUh̿3H,2pB @Ti`r=R+RETp9 -]q7Dų 8e(r@*buܧ83.%UEFdҠiSd&ptDbj3RfnsY7K%(@ $Mg(EX|pGkk6iMjl=XN }|)9mؓf!S;yG%g899MwjM(1UCFd^WPRtR9NN0W]VF#)D6pfCEyGe 1I x0@{ e)Pi2~N$M*czz憸5 2zCkx<}1`plM eI`"f]k=Z+f|qfJB7P":nZIt1NbW(~\.Ly(hK n_[Kgggi "u؎L`2)www:hYѕ(h4dBq[IJ-*&)h8l$D:PH?X+PӏRht״죰HYէS"! I }"Mt%*NOOf{L2F3a29UkzjCVc&' 5@V@.t*rCm/731Eގtd7b /шldMEw ?T)xC3KE'ճz^r<әHӥ^jēǦn70>ΥXLKЖ_(%|"6z1݂XN*A 8YA/"{7`0 dVc5)UOptßDwx_PrDfTWshERt,8[ RxxvvfQ$ÒI!pǩ<6?Wv#CJ)K>=ּt|>]Phdg(~:򼾾w8qjhWMN+3n'Vf'gAJc N߁$356Fv {4˨|)4|ۢ> JjLsc%3xƶ&-!`oKxJ. Z%?_s'jv>cc^ZhھP6B+nqa[!l`Z]MdTVDHX(в:N0X a%JdJZ*˰ռ[N%I1O_^^`fIM /2 3~_J3CSq^?u8Lvzy%fVq|yXNHZ 1$J dL1[lЎ%=T6L[1P '26켓;?Hv/Tl:J]L~VL9%wqq%@V$NY[ph\Wzk.] :.]yF#G -D}ѤM z*+i)T5`0)R'0C2NȿsttĄ  fCb1 k̫~fQ'NHӘ[ #=IEѨhHܨmm^7:" ivkaz= jCq]`)JT*&]AQÕbN-_wv0㋷m:`@e13aS8im"`muo۵yx\çOM"I#xT}r|||L&^  `vv$ܼ}\.;`lZ.H(Kdc 8R8_E9~駇=D?- Ө+[d^1jJL$RJ -Fc@13P e1Bǥ0HNh]3V^`&WKPE_iv&Gw'gw/k/'EfR0 tɜGL, >U.)LiC>i#zH??vݛp K1?Ci4v[Jؾ$so/ˢ`z 2 a&!Ey}}-Y4Q:l TE8|ҥ6hdA* B'\p ʠiz@%cY@>aV; _NoDJ[\Tΰ lP8N(_.#O?Az<O g^[d]uw]X7Л}~XP#5 Qrvϟ׿jj+q$g۷o錔b0${Ni)S ?1cI3\TTO!N$|+ ?K"I"bO_ž|*]E@' @bЦ/zfs2Nw>eA)j"0iƅH{T~7=m3"H^}śSRHw: ;B Yӝ?Z;tG?;JoP&#-oLB[қmqc]kn`iWTRerLʛ&9Ti s~2\\\q}n~2B?ϓɄB5~ThI?Z8& C ÷VZz@ìH7T@'!B!&KiBFW2+Fj^/sb=aK U䄳6VvLh42///wwwQ4fKb_4]Xjz||;ʟK)l63e8sƗ|M liQ~ [t t@U˅ezf}TDr"A4dHv|||wwf,8[)F!uBQu( >SWm ^Snj0XZz_K?sq"GGGGh!n ZƎxv-;zt+H׃NswE7L1Bϻ ?+~o IDATO1x6%$IEH+!s{{{Zv=LY>R@xzz G}K>G0қoOW{Ct X/hj+a!LzF#95G\1`>lf>}J}"5$fOϿ9 RvQ}vvvrr"4Ls\3,P#L3IǰEG v6`([W0?׋O#IFϟ?q qG7H;S(&-wt:5S"7PϯA_ZP!גj0B : }zQ$ yr|ss΢sy*l+Θf_~Wz=x*Z#?Ͽ~*n?DcV4~ K|hbHkx;+abyjb>ʃH_L|"B) %>_;h4c#&^8#ܕ\vGt?T S%FG>itu;Ә@:h( &YJSL/]:XiKy$صEj$~_iD1lWh4g4?[Xw+ADzBND(Ƌn[eZ1dLXt:_I+Frxzzr@.R#40= >_f ! 诐HA]c>)rref2a<٥Em҈#4Vr||%S]!<69mBPEQ\]]م๓ߎjv/_Ad8`ƐP ̎IXnಧj\ i-Q 7FF\!n0 AHH??*MvϰZxMr:b"j"nw2Utv=d GE_EX7M* TQӍ}Q}H &h4F>-7M=ؿf8m&s:/KR^#3G"fNƚC83n^Y1eVVeOr6Pai!BCw>D2lpQ1XrhnlXm.\24S_kkhZ&k?u0cyJ2><<}~l^^^N@Sb:EdEjaT#eXQ6QaO;-6EdRό& @Wcs2Opx';K)OOOh2X/]#l<+x˼ ])Ux\v?vkym&7B՘~A!;o?u6U Eq#7 hJ4ř||&z8jW{!ü>wBX!N93$2C A +tX MN.i+rf/ ¨T*f`{{}:2j,ئ]#EU=?ϧE[`#fYhtG G`vZow͇'G2;c!D,>5y_ fʔSZc A{!a6?e-xpqZr8*$/^ELyg2 Kf[B]=<Y2YsP8I_1dw}yy7#7liph)dJE:m]42 Z[B̫_f+3V3 `Yn:=)wwwJLR;+ $2 #D_Rt=12(r0۷o6]܈AԣIG-ضڧe'8$  w5R;Sh2VJcJ.ŇL(nV1JI3x0I텰U\o6BN抻 ;B$iL,c& "DH!zv-&W';AvlUf*~E %ɿ☶m6kQW5sE;XWlh`*!Y09g4AF잟]VV@븥(sp/ƒEB`,_~ 08Vx曲uGIJjn @]rrr"a@9Z-6?-> ;ZuAhʲLfz"JCYD.z8"Pt*%?% 2Nkݡ! N~Q*If3}x΃,JrƯgsG ME^O͚Q4G밿:cEՂ1E1*ZxCV Bp~A2 aD:{3349RC6?'hzQH3ݢGJpi&Vooo;t:eh r7ʰܖ_%W^NEPCqRSN1Z'7rI*T lVV vmn͌B3:\TJ;gÍ۷JX۷oƓAtQ$muG\.r> H!?ς|q$J*רFO u="y_Ǐlrd^^^>*}Јp$z 䄭p dϱ?j'[t$)P2tΐFZM\T^T`iVM& 9p^UKgLnFr3AK2VŘQz. ] Tp<==v4gggbjʷ޲." V!tI*vXPV b8`$y4[<D-;7rw;;)e@47[F4? a8h3N2̓zwl(_ˏ5xZkJl »r"K<< l?wO7zh4u1o3mA0sړTͤWczIgɉ~~`@:_{I;Nrfw`J*?$[#_;@;ĵ{rn69otyinz}E iF3^b OPeBUa ֠3r칑4#?Yٜ鴴 )bqU8<x#Sj8tźt lP#.dɥ4.sFؑNG%BB?"xͳID,ZG=+ao(pYqCwBp9VCEiK6R5l>bj]9X񲿿yy) B)/xpp@^/ӆKx" |̪ EßK6Dq 7u?b)U&:F1#~6p_``1ҋ_Tb[*^!;܀`:*J`U|(@U zl6%BsEnnnLhd%)Krl6FiFxU3(BXW)xx,_Gdpq<3t:o0±rCV>|(dVZSGm wkDEGEȽ?~ͬ$EQ E6QBf;t_~ :q k~mFqRVi?L;dq5T!,vbV FHl\OS9BY .Qzt>̔hkCdn`!/>-+U;,) \V0D^׳J,ũ7Nooo0 ]VKEc8/OD.EO&pL:3l5F 5&:xA:=t$B΃󸐈!˶MF#!AJQy)IsZYezǺz l䔘=4N,C f?#V 3|!&ÓEEQkjUy^C߄lEWJ:Ύn7ʏ$5$ZC*3FҀ@ pjg$0:n*1KFCe_nu&۷o2.7uf*oבԏPGqՂSlFJ @)FL^]]rjۆ,ʟ} LbMV%TԲmϫC T~(Mtk0D=DX]6Pd< T"I,^G377u>O1C?& nC*̞CW>мEx(.Ytn y< (L.J2->GۛBX~;UKZ%x/K{Ϡ|>7jxdN#澻-43gxq: QNl A =Ą+O"vww35}8lx o\__}+E[i_]]YJCBPGGG2?)y ,`Pb1imɲ/֗ܠvN *(r z=(7o/g{ v+ }RdV'FFrͦ^(dxem̄)ĥWhin:NJh䝆:Պ:[Q$jٲ6 dّC0GP\+^h܀JVK8QLS è(sz=řheՈHv 7u~~ɐՎiHj'Fe*wwwC[/RGAXa}l_CN YϑS#hah&gdf\yDsCS`=oQ@+nPtΞt2p,krjy#]}J׾Lyi?=.f.t߲%NH Ǜ= "d|%Z,9x B7 /Bd^kY9p~`>OLY"5w R:z&<ߨ)uE=a`'Yjz}}nJ#fdVu`NHrƑj4z/&|E}>ϓ0K8HE'T.ɓZx8BzzeI*JE8T`G3oooWn4X,^HrczlPjUFzC/eZT*/4)/_$/ wAl }f BlMa%5t2pďr 򌞟ƻ`+gg)aá8,KxQgIDATۅDqfYɦhB%`~H$NNF@Ʉ@@zDbAY@'Ru5MnL~,S*G ])`)(=FWPS5h4gF)5ui_f iµjazȲ+!5+`GF!{){`- .Qݎ -rxx #C:Sl6588- <83Ǚΰ!` @4xtyf2v9K~Er2 23]u>^^^ 4ۡ+fyA兯%|b6!7`ZI K+\]]½b\ZZ-J0FQ9e ^f{ap<˲[&(s s\aYPWh4_NUՊ~,$eh~`PF(J WT9,{KwW&!n/r%p[)|p8G iggG*Y̆,sV4b=p82a$Ч0F\&WWU?7=Wn&vPmQ5sh0Fj4c!s6A65w/MT5zlAHR4KJ`|L LTEa|ޞ)՝^0 1LTAF56f_ pojIs>`u9+De%]i9D0M>>>LfW'Jc3T.d&|6z CcQ)Bbb0% 9 @o&BM+n/FQy dbq4'dbׯQ!cmM*㦶9MsWOF3&{xx`','\q偸j4-$sG.J ki,~R#>^VCr?7aPdu4QAG:j)˘P&~isonnTאt:y&c-Kdڤl6kZ<)W,_iuߌ6|tjPfntrcPe߄[ ob8 x{{[)ryy鼥<@zß 7 ކ!o< T'adnHiE[믿ғڂ,D WtjaGF0J{mji:PG҄@[(b1x\TDPBU:>|..NP4'rGAj(폊6S0]B믯mxDf`0nOd) G<粴\.[ӌ$\!%R`\c⊍o+μE j0Jh4} rN2!r7sx_GM~L\EAϕspЉ@axڌfsA@i_G% RA^ h]|5nzZJ"~>Z+QDKF!1(eO,ukƒ{a#n)ݡfOJpt\(Y|fj8CU _VA7oޔ_ōjy\% ꣣#b]|>~d`ggg::3>29$af|>1G@/55 `ky(҉I?pPi>r2_6߾}Ӹ>::bREjYfkÅ'Z]}cpb4`.J_h4.'@n tˈask=sțp# ܹ&h#Xrt%ʳ32?ޑ.1^u^GtXV},>楆KF63J-Kd``i0rcH%eBG ,|!$;wvvЂ$D9r,WYMI= ^7_fS M8<< G"6@BHyF}4Mooog98,7<-tMvd4x) "`FF$gHXJW\ =}(\qߍC->{12`Z2w–h4N~ߝvIPժWP`PBEZDN,=e|{ f3Sv@777(f,b dƗtswwRTfW4sLRRχysFXԢjh4;_/z\܋n~zz7+ &Vh4^"fsmCƐB}ENLf^;4|Xe%SS(ty#mPhӖ_EpDI,*G\ y +n4mX'D&xK2r>>}>3&d\9qP1vK -΅@shZ̤Gh]}5@lᛣ:XM?== '?p}.ʉsR,V{MV[g^\oVc~M%gs?aP97oTՠϟժ*Q^ %ױA(dTvY8vmiBZ-~eʗl*|^A9 ։/EM,4t(rɀi﹮j&O@K4ZRfA%%&%rSk_j!6f3"VK]fg 4 ǻYr'Ia?pZJe6qByCC(`H8QWH&$;+LNБHMLȕdd+綒\=SɗZJv(A f73y 3Rޓn?Nb\kM Ņ 7R5x=y)y7oNNN<譭tId糧U; MA( /\4&=tnLFVv$˕J†^}fA#˪@Cd-*z nE~X!,D@@&u@Z _(U>4W0i KٿyYaJ|:>-H'H=4:!NhڰOi:Ç(v!mm%fLTb2Wx)i2BlG% T(X 0 <1U///uv)Sji+rf=NTQ0tbfph./yVܚt6E3]P|@2-=~;*& \Bs3X T$ nI岇~5g)K4")K9j~,r`;1sW̥d t^he |JQh4Ah$]$t83%zl\QiPQэWe>~\M#!rpEU(E5MYHD!R+'K-Rgh4\/x^㐷v4NZKs7vhGSY"Y,رS1b ѧO &v;Q+%&sF%vn7vv}s =J=|Ct1^TńҘ!:syyi" 8 jpS㖥L{:r3JzjhPU2; jOOOe 07Nv %HU?4MlyERat#MI5TG_܄ggɇw10A'vH5 Lc8͜? [r:P8bUJn㷐Ti[ݮJl" NS)p*IENDB`DustRacing2D-2.0.5/data/images/brake.png000066400000000000000000000173351360473665400177460ustar00rootroot00000000000000PNG  IHDR@sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<ZIDATxy]uu;ݭVh Fh@!@H"fg# 08 e3dXy <9<<&cdc @S,4 4ztsz}+^Yuk}OUSU竪]{:J@?]b#!09F01Ba s`c#!09? *iǒu<(YC<nRU!(3d&pˀ#b8PVv8`04b Pl;l9]1ƀXE- ~4K<ǀ*m|'d(9PСGIIM0_"PGS6+ES+dJ7B$|1Gk>P 0A `_jsGzhkX`g |QӀ/Ar6)E>h"`?P0 "z~JQ셾& m] > =eD/[)E\)@+x<-"cEXu߬U8$¶m<JZm6JVZ󕨳Ccc"\9lYhkH;JU):MmӦ5 A@AvRl7M V@*E`x%BJkyàPJ)/H*^kETR(ӤH8{"A@CxC"C8~855'R O0hljbjK N,Ncۆ t> `Sjd8JaE0M4v(c*uݭ\LYӦV!edZ:-7+%>UJɬFE9r䈈lݲE$Ð 󕒩%ckkO;O6~Y=/YHblҜNK'ʲ}-Ơ5Jjm[ CFr%[*IWgd4j V08R]tYV*Mtm-PW_K0fxZꋏq@ӯ*֮]??I[[i7 >#àBַŊ+?D)ΛGN)v @vb9s*;1 rI]*x^E9Q qv-Q+Wf|UJ1:2%RTkNtv2I Y,Q8%v[0#M֮UV/R*0a]vYh2a8RR ?L֏cpa,^xfCSY^nwgX mndرdy>"$ƍ;b{ L҈e˖(xGX7`}yNhiRg'R`Y?B(r+VL&{3)Ÿ (6]Aaץ9>pYxq5*?qd8'J@8 i<9_eVٺu+/AﭷފZ b|3'1|'K/ "ܺa0٣GofGk,'%͖gT\Yְ)J1/O?믿ݻ4JaBku0"sd%5jTXQ!?^gcrԕJLFd/\ 1 àP(^=`4#-lm2A˔)eΝ;ZZZdLim%#B "i/\ #?^&Zu G |kD\dVPBXu .,>C<ϣ[nL&wū/DoDعgOf ƶm,Ӥy$z뭜{e^f ✨~yid"֚Ç?~Fg,b1E" /BEX mTZϻ.[n(/wy tvvi&̈n#GzzP;vDR DZ*>&b \ rv<.=*[o%nFJ\ÐJ.\Ǒ155~ݺ+W3̑K/D}Ax DBGW@.e\M\tiYVb(=P/s䯔yqMhi9f;?]W'79NurRtZn\tH2:$͛'jk3ɤOR]cQAL#ݩЫ.8t C,]]hp]bZ硃u7/\HIkD* ѪU(y~꫼+e^wơi; !Lr9_z5sO=<Wxn+GpRxJ1i/Hu˖Z[yw5q"ӄLeYLe@<];E+·D \PɊ'twuo.G\rtqưdeИ!@ ҧ(+7qDa`E#,UeϣD(rG-K5k}!OξDbYgW%_g_\}ԧHR>%(Uq:t[`E{Tt*şx55, [05({JRܢTa}tf2*C7JsEv+E4 q9˲\5VP@E={*vg͛G0MPJQ2 Z C)SDU?1,Hz[Eo8Қ@4jt,G CJq4t4 ەC艂o%2ni3M2JqB1n @~ӋD2L"$A<ΉӦʕ\tEe֯[T_\Qe4e IjE߹/BJ1iҦT&!y)KJqϲp |f_[[ׯ[G)/BcXVA\ٺbH3@Qk,bU/t ;3ce݇bBG={Du, xLni B!Ut篽cm ]4W|S,:\u&gy&: |`o.v;uF.vJxM 9ˢ (bS)lTO,^LN9/fo _Nر#8>g&L`̙L8Q#p&v%%GO.^|tтEիeډ'ʤTJNPJ CS)YvmYM9g(yP)yR)N͙#2|I9a~U~BsLjhDBf'23䌙3%U7Hm*%DBRɤ\zm`9-/(%)%kjd-TaH#log >1uyZ[[;w.w,[%'.ӁۯdY<% ;*BKnFt)J}9nʎ;PZ|?1aD{ &47oK2 6ܧ5|2u*:>BOJx"߸-Z}8o}pP\ l֚Bo5W\7^JضtvuR p`PM+@,ƔSN!JQ[W9 /J8x R)Μ;׭{j {3sR,z IJ硂AGK'J;#DG&O)'nYI0(a L<9p_eltthut"HpEqֱw^ D6 šfpǍ#]WRv Bgb)I>^"37Se2-BexRQ #4Mia>A"$TbP=8~hnlt[F¦!f+G௕bi8ީS 1 l,aj$opRlD+Euq]--kqcIRRjJk!B4Ei/Y<"\CZn:/ӬG!BjF}E1N@+p7B 4i͒yDxZk]ዴx42Sfn1uQ"1!)MBxAN K d`JњbSVҖ?̡>W6KP 00a s`c#!09F01Ba s`c#gS\>IENDB`DustRacing2D-2.0.5/data/images/bridgeEditor.png000066400000000000000000000034401360473665400212550ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYsu85tIME #3+ IDATxngq6fI( UQ8.j/س=ZAن ff8[=X)~͐͟IlwryU۶-a53Gʹ4͓?G;_I>9&}D[\] +O#Ma{      Gi"M^woXn}?_ LjxEkcYivItSl6<7M{ppQ-"".6M9; `[ GnɕFۣhy}<^`ԡẙfw \UY׫=L'Oަ?Dġ`{lg}ץDD^'X]UUTuUUYedd̗ɨ*.//̼pp }SJuݻ 뺾jٲX+s}tm/_""oϫ*̪l&>*Ϗ&l2)%l"[͛7ou}/QDumۼuVYd8ӹu3Lvqqʸ4Mu]nTU^zDD⾔FDmDtҖRt4֖R:@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5zid靝whn޾}YDEDR2Ru~mʿ9x͈wgci^̧r~,"3npxp73/˗e:}/oӛ8sp^nWէpRJW(L7b2[LGDx<>";<3@m jC<,X,x81v]w^۶ju}<c4˲z2OnoԞnnQabKGD pHYs ) )/"tIMEƯ IDATxwdٕ0.72"dTTZif ey5FRkԍVR˰Lf̪4H$\=wIVqX +d lox_%xd"|_\RW+?_uB| 8.R:s.]?|pd$Y|❒Y2+ i<ߺK$`u\]`Vm0r`Kfeq>4攙u`Tj(B0m"<J[*@~cugmnl?Fq8g JX>~1}W~9_O撏 g(.HMn|U`2|~9~b1] [7+#.p.е om1s33@]rg#\g[fey]~28w Kfo`-4kfJo|P~9_V3)e_@O Td9~o6ySjg_e{Y}A|WvXAgj(E7Lc;CK撉"N&޾ylO|֎&V\RҳӼ_2gp44[mOKM&dVʬLp6?ͷ1/Qю͞48w\_<A.d4m|<@弟%}[Y׮v$u^t?^֥&o^*ޮ}}$R5CPm5҇DAb+5My)6tȀ[Lqu㕜?HM~KyTu^=x[Jg>e3jN6>_ i5kc'59AbOG>c&ן[640+rn96l u(awx2vD5h\T/d.Y" Y{'4~?C%(c8^ 礙]X8UC'Y%a{n2tOf'$$xvAFP"yY@QPq{m)E/A3/m薡!I%L3tpaaaR݇9TJ^7w"MS{GA%w^0a< Jr(6 0/%ju-*<lH,RRp+fRΈ96 ~Hʲ,hK8K3/d+_`u&g+4I撰} f,?l%͝ ` xSzyݶ-d?΄ZZ9tx K)59)Ίm ?R {?coƴ} d? \x6pZ3EK*m)I3K6v:MM,HMMǁBDiZ0탴_u[j2f ЊҶX@^`9 oOn#ٿ 8^=6qr~'Kd%YY(_p _юЎ^Ԏˋi__ES*{ +xRr8 +x- d3~ d.i$6܊5dIɻ<)Cj`4[Gͺd†z}DZ()r" J "r9 $`>xIzI-=H"d[:2PEKQP@aw,K*W,Wmmͯ}DV2Y aO*u)8R76Eצ6m}`Ѭ9Q`)38)>7iMj,R4U[QZ^G9}]((_70&?8vܘ }6}ve86HX%Un'8:Rfg?tC@V`9e&xsB;ʬteV$2iPT/s[Tgͤ`a(-< ]};(Ȅl'C]xڢaRãJSrv{*=}Y3S" cEIz!pAI݂.س`%yR A|Aa9l0qu[Y(Y5l3Ylߋ0]5|ݷ Lbv =<+䌢rlK"jgqZo0e |l-@&](q [s}%7mۢ {P##^DF)qӮ;&"4ІDqໃ8(YO(*(d - sW|ßsҿm 5R[ԾN`=R[HuYY3cNRGP隙c&(l(8^!) Bj3 ,2+juǂ]{aBJFh Yb 0ӈ}MЦ>GᛚU>\Zs_Ytɬӎv-  GeIܳNP+P~亻q_`<On#K=}@ŬL q (SdT4WD|;9b &s߲}#D|_Q F ~\TxخFFP# K\#r-;1Q{ &|ǐP|?D'gzl:ҧlg |bu 7-@.3(v3v7E޵ FNCvbeC8 w7".Ǥ|G߬Hncx/b)W? h[}hP~9d.i2v=^1A)IW*" Q[j`}$M[ Ds$zoyў(5}N P*= ">s=sms#[p?+d\TI(kK,=ZC%+v G}iW{`z6PDZ(YU1%|']  mzf)0ΒqANR1<^;Yr#n7cXX Iy;|` 䍃hE:)ףczcoPછt?Mfr 9p&3BNۗ^I"&Y7gG2bŧ [*YKF90}=+%0 :r.CQݦ1Zh&sI݄` O(HXƃsQm|ri8mDMKf|ۋrvPVb~h)[xHFH_u%EJlI"Cҍ9 @JV& t)YhpO;:)5yKu;H$Jn+hH*[Qz'CzPCP ;E/ i#6 q ]oƂ ?\UcƟ{Ƿ}ǯ[RN(U-ȇ$7T0 @jo?B4H* R8JDg( oF 035Z܀#,H*j`E*O= 5V>ӌ~!LHƢ\ŭ=c(%ఱh?ОV ȿi&EӶM`Yj~!0oZ=UIe!݂m&o4u<ͅ~3q::ۈuV@E3MĹk)bŴ?Oձ,H|{Zn>Je+Bn8hâ%u9!ko4՟I"=9ʎmsy0-`ff=֖C37,>F.EBڸJJEr(Ӷ7Y]~Dl]4o[Do_}Ԯ[:g>BژebV_6EA]3?pnmF?6V,w+k)0^Ȏz=fQzZ5PsAq(KMFY1 ,궕厭J"HW:)%#r>>J ʹ42(ʖzEغYd(d19=j_If(]khUsYv@De{OQuYB_#{֮5G>Cъ7S ii+iFnuxu ছtjo Vb躒[mCj1ֽiܘSӂ4ʡ>7%j(j.ir.Zg`DgɠO57zR1U-/q,TdVk9cd _Eؑ4E^ݴX|*,,-X+*EkYآ6ihCX|ۥ.(EЍMF$5&wK&-ڴ}:>31kF^Deb e4|çx^D[:MÒH)=IeA: 44E!0)1 |ݟ[Kug*31)EhX.\ b i]R3' .I+/$b6e͍ u:-I )uʹgִm4BٚL}3x:2t ȁM-u8s(![ #n=e'!Fa~Y DRYo}t 7BM3n?^I`+f1BǖG ^/&AZm¬00sU)vî{ s<_׏IK{Z&i6hkIIpA1WGؔÑpzkgPw(G(~mqY5[%гE#(сѱE>j;)<'P ,bULQ\rUȕ5L(f>aն"L@f|_;:ynȹM:-^PH+&r6Y^57iYx)z[泧l;:;䧶V}/)z&|| ` B@(X䠬q>hhBm@@qmDY²] ca1xJ0c k^+8v,RߐqaQq+i3 -Z 5&w6EWqoZ`vQa 6nR+f5kx~7d'yd.(HUJwQ%U=+'柏tӂ$2Eh4qxxZi)Z2f{aä́ IDAT۰(}Ԁ]۬k$M(] YQi.$PAQг&u/&yR@.}P{UH"eZ7.su %#kSE: p,Zel頬)1`Jb½(?4`'Y ϴhޢJŃo Ɏ$R6hP-`E =#90poDhȮ @UDƓ־ZJlI8&j$sA`^?Z݈" `0$PN3ҰO.󹿁'Aaz`\tbDeq2^/"$,鮮3†$2=OD'4I\*tGo12 '$H),L `.{Q$7mQfQ3_b$M(nxپZp^*R: 19$vԃ?m6HU>Ѿ. VFmVI(}krNg|h $#/"`%HDJ/p4p\vn0nGǮEJWFh$ YB/ebC,!Slz\u4ԡ|a5 &$}d., ;6,㑶te\|(M`m~%J6sRŃz]S6̡ 0"fJg2$-`X:h>GQ*nĽnoHIHV-PGO(NTrAX ׂ$yyGlM/ؾ0@/2a0d9Di<gA[4php48عV!0BãR?2n''UQ/"uq"%eE%e񒈋5yRmYK_s5/=l #FyӮ-;jR7Crm ( eC *D5L̠3>wII*tQ)II2@|lKb6IQ()G3h*45%eqCE\!݈9<=2iϿwbAܥhk<$0*Sy1\VjYf(Xuc.5_7M qCeǰ+sJn٣]+V"l/d."20d̛!`M{7?Jκ]Qk 臾Ҷ(>Sy,J-7wᵣn܅7"fH'5|3B,D̞FDP Y[ zQRдjx^%y[8]3GG :ϑq \*M[Puߓai"B(K*7"IZLERQ)K}bGʛ(WȨF|P:(" V}-2q>e.zݳk>G1CBGE+ۿHMeVdV\DK^qQ=,ʆ~]rSDGtbX[Ci峛|6{5E) 7R!0}sz mDɤ$eIo/sF x>AA},-s2жkն;2+p݀YYqVqOu\3)>O10 ܔy85k]1bQ+VKf݉a3VRrAh+KCߦŇCTݿvkAI=8ncXwτ3<qөWA%lBhjE'mbV=v]6 F6(:K?b”)tz6Dw KFN(N5Q&Z@Z< Q2r/~ٕ\ݮ34IX"T_&j QA*2rɮrU-z3LI#hUߥK?O\mmhC8cY\3F(2 z6 14-E?q7+:K ;ah }ÏjCK"$ ua qR-x쬝at8\"d|ge$f|ӕ\6`|懍 J'"ѳx*ܐai<tap (ƊXG6 !aB{Fd]ԐSt ӡ=n*c"\h-NDz,24cۃF#?v#nJaLoauxJ⤭MGD {ܕ]w}=6(ND(2ϋ('lx4ջxz ٛ"gʎ,IqZ$Ls3((mAЬWJlY3l0²idak~P?!7_z\a8:0$mLDBxgM^3\1hMWuwڌ֔Q NDPSIQ/2^ cL9۾Ơpl \u.Ap|O[(ߤ lvT=c`A ўA·-nEeЬ_GZ'f q"4on>\]'[\F-`;oӧr 7Đ0~ 숓5ӓ⤩=}7KޏOI[~LJxMƴp ]v|ߣ=vTѺ5tܔaȦz(QTtЗ$s}Kpцmb6p,ZT؆pXϏ#Rwyw}N H*Uऔz-RL j_h^*z}x&kf wQΨj  Av09ߠu*|$<& ]\+9Udt"bTԴF4p 0_Cdܠh~ 1E@3ee]<_/% [u.׾06|&sISNPFjW$LZ1K̒7#8|> V7T4C6I< }xz6ų<`ǁ&=˵ P'0Hjh^Ku ;x =`Y 12BݬX`HFeش:4τ<*qşNj{- |MX'+-0b!KJ_x& *>ʿ"ǒqZ^%՞K dNksҮAFin7wulGT.\T^FR\{3¨7]Wm2]*{:<»(wj=r>d @t?wTj2?>WD_Dp"ˆ6+iHޠq8/A#on.wWaRVHȷ|̊Btm&*M7#-\2!oMšmD/Cu)&]u@11;@uZ2Kϒ^Gt(FqF:[:Au&{'a= 3$$74&ʶ 1iAPsL_)26{X%HqvPTpnC{HQl]ii/m;8zxƭ>1e<͈rCw*j1¦uoDB ؘCx~VyܦG.ˬ6 Dm8gҚѰg4  X|dUR"5-! Jmô(X@؆;h̀2}rz׾$x*IGD:弫WT6`Q5oڵ BCxńaR*8r.TűL_|R5:3\B\#Gge=xaP 8quf,Hqv}p$$P*"#H]]ז6"7>0CB݈{xs}w9w%Ȥ:07F`QEeAآhW, M#Zt^ ђ=GRg FZ6p,^N>{CQ$t Kˆ$^iO/o@n=9řU0dD5ӎ1hִGQִKn5!4Zh.}K"gH@{zO]OV4`yp\Z3hQ_=,BylAV(NFаs6 Q(7|ߞa{c]KQ',rر.sٵ |b@bU )[Eq=k(WXמֵp۔!N~A$)z6#Sٴ8M#@wEs&e-֒}A$ʟFP TpID~ }`&@)ʖezy7_rU$ܒx|MpSWp^ѰMe}> tZn;VB IK$R7̾!%?X6a=i (FQn w(NMUݜkwQ84p_4qYy$&)1ЏҸ{2oXՉ~FS8z`ZVh' UI|DcL@њj Y1Ⱥw칆&|AܥٛT.] 6a-N;nb/HN;R5qY]oGMjׄXu%6g#Ҝw ]'w>-M4m~#5 O8]yiPD·Apzݶ iŬpTidbOi&0`P/|ݟ&ToC *d-Hx^sH4Ѿ (a aGA$5Lܴ(:sN_P x:pB>8فU3-vsݴ0&mj7,v~`#a_&g]M}IH): =ND)pY +Ƽ1^>Ȝ.ta^R؆:3LRLl-) e>Ed4A!v,iԶd".}5OI'gf0Hao0T8-fU85i0q8WOIM|oIװ{n?BW@?n85=8v#֮3 5 oZM4\̧꼪Q`Đo ('Ib9du8J>2A/[3o)j*N4djLB/&{Maz帋eh&@WǍ@)ڬ,IDAT|#h^B0y#5CH9h9AABg-$\ѨPmJqю8[prM3"ЗTnR4׊zϬY$a0X=yD?Ɠ^ CA8"L:>ħ| h_8~g/ %UT4mzhZ_$dgy(qcR8E8W!%DVwD?G9]TdX~M}|03 ɤYb<e]t!qȬԴm)ݏ,IM~e 3cS-YRQA[2$}G;WlUac'[҄&mR"rv !$$~.ʂPAJhT$&n{ŝvѸ()ľg̙}gfڪ"c¿ib6Pyi3=<I6i hJQ~R^`6&=j6YG _0盃|Gܼ ۜMZQ6p -T(4(Ei2YMRTLBV'iDٺiĨ ]OK3钶ݼCDa͔>#6I1#(DF7SlF `VR @4u4RYBiڬ袦{$ JSNIND}kHN6$/U!VNoXP~5;}w?wI^*-OvQe~8籅Sơe 9%Ϥ&:E<621 6϶\i#蒈c>>Ŗد=P½ SoJgxT"l9sJZ茕,o>i.$w%W^;B1f@:z僢szà|gx8r>F(QG@Ҝw!u[=0B?9c':)lV5DϟV2MScQ*PsK̍l0Cxȫ@ B,Fڲ<Ax5C& .Q߉GP;?TG~ NvZ>.jXz `ʧOvrY.\ YrI]BW_W(̙3[oVS7n8t H4;&cֵgkmvg<z}{.<}_ 4)rڵ !t7+1{.]y?.JvE,//jE@4M=fժ/"yf.QYk#sj3s,"u ,3[fZ$OvJ8 %oa]!333*c*J* C@Q.SIwEQA1fw>ee$"$","oW*t}#ŅB4(`$IX)%\*daasb)J }T*$#  Z~ׄu}SN "4}yWzL;wfgg;wLֺh4b"r1 D4"Z &"GD Jwm7/z<x"uZ]v,,:3|ND+Z8M8I󼈙'x"T*<33lt[`Kɛ6S Yȫj^4|kmqsR1/Q{_7Gݕ)fCzQJw5A[yn'ז8D}TxS3T P9WVRiVkڊh\ZsyX)׮]Sq \ɓ "᳟lsyyd?Pk/ F9  \ށCnOѾ@D$@|i?cH9u!{ve70֦^%=cXωVufnŨC1xNZBFqC7j9h@M) pH+JNOLjOH)vŽXxҙ+nj#{: ۿHcuWZQ(^.BK[$o>w˅?3EǔRgz4Mj$N;>ۂ$M8VcSƘ{H 1ýD5[8Vfx"̙چqTړ\x 5?VGt&B:B̞Ƿx{^· (VC_N5n S'+" "va`C6 *w݂C2$fsl9"P"PZ^>xC"۰HgbKk/@)QRV O29? $qKD "w|߯9Z˗/ν cGR1Zk/d_;jt\7 qM`Q@ |FM,V~h=w"`6@EVB<šQ0EG}C:0 }=d%yn Dg}ѧ1_KyzzIA0hvvVk)0'O:  o;&op/ƻw!$PP"-7#y#A2b Nvp@|A5TbOT}]xp_0UPzF#GdpkVo# 0+tO(,_^~"2)svnnΖeW@={/ UDj[KF3,Ao(_'qBQQ12<Ի 4Ѽ݄-ZP{򇨽P[3;DAW5Lx"[!RS2 dP2V K1bXlQK^Bl ^H{2_d3EQ9|q*!.|7͡en1g~M4^C#D#vO_O s}K?t(K`zUëx!w=ޢA{Qt1x~>"bg*iw/ne&>&"14Mk'Nhe>k* 5 ӹ\nr,IF|- @wL\G։E\pphꭢt/PX,ӣCܖT@ f -zЫf@ zB#<"|(9mIp{.H(AM.+OT~.D4qufΈȟOq%ιƍS9GAD憠Mo@UROa0gw][osgW@ x('RgRkUӖu@j膆j*Y5PͶPFa1ј?3p 5]@`bĈg1bG>r;J?c1677A7=+Dτ"&#+CC;nП%(NK~a_rp_%ԖZ/W^GUU"rnMD"THz;A+>f>+JZHߵтyR?gV[CC^|ZmְV?#\ ѻ:8᫯| b(z^Wn"$kZeTR*l?f wse5J]L-Z7A^ZBs 3rȹ 8x )쐅8kvOcR:͍7T5RiYxL޼0 F][_|`J7FoXBC=D\?Ab&&&To&iVo7rP9^ u 7ȿG!D?!43#"o~~^̬B cd.E\z jx=T 9u!!0Ե`0l`AyGnV(h ҵZ+Vk։"w2C)<8y/9ԒظK}()^Zr>s uTT8DDlS_P3lh&% ¡@~@HHZ=:p^!cU-~N R -jQQ`>! #619:Rjuc$"R@;Q;ݭA3CͰN!$ 僧-yw~Ы Q Jps>weV533#sss*/3o}{o ڣRV)Gꆈs/QIkmfgguH;p,"SԄBO kGlk8Y cq]*TYcH[mnU!4I;਼0l ud$oJc` DFh4TG9WZGWmlS0p%T;2_/0sbP!t:D#ASSZPIu.=MF޵ظG =`_+PkǪ3S@jt\nC-XzUGDVk?[#o$J)U,/EJ}i#3 ;-#M.ۍT4UιljoG((.8X݀ 7N ysQk-R.-7BbmKa3s+ڒ~d|Az;IљXZK%H+Jҳv)CY/Fqs4yCOtN8l5j b},ȀrW@85uŖs茇80 9*߮GЖas>1it̼K,//իWe͘2ƘqQ;XCGXzWT7 "hy֚t^k-I{cֆl:'o&y]0Zнs_#f^R$dͫ<Zw /"/7[v{XUy|>Z놆jLOO,Yk}ZsP O>XA6`;h)ۿƼx 5霫 [*X,lJ: @s#i5-|p5l}lpʺ\D 4M< _uʘo]6,CF`/!I6$`݂<ϻZk3}TV4MID֑w:/؊)Az)({x$?qURiTr>s2w 3y1&jҥKv;4"D0Nvc7^8$#[u8ˀI聤o`kHXzB2o_1$qs1zXнU;1ip"yмfQxI{mbʟa.{oP֋pEJZK.m چ*\Ѵ-T9(' 0-[8e|?Bp#6C:sAg8sp?n+z_XТV;%!{ే{^+[!%cLի"R$iעm_ B `1 em͵`|byQWH8/">xMSd voaS™}׫ٞjL612W75ɉPlf pMt֣-4jT[o j{M_^S)<=p Nŧpv~Y4?DzOtK~r\Ck^{m:SS찗 IDATSɓ'QԧӴ30O?R{CxG})JC]/#=vUKQVC(|A'Wsm'lfaKUuݶ֜sM˗/;tMu/\b*9sZ3'x 3LG 7FGdcn|n`rc1u >1`j m'',XeDg#A)MЛC}Չ>XDb "=ϫXYY^jq{䥩)]N![O6/OS2"DED](Scs=wh@Wthk:L$]&ALȿDZ9/Al uM"[ג$OLLDb^tiSua]T/^Q|ؑOkdҩ4%:dPk(gA<(_E]!Lz'h>Մ!ofت cǔu俛@śK|K8|S^, ҙKٳgG}4h44MD$QI7E̅AA HOL&HcXnْΧۯb-Pv^,ԉ/a:U|; ';-K_!>?oFz?1kԆ54 3f_{ k^""DgϞZA@52旯?y:Mci 萸-ۋq߁{]]YnLz-:,G߅c1쵿/`ʹ%xiشT,U{)@zԄ;koj=ϫcIDR)x63%"5558 VWWs|L3QѢsʉ໅ Jf*st'[zh=m#YEwnKصQԽ@;xK*R{⫱e-Whz^ov ̷΀͛7 GDVUTJ}s? $y;U^?S[4KRz"ZkeLNN9J%Xq`7dg 8"z9Os(jDJtY[S;ĿclM1R)"w5яEAߖDm{={;oN\Da__~1ַ/r-K&x6T^ *kd`恍 ` [1jAD$V_~ݞ>}SNYf$iy윛JD'f~JDp쮎rp%m%kN|kn)Y{΋HG%5&3gds")j"y^P(O|_~O?d.CˍF[n}!_)5; %"Rih,fޠ%q{ w}3[ͤmqE /msftpcq 9"sZQN)H`lj1":)xh^f{r{yd뺿kh.zv 9_NvQ9^jYMӴn9ZZ֚sdzz>###sqT*5^z[qYf&!" h9yFNX L-/"o=UtsN1wߵׯ_ߵƶָwXԔQ: C1$IyM+Ƙ}"*0+++P(}_HH*+0 ' D6f -HK)`5iv8&D ADMMijWE*"γy6cKDyk6|wDa\.]Zc$nyܹsGBxg?ccc?Y.`f(iu.+lp:q Js_~ Rf~>&"gDC[ Ne4D䏘w;ƘH)QEQh4ٳg˗KMŎ4t2ل=Th~~^VE\NDDA$Qi*ޫVQRֺNIR# Y:f+"SOZKJ7NO~rQ`vAOC]^#$IJǟZO~C`8 $3h4Eќ,9.;K/wy;Q60BIENDB`DustRacing2D-2.0.5/data/images/carBlue.png000066400000000000000000000340431360473665400202320ustar00rootroot00000000000000PNG  IHDR]6gsBIT|d pHYs + +qtEXtSoftwarewww.inkscape.org< IDATxit]u&sބEM$5R5؆l8vTN*˝;jU:T*vƪfرe;Eٲ,[$J"(R  Aa| Z޺^w9~g}gobf/}K>+PA u-w6*}k{~ZdzAWf."8j S$,KcD__|Oa83Z1>Kw1^_oB_{Ѱ^'Z_ܿ? f FGGg}{ߏW~<bHrz{{Ef23gΰ\(<r\UͻI|y/}l Kwl߾}x چvٳetttsffkZ,EOO#q$Y.֚ҏ1\ոZeYfnnDQ 0{1֒פy[B'G6Z}v[.ũS6cz1NoQԼv*xq?, X)57ymp,bmaM<_HZBkHO\Ӈ{A;d˖-w@D㑑m[vޮ.!kJY-k@Q[qTbI10blj11&80tX4&ZxŚwa*C P(u1>>NLFa(.\/9D';5-+V; D1kf[JBdA3f:V,/ir&r&j8̌m ''G P`}#drP`۶?˲ضm.d8%R_83#ϓҚ}O4pٽ{7<~rݻl)jۍi;lp]IJ-D5g21DZ4DI!*ǁׁǀO3V[ԩS!?ԃf-45o+iԩSbnnNq쬲m[/-˒QI6˲-!+SOٞ>1`3Qt &!ufaf0:0m fM̱1.+qQU3kD\c5kBqֈtM8BTg,e)lMՌRd2F)cgMGkY}9#`9%|ow~o&!Ihy{{_X٤< n95eB׊6k}: B-fmɖH0n;K1  a(0קNubvΘg_*wGH)(0 ˲|cLt뭷Fb:tHן۪7%mjcccu]U.ZێNuY޲h@mBdnm{GwT/>(N4(̄"_oF QojBJn 0,BggʀޞYJb"@ۆa&J1Ez͔֥R)+9"o\ed՘XkR)A-4XmF {WՌ8j2u sEdvSS$'&vm JнEd, c$$e I[`+lnT1 /./ȝ;'ٱ{ɿe~ELuN:ضbpp`SjpY['. t]W٬=77縮kSsO<t#̬AI!$a0s}(f)ruEs];V!7> MŖW\\i)}`CD>!}ba&&23JDlϬkB۱>X],zo^z|[?{I"$(Kd5D1 0 hѺfmuz)0 1On͠0f BMq\ NG/nsjj ql* CkZ뚔2ZG{4u_5$o¶mfZRZokw1~(eI?u ֆm%C 9D DDCCC⥗^RQ))ʄa.c>`ۇ%zKn=&)5z҉ JX*z[Jxȝ9=,ByVH72 u },旹i%j5B&qlZ ##gyZ&ro +TY ,P!9WLn&N[lKe]5XN.M[P>@?7Ȏ1==M`|!tWNK4oJںuqK;5[ +@daaMMkfC׳yyŵqJ^Լ6-L$f~o6,'Fg9 岍j.Nu% #QwałO6m7zm$ZnE k8cFka( >f&kg꫅^ 3e" @|uV*aQJ|tlw핎(ڍ^͹tnu@ABIŦ<+\Kt/O=_#jV3,#4`ASd& qr\@&(WPh)b-T5YȢ|ҷaTrqlVSAWpB}m(֐iwumә۳W*E!Ή(hvv2L088 򦝳a!DFk7пˏV=Q$[ (9)ű/rXE0*8e Ģ<P(c c{0v|$׵}+X`X! v1X}5Ӄ߁ 5yY&Z75͚CjcɺPYI~um@FGdc H*s-:˿-?JQQR!ͫeUҁdEҍ8G?xqѩ#HV,!!Q9\p@ˮk;MhD D:/"TV cJ y kP]'[qMnƭ[ª\٭~$g4_ycol~Jxvl})J|<2'ǀƠ0 \' $zw VŽ<_n?/EUvWې{a`qT|s [qaMKޗS֦$A1)9z}Q0gokZk366fzzz B_SN u-])Q_Y9؎`L `i+ 0) .-z#AJn9CCO =V+ĕ8LȽ zh{Qn[={e Ů#J͎:q.NEà02ƎWvo!zo3OϞfzxxظP#q%А(օ rmY֧ ~v6Xf<(?7H VaihB\uD?%̾}jȆ=1ܑ_@᥷Ax+N(R$y-Y7]S#s#۞ɤcHB4:"q" Rt^5Ɖ8fgD1O=1fme :|p \~,.|6Y~}((N>pn-*p}h+&{ lBT\h[kè"&+̾+.u WFw!/ngIie>:<ϢrK33 #a &{fW9YekBdX`zAXcnA2"A*x3ƌn':xyŞ={vy& &$W1YqH]a ƹ} /@D޴alЕ ,~ /1 _=Lo6q)J]s][p517B0ҍq)8{{>yށ{Op߻U[(s9fo*Qb1bHjUhmLf| Q0wᕶvG ~/Y *s,Jԯ|;G\# B {sfdF=}+>ȹ.MPPv  [u Pg)@ 5Uz~ pU 4QJ@ğlg~hfN:8i/22iq1o-c[d!0j wyZ#0&O_u5'N&3$yYAEUﲨO^PdCVڡ溡J s@uAV jyr'\7D- Ѫ]ĶØvϣ,g`ha``H#@a"@M/c[WeÑ7 d$61D:/D{z뷕:_АI=Z cm9;\UB\Y{G?1c,> *8v?}A$Sk6@ I4o %G zG=JbU!rPe?[tZ!qT2H⁏GFّX,FrYcېeug Ae6նw\$Dnik2'fFfRTڐnM??ĤɃe{tMկ X`Heo!B/}Ժ+/!0fdG `|/1c(;^?Pkꨬ'r&05u!.D@X߉M3k-ڬwn2WN@Á @ yL(iՋvn0&Յk[1bTEȼ*׻P: [];3ꚑiվ &8y9W,bDspq:{U'}bf  Vz*"૨1 SkNo@,}%e/Md}Țg PJe!U;"JZ F M}zk5``;UبHoG٪ Av=t1ƞSbQ hѼq,ٸҋGf QRӫX$u'ohU7K.M!<*B&۷oz( ,dc 3I$뻀h^^Ey5Ze =qӹ}#FdWoV|H$eA6Zh:,ӭLmm.T$']D H: b8:NC- q46yX2Ae z3 5Xe}HU(DjuOZK-$X=L21eqP0H@-7c@[IuDFм)RV"2Z(;$1c+!lJAr.4WV8p-@F;yXrKЌTR|  5mLų@3ѕIf4Z h91o@qFd+ C&xia6D / t6RFT׈m ZwKrbD2֚$9OApAqPI#7I;?en+ z^LK:_OXm>aqQ.P׼rD^!adf -׽$x˰r$s ixںMbIoۮfrʕxeZP.6@Ö`~KVDRdH1FA4siRl hfY8|O͆15 h Iy=uٶm2 u u;f Ls)Q$5y7V VzL-ZF3uV*Grc]Rf6늨k^ Vn?*ZM|H)BfM*R:FJٴy8&fb9-~-dAiIy{ʐsD*) ^ee6S]Җ1TKP67]v#w,qv;o}!=>DZnkkkJQ[6jfFO={Z50Q-v[E-}ԭX;j$Z:`@yϗs\\(L>O:lbG#vZkD h`l mNAʚ77j̙N艉 O2Rz,W=p+'[) ! 1FB‰s0F7_RCc0L[+Ƙ88w@e[Ҁ7"i#.v֫~XIEvA9kD( !B`zzzT֚,+:)!eNR0h^`}#<&6nIDAT SE楈[UC)A\,͡C@PڈQyIՕ*+d+au j  y%PahM& 56)IJqPŏl>zSWU[EW7- IUJ uCa='|1 Xd9q,l0\`NF~':{u?s\ Aj]ce_)e}yy[p*5Mb t9lW\`*}d?:^-ne@=O'͖,oцn f=g_#ET޽{w!EK*٪'ƁMkHh?:v…{muk]pgVfc+xD;w\ gW܀9R\Zk_J%}Km$TdZ̻2bm`g_.3=>qzzrG d.09Df5q}欞5buA£oy&qxf0 LcqPU1𒙴Cx/1:T&4{Gg2* E3Uc@f0ڸ}"FS-˚;`^lfErߒe2}S5 H-rG#߰*w$z났Lg/_ilwX['@E"s8;#f]Slp`Խ'7Z)qR|#;! bZk^˲8fL&SɶѓYA1qXd0mm[Vc;i[_7mȜ ۍ Qe;_{rle{|G>8;!K05JG5fFwλO|o1|:+mf:O\6R[DgB42aP(-[Ç_u@8Kj3_Swߙ{78B[xV/|yMSGQ_SU7SX2aYuc,cd9S&n> 1n~ջEv7)́[&0وfslAGwQ(aΙXvX6?!ӈ+vHQphO0 }cL|,F\ q[Innkk$&HHLh sj<~"f &1{cC?=vYi#/"TwN"? 0[rPY}gbH?]:}A n7>[Q vdдp̻w֤zRl\2K!IfȢHj65nDz UN k=WPV޽{0^k(u B|t_쭾vo;4lcA0&މI{+}1[?;""yV|+r[W`;@gP?#߀nD۲ g&_}m 2']zΦP*CX~䇘<|i,A;z&Èfs0u^;;kwbi"[pB@H Z%@`hŋ9r](VA=_O91n8Nt!###֖-[qv +T]ѹm$,VPlA! 7A2$3㓟$m۶ bp8k=Ԟgoϙ@f .\f/.7tf ቝZ*`#:&ba7 _u_$+wa{Sa%C_L +d`:k"ĝEvv  F@⊋AT :!>/Ǻ[ i!J>LL2BI,D CAHLG}pq8n0W )eu]ȑ#W$.Pm`zzz\.RJxaEߗgM\S/X`k4[?빷\R"1;ߌo>tktVTt'fO!Y]{|6{- *ac`uRf"za('w;4l^Mnvx{Gwlx}S!'P6I60:cA F!,FyӶ30 p˖-.Z";l6/(h<^y- Y,)G,pQn3!UryYm74Εmwk(=]n?cl/7Bq%.6oX}K- 柣㩟 E`taq\o=?s/@08]0_tRkc 0>r/p_q>*ʾW;w^ ZKΝ;={8j5EQx|/G[kG " ?q43i{XH+Ϫ߳ Z l48#VÙ.?|iglv$ӲЈLDfΝqp :Lٷ}bFn@t:U`@p V= sȧKs-s5F m`a2m%K{#j]<$5F~4X`;>X>0VmF1eUB D@MoBQi:ʲuXus[< %"j i#nfq>0IxM }6A/Jy|²dE)_(C]xs% ݝxpp0 pﳔNq/f̤?Oޙמ,q ت_.8 Qc 0%|mxh oV0 j6IHl6k,L1XF@]#D50յu]7#!B%u.%d6IT,IffȜD҆gj#l 08cDqj7ܛe?nxq䏈e,˩T*Z>G ).;̆088͛ ԛY3֛?X[ETlHs(Nɜ7N7I{hںͼ6}?]k1`oDf1  INﷰ>R15cfA_bSKEXSHulZZQd`& 0_CPCӲId1E1J3s}"&/ =kSAo.DLD8kri.A $yLǡR^ j̣v|.g 3JtٲUd^̮k.-c#wTXg9)$mpn%el^7T\ Q7RʤV ض]wMJ)z瞓||^4x6H˝h%er-&,$3B y `~i99"g{h40uGƕUq`ΝD\` Mbdd$ccc֭[ccL=:?kc? Otdogvoɵ냁(!w욄\743e0_.Z˖s\~x<22rڶʵBb`㱱1~.]וBRJ0 eF=TkcuvuvL0"C6W4mh>-6]++[;ZɃ:f)3Dr=!P5=" <UtٯI1ϕZeQqLei]URRvB㺞dzjM]*ͱRF7,ϟ@q{޴C۷ou]8Rl&JV!i8Ҳ8);t1ֽDf;Xq̩fN_,, k̫_~sJ)_Q~PV;wƇ&3a!V(,fCr&&&dww<2@0 )0 EE²:NJ'b/!i%S/]ׄpADdaM+Psb״I>SG$-[|dLZJ1RV F)6Q&gmcqДeTQJ)VJ8\%YE(/ HE;;Y˲zyX$uZ=ztQ p&T2MN tGz\V;q1@!6c|41 qt7~  0cR$*d)RDaѣztttH⪲qK32E CApϛc߬;RJA),=z~dbG3mY?ǔJ] ,8sf> ,yAq u_kj/.gyr\͛?pRvAeQ(KT tyxR^htLu)m[kGֱqOOO{54w5p)[ k+P0Q./!cA8treJ֊8/!&j *-ׯ f1Zk/WsEʲGrL33S[8+Kvѣ|HD6J$X& CMD}SV\.g\Ci|5!mU/RyB;tr/w[Bk&Z礔[-c,<{sZﱄִ4>~BqL$DHQ\9˙8=XSҦ.qWXFuֲ|>)Z1`dy&bhhbPzzzAօX?˲2e p9\.]V?qo˰[ ~J ˲tzzzqJX.zk#t)NLApXJzmhIIENDB`DustRacing2D-2.0.5/data/images/carBrown.png000066400000000000000000000334631360473665400204370ustar00rootroot00000000000000PNG  IHDR]6gsBIT|d pHYs + +qtEXtSoftwarewww.inkscape.org< IDATxy\Iz'"y՝*xnc٩feI^aakn {lYk c fg) F=rbd7",XU2xefdYU4C2/"/y|_}!bf? ÿt]?Nmo~>99IZh,a'/~ގdnwwqNgo²,i "ktttϥKqE l# /p[۰S_jO8A낙+W,mi:uj59>>"lŋC'8xˋw Y7j& Xv㪒 BEX+mSj Hf$Z'$Ƙ$IDQ$SSSVivxӒw a_!gΜaRR bnn Hܼys$ ߰sRa 8b,D`0@J08Q0aHS#kx²QkOZBJ+aMTףhZՏo?^nI)8(B˲cL|ѸV3gh`|Wɛ6W Y麮  0@b0S0!$I ms@@1ZaMi%a414M?7nQXf%QZ/ |k%-_=/S7|vqVJQ|(WV z@CaA1(YyGpZCE_Yb~|ROrFRCŽ'[i;>>}mDNa"Z޳b'ڥ_zn\z?菾 nh333m4 QwqԩSty麮`El:Z҄ M/|(q%# Pb%(M^HZa%R+;G}z'Mv̆&4X `lamOV mf0!0/}ç8z*TƏ=J+?y_\"ᢔ*ǥ83!% CifLY FJVf)( 2C%3w)e;O>m:g"ߖq3<#lVQbt:)[##vJ>PPE jRm2"!MMVOiI_#9,C}{)"ў&h{͢xˀO dqF^JIm P[(^ec1ZUH71yh|,̈Kq{{דDX f^uNM+sЭW^[O7^]$p/ٹ>w KHaA0o#S{NdEvH3d+s,HHRU\Eⴳ?q}}eVED =اeHTi eCr m\' +uk-SqSѠBNOO^$p\.;Bֺi|ę烱԰j82p` 0`u*Kֻqu#ZvaH"[E@&%BL.ȏ' - ViZ $!vcVdh!{h H_ r8*pe:Krn)4ct bM& Y/@21BC H $8E_|eog8jd6^1K^zgdǖMt:3G C26`eYUf @c M@sa=nJ0/-U)zr.Ee -%%i`pzO~ma_=}O@xt?U8g0WH Ç?_R}`~1|gqԩSqFbCPi(:a:J} Um_m1` ` XrV = p )7rRەU#۝啞N]]sFgJ;rOnZ3A3AYԝX%Ow]{i쬩VԩS7\̌p] *uQm&Y2:!h*+u';O {h2o[ݬ9O |Eo 3dA?z]jRZ,!c޻N:%ju͒m>0{?cಆ Ɍ7&+\+P'͛8'?,ڕm{Ԗ@%"p- nlh d6n~7a-PٳA  !R, #aF-Bk%_E$,Y@zeoW ۶= >{lAhzzZj5@Hp!{' gհ@PJ QpAX%R&`Xs~ Xڒd v<*p"0tRS1q\=r#H&"?֘!V:[_`=gϣ(=MJaV učHZuj=&D,\OLFh/Aj|is7~t'pܩ^OvPpaUl1_7A\ڨړ/%xt $KTc8+P6T;FMUlb~TM=00TǪa?b?|v.<YEE\ƇG}[; ׇ bXB 17]jZ'O ? U8t]*Ov>Կ4QoLpYa MZ\D@ķc^[ 1l0c9= K];So;FN“H~b+\*$L/O?'ӑS!.>OW Z[_{D>qY Dd4GGGzI}SNY;OǛW`F)q j%R75&:32:{7&!… U=_<_+Ws{/M( .׀W0JB{MB>~[+&:dj"3T ;|>3~B[ GG4Hkf7yiJT1eJN^ -AXt {.gqE<>q[|EnNU4T :)sUR ;~sGp}8Dm)[`hACÐAzcf;"Dwo3C]EޞM:]#P L`rE&߫4qonn.էN2 ~(H_rx5Z|ߟSv{B 00L$ *YBDJ%YOv+Ũ - GmԔ\,?>ekkF4A$Q bG bt*ڇwBY)ҕ`4w:`ne^jffFdkV;wc?7kG%jj *=$h>tڒO tx (0]T+phq6OQ"h SCXkchtm8`I^`}`#vY ̙3_R,˔v^ 4XXyt W܃RQźgSV @r-IJ*sxVNcfjZQ]&0ahl`wm! GO3XE00lsإJ_6ȝJɎ>>B 8@YT*,d6#wM S)9⮲WeAɛ Ab.'/SǘaTCv\Kv-2z, 3ՙYgi.lLm ,֝nPtUfm+ C&yxx $ocfhfW~hmtU8DZFк/&K)ڍx{i mX1EH3/ A`+Yt<(rCIBVdeT*tԩ˰c#T#;1H2@I^2k768.G>F@^ $0&(/ݒ-80GT%E۰@z(B|O!v<s_@(,ΝnСR-"2ahnn2AK٦ؒ3m[8EJL<&aqyyLt#z& f{cH$߷zH<6 Kt^d !Ŗuca)- $S5_ !ݗb!_͘/ #B'V]Jzjo2(6\QW̍;4o#y@wsϿ7ѥ# 8 )%K^IKPlxc@iږL݂̓b "@ޖt:( C%J3lLX>=ܿamaR[ƃ6e ezLK$dl۶) d0x0v ϓO]O@% j]{vjoǤv#_<BL8xyyϝ;ǽXeVR(1֤ ޞ  /vLm']M2$D21Rt$IHjc 1٨ޫ2&!a{<);/ywTif>grˉӹiZR0je)a09-tڠ%풼ڰӋ\6]NTfpqɃ$)\u)%%lfM9`$$ ]ݪ2䃵R=8oI$Ir}y11LR&&)Y W)]Iܓb't7* 3)L@'6oZl!Jbj ֤l%; $NOm@I.ىPH6 zRa8[Cpc] 9iۉ׋Iy0IV3gΜF**ʍ{d;PA /UHLc`uv}X@e*v32L9=2J$Vm oؒ̄=FoD>IDAT(BvT uB ^7J54Օz*G@Q%`=uujMFl}P-<ر #L 0Fv1@){O>j.yu:3J|o[CFccSu%| #<3χBwݻy'p;kLj݌ԔRQȑ#k.y۰ځoGcҝ7 Z\l`kw޶D ןo@n(ڻoR@hUu WVVӧo^ H7T4nAv 4 |aݵ 2ޓ_>Ty&/A 3p>*>o_P-_ ]yt'XVla{>w/wdij\ J_8K1ɱcsV * qNZ'"LX `-ĥyȅ&W0"[d{}KO^vp[p;ߋv76y|">UJN ß(uXe]48xlyd-* W@cR9=2BA$I] erv]U1q(iZ&,Fsb"@p)cMk~eBwps)tΤ~>0>0:^Za@I!@J+.G×1+cacy}@,obY!Bdͫ~YFaRkΞ={yrGA)\!3P8FyF=?TļK?5UtF no뇁cOJU +\%% X^^ľ[8n{ÆOϟĉmz@> I$`H -.F;M\Jَ(0wz%4o>""` cB)8VQ4 w&m.GGcvԻ݁\ܣxyh ֳ[& rS=|i<%#RN8uL̠00M^ޏCcpJCX4k> p޽= !89{#p A$``@F@ ab.+{Չ Nݎ;ϟ?{3< p\׭X>p{M~z.4PF"`E1nTSX^@DBJGwОXc>\*w+-:~x`jw\7.Ll"VNNgpq m+br[ګ`n&0NNс[HBZ`aCЉ1Q*V.x~UG0$[-uu=83g.wzzZ^xڻwoQ$sz=!ׅE bܘ ϞƷ>7 ^SAf㠠T .1u!FGucvJ/g?J ;F^N<\Æv-fьyDuk1;=g(xGilʶb!ppp/ADsffP?AͿB"h3x=IOkݱ,+:{FTzPDǏDpp%sKǿ^Mm󓸣Z>^)XRq6bO8cGq,5! bߴ Nا[) ^x:7iq]XwRA+`q@%L=bꙏad%&wDü?c/ 4؀AK%>ҞqA{o4Mh뗂?oZ:b1h4믿~WVy^" n`` ;Gh $!!X#㱬 /=eTC/zپj^8|!%Ż'R4FSm&-\j@}<\W-k=7{Loc}I=0ـl`t$a"J"0Yr%ʌ?tP;Q޽{׵'"3v[E&^E|Y-7T#sAQ>J FS%(L gB m[ޫ{8 Dvj-X(Vp/Ū4; 8΍xOw[z.o-WQx&qbfYyrWK>%.t&Q8 _ ho\r5Rj:r9}_⋷.EgϚC%~ݖo{#M/׺ $81A.CyCjwo{KSIM[ ݨi9X?20gI0e"ܝϣ٬"~:fW u M}̷Xd{0v H6X0I@G100|߿ ]RRrd #o.}:$Iq錜O{/Q l3#28 Î^Zw0^WFlYk7?Ff~FNjH뢗FN>woj+f$e}fp4@ *boIFiEm/V7R3&{ ZK0jXZ kmۘ:"V2'ID0qFP/ܾIU$Iu8N ƛeKW?x{em##$I:ɽX@ OMM$IXzϟ'eM@kwqo̟%A)Vs3(F"/~; 3ܗ2jn 3ۜ}]̂(>1ʹ1Fkht똛wPSp> F tˆњ9:7AwA囍?j5cb۶Od|/RɅ /޳džL}$ffzz:Au]rb%8w-w`\)bSPl=̊i(bH2$Pn]1L \E\1@b [ ",̀ !E:L';`ւ|C$IH5VmNX@h h XRR~aI 4lezz=f}ڬWޭ}XUy/^$DFFFB- 0$p;)'[?$A\|Y؊RRe40@kqFY'/k&4;^ͣz.GGG뺒U&(dl;aJu_!ϖ&|MD:nRd\3gh|m!m-_җUv̙&qobvM66}mZ뒔reY% ch4eck5M7M$ MNP$"1㘀*J<77ǥR$Ijϝ;}V/[7Y0 ZeY#rRJ03:g}&[̻t:u Z+P*>}#j_Z+?9e,˂1aytߛ/&p^.e0 $ZVo1_۩|K]u xƍs0<+K;݊~dnIENDB`DustRacing2D-2.0.5/data/images/carCyan.png000066400000000000000000000333621360473665400202400ustar00rootroot00000000000000PNG  IHDR]6gsBIT|d pHYs + +qtEXtSoftwarewww.inkscape.org< IDATxyp}yeVV x;طr%,[HGcgױw={v8#O؞px#X [ڲܲݭaպ٧H6) <YY( h2]~[/k{{{f|#괭VwU@}+_٣zcƍZLOOOa"O=T$J)>Ynu~ްaJ)ppp'~91_O?]o7R ^mU3 Yk/*#"LMMq)#G{3;QSJEUUn:h6c ={Ve ɻ#o.EҬ:thJ2wZj痝!rcm~z ڍsMoٲl6{ 5SSSZTАQATUmUSZki4R}7338aݻw-[ء!$J+C O?:tPZ-m6iVɓkssA׹qV7\ugK$=g}@<ϛٰa\.'/^}rJ%9|e tO?ugbrߟ+۴iC֭C)R9~xwO}w*5.-f~7~O{7ym6l6U*xa3_^OvGQ٫K%/X답%X "3^ Ep34}],3ff%sMy0E zqEmW۷O>|y{zzr333A>]ݠ00pS٦҂RJyCYFOK w۽cHGUTuҕ[);JhD)$=F)eHUDfH9WGHCAKmhۛ͞'kGwXw]w)W_{]}X<ҢVJ ˜u9J~ry8>">*u^r(޻U[TZ9qdN8S*ů95q~#G&(jHZ0ƄxϞ=vM%&޻wr^E\(cv>c?}(߫GKJTiۭuJ 0GT +iHK#X,;D͈{u: /$~'M>k=J%"y5E… ={p ~gl&54ڧJѪ2SH3߇hy^ h Hnq_z%~$=ι '罫wlO =e *ys%|1]ݟv: ]\9ugd!sEJܶg*0t:+,]wE`,}J8fMŌSw)༼V*tGZV=z'M)zfg-QGaTeS'foyՋc~ߐ(*@\.7#nVZy{7O}g C Be"0lXm\VٺJ?ETXHnl#mbvK$Q8Db%EĂI-Hގl$H/28ZeIחNه16b87ytrOZ$;*&u8-0hpYMԾ/'8HP(ACNkCV9;|)Jֺ`-Χ>'w<7T} @)dbkcX} 88Z8M,U,qNwVW2S "-4qBh!un&1!D$AH@@eO~ *393K,$Bi Q+,Ab͙cʁshm㣌λvS:G.+5˿7>DZj `xxԮ^޽{MǾ1&$IQԧK>Q&I01c b< *0o4,1# $1# XjhS!@M MwR;[ҿm]֒G͔0F sfQu5 S8reXKkX;z*aѝx/7oыgϳ~ۖn&swZ!Ԥ pIKO<z oYkȈr탴_'O|>Zy;;{rsa<c ZkeJje&S5IcĜG߾D\3Ec^>xyhc/lfmz{QeM\YpI8Q(o]U?Ç|>*bUŋ\.G>Zk4=э{~~w;PqRhݜzegG0b]4Bn$ 4xq4N̥tݕ;(n|A%zãE?G5^ C2ebsyjp$$le &E8j/0Sbv ;JA"$5 f͓W;g(rn߾}.X FFFL__/'xӧdhv;䍌ݼя.="6w8D/>F#Dc)CH wބ* YQNx p'eOg9q|q^ q*1)m%|")vt522Z!J.\vV6RXc8~]\Sz9A?-^^t T,g9[3z܉ca)&UC\|6Q^ <@n|6 Cs4A0s9F&5T4k8?y흭(N ys?Upn<ʇ>t{cccƍ}Rzm.g 7p?=i]xths7hX9KaYSRe8JFj4y94wA X&A!f3AKx\.a"{FDHr+\d?&{h{sFux^J $AYrn8co[4Ѽ{W]ƀ#Ǩ$)r[[SZ\.'ov`dR"LJNk9Pe&wn:ЃϜM\E3(1;?xJEZ 7P`KNn\,7oC$䍨jT}U65v7@Yo^gOP(m۶t\c8DrԖxkP^:!iqcQB6 !!m2ɡbLQˏƍy M (cDskvmgU`hd2{Ԗ"oGHɛq+$ڞB+5yNj&sƨT:\.'&J4Y퉆˅GW8r=&_s*v(ZV̛>OR2;vn-r9322b2GskPH ,Mf& 7}@ Vːj6(c;R^\֙_g y"I$GkW %>McV2x ͹+C~;WtE<( jǎww.uݶ{\o$ϳ 8trZ朔tyZ ӱËm5IcD뮰]E}U3r%Zv@-9@Mo)Ԃq✉֮]Vڌ;(z<pp+Kzᚑy̆GoV J:NZ U s++D]fC:i61ۥ6;#PA?/3jsn8տ<3(W؀9OaԉJڼWCouF-N)/̹G^) 5w9#2r7U[?heZtO4s:!oT,jEj. ^_t!u8}-Ylɢ5)X\fh ~frXhr+(.!y*jQ+ﲀ4Yvě0Ą IGyw+jP.S֘"m@ZnuoLݐK J9Ʀ1ҭ U.e9Bg8 ܊4m8 (yo5yVe+S s( Co05tWu7\C1boÂϜِn*I&mǹ\ vCd*筥B]mDʫVDV-=̷w&ι QV)9ttZuy?(錴]]s˸kzEqo_Vkmkmard9T*^CPJQeH$@(d۰.hd @Yd+ڳ楗^5DI$CCCjύc5b݉וyQqo!SU !Ž7=/)yڱ TW(f4g|)zL6OlcIDAT$I@s?yU WSܯ[~v-:7#olݘVuskyWU~e57gfafCל_"v`knQ-ClmXJuv9'+Ea]v]y.t˽z G^sB6GVkEB y/} b HMW_ YDm xZZdz4JR7f>Z-WjqofW1' 1;ۜ ?BvIa!\̕0/&Xˇh2lNfE rMMC{ju i}Y^}u+"\g{Сy&W.%cIͺ{í|>Z͉"I]w-âI?gM!o=ٰ$yG9ZO߉7챦ږ".Qd>6!$E|PTpT4Gn(h6@@vAsz:ĥL;9f qJS]h+NMB2JG9#.im޼Y) whV3J)h)G##̬]Ki`LquzKϓ>JOмBЇL(SRc&a38Lר5^$,"zth^K.6RFR8wYhZG)Tٲ"Ogc}ʶijlVXqvFB,6'ōTqMTqM9ojgffF^c>,ݱ׺w^j|?;?7g-9}xx̫ ;w^!sIw/"b0H{x"j'RTf[*mXCx^~c3Wlj-^;6X̷>iWniw8kSL/!O~6]ƻf5u4x oS4YV"9Sy9-ҩ"P84 8'#Uپm3\KL~PsMMGcz FϏ40z.$Iچ-]]֭[ @"+NM[ljWϖRt{\ТOeְ~>6~~~<ŧi!ym*\z(|6P^ kTqԑ4JF>H[(rlAUڵⓐ'@LM1K<:4=w/QO{T҈2:t~1EX.GKIYcL=7f_0 jcZ|;v헏ȏRo؆jUe~D5GGx}ˉܢ1Kvp'yK u(΃L&`ɱ3K.\q0zǎݻz^SOQ}CPRxƠ>/=$<0:Q\]<`9OY"s 1H#aG4,*:~͋d>lژ|Cvf/ٳ|.qV: Nm:ea\%Il-gOtUf[_ڿv=w8Wr5*hNDې;$I@ׇUO>3Sk~b˙3=1zvS7Ƥ"p䚤 Yn\a\]c+9"Xp4pҵDiTgT9ڽBs"qbDZ8i8-¹6 ҅(uLBCK'k)q?Z,˟;/'j=we>966ͥN!@u ;hZ-(b8~pR~ _2GԼ\EQ\.\wgN0 j9p>{.}_răFC[c44OŶcf$2P/T Pu;j/\4뻎|@cĹtiwӱꢺgq漻8% $UgIbA-9\p9!|aiG{zOd.1ض.kqqB$!NUN<*ywԗ?;;Am*#rͅ bxx8>}_;u*n:U~?A.I^OCm.3_mwA.^?gϮl.9д+fv<l_w}vmZt( >_%X$ FUSA]nwۼ֝RQiUu-J9\pNވK4IM٩N,/ C[׼|ktQUJՓ$iT`rą%& ,%޲eK$PBCNo[~!sǤX|k MEJ}ۼy( |l#[{Fu⽒ߩrͤ#[n3qQBv mbw ]$m_,Էsℛ:MDΝvi\A)T5TE.5&"MDJ[?3"wl͓'^hwQ"F\n ֋뀲rN9DLc|Wx|&j-*&f[x_o'Ɯ{;{v̎(@VGI߿Vpp56eppNLLb16UF+S](䥯;ٰnW*ݥ;m_i(z\[Rtrp)ZY9%JI+O +bD@kgD!X;01qѭkϮɟ|wh(\l+R(<%I kVs HD838(mbTzXΟ?b>*ĉYjTd RQET288h:dO>}HẢܵVye^ZUJEal٢DD9TxR__kTE<`NAoxJL/$<˔PXfY&/#ҶE߿?AkgFw6^ZN|ڷq5Dj&'&FO஻fa*U WMfgkj||V&&4lFnr2B;;r9k$bkmjZk{ޛMdy H0VV/#jl PA +)#[7$T*]F>X\ ۋ$nƋ1xR98\uIw ^<<<ܨVjjb  7}}^АrP7&&fg]'󵖰."VX,|>/kZ\pa 1٧z :rxYIENDB`DustRacing2D-2.0.5/data/images/carDarkGreen.png000066400000000000000000000326231360473665400212070ustar00rootroot00000000000000PNG  IHDR]6gsBIT|d pHYs + +qtEXtSoftwarewww.inkscape.org< IDATx{]yX*'e;xSd]˫AɖmPJ$>7y;q^{ f`3jps믿믉Cl?/B1sEW}?Oe۩wG/ 7kBE̟{gR("Z;Q]"8Z+"r^x8yv+Q}5ɻoB/v-xa4s=7j#`f,..ʕ+>S?SLhrr*5 ڳgȿsnP`vϕJGGG #Cy"iނϝ;jh,;pٱHRe=ˎ}YۆvF}?w{ZV記"$h41?k- !nsbql^I(c~m%I>KΝ0 СChK.XkXk$ɏIeWVk/k9VJ7wu]8 y tI\HzBo޵{iT*}oٳD"B^ .}}}?Ovvw Ygffyߠ^Xr(*&ʌZ2$ 4Rܦ"VXv]hyjkZ8А7jNLL\6[A kE@Μ9#(J"|4 DZ \Rj R8 $@`fe]pPb5S~15XDIvb-B@h2Uh\1VJJ)j\Tu]wy\VP(pNH~ ;q?cfeR:Oџ<쳝.W"G)sKrgƧ(ytxF4'O/?$7  =ܼ:tA@Q7K; {ldS bCʌ2'?W!YIVܶfލ/ܬ+M)W2J$8r'&ǏOժ=sI7'mnSSS}h4vmknDv>n~}> 쵉U O ˨?HFI!~}2Ŝ]9Ivkf2 Gdl찅e$bIPk|Zb:3V0P$A&NbZe!| "93Z f Ib~o%q1xyanp\ /ڀƘ22$'N0Ok7#8up]WqEn~Dy,O'd E *SAh9V;XN OX+DWt{uO$~ګݏm*rzg&&>?[R8q[sFcC +JVF&XN(~?UB4ݘ 510 "ߜW13__[s_Ñ7~"昹MDv=z4.^ @D499)^}U$RJBDžDuHpp #KH%h&4+=O>7wW֯s Rƕ֮8 ryvķ6U>,%QlAxˈ8Al4_zRQnyO@ Ԇ(}^PmƦvp ^cXZ\~xa[#r``@,,,P411Ϝ9c7'K/8pZ%M<ď.Z',^A֋L ^Ae7 d]] ^IM {N J{5yB3'*[^OG0V⤕ c3!{&XAڴgCa !,+|j,*I,,1ҍJ?|Hx|\䄉DѠJ -;S36M5<ԬkȳGO¦6pF\!H(=r͖x^yPڋ+I <''',Fb]P@\j*( (4}{`NvH  YGl5G{5` ~"@٦˴V}W=o9XE2jw? |o'8r YQXyoDLPu`q#4ǖ? {9cvrr7\\ҥKN~[ƒK(ٔ-Dn*Ao˻Fc!Oj 5KlHhcg0=ݸ;B__lW8,0 ,6%0 gDKY˫bќ?n;&''EZufffJULO6~c8պ-61=\ݐ@ Btd vCث[ зM@U|_7| 3.u|lIlnG< ~30\ž}QI"(FE[m,5jh,,n᥋ow\}ysAs]a $gϞ}&&&dZ>>Z?z~rW͢o]yT?D󌥋!.6x݋l60g@g ܔfuJ%!\|b+ #T¾ K$s<q!JJX˘o,`ja3op}~b:e$$ b,Z|a|-J5#X|:m} *x<O.AL@SKq@oz95O\x OФ!J(k:|5;p>ɗX , HX?><<Ƿ3hrrRNMMag~O6>*Ӻ,_p°^w{h}%$|P0dq߻ql'r S5"8Cx ?̚;z,ALF+K}$I ȫ*Z-a{vEo/ m>>5{\q@@]xh 'Z0{qqLDq6MVŔj蒓 2%q]BAB D5"10VBx=bE9\)iF)ubNVqߧ"s8w|$|Q܎&6$.]joh1 JJSNe- И#z@kMP%Ѣe/z 6az~M{\.2\pAs頭gVzӑotl55=AOY\KHl 9׃@øy6ֶ 2囿 {QZM*ڷ3=HS#ek\$=Ks6=p&i^k%Q$8P^ap|~ |%m,6"=~AY,1CDi(+^Mvf]V(/0w1] >\Dݜ$/BMCgB\ Bװtf,g1Y,["VK. @LBzqw}2C jCC#(v_rpm=ޡHSZpՂ_G=jڳgXC^"3jDxzubP K{P=Ti9C;T{WwjmھzB\}lH_{9̙3H @).񥢫k@,$h(mn^8Kvsdvum,,wVjߔ$% OZkzժ@j9k͑ n?3[ri*[Aҧ;[=vl̕Dҏ y!ʒDRa)%k"J7B 3oMW@CD Hx 4r `.YIISJ"ü".nzoBl ¶'U.;>z@j}l6ee2IaJ16D ;lb`]zA2a{c#͛,e`ĥ) yQʽ̙3<==BH-X蝞b7H+Dr<Q:BZ:t(kO%T\וSSS2O$aqIZn\A,7?.d$.C[O>^ }-aT*",R,ρxpG"M5oi/iѼڞxÖB?jZN &kd 7*s Ta$"ނ:e96ymVzl6"#;YcZ-tUy"aQd۽Y^,KՈp5S ]z̀YϵU,vUO'D2Rn+SRɮK5YoҘwC`nw8{:XhXGDZ7xLi2tc n;RwWCNfd3WvΒleX@rΝNҡ03D'gyIXZl;Dnr|;^d`!f jiilXVJq|d^m[bUZ*Z7Ê}>!k-mmI|vD4V.?p~!CC8װp:%-=.)R# )eiu]F*tŤK\XMm-C so xg,haz@y)%hwVL(|y[e#"5{`w[="s:[2GI)WP ,[`%3:iܦ_vKAtmϮ32,_À1m0(ls IeS`ٻe/ZBawu}KݰdwU(iրF 8뺶P(0EEQDOȎI$ݭV"V[:a'؏폄V6b"k!i)&/..s1Tnkx"J(mB ԏ`iooINQf6d Y 5{x쵏7A>hKvll /#IDAT kƘP,--ӧOߢn2@^놓%n2XraMwq###S^A QK5LP@InuEkfë`qyxXpPIa]-\7Ѹw^^شm*V0ZV^ bk>q9w2TR$Ikɖ6A2 |"Eg]-4ތ"fQ '^n纕H^ًXckB(~σ[A PC;+i6xp` @r+@ |z`+Iz5 dq5Ti5_zio}xS=˶ 9afuL# t ٮ @](`I6[qHEB@:B#}>cSlY110# _SD&D?~xozN>xևg>?JH:te@LL2}H,DMQ(ah $^&Q`7ʁ&lAw$n.>h427K+(5!fGbS/~jg_O}) _h#q n*2-x$ S3-$cثc4`@,.w(^>_ყ>2_P2+R?{o 5(BEHT CW@\v n;㠯/޿>ՠDdO:Z-Q,ѸNR~F$̩8jDkj/Ex. lnA9^,c0p6NoN"lY ^ucϴ@U:歠-7 >0~=͟p'F&W5XkI! xe{ޫ|ϏBVl8sϭ]XQ={>|XVKyxr?~%i(0ACŨ\|"hlwB[WpI5 `؀L0&ڻ)?ל{H2HRYg9#i;!8^`2rDнzG?`YKꔕ 6]@` 0q8 ۸rm**SNL..:GReϖ:IFZfXcAHsx{o|3zAެtdS)Պ8T*ə3gn 5:>nֱR*n3-ڔH֖$@Yhqa4ی=Z$vrQJrPpj Hh[2uӥgkʰ31`.~'iⱧH)W~&7Hݮ5)DG3SgLѬ 3H CA^Ξ5s7q5KgҾ5ua+&A< Çq5ț ^pA)}ml#NiH&/I\#!#0߅)zc[+R"5 r#H[,c?uDz{Pj'^vJZ=8gJ*r;dA $`%:[nhHl]եueU^r H NH +dubq ό?;?pbp``]z śU_K(#2%U%c)ep]k^+PSSS2 è_/iRJ8%[AC~$U4p>lPE% &&F+N@+ɛwːTc"`n@[jQ¢E@-6VubɅZ2ұDV GZiILHGe\ǺVM<zRJVJqqy&B G?FGF?sС<֒JŲi@e-x ("Қ(c7?'A|%Qo/?{b)lZ܎4vrX|/qT5ɘR*BDaZ-}a}{2VbCaW-:v5 "* Ñ\Oq,(W° cYnIR 6(a0pdD)C{?%m,J%mh+QFhiVJeʉ:։ym4\XJ!c7[ by`G奃y~8r 5BR!s Z r &&&@hP}.D^_|bu<:$33̶DLƛ7.e5, ёjIDY:RFDq-..as9sʕM#m–"ּͅh4ZRE4>>NLZ?n4_k1R*TzyZ~ZJz9*~:00[?j54R $pd@q9צY)J)籆F﯇})N>zWQ0r11fmWfSX&< .LLL Ef-mϢ(<ʔZk[ & RʢRjqrvM030I|=Y,+Mk^LLLS2}_.--)5PPqmRh ٲ  жZ-]*|Ϟ=%ͱ/{G@gDDgΜY%1Zs16Յe_ cLIJyqZAZj5ApZc Et]u1ELZ$Iq.J<==ͥRjyttϝ;_{x_n"av1Eq2`fmMA%6w5ʕ+DZ(Q>}4CԞkM ")8k-(7Fv+g.Z6;(q٬60~vk't-;φa{7 `!Ro<3l;!̵CIENDB`DustRacing2D-2.0.5/data/images/carDarkRed.png000066400000000000000000000332041360473665400206550ustar00rootroot00000000000000PNG  IHDR]6gsBIT|d pHYs + +qtEXtSoftwarewww.inkscape.org< IDATxy\y'2ujq3! !9jj-*FvAӖlYuH޵2+ Y^Y+krUXi ҚZ.9:(ECp0 4>we?{ՍjtOwGQU^_~.6gw B1sE}?}e۪wK>#|E̿77PDw6E qVڵ D䌎tOq<3F޿Q_xUۏ4{հY_cw`f,,,ի >C?C/<:y$j5j6466&/ [(_ξsRjʧNbݶ{'q]%j${ٳg}_Ֆ}n6>aknJrǹjuٱǏ/ /v}X7nܨݻy! /,,\ndjZI|ݻTU>~8H?i/={{0f)._Z;fz~ H$LJ-W oe=8JƮ]v˷o߆8 y ,IrΝv^xFSRݻw{ll D"B/{N @8npŢ[lecUHYJ- V$D[kccv]=ZmZkDZ{5ZNLLؼm6-yW riEU* P(8۷G0 >(5 fKeT^AKeLlGYi$l۷?kU!l])m$7B [CcR\׹R ϟ8.j5. x5үBxJBp>črLRJgaaDgzя?|Hk9믿A3KM^߿ (h޽Kΰ81'1c96}Ya{1}(0 BNF׮sqtV#7n,/&BQ$QǑ869rHRӧMօ9is0 ft:N\nwE!c>!}a> lIB@,7XH /&"LB0`X$l  ǎ?wg>Nݲm,, H|ʾ{mg#i1s'qbI%'3Ck c 6sy*:v+gk/rg;Dt:Cr}"'OW^yE%IRqay鏖1ẹ 89b"DؕǺ>\q|d,']sl}zg&'J/iW9+'I=eם«WѼxH̼:Fq.EoVy!{2R9SBR,Zc)hx2Fcq.^>s[ȡ!1??OAĄ>}!"zAޜ/gGk]֖HVɝygv, L\{Eވvɻ1z!#sz ٧ˤK"<''JʹNM!H\u ]l$êd YǾ*W;k{Ǒltuɜu~d]>lBۈg#HPK#'YZa zAGxO?]0_Mג$VEr lΚ+yĉ2IGJkKApvh7I"p!"թH!FVsX0XgvX0.W׮{&e*mJJ3gYߧgW<<5es5:d1F;=>e22ǀ|ݓMuB*P>ra#Z~_|yHCCNAy|$XTZwʷeE^ s$UEZxq33泥[ Qb=7#.0"c;;. xY4Bd+_}nC^ ELPu+ر/w1cPGFc䤭Vɓ`V2䒗._,|w0w%IN'vGƌ1P$3fڒ˜zg5PpNcc|WV)B ۠p+EpO< )!![Cpk 4yDn!`RB!!LPWw7u0 [AZMN:eE^qagppgq`v 1Zٿm!P`=7/BBb8ZۏK9݀ 1h!@\.=?T qqJaeC_W8 ;K =+p?- AXXPW2g(~}ꝭ]лmH , !Ԍ׆?VSOEǏ/ªtKR]h81kɱ~&} i"qO??'m4j*\ưQbWpq ﮿[\|.WKҙ:@&K _R^(VQyhG4xiY$!;vKK3_no@ 9-2 8 qmhsss:y򤜜t0,m4$Is||'tth=8fO<%#}twZȌBJ(k nf DlI._l~ol1JeH-XU&އon\ǚūƞUQYVΤRM&m^(,$- uBq!M=@ D߿gn.=2ZEc`a`aa"Beλ"B ;\l!.3b23$rڏN?k 4QsI[B֚8.IYKw9) Ěx{ato 3<'P/A{^C{tȷULPҫѪ+vk(_GCGd]ȹe=gߑ.T0Į]az|uXjZl6 H߮.Pd.־KmD B*{#"z0aV>ԯ cBTmew`'x ,?02 fQls;X]BĕJEm1eJf2@o=dRt(H;-J6 fY5;%6c!ckw0w;2/sukDpVR0 py1< F[~}젋7Gna[s-d-yz>yWؘXgBhi-ۋ NJNSf-9hN-ֶҲĈ}mQ`N "gffF>}zYE(Xz^ܔRGB,wpA2 gv G/u,,"Oo:+}3KEy#\Gvw:OYkFjZYd>UEL2xg=΍+`W0w\lJPíA62(5d,sl̳T ܿ?eZRc tS#whthJޚw 6ly=C~3SSS !4 1;Q3m?W~;\$r}Z:Wn6JՕYe.Kc>1W\ו2$eDs%W\mX{/|h@NQ"uD-P{끌%7;N>Ѯ(zTRy\gRXY a֨OgB(߂)q^ ]! ݰ y( hLa~nERWRYf-Y bqvkA'a}6!~3!x95 k-9neUy1qM0\RϪpDd_B3خ,sA  󐍃@*#[VU]"\.SR'O.Yg֤`I0? d`x[I^ <@#`)H#h$N"OҭY+en+tv8]gqT:Uc{+ , _*DN\ٳ$qDCu{>n5 6 l~k 'zTqnݯelaqw?,# x $AjB;ın̓IE%ۆ8r?xͱ8وўYMu ۬bMyuMTib\dr`#ms:\n(nkȂYq椔<77juie)2Dks[lytɻVe}EBن[Rr%X 2@JR+6`G[/,(U6Iv<L@lm'(l*0zۛARƨ ~n@$/ v}` ljSbӗlƁyj vqz;VV*F\eoRIj7Ɗ)aVK>[ hweY,G̷ŋZk300mUqI'%cFzk_yO^pL!/79x}fQ;VHfTCCCZZFq<Ǐ(b+Ai ߮(|αئl['2Ыs]Ru\n$1333_df^ڤ0\]KA$R)#fN%$v%<3P @9kZ\l6)I@0wZވa@V7L.?qIi+!t!N|+rQT*dr03:ODS (\D ?R[4s5Fh"kCz\^VӧOw+#4$rƨ]^bf%:w@,nrɭBգ2< `cӅ+RXkժEO@%wc P5hXpPO6 s7P¦A0 喝+=B;OezpFJ[m _%TJ 9M!Vy3k`I,k_Y RIIDAT4NZK^-Ds ` `6FuW.aޔK4M\mXM[g1 ԔRqEСC˿z ފS{$vcT8h={`䷯ox};ZP>Fnl@_ 0k W1"Y\\4NCz) MbJvWv?*0>$DܟnPq;06JPjHFkB7d,eYa?_\iwǎ=SvPn{#u-k;ybk>v9{UR$I ѹ$ups@JkL+X5M`{ׅE1(@nePc2 HMp"J'N@s!su"2Oc\.\L\{ w{ QJl+1;8rZqhM/~R]ڳgQA!+I2P6C4+a-Jp ܝ;!Kt+lҿ&'/ Mj:οzcp ctv|1s9ͽĉ* CI2ó1p`-A(͐/gFϬy""!QJ\S/(iנ=3/d?ATںKk:a|S[J\pŅ.YD D)ԟσfuip0(;U,-x*BBdFM 1XX8s4!R(h+gGF~s^ӧOդ.wbbB^xٽ{wQh=|^ۘkLJ`k ͑{OKsk/T?mǿ&Ś&JKNh2-D=ZV*3?ʻcP1 Xr&{ܿ2٢Soq/]S07 7\|Sk4tljϜ9cгㆈV(Hw 4Q7"0$Ipӽ# 8\ .pO\޿4(i@h3I%Y`w$)$y ښR8.2>bp}(\XwiRefvXy2b__: `p ޔ8n501n(#Bq&sou9=4/ 鮮Xy~<Q,y53;ۮ1%.:D° WPpͩ5̅J5%DjuryW]]XgΜAݖ*s97><  Ci-lB,_vQDwÃJծ5 c%v\8-=,Z;Eh0ϰ"}8Y#.XC"{qb-#81_WEGBn[!ݨ~%{ݺVʻT^T.=@ V",Y5L BnnzW/˿>U*]BRrf5!o.}<<Rr(+[[4337k w>XPX`M +S}3IH r6uJi'X̎3Z2xhx>(M: BvoJ5o+PIz}tm=+~:\?7<⌔*Վ8T*ӧ0 9'&&tEyÐoo7]oZUmSEfhl=ٻ{P_c-9RݧQ ]'-%-9ĜJkNL&qX{`J߮4N3HC1[$PWHM)O}v|`>#CfY*AJɤJZj[ku5^l1w&ԭZ_58q2UaqG+ț-abb"z*ܹ0 KmU A?TYD@srIPi;eZO^~Qhyp=jϮSpϹ9X HsR騴L?GH);vll E$눴v+ .yvu'cX& }{I-a Zk$ Lt /^7߸00%j1mulA !oZYSVJ޽{:NnnQ*ݮt:_o)k'y$t0^B,ܓ+%^~nw=d[~9z6zF~wYSu;333gI)^䗿kK!vC&Q}GvK2 q!:uZkmwbnz޾ Om…H/=4{5ߟD8ڞsss*^xQݻLNN={hkmA000뺓6$0|Vi}TY(YoR>~ٹ=Ww=H{eÝ3 嚳g0LZږ9D eGV*fߵ޷X,)ڝK_$@ZfWļK$1&YH!@e˞[k3狥6&ěbs0{sb7o~?H 63w$0SNjƒ]dQ377JQ;pLM% +h?Rcy7 8gxEU;ʖm|%V-{M.}YeH̒X Q%Z$&5t9t55sB4DFGŸX  c [X!#$WDOHypyR84Ԯ>̵W#a&?II%VEdhh~WiX. d"!d33WQm ۷Q?m4z c)h8ο:< 8T@Ƙ@J+ŋXbM6X=$fvbbBONN0 A RJ8"Gz$GTGnv:??X*dbf a-$sjd-Ifc+f XQ ږ9 !J:DhLX!ډ#D#Vj1mXXkZ!&ڰRc8Iu]c}űi4,Ŷ"; ca2 ]INn q5|Q*]H8ϼh"b)DDDq‚5gϞ5W^]7x ׬!6ofIZ({3Moh柴;(=:D_g˵Mϳza-!2#TJ©% k!?Vk.N:zWQYc%cbct.<> @'&&fxRNZ?t 亞v$ BZv4sb]7"Tk($Vc;fO:ew=Ц۽DK@x"H%@ LټCð{,"8[rBkr|˵"@JYTJ;Sή fƘ I:}ʲ٤H&&&:f@ %-.RX&':Hv!A жm]*|iϜ9!ͱ~=]hO^%ֲ{b75JcJR=㔀t֢^#+壦FChi|` j-$! KOMMqTZkV|=3;4sy`):3R.!3`vvv2ǨIW^ɓ'QպZSKYWb dM.սO7["}& oݺ5`>3R/=6l[?9oEIENDB`DustRacing2D-2.0.5/data/images/carGreen.png000066400000000000000000000332101360473665400203760ustar00rootroot00000000000000PNG  IHDR]6gsBIT|d pHYs + +qtEXtSoftwarewww.inkscape.org< IDATxieIvrϬ-^zY!g({D .b`0hd e L#,`lBb,,4IӳttTuWwu֖w^feVfVevf5-q'N9Ǎao|cbhh8/}K.^{o~4СCdэFc)_r{W ED}{8j 3dpGZkAD?o%I2kN>-kw-^҄D4z^ni_}s'X^^ח|W~W~[MܹsTשnԔ(ðwmTby&ϵZ''' 'OB۪y#iу/]z}^>}ߴ@jNNN̙3+޿kq֭[vCFFF0<<<#k^bnn<ϓd*YkIApeqlٴi8O>i$9s$KkF.](ѣdn k픵- M=)_ j+z{qR̓=p@.߻w0˞1&j/_@' kB,nRÇ_l6ի__|mY uZMnrYNIxfHбmTئ]֮6ўikjNDiŠ-d$޲]EX … "cj}@ܽ{JHDܻwo,J_w]JQdv@ f'DBe -g%aĖ)߯w0ּSrJ:YNj}DFs$V'ZP8`e l"cFZ]er au^sT~@O_Rt%IϘj+D5k %rIwriYwEeϲL4& 0R0 kh$1]`;łh˔"qjDQ&fff؝ěּ=wΊf)&''yh(ueEq$8nXZΗ7ʣ01;P̬( rLP rH ΉLmNQ` k-ٶ:I!A1B0`$s@]$6.RPMmODJGT6 9*Wٸdxzܾm|С^A /~~멧"!h?O0 õڦ0=JaRM{rcy=*B$a ;!&S<ϻBH Dh=󑽖KMt?|UD#4$lj3DEʢ'h\hE b/>_x-5Xv;WnG>'n.󏱀6Ʈ&333X{hނosGk]V0U oJa?7J!<䃽d6 B9w7|3Viy$=Q6dzv,kiⷽ2 bwr ˺mc+K^ȘD:8W$ \(=/m|350i^UZX˰ II8\_+x[;ɄDj~ԉJgjNNǽ$IJJ×שʿpd qwA+4ԮkWqu x.nڞ RԳ{/F?#)a͆z,x.hMV"3` V#7]` -L~Ф6tBj@P!g Hǃt}TG0qվ?4H4\)5 *J E[L._,ժ'(c){,~gUD_fuytٛwU|?|W%`^ asQcz⛽޸a$k'p9i9K@_i6s @Ba1@|6=og<ʓi0 <>w\TV*e^%{__=C1d"KAUd]VYJx4@xd8qM_ܬQ39ܶQЅzOdSw_8 3ɐd!DF޺/$,X  NMt"RiO f f'P̌]o~}]zyzOʉ[V B[uC\䟀=>Q-gF\6/_D@ܹs^;ݫ; ^ i%2 bB\|[:BhT-v+Ki"0=k;@BB՛cU1k APS~W1¯V01vH  =SD 8FhMt q? OJ  5瞽nH/^{ zʗ'sQ,@ ƕzyxӕwQ pDfN;@%Aģ'љnwߝ_|r*pV BU GP> "Q q߮'ɶD>!8KIHHH`f4l"}[DzifS V)@q2-?AEQg||s~5h)")Gq[؍ԗ(Wj \9⧆6]^!>yOm+kQ wb(8F15pC Xjtta)#nyS>=2"z(-T/V5\ap\SN6^ЈCc}3h Kxc|՟C_zx5tV]le{o/}{nZMͦ7z_:ws(g酃 Gf&Kƕ#>.TmUKH0nsh]JP_~&N1E .YHd"!Cnۇ(x:\! $&F0n"B[3y//mgB& fPەJCȫ:u]art`b9qW܌[=Q{7E\00"[m&Zc-|!*h4M"Dc'G\ %et<9qNdVP*ȒDZB*25Cq} yU:-hl5a}[mG&ԉ1&64=}U&c EGr 0;WrwZ@80=wp/nbjebP;c5HdOˊT?W=Buj mj0d```b0ss>1b0O->bӐX`-qR;^ݻ9w-v gSq^V Ƹ^Zka顨 Us>f\'P[[r *8VL+5 Cz|ñSxѢRB .NDiپ4-_^/z=mkhl:0z`n ; 5<",c׳IMC*ٻH^ $ďo[dUÙ 8J_ёﱐ+FDcIVkiߞ'˦객$0}wTa֙ m=I^Bȹjt\@5+6; +ȷՂ9L=>OQjvvV dK$]m, +hhV*c!4F:Jn|(\fw Qfז7D=CE^{EB~NfmYw(r'P1U|J +" :)6KAvE!Df̎<{ iv"\w [`\z&[Tܹs{NEs_/Wy mDvGfהOCY0lb[S/I㩔N$8G^7p-kd;sNX0`Һۼyw[B,[L<%%ɵ/]D1eanp;  7i;f6;m2$[͕dVyng{r d1ep,!sf~Ӽ@?nBd {W RZ([(z6khUU7bH``v}"B/'B?tWz5ǰďBΘ @<&}){2+|B$IV KY # 摰D2@Մm 542ޮ U\z0@`w$:h1X0Y@Ű6ț$ NȱYN=0y$.m`^bu)Ev\SF*p*c,7a31YW"'-P 7HQRJ^\\Iwи"pĀ-Il yPؗCqR` +;hH)yPDn$5 3 2Ca_mPDRO|g[&0I8ͽLIM*r{G2m9ldih6`ODZ'[Ad`hR'oD IXhPF^1w_*мl-WļmN|%i^9"16K$A 8{;+'a;oCNZ=B:2A`9IOZ)eZSBXDvMk^"m?9J7?on.E)tNck#v@9oXZ;F"m?E0}b_؀m pչshnnvcYNӕfCJ(8cvp$ o{8׺3K١]M٢vRѵZVlV)Ib@0GGnAl4I#coӕ1l lǝz$S;:3s-fSW4ᛵR z]%٩1iOo%rwt z[>G1þekZn)MSL3$6VdC ?OQQgK\%`F\0F" 85-!DZdO 1$)Հ}Yk w4/  ݒ(!#6 ,Xgve[|ϻ+ZVu{…нXEĠQAe[U`?e.+ Xd,"6-Lzrr6/qeIS /QGϬľ3dHFg!vYlҨ+2SGJ2 (bGf0:j(q"9k'{[ZWclR:Wu"TnWCwBh"zeGIDAT(/ ۑmWv;<_AA$rozӺ swouTDZ9ySyUt#G|X2a͇a$7 :{[{5~ğ=z2۹@祏1&BV˜?( ;Pe()u[%NZZZ szL(Mbn=v)C'x 4X؍ `yzv:!nß1WEaia{3ew'Y|麨.%w?1a84ޅ< | n?xq 4tç' qỸ^C<ŃOů }G!vf$8(0!F#H $m4m Mn˗4@)7 w2.~~7L8NO>m/^nc:{}?-ΔF{zʰe8B /5OmaZ[ޏ6=( Wt,O˸u}~C#ur&ڃ"p: 6JPPwRpw02Yފ{e4t 7F(Z'Gbz^pu333իÇZNwj)dC ٚ}_ໟAPy x׎]5!>|1`(\ttfd!9 : -VΦ&Rr̢ 8$FXwS8䳨C@Qzgx(HDpࠊ*Fy n>7¿: qdh\ P@n9=-"Q`* {G"3/ҡht(Y p3c T#I44Emն%o+8KkC !IIf!s p%!NNt~&7cܔRv}0L} C$m-.j+74)20O4R~K ,! pqqӇ*+q2h{w=еqKDC!t)d"&FZKQH#g<7k>#+[𤜬Ep-8ۀ k4Hq#)Q@k[r$I¡ktׂ2={lvE\Ε>QnJS] p=Oa=(\hq`pgH!`A,XBnG06 [АFfi{aFkb#pXϫu}2}b"΍#` A" \Giǽ8'n/Bq;fe1B'18F5\k]|w_s$Jt;NPV0 믿wa5|E{q}СJ=s{'[~P+ey-7c=ȮSnux6裮1S]H/T t9.%G0^ ,ϩwA .")N1 ·TWV\I)A*Y÷>13@2i1PJ;'@蟩/ mv5Z$)8By >kO8V(my {qyYiK/S~ғgyHBRR(A3d@̽Î{EJ(+rJ$Oہ0.\YYVwa׸G//?cb y^V  +,rM. ,Ld"[f]) JָʔSox# vGi0* ( *`ze5Z$q4Iи+t.vE|?#oAKtIDZ-p–cOV8 8cE{ՒJq7 _%Fh7"b!s)|'#Rǟ p ƛqY5,LL/~W(רY8*"S d}4BA*p:H~0W$yi<3Pt$сv!%AZuזl3NaF56f?[݅[}xN'7Vw+ZXE^dwD| %'OU~Y_ 0Z|\8Ⱦ˅BGAnuaW}lځ1H螉_۳8 !)y_Oqwb>/`y +BH;'ƢiiHy /"(22q6Y,dNM 4^=\4-۬ݴ0F#M5ZM\޴/>4@c>0Vv4>>dʖ(;?S)VkTxcm;8 *c秸0cЕ, ziŷQj2.&Eu`#"^VH^AfZAެ* X =&'EYe0 >;qR|Xc`ADX_č[Pq󆝍o,.HޖwI L®yb|".y qU===m#G6Nv=3):d/cOeJK\oK9y:}p ~ŷ_Pᄡ{='ɘg+vUqe{z>,KXb osS''sx+y\={ (>(B0¦yp5w# rܽ,uƘPJ(+WիWY7~ 蹹9EQ<<<,}ߗN[tCJ)%$|HK> r*HLF?WC̊ AR+|1<&,\рefBP eF Bk8 殰m RjDlVM% cL+37%\[4fb ]3@) /щ_=z3<֒Rr5ybk],=֚СC$ #͒~sdħWSaIEV?4\r.е6fl"79&}XvLtR""8Ǐ/>"ookb |Ij4??/ET*d Yx'$T<.JÑ ?gy@p̆D 10Gkjၗ2Vmũ5,Ց5PFZeUVj1Mk$^vfuND)%;` EVJR=|gF奇hկǙRYo8shFRRJ0{ @lkB-<y^M(lK0$Ƙx,܄%333vM?0ةI?%vGO֡q9l68TjUbu]mR(Esi{yV}DA X!<WL#t̷EQ8   u+3 W2_f~Ɉm #W980aۨ`";}^)t:ʹ2w?߽{wn][m_t: ƘꘜB0?#߯G^xaQ&}Ѽw Qz"BZڡCN ;z(d\y{]%&q(NS&cǎWU.F8;wnǹ\n Y@mf2۷^hXZ9(۶8Ny߼߉<f۶ rWJxZ39E* df:"ޱcVLG֒y /Ν;Wɽﳞro.ッmZv], Ƃ|U-x-iݲehGGG`Y4M˲ȶmniT*Eϟ-Tg ^k!Ɖ{1|7N?JJf w6n߾lll4}7 ðZZZu3DrX~ff&H{'=ϓlVڶ-Rk-2 C"ױlւ+ּ5E@?΃ `t;Q.Ðau˲>kF3\;d%9 !m3I)hY79D"ASSS٩gff4IJ)!Y ! RZAai,ҥK0M,ˢIr]b/FEx~&%ԣ1FD "ضcfEcT .V"}}}lddDR)J$|#{y1@eYLJɵ\JɈR$Q)<ϻ477wqxxsb7M3LR` :qWz-45o5i=y6L۶- ˲4MEpljj2Mte}A;[$ٶMid6,˂m0Me1˲m4͸bDD5b2EEQ 566N! DTZ{DT$Rc0,*DTðaP( H. u]ֹ\Ni˲RJݸqC !"ؙ _5Ço|H$VǑ17oao~Q/mb󪧧yǂ `Zkܽ{w{OOqg2Msaf Ќq>74@B ~ٳo^ !(0 4}u{hrrR?~\G%5oL$ FFF8f.3ŢaYJV+J%ݽ;N?N۶0 #%q W̱rWZ}|8521]Rl%%Ӝs*E3ƨ|8ZHA@DZ+K)Dh^Ji/I۱|<裧]~wƍyq , ߯QԻQˎ=Ο?/1Df88nyǞjjjN4{,2R&DdXHxZ)W\U+T SZs %Gg9'ι""?<Bpy0aBva4~C)e(Lf1Y-F09wjz}zy)VؔK;" BdgrGn.u#0NLL{7~:000W.B@)ݻW;vLezD^eCq˲0 D"aEWtvv6>3m߾ O "Ckmpy5!/kqT\jVDWTǣ8q,_hv{Rc]]]`ajj C1Ƶ֜ue9aBT9B@)q=`[q\SR! ̌`$:HN~NQ1V(~___J.ycѣ78s۶mk>َ/ "",JnsVKjV~Pw"rƉťCHu]ڰTd2d2 !TT-X5b"Ai=*5V1;HkDRBF &#|__[ \ {o#oLܓ'O[n5 usg?ȡC W#|fdNq[INZ"WH=a1MlWw&sLȽXƊ㎊ SN cY>&lir}cS;IueJWHkhMJ! CDa179a[̍رcact{ 0ItvQ獉 sڹs|3?[&cr'0M'WL@Eh ܃;jIU[a&T6%"!RKHАPIW+R2 4HeYV-4 }Ҏpv?uqD09RZf L6RRǧ(Qun\!o\9۷oJuB):x?$/ laq9a+,(cA<)@"D!B @@Ui|x?ߧ_ν~B4a.g a&9xQ`\q<_ؿE"< yVv,<GkCM7y]Ԗv--k#h}`b_.9/s@` Kޖ-dÇO|ӟSJ鑑dѣG@-%8#<ԧ>u?I"$ 099̧Z7r,yeww1h bL!BtgX!  $xbe[Ez1t ӳP*q(.yXnRp̀( td9gz'?щ'% uy8N7.j;66fYeݻwO%11a:Zé!nd? v{Nx&LmL+++Ơ,]oL2ѥp82==8RJCԩS[]~199H}Tp{CB[ZW(QsB# YC8EЪ[-چ-r d슃ٽ@8kKC燘{K.zU/L AꂱH}l_<Đ=p<,˂Ci|4>zxR<bABS @Tj5 Ӵ`Lӄ8f?)%b1~Vo9F'|gܑEʙ%8cPB kĕ\ě=44Ѐj?>~ {H4rhrMoZo?$~aEV\M }G#x:|.tE5f# [sN ?r? ]L8c<<:OvjHR]6شZX,B)ռ}|GB2gPr}_l۶_1Ơ +"Ʃ)Կ//\"1?Gۊ;ND=:i;~GBmm|;miYi3(F5I7Gq<>hmuxx)!@PjV[Ә߉CCcpɵ֊Pd'eY:T]~K_/T*eY,j>Ge###}aYV})`^_O|bEGreb^'˿*oLD;ף_W_AOSj[]׍x}yׄ&]"kN{^vl[РF(, U:7▃d39R-˂Dڲe˯߿n޼ [[[ѣGu=[yizQ Hƍ1kOqƽccb^nn"pp<=NՉ`֬!ȂYɆM"/ 7"Dȳ<AdK@uwi7іCЕ+W()Ѿ777"{ CPd~Y.:!n76&qMU%2B*OXm4Dp*q ט}s8iݠ4M(s3{W/^89鴬}+L)($O-k!!0u1PD|V},κ(e9>!*unj \vػw߳gO[y188Ul ym, 96:+fqcǎ뺢'k)=NIAZkBZh^{ Bp]-!Q@aÓ8;u2L~0 t*-dQ[.̈́X'bͻMj!'ݻw`yOc(M:g"zww};: 44x=wByכ8y= A5c({d׮])uE__[itt֒16S=b6s^yV=bX!bBަJPuOJ)S>֖B###"Hz@J9Oq4ABbV̮"f 1¼Z#+՚7(kaظe׮] t:s汥("\XSw&6Y<}7D`)eȶmےB^VѼlVJ)UyzT>lxy>&fC  &us˲lii t5meVCA!dWր7mD aX emV*bt=zan+ekV]7S"ĚwLjB970/9VnL#bk6]"00ZwS w?-JJ)(200 ȣ `ᴙKi_bL¼k&0DKKKmk3 # }*.6770 V@kMWѸ/ȻY aN~tkZVZQ+xXzcTd+_^ju;/m;If\e[f׷aS:4i-s0*^-JhE+raZHލy7rlvZAӔdy yljN=5y7bwwjZOOO !Z2hllB4-k6p0\Fͪyl6[oIr/ BP(Ax ʋ6ֶKÄ+bonF@zvJ)5CDeYu]^eAD"a !ڨh%(ni޵"f=z[B04IDA|fggܹsTiEOReYDc7+Xl(a#U6jPW }߿o۶BܲyLar+wB FlM5f+m fҼčOyX~ҥK|>4 e_˲,u[y k\ bM+l1y7MgYJqc0 Ǯ^zEJ*EIeZ!eFK<d E)XV?bҺ^ bp]J`4>oDyannx.Lt:ST6990dBz/!9K/BT/YϢH")Vm2K^bFGG߹zjNk&&&~#60 f:DjAFp/\)Ju @|K7&y3.\8RJۻsi+ֶ+qiP pn̰9Rc 3/iMk(AD|>LOOsΣt:3iR}&Եw"CNiU/66UA+e0ԛW\ '''+@iA! yLE+䐃 eVto&peap֍(6tP>sBPJ)3FՂy}kwm6$ن:ძ. @UvZ7&nE7nxĉz&p2 "F6{" ǐTit/g.A|"GzZ(k^4ivvVMT*gg"wkY CYq>{l]mGj{݀!ΙpXsɆҺk')nՍ=rvئYHIT%E^r]TPxas&_ū0"|f4ޗK@nӍ!R}ԩS/ ͅa騫K:u6 bhhٶ[ZZ֭[{z`rGJq <^2 M|h~Q6zO>/^ 70` ܷ+SX"+"s峘S)ny8iK71&LdWF\s0ȀI&\]qq؏(&IJ-XuZk^cI,a"A S ! aZ^ ۺu+c ۶Ewoo[( J)|xu [kCpi0aK˙0bDLbb%.t &\!DiuKOk'q<ӧO/I\i u&a\N !>`/:po…6*1;>0:/vc+M/`7d\nݪ_-~CxzX`B;B!>u\0 hзm+ nzd;W}V&++@AJBK\9QA)5;|7޸n1 C!ۦ[7^UСC};H8O~޿M]DS6 Kon-%0agA0*FqѸ_ؿ f |#`|߹ RMܩ{ʽ3g{Gզq)a)BakCaPgUfK@ye_@SC㥳g~륗^z0T*۶?~\-B2ܱc](RQ>O}#o܋Jp9L O޳gAͲz=KWAaLᆸ&8f,|VRP_ELʏ4+-5a|-А$+&|?u{bcBT^;N#kL6TZ-%I|U!|x"Ʈ\Enj_o^Z,D잙aEDӽRJ ۶k=#G|M|ѿq#K7LӬ,jT+)a8qt.t.((Q<̇<QLBTl}vU *P!Dy d!| (S\!PlEJ,& ShU _4d٨]Ϭv\Rk#u`e.1*BiJ;JAJ0!Ƨ0200#/W^B-*a9,V<Ӷm;&,J9rdǼvQ88@$%7W'ZKejֺҔS kiYX,A\ƚ[ژ4 Xd!Sp{[sW=%PMx?^7NZm:qTmѭZ4AJJDR0ɢitppgMb|e~>44dtttX\Ƙ umGL[[-✛¨TbZ_{6TzĬ=_KzpTN jH\xz_,BT1P^v[7>oF%m èbius&X`M-$Hb~6kc#JjC'z'?0 s^y!oY ߱cmJ)MιՕy۶m! VF,Z_ub1ٖ"C|OLWfuRmkJkޑ:&+,%If |ߧxم*Xk3Y־lFؑFS[cY` @if0!:J)kZ2O͜8yQKiI2|s󘙚 &$ 7xmbbbbdd$+(@)8p@;v쎽g[LCiL& 4 Ƙ `vww\4T*ڱc݉DbW"iFJ)t-z'Ԓ{k2mW,UY&` GD9"':+i祔9)eV)q!ФJ)JS1cͬu44%`P" HBF e"Lm0|>oeļeYSJyB}y9{жXV?bC躿_F8OLLa0 ťK.744qu]1յҥKcssT*Em8d&,˂m0 Xl p-D);;sBYƘGDRSJyR0,bQJY}~6rBd 0B-TBAqU*SBA]zUeYBanh&P<lllb&]@9e~OצMLJa^ggZZZ즦&q4:zZH)KS, Dm( !` NJHk o]p'O3330|ι | 핧N'3+r\Yklǎ,˱ =c maȣ(MMM^|/ "-eRV^qc2 ZS{HJZx3"êR rccc._k}c"`aU;wN i+~,͂ `a(bL0ag8348g۶[5!PT@;ݎڄ|[L/_cfff(Tmi3==-yMN6M4VN.r\~vvv~ffaa833r`~~>,KyR2"dd.S}}}رc^|W~TUI@x \R&rmD}r.mS)Ld!D*|@}M+"݀sw !RU=弧NXjӆgc2rqDccd (q8<2MSac}](d2Ԏ:uԚ6ƪɭ ?~|X ͻb-"5|-I۶nm)R^Z)]Q4 Mq600, "Jd2IL&2 ;wR5}Oˆ7l$pen.9y(5=ɊBd2t1Uﺯ|!Zk4M׶mDQmszz}{g: Kܻny7,RQ|>0 ' |gW6IïȻA`DPD4:z'pöQ-`_9IENDB`DustRacing2D-2.0.5/data/images/carNormalMap.png000066400000000000000000000450531360473665400212340ustar00rootroot00000000000000PNG  IHDR]m pHYs+ IDATxۮ$92wk$tSt+-{*sE8I3]2+8 y!kÝN4@]ή] ۿ / WZՑ c8 Gps P|?YCl^|{?}Z3$CPd][A<{<d忸k8bFcp; \nw 0O,;CqٷOtpcTk^p>G\(y pgcww4E2PZM͔ ^ w\&{܊3cőpui/ƨ087?й`찿|Pв#5gHz e$vԄO ~MV|8;@W34=ϻQف &Ch(;UN'&l3e}r,;<n!^p!\ 2t4:=?PÑ*Wa\ ݕm/; ek ^:u]q1jW:RFt $Fyolj898#Z8JJvXP,!<K_yfϿcJ[%[GN}}GXfaseeCh9{ 9!c2 4en@16 k,^6 d)m%])4JqW^h(3V)V2xw.RP?qaQqn &\=^+T 19C]u:Pɇ7}ϓ{!u)i|$gO99ŽxP;QPfی5%aKJ-)=K  PS@]IA9<۩ ~BKw)ݔ^xg(jLNwԏ@.NQj!Z ,;4Yr%#5;&g~~9J $ I5>o ~:!ftOpߴl%<;'hcJ MqOɺ3GoGyRpOpJuTg(FK8O: RuZ+Lvn{Ed{许:[wv:ĸˠWclƥ:a/Mh6qt: (/(g'^uqoSv'w%`| yM_'L=Q5cb&(-Umi+O)KEe$aڙ]-M='h%i|96SVI OjҙW.|ڞO M!"oΖ}hVîw9ԛk04m3x;B -;㒍5BlK&ă tES%ፇ/xJ+OqHȃl8_(1/>e[Ϥbsz5*'f'׮iFrNΔt݆SLs9$ 05_/‚KA+-= GsKFq\u^n`/h ב|٨^9cKw"2$IO?My˃0C,M&HN%j2w½3v0H'9np9&dMfShUIboa,h I]B+oI)e_)kَy%}Yw^P851 ۡ}||GŅA.3+F)Pn uFA1؜-;-iy I"/ٰi} {>1+09/13xwgI<ھ%Y @|Ƀy;|aiz"JNݘRw0ᦜc4AOL1V n1~g}>_L O*]AyQ2m:/|-w6Qy? ju*࣠AjCKO?MvI?5.gz%Πj'J ysx>}OMaa3Qq4כϰܧqλc8!}!ksZzvwb|BIG۩JxkpRaϏa\i[Ji{ ;T.(J{K `h P:FڄM ӫ.]?|4σO%/IYG8|ΌMgGLWwe)1~q(OPG#OgL9'M c4Zr(X,ʚ,@ \Mpn:popcLrVAp)ut,!c^c4gZwrès fx6:t?ly0'=;itgz)BOk}y\]\ gG¨lHZ*LK4陿#BӠld:GMlWC%2'g-(/L7:Rtߞ"&?:)l jg+eh=;6]\ |: Yg(͓""TQ?S<+vJhcn9 Np@D? UšA]Y3Աr@}9s!=#G@+ 8 Nu^^eOժʌލn/XlA vqA+i\0v:/U EDA$>3b7 V.9 qM }y3ݿ  76lm-dTfIR \%ZAIV1P$#E[$Wh%J<:7&]1$[Vܡ<,STNY_Ӓ;O9/jr[g$ x)N^C3z.3>Ws`P q m0vGZz 3ZF XjFu h?E׫S%$8*εs 8||qދPwC藙7HBS C@q^oTV~Ap$L MR0LKtiRH9kwCh& IN`%zpk* VI>7?A:|u`؉#+kpDŧ#jLh ߪc; ;K\8V ۤ1=Tk{*87%5YQFE)PPΦptM/ ۈe۫;Cv ic͡8ۿ; R"br{IFg{R3G ,*+;ΗҹmmN «pQH%n9_o B.A=ǥ8M- BgBWwx9֜у P,1P4am\zCTR3g;E5/^ qX,GRx j:7-#^bV4!{Ыs^Ŀhwu()b4̧IL'd+H vI'yt[P < !go'NLLDNK>Y2N^y$$WJWIsd'urd R{NRU䄕tqd}%}}ѐ|/h,'tn-k#D1qJIH4P/c0:FWȻFp T -` 2˲ Gl %pBs/wKweJP*QTл֕(\zAuB"k  I*1P56BzJe H29xцɇKf弙>1GYs2=;ץQ@Ԍl&Soyf#[s$r̯)mpHS&ZhUHt!K,%#OuAD+X7j l:(Ȓqkv-N妔HS;@j=%ui nWIfӘFM^A[4.l%%HF,{DD"#WguXZ`s))ex=GRNYO>9>!~ 2e$ ; b>B*+12%PX#ΕN?YM8zgV&x6EDa2j¸R98"A?|I!&PFS#Lx>ݫGI"Bp2gKІ^A"N1F,Qk&(wcALš,I@P=Xg܃z1D+n(pN =(d)''Q~9_:MGedO'u=؉4cvf RI\! \0# pn]+7]Zǒ@)8idȜ n]D4{qL 7^2bA4D+?C[fYᚔ$?YP]Tz>r$FZk0kJa'l^-V 4iyFrxE:Hd6iy&O5&G}?90,{<~s#vјz=ҥ#,9Y.9iĥ4Iޙ}v~fLr6_L&l$(m%s;} &~MY\xքbp(DpEmʅC䟙Kˀ?}6$>eЧ1?~Z9Ѽ:ڂ>(gЅb#E-|8HK%35paLt7vKHM"K1*-y<0OR B R$DejbCL𮡦dLzpf><`=/>K(IH' )BN ̏3i3T1@ e (p%+vڔ}8^c Ӱ7|%bQ| ddgPaI${FL!˪ſȮh%9}Pr$޸:|X__McϧLpr1'#׫ όF|eڜ-H~߾ (5X=%Fl!HD-6E,ky):>#$RW񔸳%hՙQ"\8פ_w|<髷g-qvϯYoN'۲@lA#ꈠUߕR0DŨfuX;vQW.shgUVB=uBW*h-%tUlv'Kz+9z9P~拠^_?~%pS'Ge(c.!#ʌ [m.i[q_Fbf$jF.ٷO?=/"),GYe a(_IZ6B_T ?D*OOKNIk|XI828fdTۍ&2=hez"g*´'R]vKيM&[? |D3~.Ͼxhx{ x#+*e\1-+RKN҇iyKVKϑ'<,u!9=z޺×7>W _v-?w=hH ̛AAwY6xwJ\&3ٌu]#up2Z?ڇy.Iwg02XZeP9d;K hK`xZ}\/o52o Kvy|I*}QZFO=~{z%~mP=1FQ6gg_@Z^aM: C?_ %Ƿ,2#Ţ=:KC-W X E ˑ3r`pv?75b1FP n_F&}6tH5,pÎon-|N̳Nk`F>J&Xf/4>ZJR'Lc̛9{%#9;~0`mǝ6ȉ̛N)\eLg//6zBI HN?=:?S G?:x߉=F;*˯GMٸQS-O? Mm| xđdHK$< nX7L<`?Bx$$Fܳz晈{3AO~F}|o[%emj( k D5Su{nUu"v_IU`_zwOgMU[@r=c}'kHi_dvͿsb;>P_:~>~n~ iD<jNcчnQb Ny?>@9.aXL=5-5<Û9?)(Nc)Lb'[Y'A28n,r1`-<%pw, +LٰU^?oŸ~)TO5h<}&p'ǗnF~&ߟϛHl$U ><' Yx4`s[T9)iVt3T"_N:݊=t]k\Ęir '#sgiMv`1gzߊ_NL_![o}W 2|m(#D;QR6ehhDJr> WzH ZQ ǯfq5`V^Ug!ς^+yFk<׃曃V'"|8^f'>6QD3FFxPx}A@oqjGGv`Ԓ6-h_́9@{|Y\9f0E?x K^ޒ fKf['ۏY޾f;[~uXOKBH>Bzx$纎T2$\ JޜZ,Ķ 3xѲqsE+MƳsffk6J_rfG@=cs/|q8yT&LvrkUaLXdI .9i=kK<_NOڼ-%og-;;{Tn8xtf\xJے:}n>[29h\6F4bJ<, k ^)&Exgck={e{D~l"G7Diph(g0XU-_f2C <$֐nyCHpPbe-6WڠQpu3j~/I-!n[M- 1gm~E}A<摠<qqc&CER?8!\O4ߠvo}[^9O&sZZ/'-;>몝cv#6IFy\IّTx80ԝBCl {A! K(1)es[]?TRl0K\bkwbf.>[x*gn&9z4Nngg[_4&9>x $m{C"E]dnpcmgEqcB'o ?_B6(6%a!uP%˟U!4n΋D/'M-pjJfNv0tWC+T' ݒ2L ^^,:Q+xim<-%:}F+=n1p,-'WljǤG?=|v:&'}>dqq/H ~xJL E<_ yʲfuk/#Ni+.xzI5%)U$Ԭ[񔠒FŜ͂WHwt[ؠgahtbv0aA+^>dmx.]$љOk2V.9̗=ֵVsK8 c-)-g'Lp_Z%~(|Hr}>#U A3r23Lع%նpmFLr:X$YקUb;܆niќt8#Ő4<8ո-V, t |~HHdb&ŌdșTA!{R"^~v=TVg72#| _ aRfzCliεF=0GjcK?gDA] |#v+rg{qlSNjci>cڈE=ya7Q܁Cs߃j[FbJI _oyz~:B;Yn5#$2]Q `aJH&T~1{Y Gs}˽[x96TupdޔkK Zvk!)^Yo8bhU-w)tm`)]?hL3+w IsBIx#&iѧ_QAߌл~YB qZPahҋñOsNi.=?!w}L_-52/B8UZ:06{ӟ{noNi%TUs/--KsB?!J>W 9o_!*>VxL,xo91[N[7ёAwz1kQ.f_*MBo0Ҁ;̭9SA6Br 2UMJ (L%vb'؊P?ז!g͸ȒLpj8v IgPz_iO\*LOμ':l.ţxL!"iؒVa=@T<ۀ{mxFwͽ,CYȍ|UܹM=qvXʰiQSt XKBr%<3,pq5zBk !3nr3},0&p24췎 N;ϑ➹ -͒PxiStJ8Jp|j5}dt,<: h3, f.T2<9cI*B7(Ђ3z^tѩ:[RKl#@'-:>" )KW(BXS"!q2o7v)]#1Y{W[;Թc\sZ䱷Ν md}!) .S\em27RQAJդSmA%FE貏+mqրMxTû`(wSf̿eAn%K/ݣpmZΆPͨ ?:RvlO^n!8XГ [$+gh |@wnNmx@.n=~)I# 5$(!Pc1g bh-{CUsL`]fžɬ4ͣ;%jZ8Lg3!]4O\˟GGNrA%fyFDKc̆ m,j5q0 -^)U|MҨdO cV3}.R36ܩ%2 *Cb1d#"J4/B鱱 6w%8S|P<ğ<SY)&><<d_k0M&o) ,o :4/lTb M#DBkVc,) )bيEjzKtNKC Aao11H/EǤFxLVHX-茑qY, {.EH5m.RtQnZKaP?{9#Cc9m ލnenS%eEiY؆Rǜ`Ǡ2lXwpu0i%&B 3i7;({6 [3oը|{5{PG88v)==F QsiJ({&5`DM:\JIb#0wm0*]KzFvM4$7pM$DosPáU>҇xag/:88Hk#$sp9Bz\ǻVS!oDc-{ <{~ٿwRyxDȄ4L:؁z-4۫gIL 4=VX.רǕ V YD=MA5 81)֏M>ӖCJ?:?tgL4vːs qry9;~b|O:tNw)f|ĸ%ltO9x*3X9˞./"^d8ޞOLcP1-:&XhYL* P$t69ə$QULFi"l :5JSA-Bn~i?m6t2Fn4 oF'6 dcs[15cY=}#L0rogU|llzSlF/aytTl5tv؈a^e#bۓDxD"~9Ʈ{}.`qj{4/$6 /A+Ȋʸ&ȣ͹P*msz,6s:(-ke~T֭2JSg@e ؏٩4n {ˬw-_%hx<{Ȣ8YuTsZ̙gűř[Ca:/4:( Qn~5)\dn;:_xfmIf;PΡ_o=#\6w?(m?}O:j,9/wIfKTQѸ ۤlC \MnHj5 qPNYQJ-|L٥E CHI,9)%6/eS&2h4A] K{$ ~J`?91Pcu Z ;ҎH. |7JÝNugW4ɮ3 H(fCq<ғtdF$q^oJ2&''e+ ҬXP^7&?AY;mV"{IYi܄FIF,eUj۰- 6'Rï626ٰŚV3y(յ9W_/6U<_a}{o*!g|hW2}:52I@X{o`vlݛ;M 0=4|D ŘHu\["˜GQsnJrͱjuw\矗hwy @3M5}A07"kVSjUMMMn6ZK3RJ:mq]:ij8{VrAn$o_yĉE޽6Muܹ-̼siv?W Ƙ u@ǩMo۶-|Ν;V}x(Ү4M@@`uAJx&K?Ibu2V*k-w;Q~~X,7DD\%I_/lݻ) C㘞5Sw밸>u|X=]Viz(Z#eqeJ6\(Ԋq0@V#\NP4zNv_|l|*-ui$InZGKڮJ@OMM (fv: 7Sٝ`)xuٲri $ >c (X>tYp  _&@ D@+Vƈ4-`FCFlMk2q4I6m6DzU,N[D G!C$@P(QP;e9%걍[A{A+G~@zd]~,_u;f^yU*Vv:EygoNH"D$J"Y1I >w ;va~*KQQCS$O "ԫ'ʴYVp/@ HA'Tb{]}k-H 3]:Ku{\wg9QD{I岹SI^"Ç_)N#?ov ?y< $Y54I+"ʉ{-a/KڕRwY .#'$\Cd=|`YdD9WI$>uUuYA`d;0WBXYIY*PGԌ(fR 7Sġ'!ޓa0#5&M  KtaW_}K'/8 =v+;wt1Ef.*zo,"ɇl;vT0 kJ[<]y|\~~+ya~ܵD,,kI#ǵ*la,BM i~N}#o묍K.)oοSQk(BK?~ o qOds6YI MQfNم3ovIDЩT*1+%nrfggTq[O/춢is14BUL !W_ at-S5ƅ>R]Mȥ$~?Sb0))1  A + `aI`!`ʎ%{j-ZҧayjV-=KW&~>Q`y<VPZuIl]5"BLj:̜>48}+4M[") gmNN<岯*Xk*>K`@O pjPr ^ YhE)Һ:^3v,""ct ڎU%@2rUDGD1"m*(?vϡ5#$D R%HEfدT;V|{0הJ'JuK|5946Fp #rz9PQ.H;~*w^9\_iR"ѣG9E~S:tHijcL~r 5l || 0FcCV yKR-hJ1l!L!\$WL(7!,}JO2IjHw[Xb~{`4vmEfܤWk.%Tn`X8sG;L 7'H9xq}D4M/N=낓Wt80,|d-5hEMI!S/u-\ 6mYċ;gH~cZمW~dF-v'7hgZ<)L_ޏR#׻sN{67SixN Dk' k-OMMqZÇu>t%/;wNAFQ<;^.~[ Հ0 (#! ]o]ѣ7^#u1pz˥; WfMg>8;=+c(= %9&} Y!kT( Ͼ8H\<|Ŀ򕋭bўj{Ւy]Տ>SqGR#C@Q } ɺ:mb?wv ><n||z JNXV8 \# K1~WAP. `H`iÆ!Lpq l]®ׁ:1…Vo΅W@FP T; ?xs-sQFGGj9roD^MMMAvǽw֣LǵDQ&_?{oP {S 1Y8ֆX3YGYsK翟=쫗*VXxxA?4lG|zo΢Im$H <(>DZJv8H4hh٭UQ`8emOd̞6jוc("oppZp'Rx )Bcc.3++ —WWVW7W0w㦊=Q{xt.CsM7z4fl6Dpb$`\݂\݂ ך€BO㥃>KR50sB[hAT:$#!(X`jKr9}N|59|0MMMQEZQlD%Dlrp; GU䚿  4P .kF0`oOԞy}ChuﻸiHa$ѥ<02; %sXe6!8\D)u߿zx9 dfy%C0L`#`Om+OMėt):5;;kon>{ VéjngY٥PAuo!RmTN-\>::¢ltI[>_SMR]x߈X|ha_NÖȃC.a~̠`l1U1tЁ*GSU 7)S8`8[udv:Q3|&ܹs גN$k-=Hc@?K]"$#E<뵊  E5u^Ob%(XX'Ƿ`[t/Fbpa4PN3+]Eۧxu2X&C Ev}f"F7 6y PMZ5,"?@ᯮt2::j>kIߞλX.U#e$3El}|c &{g33Z40KKK֭[>=2| tuX4tZQxsТK`0::~a-!n3;;;=b Q8XolHoI:wS Zp>ՄFT1m^of3+}3OUDJ@? fS2́>+9R~dk=~`❑ƒ~*m;F #o;E*Õ]eFJPлw9> mZHY9χ%Hِ׭,Pt<‚ӾƑң;^ST'l]t' K#=\- ޳guѣ2==-lBw# [fhֿdȦUBy5J:߂ rsʺvt7`N[+YԗeqʙYk!ݭ &͡o~q@tǷ:+uVq1ЩSr4Un7@)̖ : m_@M`RYH'/,KibUj*{'˚21"ְyh KXSĴbOh߬ jC"o ^ Pv[wC:vy<&W7a!Vᓵ-P'&=&؟KPDPyqn_]Zqj[DīI \ea.Wr>ݠ~BJԒMn,%l* A{Im@,fYkjM<7#t_l{WM@$V* ԨFGGV-[ڞǑ5-I޻ԍIp?\m&a]_o vbL SKYEH%k|$jmbe l{#@|[2??/jUzͻ28KPK_mFW x%V!Ȣ.SYx/i_Th_늈Zb/݀m O:c7a'ZI8nӂ8aR]{C7QGozb}{}!b%{\1,!X#XHJ=B @,cJheΛ(5uf:%tyR{]Yȶ ݄ [̧)'VKĉҋUV*zi yS,'9 ܻ6/!M}'Ȉ+ XLBNBo|gk!OWWYwKm'(>2u){o9Z-T*@z\<"\SL븱6Kl,n@^qY]ϐ KD&S|czKCFLMh}jkā'u%(rӡ;VwߌWRW`J+Y*LRrMj%IB RB]?6Fd-pf($jEAsXNzȣoYfMfd,@j3PԞZHqz)m2^xAߦˆI@Dt~bQm+y܇["54J4ҽFWeZlIf6w1KYIDAT@5MJӔH7yi7Ybx#?{*(ؿa&͂,%duZ}uR*T*\V{$pZKq.p*~ox7 pնBxbw%uyM y;}w3*@h_mٯ=6ZGUFYBWk7i:хtZX5҆UX Enz+`Xr}t:1Ƙj5@\Vd]I-E2׺BRָ6Rw39@. ݼֆeM,XH?ŅٵTXGڷmE Hk u,ݳ+(WR71FVF=3ql#GH*yvh"[S<6`ޘ_݀)S{1mPnJzR@`-o$|l&9qlӋEKj!b\#ir/ &Qظ2`J#.x1v0E)Y`B@]7e2VdH)6 {ȑkėd Uj{xnʐ =w 3ud|_/UqAw$Fldm${)jAX3]^5iS3xtӪ}Y}#}}{Ov7[A.u44XKߚ|BPH8p8qbNR4MsK'heD1nʰg; muW R<1S֝B"(#/Ju<.;w}? Cs{ W[%=\,t/ #vG!2P+3jS>x'=xx&܃; , ԅ0Lm/FoLZX)FQd֒@.y]וŘk)>Tt[NB+Bb!ܡ 8Qx8÷ӈpgz4~g1];C.s/ V(h .`YhNJ]c :لj%8; vrA<%1P<|~d e`˂2.y;Q~j}KkN$b_䵈 ܹH%CB|X'Vkdu #Y Ae ts[pTCn/;P?x?vẒt)=w{ڮ\b lqG8(I:^s[c+^@}k/xm}Ccߊ7;;7S>- B TAȂ4E/ͱ;Q@n''Ok+ :tȉ3G~x=ZzŒ$I)B8poh~]UuoEQ">y q<{*g/=/F\^?c5Jxnf75']dy*(˻Zxex A[ߺ?A)2q*8?rvX#(pK%)@, )1H6l!M 2J"3i]F;aD)3M'j_^A=z^O9y'''3g;v'w:UGES8(<=xc G>5!@Q0n>txj]QLoo?y=L7>?Fd<,j>43ݭ&I_(}"g6qr'(Ⱦ}(>YAeth\ŋ1-,Nʈb;_''fƘnr1ൠE??OvJRJ<2(QװR2ðoFo 7V01U-ƒ#8`§/9n[c|괃/$i[K ]p]ٜvT1jo7plnܛVQ$SO#8Alqv!PY:RR;tNb]-87_1 c{/N 0 Ǐߔ@nmjͦZG߸b~rƥ"JHl4$ pE#̡ڻZ<l_7 ^0ZOL1R͘@Q<6/opSKl 6Vژ.Ds0,l=oeF xs{1ߑݳw^p]GC1D[6I#c$i5Tb/t/k/ $Idǎkt׬W/::t萎/eTN[xIH =T*rF } mRLB5\Nj8esAбE-7kGVH}}~ra};Q4kd#zuC]·&~}cy>G!Z03$FLjf^@x5~kW:{8N3V\֣箨Cy pr{d']^HAN^Mcp90ݦYu- .B\*w^+BBBy?AX0 :hwd2|=^*~% p', ϝލpbvݡ_uʝYr;в_b/RQ,)TLG&ie9$[c`q!t0s4対S3̺y^ 4uKFDxbbc>_S?N*݃*N&A" W-gzs`u!pպ®VZEX\ΤoDZh;杓^ :Vh>e瀾Nks#P* O(d^m_FᗊK \,Y0"#I9\>qsi~{3Yݖ9$IJ=z77 #c&}DQ$G/vN_K/?vDXE*ؘ*e9K]K^_#Rb}kG\z+x5 AW?[kg(R ,/cܱYz΂e9r݈L %,g<eeilr$pXó ؁*A,uOpQU{W+9]KTy5ARYkLaƠhbh_Ʈڷߝ۟9R#V)+^uk,"D… m6`Mz(\߿?*75&_Xn$%{CYwXJ<t m۟?}~ertBA3wY`m/U: .@rR@i( tu D Hn]P'AvU9GQQ!h>Ƙ$L+΅C^xrϰ%WYbG" xY z0G+/ k^I> e答]J9̛:mԿjo"ICB@iB?>'ȟxAr7E5қ#fN9kי )g,,K5(IP^>2fρ{QZXku"ceHm oBc?'9~5&wL}ߏ㉉;".p*ę3g2;w4_l$o-,M ?hɣGy8"Q?겱;X&u\Mҵǯy~YuܲdyT'<񤛀F@ķ(ɇq+HM@5hHPB(%Jw.Z3ؘ7'~xGP;77HЊ5c)VT8UU̢$[\9#eSFnE椹l ~I2AA9pa3FKs/5bR't4(J}YsȑYX/h=w-RT*9:Dp{F VJ쩇K.s0ZiԛTH&>KUayBѕ+K^,+DS!дV 4M jX8z G)[I#96I5B9-[bk'>;>Ł(*Ju],,,L->~P\TI V Ղ{W? hȰh(#Lf dRͱOapF1 M-RL#K\c¨[g_wu5< 9ֆZ$"s ;]U 4SSS:xppPAk;$iw\4컁W-x ?uy < %_|WV8R=M|1LI( )4R%E%!@mB"uc;FT۲tRA'JNdQXh(X c!l٦`· ,mm.^ZǑntCueffFq{ȧ~fYRJi/[Md!ؾ};%IBc {%d (l/agmJebɬ'V@($pl(M3v=}Js_yN=vZ 8N((nfbb;vԄXyrIh޽l6ivvV0 P(jŪJViTCu٫QsrR$^tJҹMw&"cERb20жBNw?9[qXM0p l fac^l[f=^HbN%YMDufffqqGQ D奇ݦ8[]-k{ɇi!Z .\$]K3hجS~ImK?Ց r3'Jsi1VX@Lh2#!bfdO^^>Y3gkm1I1%IċfttԞ8q^paH-xfjqL$"47-UVg8Jm 塅^NCKKK+]$&a~qyuA~_\׭ӛPJADYlBggfH?mgvG8:i*X_ܡRZFA*hDi؈5|') Yh񢑸Z(jU9Z+~73|GfaEE?uO덚79;$<Ϧij[(J$qy@;$pgnEѴ,XkYk_|mVѿCQIENDB`DustRacing2D-2.0.5/data/images/carPink.png000066400000000000000000000314531360473665400202460ustar00rootroot00000000000000PNG  IHDR]mbKGD pHYs ) )/"tIME $2 IDATxy|\u&{o^6HI J$Zvd'^Bc'g2IM9/e؉'v&32K<:Jlɶl+2Ȓ(QDD\Al,VUgX"TFU_}թ:3ղ2ʃ>1);1ԟW[f"^mSnu?bYַnZj)+ͬWaK&EoooԩSC>cPg>w`pp麖雗a:^QR+DGcap`Æ R*x ޽{)QX$iÆ u[>}4t,۷l~%zJwgf=W, t:fs^-^&>.T`$J<@ ={\.g٬fLD\k^({:08(rD< C#u]j-j }-ˊ\ ;:: ض8@,={ٳkA0_XEvsX T**J!/J۶\goMt)qhr||eĉH9h)M=BUT"uĄ͛R.s`Ϟ=X,Ԕb(|TJA P ؅ nQJ1f'5:͹"Dqɑ64(Ii((cذiY?KRʿ_]@,H)<!K)YJɥRز,, ϳmn7뮻=Q;w{wźD3ZOO<&&&dֶ҆ݷŭ71`(ɀa$X3*_*በቓ>s,Bf2m;4ƨ0 ͛;}RHKpw߿_r9fĄRHZdҲ,)ZkAQd]Xw}:lmKeLB&fp Wpb&W8p-i#lBL 3`Ȱ1 m440hI'>2* S1YW1eæeeŪ*c#ѩ~vZʶMf۶͹\RJnf:ss]wv܉D"Ѹω J(R8~뺁mQXW:p+DOOl۶3l6Y6`_߳s͍];vw)'+.D - iu: ׯmD ѐ(Ga Mހ ژ<30(55Q6T4??3KEE}-O~r+n:rCCC??Z?nR0 źTn\#uCGT5v[Z7 1s\M k(a0 pe&~6Qm"Q`B$& < S_{fȈ"0Zk/r9 Tm"@^51>>.ɤdcqiO&7߾&1]q !tjn 9k3h륌tYp̬DT "F10 8o <+\0res|}qwӦMىQg K,db%ZIb Hap0!* XP ;Y^;RBH40C)151H)9qGݷO<>Ȓ}"QE)ڿ 5Ҟ={D<A8aƤRʽww=7;y%:`Z̈́*k :k@? ;Dxf:>3U֟O%_thBo\_c{.nulv N8$YWoM6]wnaؙ $$ 8Cu}t5_'``Z)HT0v&1$'#sG?c?zJAPNѕsށ8y^̶m6x۶sGV|) "@Ʃ5(wVMӍ йYgbY6646`Z7k ah|(PHV,E2w4a3X[Z 0 P@8MHm> À1 c4RPZ# C^s#ȝAzW64DDe)e}_k bbȑRX,N&:~q>&~xSxjX҆%$$_Qnaiv.PBf413ٔLjf3Pt4aכVׯ 1͞"o !˦z[$&pYO ٘Z$B ͏`I˩GX`PVNnkb)[rWODŽBJ):;;~ڵK0Lڶ7$]߻ w\yBn#D#ƌ(Ӄ;` :kS!yqE֕5VFO̖3 بw^iԄL2]ftT͐ͯOK_C=}]@feJEPB CrXM>}}4%۶KD`׮]z߾} L5au􇶿mӧI1A FHD rŵ\8? ,1JsY@p0"BPUP+(eb*WQr*(#"xV_l"!<am46Oel\fr동/%8wv @fIG@Jd)eCZ1eI$q9q3n5czɥÇ%يf[aIԇ'gNwZ`}#=9c0Yjzm&,7m CS%N2Q.Mu+ 6 *Vn܍!){Ć?:<2 OMMS+ '8I X$8.}6c9C2dp,vua,SF,u R.:wY`ћ}rxEmߗ3m=16q=l׽7@HTAmgAB ΀lOt;~}J)e\5Q@x) ʞ+Ξ=hot{:<"I A X "xVA@Fo^}PX2?w̃GzY͕(m}kѵem7wZB̽aѨ Ƚpމ12(bmN;xJ)bX~%N!Y\_Og(D$\I&@9ݍ^Ck#oC!K dG{/m/,\183uටjwk+ښZi @P%QɃW, ]si2,6pJE[suT;A&rAov=WwbH@,IAPJy7D,膈,<^Zw Ѓg7í8Wx`{?xҤ2'W{}2AjQz{'_~rͳ8~ K8z? \zIA LF,Ѐb 8@LADTO=?<`\p؈mX,:Qnxx艞6!A)C}K wBOC9L?Uc@Y_y+^J<`+^.l?>Ļq wVw''q: =]܅ُ=¬uɴYu{be_|[xvu@%N I}?֖xRsoƾD;wAĒx% C7"3! vD۰[pE:_PBX7CO /l _y#Sˁ>t%1_9+ T(tg(|޿曣ه->+v1dQU.Hr Qx@C<}dD fNd- nubwם߶ ۆn?}7|= *"|Xje[#aTs+[~'}SM6!] `A@mH+@HxwkުN+7 c8~mSNw;* %ղ+ĔwΓ7qx'\m30UXwȵ16`p.<ؓ8pQDUB$ yd_ͼ5;=t#AtZݻlݺb6gNJ~e Uw75bKhW? Nȓ0<+y'E̟eo/-:+zWAowTzYt;`ٲGY_c·p*vgY[}ŧl0~n;dVjT=P$,‚2!{OMCA .V qޛ9j'X .`2/j.{anxF]bbKe k xׇ>A+ja0]~ZA[† y?~\h>nP:bms@IW] tF(SeߨƋQEalWz~ӯ8x~}zv[.K-m8S 7vn7҉0 cϟ\ phJl4 "zi]tvg׎8B c @%6MIͿg!N;N˽{Ί Ԁ%$ ?sulY ~g}b1h⸱`|eL) f, ЎM[L*\.gX]1@Jmbmi<cbn,= 6hS `Wd-$ڂN@$q]B׶mkjjjh.޶e1ҝOKr(|o;nWT:H%Q^:,=1̔MÕ2FDv[[ܳgSBEM:xm0`tNX'ldsI_ފoꑊUA I{خZ `OH(zp{a^t#3Ơʂ`5 etZebŭ=;ߘv\.˚h*@-,R5L|1W0f/\[g ^^~.Uv2嶽AZ#٬jBHț+6lZJ,W\>V .f/w*UZUAMD5!U.EsDSԣ1NAAT1KM޴%a#W JPu`ŷ,Q[ռ\8x\rƦF3ME"(.^Jhq:>$ j桰O媲93Sm[ѐD5/t:ͅB=cEt@,^ nAskdqh aRu@M;[:}ߗAO'ϋ&oQbKc4_M,\l+iu)hd]2ؾs:XLT]tH=ӴhJ3/#%3ZX\UmVgzx,@@q[Pcj`[w"0- -#AJKo]TCaU3HΚ U5p6eq8 4qca Ad7%W-/?Y}mWt cGhcR[̱"zGLgp$eVgJ4OB窄d\ciȚX, ؀K-1mNJh-HXQn1m5^usZB(֚ꖈZ<`*)~b 8ђ003[` Lj׍DI=JP**۷x)̇xOh$j[I(+*[W`Rn+ny4888G8 ΂KrfÙ&<&|e5"1ZKi/ .E^vDQˡRǔ1fbLyoh*IL/m-lbh,+w* EjW ̑\*8}7m YtVna[-޻҇_I^z#iNS/PEQ(HaP bҙVjUovd9@e-Ðz:6|p!["^.E FF u0*EĖe5 `::f^ Bg 5Y.EKq60)q*-k-ji0ڮmkij59%buzd+*Z?4#ebhtnSmmu%s"k ;aJ,? %3mLmSu|h\Vms6pXJ9:[sтrpB>qӥh%x5I2e4\.ຮNӍP3"G8ؠq# XXB8,z]īj0 +_x8 ( C](} Ťx E!U/jql*gUUU d<;bU+ȰIl#u"^Wju)r!~r僗×i6PkLGG>oQLFo޼1L[!_é.Z"N zH\74ZR^|Ul#3ƼhhcOŇRRJr9Q%jخ5;-84 R⊳UX-8-A^|ųo]:h. H؋ d2qS{OH G'Q`^j]\5nIyY Pl  D/>:~3Gu+"@VxYxCF"\5޳$XթX:$W8\c^e"AsU>\L} 3GSSSnm`9Iؗ&O ɳm;BDleIud;~(?,v(q3+'#֏gЖ>?R6">Jx9~mY3ʑFhAs3Wg=zx_Rty$;y'E7Z[@Wy3V83':X? Y+f 8›30v <'۷Ԕ eSȹ6I"cY^ނo{]tG>uÝj zKNuGWA- .్}xeajE)Is|໰%n"IgꢉHw&ۖjTǑ`bӬ>ސ|Tl"(cFG<>n\.{J)޽{E. HQǿ_\s+EIp!/DF}>.=WYi}E5_e_o&GOohZ# Nl' `0",c[">;!w gn T(/@PZR@fB}L 1DJ*5+֥o=tpʲrTU/fR+H\~K۵I$ # A68^U`lMijsr }.d<2#Wt}y+ % S' vgйubt-riyqnijw(pf;JOPԡv(~6wQm0ٳGEQ׼QV@$$aC"B`ALgdS~هZ@oč/n'p+/?q,>?WGSopUlEkS.[7@ 5j,5٪DTb|.<cDF32EQ @%N7̼`5 -ubBڎwuʉ1H8I X pǀTxÏR)ilȯ| zv,Yq%4 fGOV\$ Yg݆DW%7B品38rcM8ꊴS.@GT }'&pyaƃ>/ySQuꅤC k7J{A޾[9 1Ĩ*'[uA_N]y0groxgG.OZ]KD_/Y7o!,|^P9%xzt-sM.f R,䁟"`_m8N9ѽ ()e¶3}/lwDh!j&6m-Ue38y';qsc-NR 0 `N"ߘaߗ>#[:݆Ͷz4n"kZff[^?iYw\ 1BN>=Ӭ&|濿pGETɲrgggJbtnqR&\MQnoWD6 %ZvEHwK@i SnQ3 *djמ C9TP=2ʖl{(Tl'@Ez BV÷"%:6lG{zsK7ͩ[ TOV4 T 7CH!|c1vb]'1K~DD hs'2LDصk>|pFE C?cm};+ !<laU4 AiC{^:/mY]7oVY {RJ;Lă ۰:~4nnXЌ 3A\uilgkص<9, &ml=fj4f_z fSON<{i(ôY y4ˉfW0f4J@5v_,!k}%4pV: )  ̀pYSa6C)Enm{ksO R %uZKȵe`Tkgc=fL&=ѥ.sq.LFNLLX6YZkm"\ o*KJHwc9L⋯˻Ϲ7 ɖu})H0jap)mt+4̔a==)*d1,GÉSSJR~l6kD>Q(pQggkz?5qך6ݳuNg_ܖݛlaѢ^9f`4g2@W( DA? qBH`"(|_駏ac̞1s'!U;hCCCbjjJIue\RJKaY%0IXKoH'ɸ7q+1i#&l‚#rM-dzg,.a e C9U$P T1 f]VZuqI*WTX,Wg[֟^q",ԧ:z`h6RH&| gϞmc25?ҙJ|>m1Bhb!@TJvN0"_f{7nqZX0"OZ4C:;v 菊⣮J w'vv2kae%nJr!ca04u*hmZ)1#jooP(l6k{9sر+˒9DFq;יmڶ=Md2F460^7F1{nbӇyΜ9\.ؽ{F )͊b(|x<.<ϓQxWr~0zFb'|j~}̌Y9sfG{gW~<ZFz6m$ h[(Ν;ǾsRjʇf{;qUJ {ѣG^}>a+nJrٱjuwsϢO<hGهu۷׃ <ׇ 7oWkVjUyCjl8v~~&Ib({۷o7jo )jO<=z{0;vz.N:5dd$I&Zޞ8J-[Ll޼9r]/^q\eI\cǎ]I;BwOp#nT֭[߹i&|ĉgNޮ.kO83uT5Pg۪%X'٨K%کq=ZmZkDZ۷o7Z͎ؼmͼKQQR bbb X\xq OaT[YZE b"bED$0k˰)j1r=ɂ`~-j/hT&[@Ckv*Bke L0e+c⹹9T*.8˵Z  xh3ٟqP8;fF\&)3;;{?}Z'hp9޽.~dA=w!/P}D4I0,&3qRIM1MTJk& D8q\0O:H}Y322bFFFZ0񊙷t)1??/ժ%/I!Z n1b `P sP36e 0Z!Y"1wiꑔ+m&%QzJٹh&[Rpagff8|7w3<|Oq$_ o=\ڱcA@Qѽ'g;*6o'z);H'fv3D0 0swCJ0@B&1dҥ wtNk~)?ʼni憔2J$8r'&wuWRؘVdJ@KUN^wZr]e}3x$vޮ變E;<_.{˚#""k>'3oK;̙VPIP^=H϶D3 0H1YId*ZNխ -X ֭ԓ2bySGgK[V42MccX[8V>{V$q|!lYطoka| ; 3 K$,j8lKi. z``B,}֓1FQKӨ8 LOʋ?j;_ _b[DlZݻro˪ DD^PI()*q\CʁaFx\f8(- F `b[0n  Eu @6yn%!#kʰߧ( %0s_k0ƀSJe n̜ܶuӟxϗ|333豱1CDt#ys>sζmuZ[)?с$nhG*8B\{UDN-F&ZJk%Yd[\Hݥf\Y%-w9-R#g&z_RI"ZjAҢBn v $VD"pSP]f^ [ kq$!&pq^{eG>?,DЪT*}Éh4/((wkî*DէDAvondR[5bm[v~rKW(FUS] nD #Z2410hbE`hL9 X( ̫ĜdՄPLv9^+=ݹ;276W#BDQ@~oϿ]ʔp$i0sP(D%7ڐOΎ;&'(cRɯm ̟ $Ih`ll̦d2w :tH&IH)}uAnLR@ ,< ^֓^ޙa]' W_oB51n01`_c_cWY\)g3bCK  #-F0$`evXB]^$0\KEUe d ?[L܅-!.05cWH nGh wW?gw I 2pVA1+ՐWYKoX[0( _ \!\no4 6 H0~%(ATd}hYbh;f}ߏ([@httTj5ŋ%u{"5+4ZcPdF IO nx] UG@^+sGoWŷYfzk5Մ5z~?~b(y%KĦc~[%߱~~x= )@$@B{b$Ql!#i5Q::?x~19d7,]p]n $G'pFFFdVa?t4(1c @|^ bϞ=Noo_! r`Qd6u7{_q=vџ `=S !Aq6/p r?/<>Cu5 <)KKe :ckiOJTtp>c>;{Ϣ.)A63*\~㥙bW cWE4h4O\Q} bΝnT*z{'3rv%-ʜ̌X9pxztw&Ten6Ƕpb wIx-'hAZ2IQw3@i:\*ݐ@ ɀ>/Fjq7 ot:QfF-$q?PcgBKHf3ǏǾcf 앙\_);zw]oyլMtI]3i! ӱ?|zǓ$rUZͦ0j¤ɖ+@_B=.~~ h̩y|q)aӉ+О-{[opl&7!xIޏ =;s>6(%$+Dh In-`6[6.lxv%T>bкL.x[>S})[ 80 G7OOkcSNYv9UCTVa f.2wQiDX_pgIw#_Z2p"6(8zmlw&B߂JK*B)HVx  /nĄ?9QCEfefΫJ/տucg>0(50Ca)Mnn ԎsI BI4 'c$Ԥ.;leJ҈'n{]sP[t^08|Ӌ47+ nPkCd}(PH5;<=wJS. rݔ[OLL%G !fڑLn+l>H1[@w)Dhlp%aQe ־gHQu]9>>.Dm!4Aӆ;ޠ<pKtf-z@F+6KxNa6@!f!NB=ܲ_]D*: &qb&W QE b,owǕ 1CgbB1ANp Ā4^;0X)1rLJFGG;:8B̡+&w]KbŰkBj[صbZ#ɷ<@vXflR:q|ڠ]ˌzsu{EJ Vf LC|{\`WMj0mL(K*rL\ѣ^P{#2M6ϓy\} $ʮ5@Kmp!1WsQvCB{'2}_ê&1QDQ 6n$E^w}3yo!bchppjZt]C43\%$®"`ApB>a#P [h-IO!"(`n\OspI:a[RiY73r(%w,\JRnJqx6FFX/-Ǽ-nŎ-X6y XB u=ն2 &:/p }?zY%*+L` hgg8%+0Y`Z-5b$oo9. |&`ZpRM5\仑 Ab"B%.Y l\#!/?tF@{B#KʗrOK)yzzjǂ[ *\b廏M+ȓlk[hY8ֿ݊m n z8jYgNJK E(D%k_am/5ѲȪVNs#rs+ :),-[MQ|6@Ry~73\| p pk6DM6w)C 4$ۆ뺶P(tE|#C H;3_ӭWNm@^I;[Lm`dy|? h7ѣG /O4ha3g}%JaVd!p” -k巖&4-sUBġ =OZ)eGZ03˶yH ;3x11ltvxF 3LyJg^!j5 [T+d2\ B{Oܫ}%NB3d7aK[7JЭ"]Kl4_<) i/Q'4&QPck v=s?ʕzxErRQ4M1FBkޒ L2f^Vku,e6pIDAT$ fbb'kYMjA[9lj}YO(&.Vn"Ж3Zuf"ZB$JVv*0ƐXӶ6P>akk3")Nϼ⍳RatTtWL̑^9ׄXVٱ6xnI8Idu+QmQBiU* 1Ab1l0@iJH;}!V3tpcC E.F"p9{{^V-GJڰ1lmMod Yʏ#;t7 b *S!npcVyoUŸwa_0 |x>m%kݺ~=8a+ոo5Ֆ[5 \MuBoC6 xĺ 1f_>*ܚR*޽b4#!_DV!!tm:z?|,Kŷ~#j􋏠{Ǿ`%5.󠧞6x !sz U&Kfዪ!~q]&4f?QųCUoBXD2c5 lF{]oq]J\w>y Q 6#.Hv050U0mx?sSfގZq4cB Ch}CJ !0 r d8FuIVa5 aF6J@+['wa!nc=̲+C+{gzqʶ^r qEN{ǎnv]4mQ\cy&f`܏svg|sk8. }Ei7._ I0B#dcꌦ8Jlݺ9r2yߜF=#h,J=~6%xcgWpaSA҈?NS ÐBN`Pd ~*o<5{~4`қ_^.\<> kl'V0 1`H :fu*lqZk}{v9Ym۶ɢ6E=6;H@B \R3f,fn›Ynpk+>}~1&POSܒ4x^o1ݧq~s;C'O6&J^g '4(OEbN܅;!K=h8 +KU >4w0||móBU݂ƶ mFMhnF?DIҶ1 ň@g'_ o6l6}cǎqk :tHa_]J(2.[ 8}^O㻽?]DDBG§P\_C09m}hƵN%v]> ,`jX!Bʼnx!SXpC8V'?c_Da6a.2w >r $ $H 0 P i4``k{Eq &3K)+&}߯8KDK1풋_/c%lȉ(BRt$L3A c-h I1v྽( BnW<.u2o{2[ј3 ?EFB"[Z18N|D13s=e\RV"(FcQjWODP_~D ,,,\(Z[!u_y~tD,^{_zKT#i)j+eXk(B0y4C$/EcT= F\W.Cx عsgl$)þP{~=xƢ˜n-@Q(z]*n%.+ޖkP ުƸ8`_֯QӘ] +Pіi1ĝ>#-F0,1 00}G #,:&3,:T0~? avyLRN7ARȷ_vx'"2K}FBu.˂;U[5L B.;ksw4=ℕn eUL;wZkxGdk:=\aˉG  :n Z5}9e[tM6ˆ"E[#p-ZEK)pq']˿dx@0""t,bh9ʿcdĊ8DeM},w&ey5CJufuHI$ <{=-[UJ KD6yZ0fXcAHs0(5Q?}4tdUqXTo%r("!X7γAXA= ;u+N/ؽwzt‹,ؚa -$?(Зfit֎^oR'ǀE`VP┙eĒaSfqpB)@΋|'fiYn?={ `~IH7De0/j7[ hBڿZD?\μ8F*ˋRu!{FFF3g͛-s*zPgS.>Q5E ]FJw22Bw |5(#޺vYYom}~0 OV-ws#;f' D3˞}k@FJQ-ooE~6)Hluc$Z"mܴ0F#I4fq)'OkG{*6VԉnpppP(pe6.[JY)۷oZ8P*zƊYo .WJP 0C C6}Mu.+y}Ԋu]TKw xٝŴiSͰ۵\mk4<;fQ:z`?r>&`Y`C^|Ro:v.^H9=$جZ#nLDsh˃Y! BA lBFk 1[!/Mcyi?}̔7*_yrj8hzNOOG;w)W/Q!N8onm۴6z+IǙ}#1[,?I-2p@P Y](eODųru\XBP,EWi#ktjvI]Ή7 6L-P'FI49A@V&{`:x{okXbql<[pEI -- Y06P$YɌ;`20`S .33i苓|L213 -]D B 81=unO%qk扨̭$I0 |P>|> +e7%tR*bcL54^&^>82~|#v "x+[8mYvW5Q &)^_/J(q0 Se,Tge,XAu 7lLX6|oNB,( AlY8!MR1)iZ_xtRo޾> {`@[KK 倔"*1^vpŎ^{|}}!ЖKU$5ə}s?.M-HZ!0Ab,fkyul>w LOς /." 12VJǏ'N0vˊ|@ȈaF}yI8I"'8ǬfOLD(mcsم\Rv\]f`tfcGlk)cbc Ĝ"̂P3e<"`ɠͶe VbZ` k8NHGZmM$Fut o9==mXJJ)γ:K.0wpGwq<$NXeuQV1燵~r6)*   `]%/+(Kbȁ$H65f\2 I,e<ۨhu]IBbaj1f߾}vt n ĉ###z~P0lEy?_L9غEkr|)eQ)58N9&Zc$I^Yu)gC>s&iuK J}s laAÙ`pEXk86Dd0fSJ%>|ȑ5m.mllllmŸo5kb)I)9Sk177 N[k_{\h.1?!4< ,2:=`]*N yǁQ᭷ Z7?_9jJ5]79x78c(2333ZǍFV׿A D|ߟ .L舔{?.Fb|AIENDB`DustRacing2D-2.0.5/data/images/carViolet.png000066400000000000000000000344111360473665400206040ustar00rootroot00000000000000PNG  IHDR\VsBIT|d pHYs  7ttEXtSoftwarewww.inkscape.org< IDATxip]u. 'D h6-ϲyy/^*ɫӕPzUҮ$/Nbw<$J;qdK#;-[eF#HQD  p{W8\\ ,%p=|kbfXyw !gf2>яNݬ"nt]"|>eo}]U7Vgg'lق;vX,>$x=׫h{e^bɋWE]PѫmJHG}޶(Ƙ@ټ/_ַ5я~Z7􅱱1{̌}p3 OLL|t)#nҮk6`WLsZm<`Ϟ=uK6ZP`(y$Z YfeYزeK;77mW ܥ@۶m^zIttt0 ٳlJc i)ϣReY&}Xe\{5===zffECD&5UwZyA@ ef 1(&''CZێ7m۳===A1rGGGٶmX$P>X0 ޿;/9T'y3ZFR )eCKehM& tdY~$7Ko9HFuDndR5SD8UC!o\׍ Ўj5,+EjU'L|Xܓ/JBAh@dY2ƈGn}RE$ 8 $[d#K̆"8bhhL 6Fp0Ƅ:?l6{Y!Xjri4FJPVY3+X)6>ݻ-b۶qtLۨB`zo߾;GDHY|>Y#G!%͛7S f)w:{!awfhh֤Y3r8È,h@?6~_:(cLPV۶}uÇz( Jf_\pT뢣C*dTRD,˒A(2Q#E=ud;3 [BHr"J$ (!N&Bֈ(C udeiaՙo`|yc_Ϭ=G0fK:1o*5i)J=c˲,`m^&⋼y !D{[FFF={VQTAPoo/A@J)Q(lRw5g][k܃hq5GE@ـzx۰01܅Pݫ+hx%?h|Qg'j/Wf0J7|n4Z ~j5A#!Ŭ]˲i0Yduc[s{Aϐmv6{GH0EGFĈ 0LB JzYD&AT 5uʷW<;5qo{63ssqΚ-h4zH8>>ȬxRHU1q TwwEc۶혮ncm;ԱW!H (%K(pŭ_o3Cu/:5m?‘ӲRHqxqIPqp0bMan pCi0M}WuC{&с3oL}D !3B=Ar Y@0` 41Dɀ-FmՍc P0k@BꜶhm5=f+(1ϨVΞ_aMƘFPhZ߿?`Vu(pSRJ+9A8RJ2C}+$H V1H&H>۟vZvᄝc0 n{ax6_r||#R- SCA"*w:?؋0=II8}ϭep/ P=BdכDQEJ gLY1*,KvV}Ai 5lagruuozgX|񃒂ZGE *3HFB{赨H 3_bZ%dT1!=an ZdfCDQDRO6i/ɯ~yOH)kJzJq̌r3L.[c^w^tr Ddcq i2EIXXm a6x6M'/A\\7t-d=A&-HK[ ynnc]ƒ h% %HFqˑG-~c~ӟR,0ĕW ǏXBR*7b?~VVӜD0lX aDEBgv!^ujy*Xݺ™JfN[_(|i4seJFXHg, k/fgaZ̚0+mZ !XDoۇwk,k{_Bצ"Z>'7OtlctL^" s~ }Gp|f_񥧌뺬Q\x[;66&|WRJ@s[[z^oY&8l Xw6Yh(%zKTf0e8~P= ߭#|Dv7[f2"XI۪sn;s $E_JUo1{B)+ "fv!$8 !ZL>;`Sf뀺|b6ƘdS&UWl;33#%twc;7ݟ)ߟ.[`AB0aG{5$LĘz 3x)Nc哯TVjK1l/<;E܇tZ u>Ҿi ͗ѳ};7BNkVgM̟ix/b hwşA`RG5< SG|㏋h2zܯzs2lf  UTc n Թ.PVdz3uΙ5Z ssa<_Į߉\{X0}ȖYcQ > r#8 9(WtI@ Wl7zP{oMhhO?W8NE)(Jx*98;}&7gb`B]f1e6}GzĄBnC[=:kj%x]O"NxLkjױB=3o?'s~dd]p9̼%?^<&,0:n<y$Q{^$ #@24 /ESsk.L=0GP`w}7.aÖeiu5@ݝ}lx 7~[F! .+(h/> wc~`aBTAiɿO'c~V|Þ/&|:heYX60"0 C~g-yRd34?>Jfne_w"ًS *lYK7sG}'p.2. ^&[_«|gcVzԭr.l9rzfu#W(,{q-i_xc_mGf|Ui-$L9B %@?=c׾ LT} H⠊HM% ʠ~vePb?/me5F(2;=ž?MwaQ뜅0B_[7:a$ddAF CCڃA N܆GBV;wX(m;ӨAx)tLxMvi + ÂE0kh6`ַm~7TJ###XWPoo/m8me/Jn.ƙ 3%9:==EKL܉KmBexFp+(Q(#[ Ȇpydk].X"Շ~ xvE%v+իC}~f׽ZElB6,@)dc{'C!.ºZRPl̄]6G.d߃ O…~UWm{x³/{;MrRk `dhCEgLSgWi_r]LJbgm%8կ]m& -(r[Їou>+v)my+hnu$]:Z==peV>~k}X @qZk)|O;hxp$*<] †F]ONEYW@d\A UWh_wu5LDCcƽz.41uq2{0Vt)a E69`@#;(rRjdd$zjeHp.=nuQ*\w;\zI04;_YuJŗ eƩT[ݞef+v\F\9xX2&  r[ċk!5 I;bCuVCe\B֕d VoAt{{wjJ"GGG,׀ /w;5ӫɇGkYX_l F^nMƾyۮu)HX ,eY\./zBmfbhAnׂ 9yHE|wĖu]0Ʋ! msuED͂acD+H)UXhSLMM$L}#qiUSk.E:&. Mss7M^AE2̮,j "[¤5&5HݑW8n>DX:FJDtث"K6Z뺲]]`6pA/ܶW!,:c3aio0p5E377pc8N87uU0zO:nNԅ!B. c%D1R -%Y׎Pe5n(Bymk3,7PCAf E2]y0jUŌ;22™LCm ]2`s<4^\?YKۃ+Z$fgv%% !zjhdZ&x ʮ0MfSDB%;|Dk~.nEHo,h\i.$KfâA~;H\ Bbl, rc%sL7qۅH&1]^Jzm#dZeľ}ޮNA(j/F`yIXH A% HHτ$T` @DQRZqXcpO01B鯹^GMnU bw! Qv 0\Up, .踮8jala*LHdB"Y]3;k%7@PUhEM" "؂lL"#Dy-n-,#\ r9YN |-qвu,a0 * @/ UAk*랎HscM ^?E:ɁA$$K\wYBkMju!"eY,WW!h>(tjD%vn͍8퓳 ¢ uJ"VX:."U'mVdINv6-߭ŵ.lv kT&[:*_*iX2Ca\kwk(djk-h{ؖywfYn駉[ Ð$ %j2h%ppe7:,6YMwhq,բ3uص. * Ejrv pסo Z RkZ.CE*y((\,zk@삲= n0`:n, ml#2I [Fbqq7m,i@B1LE k[t+drfp[z-% h65_ܹs /@۷{ܰ#Iu2^XXh`i1:S x͗/WRC$)Ӣ`5% z+ZF\4P U.] ];7vĻ$c ̜o ˲4 *~@]l4BRg7!(}VfP0u'Y3ݞ A(~fǩlrdFBu02Ie BfՈ]UAps] Fd:8:$Y t$O+v+SQ$zkb}⬔7:lq- G bDli" s) :n˲ mF %6,J_CYoj7ܬQjfV>F jF!(6&uO23/LV qYrX$uv6rf`˖Bjt>Q*a=_ޜ -Gҷ"bq 6gk\ug(vĒ2Fb A"Ȱqh Sg1f۶m%C ҫ]#=q-ĺt݁PHV-ÊfmIs~.rzIDAT|cr|Ʌj "i+;=\Y k Zw;Bx"y&0 40lj3plNp B Ǜ o// aX[uFW"G27n,!›xaK'%9*už]Mr@ a䫯_Q9ȷif'\^D`cw׬M+*v@7)pm4`9Ǟ=}RVqѨiX  As]Y`#5\*q|bw9:s2" b!4su=oJ)}aXLz[n]ϕ$NL&Mt~/+y/܃ިf6 B&̯+7Tms?B 8^R:J((U{YЁg4-_ z!|XFciԷL4}g1})LNa>y_ wE=(QY[mM8@ÏW8Mn3^\]D18p`YK%U,}R=_3<> g0!wf:zb!O'O=}MC)QUd (0y+C'nG8<~g1OWTN ͕](yP'ۺ"؋u[OEO}(mE;RJ]Jrfɬ.mΚ۟抟+ۃxkĽǯSM6 rn<抧^W+Ą##?DY@0޾[܍'c~zl?8=G1[p?_e vO^bTErL!BU3o?zӴm;je[g饗^"[mmN0s{xVOA 5@$.0]zJBי͘}eq&Ul}g35z{گZ^j,m<[w>SP y@LPt?x`oԩ~"q}d]B8‰ 2V.%!{ #|h:X/ ~xu۷o<,o=?FvK뮥ѣ_sK]/!&dk(c˿D\y,&N=Cw<˷%zAvܓR:QKj \ذ A w6|gti}2O1.2ذe3ydM` ;~g՝ȗʃO_>y`U(q:Ѓ}~At\Ѣʀ%z2$h$q=`=(r]ٲ!qEQ@?[[:;lf p,bg]umdt kk8MTazQ }D4UoZ\,״k[N9?_ط~AO*Nv%] 탷fڂ!W6u[h D7Q=_x 羱kz.ҿԬֺ 

/498Nmnn X^.u-ff"2[n= SEyxQ}ٯ{Û9FC l'kJT <+b˗a;.Rn'skm!r|h^!X ^Žƈ 0'Ydi"n"]%&"MD*V" H 8A޾M]Q'VsqEw&,vf@lZǠIC03` tAGfDχ(r5)e@g=>>jX'@Z 2 !3'؇_lhEM0[ Tl5Z;3rpȗT.0c0H2<2ȷD,x'G3 Z I$U@(TN 40d`D3Ō,4 i8])R plmyYjLiqUVT5VE H($@k-\vF&l;f3>j00D:i>8ҿ_}[U'4ZMUh'xB9pf4v,66x,܋9iF\>c`FEOLc L@oɥA{1o߾bV/vO5֬~:8vNHg?C {{ն3ܽ6[ 3@j@gAQ.6i#y>o69SLR2=p̦¤Ku@Al8*Y +>_n)RUamBmel|!+?z;:;uu*۶Y@e,hU)rPm"ؕ׷o(  po$w\`JǏr,:;;뺒F*:;;F ሌl ۦkҘLw.KvHHXD3[%koPm0>0Y'$:`Lgg6>|=0ưd|{ CD jT|7\iLΗo5B!DB±IBZIɶO)O5ٱ|SRKK)ٲ,۶[D&\.'ʧjV3:tȋ(MFFQHaktA,5B+(H)yn4mO=OӑO0gfE^ZbA@xkþ}~QV\.b(( :e˖熇wVh/xIqFGG\.>O8ۇd5϶G{j}6N5d⩓h"&L̉OFkS@(|!D ]<{,޽<@;81AObկnuc0;;'''g>o\:X7JO_69wYn9Wi>g(3l'u~LGBv27jrݜΜ7BJv}#" (,QEaOOO444gffؘYKm[hE333)[;::;??O0l6 #I:Lf`KXl%<`yj@3hz}푡l۶m2='O?G>,-O6 Ȉ뢷W85GZK*K6d]ڶ%J e3+ 0fiͦfffА.<22 ]-})kK viJGGҭ/jk~577?ݹst&>>|hO|lWR G8J>ȔJ]]]fbbŢ)6kt^*LZ@]J۷/'׺ۥVJ!!MDR}>}Q`yqKvA8@.)SIG~g.hn7E˩fie2̌0 177RtDk?OeH2U?nd_yZz]={zݯj'(_|ze#&M L&|][MDިo6lF2󕉉 R8}t֭Mhffj5  :  .\TZ#G@GvoU^y >~xZַh40}T*\[V}/>|SJd߾}<+պ7>|r P<:D%J1lHKdRĖ6IN.5k/W_ҋ.~d gΜ\׍1==m} 5oF\'NHX,+++N=m{=cC`KŻ@!"f@PFt=F%,s~Ø:2T#IzM"b%A %g[XHb0S:[jX3B&)4m G&Ƿ3c~]>պ,Q\ vR g( IT`*?רek^Btt7Ĕx/E=tq][r?1 }};v7PJh\"o"WS>{e33u#Ig߉;pRI0iU0a1l-qڅ3HZm{_^j B @߉| ys 䤣.ZkKg?x$EǼ,\^)}"Z#t9ߝcyn65O*")9wܷߧN>*aKd6YZ5ZZ- #U9 2" 3dͷ3VOy2,׼3l-eXc18FX]ŕӯ/缯17]T"țly_QPJ# Q Z# rBij$ѷ^ UDis̩p:X@3`' X U z0Lr\&JV5A/5RuukڿȮG#S&doFbcamnFa+oDoo~ūB$Mfn vmg'NrB1w=4~2b54(-l :HcC7bwB@K0Bb!-bBxכB"`DĔ @3CSNB5!|{㦯,}?#_F0}ղ!8L~mGb: 9PG)H*lQ, oOGIP$ѣGmFޮ2:tLđRZ{6~|HhbI O0<Pq3RQV~C2x58\R⊲*MaSm-ώ1uFJ|4Z %Ιnk[¤"|($]su>1|#.~և"+mc۲ aɈ+ {m_3iX~1IAL͑XT|PFQAPxϣ~.r.%bX[ WXH츄7D׍& 4cpR5$MHog%2ਛ.עiȠRۇQ\^|K۽o朵9AYKPe>M)4UQ(o/Wc쬭VvffHMk^:s} ӭwGp┸i @w)kkM`k-xgpQ$oeٻw~zk([Kz*AOx/`E CCIq! B4X953|-,ۅbќ8qQZfQ՜C?#}KoSؐ(IpC#?p&҃!jx ;y#P]yW1\&L%n;{+>vP7gc3k::p>S@B[Kë }qt#".#XY/cgs^D B)X\|Oʟzsu݆1&;vL7nZPyQ$ J—`ĻwלH88Uގ*KB50ֱ%`;nbAwFP+jsh |Dz! KP8Yކ+C8X1$ ]8=ǻC< "|1O.\' $ C[ $BB˳~? }ͫ0 AZM9boF^~gxx,T{SʂQV%e vJT^;qc-W|C\!,V#IQ1:J X/b]dcFX閃\$y]+#NFB/7ѠbĈ‚ `0| O:" |osMfcEԇ@kMa'xuDO)DPx/$.-h\ އ=έP2rL8 O\<61,a4iBwMo/KqڒD0jcF`o,񞶃<KL ѽ_v#kA{xy ۟§Q[@(0}69X,a(=,yL %VzD}-%67ũ:SgMx2a5u!!K(D7B$CuE\KXNC"Bn"B%4+Ii:mmc<^叾苗j˗q333ciߎͻsK>1wQ2^/˴Wx} <*L]-!"k ֳ=3] _W^2#A.\ hDy;nPkm|Hgi&w<}3sZ4 ڷQ;^%Vu/+~ 5ܹЖh=^e0yۗwuG":y\}P>'گ~;)Gch@[Q=h 1$+};Mݱ,D@T"O9 y W\qF2BSc` 7 dq.#׾RpJڭ[[U̙3"kvȫ|!98&@>7o,h}* h#s@88&m-,ZD'qI AF{G!󖗗ĄXC^Y#B=tD*xYoѦ=FX(RG6Ղ&>ތ}%iľ]ǟ|{{ 9ѣ}Rl^yHkPxPBM_85 o*Kq]]TMyv9Q Yz(|Z뮬ZLjq]{$wi/Nt6a7Կ Qr2b+;{7B wEJRJfk۝]-i)sRW A7-{utq(\͐RJ68BE[] t'p0/CXMxSW}[_o7ּqA%"ƞ/l6eH9W C8p: f n8qv`Ѓ&f@À(n g_!Ă`7hRpb-_+!AI+V=SN-Gì={aH )dXXNoQu Zg!"ìL6l@ҟ y F>*_uHə@`咧ߵs"ً 2!0đIx;7Ŵ7 Wm?oقž݋M JxYTn!@Bݓ%"UTDY`X&U!`8s¼%p1$XU`@ʺa.q:z!VXXnwv<0\޳˾sDjDfR6ƂRl@$edX ˊa5ogu_B瀻 zE` >VSFA-zפ-odZodhxqbš.[ ccDz0B "@ϐ!$wWw@|~߷ p%/h +2Wa`J }r2U*)%/F.Z4@L|S !V*np6Ar%onk~|"3%W&q8yNjLúA0`n⛻n۸X,uԘyD ~qL\㔮W0w)4QM{ ߕJ'C 0&H ^@2粂=yh449_ @0yn $6ͻ ѭ &%u\%5T Ǎ14>>NZ:uJumhDܱ~wnw@jލ$/۽Efm̱>(̫mݵ@B.ټn)y7:Ȩ{H}kYq7 <Нİwwfxz"$@s% n h6li&>_&(@n›F8qiuwZO]Qbܽwzټ]IAHm\m6]G#@AqێD8>5]kQ .$]ѿ''ۃrwJn'^X RJ^XXj~wRPxo,_⮑^6\d 63/RJռ'DWM_kH{7:2%s!uo龗̆\vqE6ܙUWczKNp@wGޓˀhSx4k9nYn.3!e,&B%B%oE4cOI }n y8Pͱ%: w4mE`6ܺ.rikBrl6yii?["qƴ DE\[a{f u6C6lQ(Rn{鴵JaHA)@O+46]enJ50& \_ͦT*l c%–NG-s_HЛAwg ^@y~îtv72kI aPq3MhN+ZnǭSc`^͛6n=6Xj$ކ#Jѹi^bunDӮC.Ucʍ9׸mKj6 Q*uRr9mj5,o2z{Q!ڢHgr6i7! n[bīlB 5eթ9קz k3??oyf NB I)IDATR MPMnU OBB l&d0`8_:_T-xu"Oij7oU 'ڂ4{$lE3 Y+Q+!p#`L89cq)||QuM."|k=x11nt1iCEf2&ow~'Rbk>p9~8_{Rp$˲qb̀k8!`#J2`17V𺐷"fph,K  q1w}>ÄC}1z{,QI8 FTœW룦¬;ܷ ޮ0\Z Qޅ8!Zj/SRHai] ӼRdkugh[d 3 `gںu<#C(h2b &K~׼ζ="{ӎh/Tb47x!K+p=Mo &y9r M8xx[A"8,0>N?uBN[Wq#X"PHI؄ C$[E:Ɯ0&B bѣzZ;==-O>ر =`}+)(%oQYxhP@z8A,^ 2FxEx(v װ]ٲ}g$ 6wZ) >tDBX8ȝ0 &kcDl8Qi{q(홲*֝B3٢f2<0&E;"DZ$K˿yQk0ƴlj;f3<?sNx'X8BI{nvbz!b"x ^0pS7:s`O؂A-I!\8-<?=Z?Z?ćkx~cIF6-p$1jpNJ)W=c<)-$زñQ}wcW@C3 0t X:p+C(O6ضmE/)e _)qw[Vhh)eׯ.oߟ>`_wbfk3-1ғݰH<4̝n<;Ma1% 5k.`[:Jlaw" xgbc f䭰obx18 p .KO Y;zL]9,. ON<&#+--hXG(B@h:KO}Bmq ;vا; H)NDСCIb1RH󟮜e  p\0H.V/ZQI{ك&j 6w<*|_˥ JF@PPLVp7$B3ٷh$ FW\-erփIXw۩fv?1In*)=O c`#$Q0lcYP:`.ISߟ^VJf\.Agy溽 !. /߿kZ$I?tӏ5G=%-J`!T <_m5 M-q.* ś%eQSWżXm2'=*w (t, ]Cw`?gLy &M˸ ./4?џGu>t4lZ SSHhaQ"hqmK/^V6\m@k{:u~}٣<O-h<{4&~(lO i-%6Q@Awİk{=t?]03QؙMk-R&Fq!ΉKq98HFcĖH ##$ Dz,#5bJވ6fޒ[ HF'Z8]~¯|gmgff*wBk2%"LOO'Ν[Z%/9{68!#[91$fHB362e3-Wk}1:ǺK2uvMUzۛw#nxsf O@NJ<#$3z{5 6N 8*@4(yTa h6 %3&H-( %SE#%d&1l)i٦h$F}i@cW^og_k 2-uhvJi23%Z8HT՗<{߶wG%>i(Iյd:k:6X5~"\T:m ݯ)bε{nsz1Zܡ?6 fvAfeBo 9к|MgߧVBfM^3_I=799Fa`yk7 !&DQd$qǵ$I>퉉;!p $CM|~&̼h=͊>[&IENDB`DustRacing2D-2.0.5/data/images/checkeredFlag.png000066400000000000000000000010311360473665400213530ustar00rootroot00000000000000PNG  IHDRd*1 pHYs ) )/"tIME   ˽IDATx A.lzd 3$YfU$w`1 @ @ @ I~;p@ @ @ @  Io@ @ @ @ o@ @ @ @0$?/w @ @ @ @ ۿyW @ @ @  Ir՟.IENDB`DustRacing2D-2.0.5/data/images/clear.png000066400000000000000000000012411360473665400177350ustar00rootroot00000000000000PNG  IHDR?1sRGBbKGD pHYs  tIME 4€tEXtCommentCreated with GIMPWIDATxA 0 |5`0 `0 `0 `0 `0 `0 `0`0 `0 `0 `0 `0 `0 ` `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 4WkIENDB`DustRacing2D-2.0.5/data/images/corner.png000066400000000000000000000372101360473665400201440ustar00rootroot00000000000000PNG  IHDRxbKGD pHYs B(xtIME 'd IDATxy|]ulM%])-K jATJed)uFTudFQć˨?`gDӂ -_amiiKB6i#zN4޼75!CPI|[ʛʓȑwHyI99/99 N9~vp]rnJ#>GG^Wn-+<9U>yܾn~>Ҹ;yeԸx߇x<ȣR8;RR++;떷蓯W*)ΰ"ΈE2r158i5T__&566* rA[E+FdF_'98UWjv6kDhȑ9rq n K$=a5d4Z57Qcc5f?^MMMnAuZխ;6jSe՘Qc4n8577ӃHwR`Dcc5јqqjѤqiܸqfejmgG)EF՜o44MOSaX,**))*J)H(J)L*N+J)J)N+ffd\ J χ??C?3GX.$l'kʔ):u*  %I%ICVwwzzzwpc}q>EJ7#e-ښvHUUj.4 SCaW:ty8p@GýT*L&L&|>\.w\*83 w̏:8J7\ j|xP:A'jڴi4X,iijmmѡ.HCU*p8t:i П1J7lh|bfzgjF ͜9SF&YwttUڱc86uvvH<*0 r &6њᚡNi)SwjooWkkۧ;wj޽rO$r{<@0$ސuN'SNӇڪ={޽{ڪ*LP(tl#F-, :!tN=Tvibiطl٢m۶iϞ=:xRJN\. (^ëQ;FKMitҨtkرr9ݻW{і-[ojjmmUOO \. <ʗi{/;4m>><Ú={vhھ}l٢]viP6@5ۚ{GL}l}٪T*iϞ=ںu6oެ-[hjooW2$naˀve_#^visfMs=Wзh֭ڸq֯_;v]Cn[._ i?ܿ\?;(i0)8ԼY5NEF4Ә3s=We{uiǎ:t Ð㡡YCAg3ԀOA5kyftgsԩS˲ػwz۷oW{{; 1}CoK 7Q}_FոQx.3SN)9^_^6luVBC6 }hIsk„ egYmܸQ^|E[NxOS4Ң^{M^|EرCRIGg6Ԙa[Sfi.ώTͳ5:;;OguwܩիWg/.|>y?gA0(~"w+&] C}R)=ZzV^۷|z p&U%ԕ{zW7m$%'MCp&W5g?!>7 C7n<+2 =z(TūTp==N8Z`jjjvZ-_\+VP</myBA\N|^\ 2j(E՜f̘1$G2ԓO>˗r^b>~?y~yP^˯uz衇xbmڴP/ d2G}`X#j|QWt]\A߰a=r8 BCr4p>?賀 J8V:uȑ#kZJv֬Y@ p8|̷r9e2i`^zxNO `5Ӭ[.Ewޠ|T*O-޽{l6T*ő@MGi?4^p4ƝuwGp[,JJ@|EnoA9AEwq/^Bp8|LN3 CLHops Pƿ:^ton_ƍ#(C{RޫNgl`4iҤ5knӪUD}EzR }{G}Tz6lpV^Зd8Sy?}B}^xA7/+(j_(Y#_M?Cy;v-ܢ˗)s2$ 6x>I}+U~s=r8Fv\aJJ$* _:^~VviTJwynvR)E"AJɤ$+{z*}p|TҒ%K}OmmmD" BrOXT"P*bQTT{Om6g\R7|nݪ`0H$2(y% iL/L5[>[}a}ڵkFe/6U"`a`V8֬3qܻwQ4/q[麭./ G*  P*R"`>`iKO/BǍ^믿뮻N7nT(R4~dR}}}@jjiy]k@Nfo]TUU538{뿌 Z}/ kKm6aE"r9qr9@P.:I}CGzTJr:E~BA}}}lP :?ϯ֮]nAw^TR__`8^W_ݣu7{Vuuhɤ qͺckE8p@pXpxztZx-}:뾳t4qģzN}k_o[y^UWWI~lVxC|UUע.]nID" = rl/0&9A_|'tTH$t 7^aS"@kO׏C?鳏umۦ+Roᰢ|\N=== _ɧ9gRuuuGZ<򈮿z%Ib90 q%I,` /?K~NP7߬Kn[5552f~aPTҼ{j< S PuuQo+JJRQJ5Z+?9… ޮh4: d2`sr 0K}uQ5wu>CGJ%uww@j|QM]~F"_GyD>OXLNt:^G?.k[+_t:%ҒKTUUկW\ (ɨNK<W"M9f>O*U_*A ~6g0aBkFaߏr:t6eMOޯꦛnQ]]\.W^'ɨ0Xa ?jZ0|E?TSSRzzzxC6vX}uW+>nBzhD"x<)ѴIk( *4@֠\_u7߬_`P>zzzXSPmO;W~~]D-wodxC(a.o~mӻtu񨶶_aKl7ln59z3T*٩|> g=rTX?ϟ\.}bQ<8V0EԴYv:}_PBF_KK.b_>WGG?pDQ]2}OYСC袋֦~='˩CR786oS[?k}___.RܹSXL^_=NN@13%?sr˵~zUWW[ڇich˓j,]W*t5hڵF.xx?@14b}zݧuGε|M7ݤe˖)+[T*@΄{>_,_{=藿Ѩ!?`?PΩ?e,|Fu90~` `[?N_|YӧOta>={(x?NnR$2 ?0&/]9KvܩjKf1kf7|SwyB^9J[SK.ur$YfJRx `H{-bg}VO<08jᾰNtߔ YRoۖYl^yC\Nd i?>QW^pkn9N>n80dTw|R/^?ޯmR 1;K|͖-Jl*YWYj{1K{xmq-r=s36U_,5}t߿5T( 0`,5˖-Ν;D, @o_t͢E,dPd#:s3fky_ߠ/\K~  v'jƌٺuV\ɑ@x]7:K,ZH>Q HSM3gV=9@#Y?$Zs/ cdƯf蹫1Uק'rX,r p.I{L&M7Ni?Lճg)S(L* :R>ЅZ:wL_fiŤ7&Sjjj2}̙3bigg,7zJ7o4ihhknvB!K& n6`#.t믿5kX:X,*Ns;B:5 ؈[n>4[XRʾ4oh֕4]CY lVB EtUTw\D?za])~K,/  ɈgFhἅ8UV&Jq;y&L`׿^k8@xj5V3 [[Uuleyٳҳ6sVYzV{RIL ŘctkL' -]RHӜ I3 u,K.UP]nSss-]s}Yyyn6`KtΝ; /XzfVWNN>QK7T*qh}씏_n<(c?gm~Ŋzbv[3v-@ `fjS7]sNڵ@Y<\`o屿\NB )( Z њ0t}{{֯_/e ،_.gl6n&:V6Sօ Mgt@k5|IK["7@[FtʙGuϵԛ_rfn駕L yn4`'W:M׳@g?0 XB> 1mc4k9SRtc֧Yfg@LT XMFg:4]okݦ2 Cl Ij5,k֬l@N3]zjvM^xBAb ImVgߴiz6TJg2駟4 ^iƌW^mi # 8qbQ/6SәQׯWP kQM['6|#N8tիxL׳@R'zW-3 L}^2+bl(.g[Bo4eVb?Pd2ڸq޿adN:sz+l&9Ok<#@0N@ci @X$+"~Sp宨GR$E)a,QYћm p8vxxv3OOMӦo6G>} ]TTp杦@&!r:tsa'Bt _jihF0rc>n[PH`,ۓ EoOG P0+SIo`~ʓz㩈@|HRzt** V5l#& )v5?XP,؟2]϶%.jjjl1p8+z1,H BG>""~͛7WX(\rx^!0zبkԩ:S5ydUWW=+l @~bؠ?I&#ΝO?}SV{y1B\pM:6?secp#PTU*O~R_5yd[܆'`s:=90dT[[…  fVTJTX,vԏM*JoQ.,~vFa)yBA===oo1bDy5 /˥H$O#Hyz 6X @eFZgzzz4e=jjj*NsEhp)XT*Ks}gE~|^tZLFLFtZlVRBEWqNyF`WϿS^{-ZtN lkk۵cرCT:V:3& &ddU*QxsC)tVW^ӵL 꿻[_|?,H3ߩJG2 u4[ސ^i7֣Y`U<״i_j@\.^+Wʕ+oWdVD.tIJP1Sv S0|>˽\.H$K* ߰an}}\\2fKYu;ͬ ^)+PӀiGT-[\T/:%liP(0Ä岼?L3fΜٯsN}_֞={Vɰ]HzT*{^ޢEtw*Q}2dv)dJt뭷*Y. _\]zk['|Ng:EF`p\M0Ag,K.Dݻe:=(ϫTU"lHRr~a4@kX+HR&#R9 )N ^HR 4WNy_z`YLS~#e4@\*9 `U70zͅ w@y͎;LfӺGn):IENDB`DustRacing2D-2.0.5/data/images/corner45Left.png000066400000000000000000000430071360473665400211310ustar00rootroot00000000000000PNG  IHDRxsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxi]ugyJ*dCd6D@ep8vS;2e5\ocqZ-K/ \0`!!L C&@RU{֘:5wvca<ɑ @d4669os9uoS6J? @8"IMMM?w7e=y:|z鰗? @"Y>8:}C2s^Nn=TjG3J544L"_=`iPvӾI5%JDD\kk~|)W)5Q4d@yۧL&3RI]tVZew&;ii4Q4@ ۷Ol6g/jڵ,KSr8I |W__r\eY}S#QGĄU>}3ƍMO]ٻfDb}.O}J7o6N:& @Bs}}}:uVS@DTBՓ=c}eYuuȈ/_>[---jS?JCh!:sM' .]~sQA@@% uvv*rܹ[eC?憛' $Iutt.ϟ[nEmmm?u)D2TgggIZ`~_ .3ڵT2 R)utt.=XtM;rzn**R(#W? T,5՚]-;hUV+0}Q}Y蔂kB|^%Kk1e;ԡjScQF3JR\N}}}oQ?Mك6VZVblV ~[MylS~JT[1:dBwJ.2]֔_,\# T@ L.?y=3ߓO0ٸ y9t:3+V0 x|xF[A$b j:fϞo]G>;wpo0I(W{{jkÝ{G[o5]##ghMn0ZLد>Pyg/|9W/!C82}5kK/UݯVzau;%vyzzzL/7[|ojךꙐ&r8mܸQRIzj`E-zn @ yrU[N:cS5U-7 &P(ZJsa\g~[$x`V*T*TWn߯c9FgPB)qD b(By>-ZH݁E"쿬 OOQぃJSSB}Mv9/_ޫwk35 ҢP6mS' NNFwd^0|q_:?F;;hG /q۷O\|7oެ/tPZJM|]qdpP+WLك]Bh`?`LdYu+6lؠ{챁.uiH8(Ƅf U^ZGuΝ:?TwLh }_8 uuuEBR 0:::Bs;)RJoP(n&SY}sL k;u٩dv]W7x/^l[WɫX +g{;NuttdWIrG f4: -YDy#iY2ui>Zrjkkyutht` 56lW~ZUJF@` *Ʉ̲elߥ(U-,0)rjjjH$̟y5m4-X 0ۭnwkIq A`Ҍ +W̙3GH ZWXA_` IL&hjjҝwީC9$0٥]%?w(Ll5kNf5B|'||^>}v?|`A z}P^-@PFFFBo\~ Sv?Kwnv"@#+L*7oެo ,Mq}Ff{#<N8388m6=UxQX⸮PE@[[.]iӦf*ڐ )]Pq,&  joo7;0٬K"0jԞ7dY ۏd2KM|]ḵ5```@bќt.w[0aGQGGG`v] % Ģ \./ؔ=%\E׬Y۔Y a \Ք)S[kjjc)0٥ÔMg&`BgMpe F}}\\.dv8Ƒ}_|6U.i=?N&nUz?)\ڵk}yB9q6Bc &@/~є=?V?!'G P(_?AW6eWջL!_|)׬f !* }[rfZhQ`-[tgN|0a L6ՙ駟6 /8/h*;DT` Zh,h?O_|I_C*F&Ass7:CsYe5=?]CNt` T/r/_a!&4nݪ˗IG1KTʔmjjSO=enF +gx1$*m|^RIzj`v葁Gf+^da& mܸtgTJ-&YmR|BAAglCl Ԥ&sԜ9ss 52F8`hhh\E*}m+Pn |ΔT0]>G?2eC _P29}tPusD9CQ@ -P([)Ւh)gh0 pRICCCkRJU" ̶@u饗>GW# ~޽۔YgB "2@qt:j(+ D9n:ܹӔE/y%T~!lp]|8z޷Ksq\S[[vS<[NSN ̾꼪yFB1 |r߫] 1 pWr9 >@A1 p=(9nrr B1 }͔15;ͣ* P.ҥKfs %w  0]ݔi5 b*L஻R. ̥tbbj_pdm9CC (Z2 0]t5ט$.Q**ghdsaկy^`A `v *\.@T 7`~J$ А9ؔkQ޽ݒ!T LFRɔfo~c^~\WI9`566vԩSfSvmR0 (JmvܩM66]@DHKKlG.\PK, yYppU$b'|R}}}9W..gK`P@)J$u]}6e/J_D-QBU&L`ҥ9#H IWO T*|O"I';,}n,(?Ҳ(` T: ڸq){xpmmZ0A*`!-_ܔ;̫% @ s0Ќ3z\AuKtaQ@6 }vm۶-0RJzJDP|Ȉm7a^T$[+T0[~aSwk"+gdol*Rd`qEviyyO̬R\MM:::Lz%Ayw9C8b \.SX4eJ}[+bq{sYewPS(wxtd2-7nT`Vr I$Lo5Kë1$R)uuutZ?)޷jԍqP1(BB6_trFxW:?Wkk){w)ە@@9CL&#ϳ /h޽˥rFF3͋]յ^k^ ۿ5Ԥv&F;*5 S,6J%~7)'bJ"@_S[[);sLZ*0W{]#+1J&Qdo۶Mw_9BPkdM=HM/~Y.`Nj&ImٲŔ38G;;v340~J%bB|Д<řo p…ZdI`O}:9H^vߔf'>f6辣ʔtdPt`q555vtfT3#h08t:NSvԩZfM`Ğ IDAT6jlb18|>bhرCv ̥һ(̙]w){ers&L&}keNaHzM))o/gh%STj`Rɴ_r}QS%c1\uaZ ^LƔsGof~Kr]&+Io55_3֯_oZ88˟YóF!tzVWWbh^ .ahmmձKiYnD#zB9t_gnG*RWW);}t=Á V)Ş߉6544LXP(P޳}vլzX )T[[+ x뺦5c*ON_ghSo644…9A7n ̕TRKE:({/:cD@TR.3e /JΒX>aL/&q{< H$Ȕo(NS{5sSC%K555&r癧w|'D7y:DB?LoND[~:ԇJ] 鴚B a~P;tǐY*OyN$Ir-'ISǔäsC_@n6Sm\1ۦ깃SC=ॗ^gayC>޽{C} {aJ^|ER)ocKXs9{nT6k8~t]"gi7Tvvki-Oo޵J;yW>ʄ<}+au]v@XڱcG`.xr.zyBJ~*o67@ кR 3*H߹ՉC=I?OB &KrZ2M kX?w38Cg}v$I544 2襗^2KӨFbX+)v;ueJ?P]]]455qWĄH$z衇LOT2ZJ9EdR_}A9PT0~OKRCEz׻t)Lmm-@ J%ESv͚5;!u]vQCmOo‚@4@ؔRkzêj ]~8[tfi3uuujiiʕ+?u]9cP1s]W:/ >Ni[_N~Yy͟'?9$+˙.YĔO)%SlW_5 7_Nh}_ s=g'7ɱUr<-q1v$͟?_'C:6lshk.v;uIe[)IW]uUoMMMa atMGFUSSz|]]P?.D[X4h]0ю[lƤ(3gu>P?.Du`׮]d;?TiKFcVOtv*VI_r f-ɤ-[fwl9CZc|rAN|ۜ={򑏄z~}=+? jc;>y!9sw.mʾZx? {P&_{{jkksdR[l kXN Hy^k5Cu\5,i\.ݻwԠV՘ѷ#/Pw444fXId]H$twKk2!$='ukǙ>}/^l~v:f1 DLu{))FUJ/sST: Ϛrg5sՄ٨[]۱~Nj~v}}}iLF===ҚrU&ҐO\o(u]g':yK[ք~)я~4@,h {1Λv)gTa 2KSvԩz;a~6 zPՕ3,RI;w g(q:R 1qc`q]2?Dp]|9e(*(ݛM0R@DJ%@<)wd+NEY;l~. :bOy?7 S:\2ԙgi~.D3u NtOfb Iz}ڔ 3 H$JF;$* z'sjV7OE/%mv6/^= I뮻Lv8VQ@ӫ? kѢE2 vZSsNE)f L*d/(D uk)tnr<+iv:<uE0 l67G; >M'x asI%Yb Iz}Ȕ 3 NG;*/_nʝ4rdljTdU[կŋt]ui BE/;/ĭs窫\ v2N?BE<-ul=tI2 `-<3 8۟g_8^ *MW'̉+V0e6!NۜmZwtXyJ)r"ꊪP@A;Cf~. .fs[f7@woq'Tik`]xN9R}9#.^v^Fgc`? khh(0תV%3L  7osa&PG&H$zGLٮqW$wf?p5774TRd>02N/^q^ ̸N8L D5M ?*T|[r`?`ܙSTQgu ̝|gZ  &iH`)$=yjhh0?3J3$s"ƍU!RD Npk'H7?*_XVYϑRD ]eX,r=)w|x("NgVsGy i_|є{{ۥsb/@I% S$ n$Pլ@oo)wRIr\F G珁Pg-|Ν;sR];C=GqP8i8X"/2NgX0@2ɥP|7/|GMG.gH pvySmI""SH&wS`&Bd2)a!T:kk.Sm- `vf͛gn;4Dd2*JBH\}SzIR7oL@峮H$zsHU~"p ^mrv*_T2 zLB 54;HTPPt" ; ~]?Cս R$S?^0NԉRE[ L)uH$`NmrFm+hO`Mgg/'U[#W>Upu/q꫁Y,9i Ӂ0SPŢy'C=q䨹zwD(n9s星Irȏ$=cջ r$=<={yt Nu-gD`0L@`ǎ%iQ" (,2ejkkϤ Z rZUBH} 8YfI*3F.2(Z"_sfXcd2qUa@Ycl6yyrs@ Yt ~IZ~}`f?RxvxLjʦRdDְwL{{8N Qe<3\Pk9ÉCΐv:;q]Wghv,c4@CQ@X;)Y NȿӁtQEC,tOcЕ@!EB,t'hm/)_gMgGa-^y%x$M^p"#oÞ0'@tX ]vrs s,XYDZ/9sdh,G^,t)æܡMJ݅ \`q555Iy~}>7h;DFl ^704ď ILpxfjfU܈3^gR@4xg> g Lȯ=/bְ:{sxv6mI)D>GǢd Z \H]9Éؼ^u^ P@bUd g6R@|}3R3df&bUXf ėlon:QP4@|Y bV4#Ǫkd$M3 (}sw̔)r|Ī }0k( zK/i[t 4Os@ %)c'0TR/*X5%NŢ8 kϪxlIDATK @Y;&ϩ+@Y }urS(bTh*g8@X;æ\KT, v2)u3Ep=c}#`)9sCp= B^:269UW$ n7NJ].nX -$RC@X;癲Sjz,8 1 ]-eCZXV7-fod-8 m,Ols$e k`݁E}@*|$ ěkf(?E*Z3) zƲpu) Du ǔK "Ůo@oo)o@ 9RAXmvMڜcTĪ}_Ey,xmT+g8)^l@Y ASTp*R Of1s "Ů(9;Q$-qċ]`(mE5ě(loQTJsP*OK*b`U@mȠĎnlH4PT2a \`6:U^HR. 4)*R fSZAd-,@KMKޘ1TRѡ97f9|u fZk[D#,*$)@SY :cs(*@CCCGd;402bWeo```s .@Y ASHc; QT< 4Wf5L@Y aSH`ddĔK* :F.d9é8+,wo,T1Up*NUt @d;/YPz bX F^PơPPѲ`-Ry:`g-҅8dbŮ"@@MTMb}oKiVSDB G|ؙR- +,NX;5~ @%)o0wYL4@P`װ J7S>EBt*w.U4° 71#X+, o@c ٿ[sWf5d^` @5XO${xğd+X@X.(і+IENDB`DustRacing2D-2.0.5/data/images/corner45LeftPreview.png000066400000000000000000000313671360473665400225010ustar00rootroot00000000000000PNG  IHDR\rfsRGBbKGDC pHYsu85tIME &+ IDATx}n$Yؾ%(ԩԇƜ]()/SfoIFVWE0h*AU^CJ 9ʲ#~W_7P5`ݢ( 0ư9G]vxxxt:EGY3؎Q4O'Bm[@H| B18ܶm8uy<׃c;8X6-ڶc HA?)esA恗RBJ ˲`Y,CQxxxyp]c1f?[V\D rHH GȲ _~m۰meafqθRe 0@@ ޣy8~k4 {E"۲qsw(p{{ &ZJƙ*D-kH.  W}_w(`;pccyDp$'_7~&vkG@`hf"CS7   |l|10ӇO d S H)!HH 5 kl(|`?C0lhP'ӃmۢimZNTe[f&)p 5 $iP%~(B MSCrlc̦pkὓp8 A4ft,{N`4a>CC(󒖇d2Q->~+,Ce41D0 /  \rpɕ%cjP8T>|oH(q` 0򐐐|wxkdY4M ٶxfy~д[n4-H@ t|Z izlƝs(pAZujV$@ӂD)/Ewq8 AŸ[ޡZ4ElE4-H@ 'P!qU`y XNhPSO@ׯ_s=b>c<㗏7jyC˜f}$sq,lq0N1̢*RLl; DwL!B!qT!cp<A!)B:Z g  F PzFQxzz2®u] C, 0Pu>۶U䢦"BH塦iN A/-?=-xHֹEYޠ*+ET7ි:D^@wyS4=<σp=W#+5$Ě u} !wׯ_OL|h_>F:D^$ɋ_ ]G"tlj oаFō.QgcCZsU){>LPg?@`۶&[<A z.ArQ%ʢD]  (ѦiL|Ge a;e2/Q5Z)3@@ `7]Xw{cy{XP5\)H@ C%ڴ9'C @} 3SSuѲē1(NI@өd#1ufmJ )8ѰUSKԵ7)MUyHwg,J<==}a T$b,KT2@]w 3"";/M`Y*4mc  MAƘ1˲v=:ϟQV%0Sдև LA=)LLh|>rd ޽ [LA$0 (eQ"r5)X`LM @@I)I~o E0 *p)D6]ׇ8BjHh<ŧϟPqǀ"BH@um~Mu]c CQ8"W}B8"Bi~.| b/A*LZD^:KPDQ$IG1<_Ő"+2dyQ7RIZ& ĉgY)4Ã(l>x4Ƨ9<;)!J"Bol> MScֵ nRI P|gY4KUkV~D`0rDevfeX189i fy eYPQNSD^XYfmA(;}J,\ }8>x5$ (x:l2çOQd J"BJPUի_b0`0 q|snt'H]"BJo ej$I0$ n !n|@UE}*^k VUeG C Cqd?~n~J8J"B_J֠6uv=Fá C,KIĆJ"BH@uV@5XVO FΠwwwwmU;*+so^˗/2 O&/<<_ IڃBJO~)BO81Nqwwg|yi  G+X,36 vi mA"RwNJsnA=*S^0 *I<E"ȪcJ=+/^+ aq9GUW( udDo  WuP]]qH~˶вV) 9Os@'  AsXy @^1bd- 8(0Lp{{vxx4h4R$D֛5-#F9R!v A=R$ XA^̘ z h?˲>HDQu%?/ڜ'CГ. U2YƘ5x8.B @*@.|?*PT0TUxK-cm۶Z. eٳcDBJـs׋R ,ˎae@O)ˀ A!lVAQAeyo zKs4Msb6M@ h/ xq8(/SpmA"BoU&sCP 0-(8ʪ|vXZۂDzN a  A$BlXFeYm-hӯo77`2wwwHe,K7kiFnG`<-®  9 |`2 pΑpj{>f>~w0'*K#"BoI@Kh|777Fp]פ? nǯf@@})ӄ, q )%}6 ,WqW4"L]B '-CpP28mm"rdiȯnDJy?~-& |7׆n8(b%ƣ1ຼ"xmb$I`6ʲf#V8<pE"Őn f3ޚ`T@\F.X.5Am*l[<>>bZ( 8RZ5\\"Ktz2tCEX,U^FXMp{s[fףW 0*`ZwQ* WDUUlt؎mLgS$w$9Qب4MzZIƍUhOOOl6,o%8#C{GH@ L,K,]p483pyI`2`>c:`4HTeQ¶l !%%& 8$ \, L&X.'KBByTz~0t6fB?ED p84-n`H]vX ,k8cKe;@"UZ15,R˥ Hॖm klw뙯f G  \ x%ض \o9 $N0α/x YDU/Zm"cs %w@@:|%l0hAQ%8Pb(~9Fki Ubl6F0>FDʨvẮ1d @@ZVKs,˰l(3PJ҆gSs'c3h[ *pNm `Yvl6ا{m 1OLKp02>97琉 ר-x8O6 ve[HDu3 CqMo$`ei# \  L&N*LKpa"s.>( dYgm@yr+Hpe@w4X/Z {TUa0D'''HPٴ}psss`!ه>t{ H:3Pytv`8@! BnU{%<#;kxzz2Rsn A"%zCPڔYaq(Գ.$I[=Xh䅉Q4CK+IPHe`( Ei1HbOb}Ug/\p /PNeY uh&0  %@ownD$N`Yffn/_AH A5{|?)K =7CAQa<c:b8u\MnfRqww/L08 E T`3nH@ hF~@hRp eBt3:-nQ3n g}Dq(\Guchu]@ R c=d . hYPc B^ 䅺0܇2] pSGF|b6mcPM)H= SlFUWn҄9{!'^PRkTUe<t:T . Л:)hZaݢ,KH)!F)!|7 $kp_Cէ̈́uu$=/U@{A*p snjaHWuU#rhuR>@~`ǂ!f& 0O'Wkdi|WZ<3ep8DFplE4MoH+v> Mm LSLSĉ ֫5VOdxG>0^۴(_~oa]a x:|1l63驜g/n~:}[$F0Đ9 Gã7@)\OOzǧGE `0|>|>7(Rʓ *3 uG  lV]Ct`= `d >8W_qv=L%DlFӨ觧'<==  H:k۶iE(6-,BǙ0뽟o *W<==!/rXkIDAT`lL@<37*݆#+h7_ufFӨQj>QQ K*why{Tә*^̲  .z}0Pj: np8QKuf('37eGd 5ެQV%`8t6591vre5MS YA7#c`3[ñ34:ҝG Qe(V'dy(>$|߇d@ k},6-lFH4=۲CZpΕ HUosZaߢic>>,\WѓST X݅7=(ہu]qЩAmۢK6;!U8ؔ8%*hw>,:!{O%Ir4? RH^HwR4~Fc5y)~n|M] gdaUXȓzvEp< x4`0@eH@¥:,!32@n쁠 !@P}zv,ab8: D1޴QbD=jbZQ.>Rycb 3phd|!)v3@ f.&f NK0/Rl7[Y5p\Gm χ2@/KdYf^}A<5O \@c&`20C6ʲ Yv "|A(L3o2ջ~nC^R <$!|u> 0^+!]M0DO`xAwR{iJj 2NbM:$u]874 8} $g{Psz.82i HA>\k!ڶE]ר"bDaF?Luʼ4-ka;j HFzV>+ou]jm KZ\P*@3]U>/rԭ>8RlwXm[4Mi#@5OL Wu {J=݀ԙCB JDəp]mm3 H78rլ !X2NwQz*w ~dCzvHAR5yޗ<#y' CăXO > @?u*Pdj1V'‚ޙNRHKotnfF*",]Bɤ< >TUƙ1H I'( $u]]hj&g6?@iJYjU]j+l„B^YR4 Dotp^Uڦ$:.?@K nf*X@'u@w84Lҭ}QUꦆtzt USe-%z.& UH]BI@@Wu\ NsviڶE]ըJm@ ~p2+U s"BKM]juՔlN@w5-Uw` C7M@0a@P۶dz\5݀g 8 8y4$ GS6Jmwt 8&Q+wtOwmQ7FWu 8hM|G48:o@e(2nPW5V seghX7`r, Q+LJn' Ԫ ,X.tޒuB !Լ;V`V V#z =Ɓ]|[mҒp\GuTw4`q) |K}= 񺪍᜛N').M_wM_r]am!6-Fu<V )zVw5p4q3 (89V*_?:HK{!~VC u9?oeԅY0V۲o9 c!Ze V3vjxt]$.85?v\Q^ zY)$D+Ж-+DmD*pu `\p,HɿZ7;`$v^- \BYsQe s=5 `m8iJ!!9x!pԔC@; 4 ׂfrA^+]H@rh[Jw[Eщ)@пor΍o`;xpPGRP!uhpWN+ܓa kqO[o~%px-˂kt%woZ@5 Bnx `g_HHK*uKt%p $%Mz#@Z~\ pi' T\8p ~@wH#!M.@D0[(K[Ǎ3<L }t7|Hp~ q ~ l`vOwv @+]67JK ׆8p6-XT eϷ0߄8t7OD@[ A][pHBG_*Be v97a9cvN@wXq`Zθ 8:D+x 1vX86pVd VH@xM>1.]!ԛ ?Rـ~nUT*%')z.7B q<s"L𖃕̤X0pws0zn A ̶~>~X H&!j^d ?' \=~~ڮ]8m (ZV%QA1,P29lMR??| ?u7C8T.?膃vLptmYc H0`y j$»@OI-~(% KQJwtWco_J{~y(S~G[BU*R:Uvkw73?no544!9@C夝줷|[^%/u*9HJRs`K7֪k3d̙+T.C9UZz[vgzo~]tEL&9PBA rNO4կ\RC/ c0=tNo?Tf{J&ާX,rDb:k_/7lؠs9GާT*OsҁZ[>@f.Lvjg 6lv m0=|xTӣ3rY @Oe?'ڞ0'IuYZreOR_ҬӡC5ubUOR:stPz{{.'_ Qd}NjObs VQv/MT_z 48NoFiik4o<*Ҩ(-j\kz7߬'x"A@0)ߤ/i`K=&L&9'4/>OS)GyDB@-""YYfiƌ7I&fp3g^W\z`@"Kt{v?T|r}_=Jd82NW҅Mׯ_?_t:ЯPqiZW~֭[}289-sqtZgy/_mr9S>Tf2 BA\pAP((Lr,+ӂjRSrY_~.\mJ4+Z-ZذPc4nAf 1e}95Bjzwv@SS: 8TXw}w=ٯT*q->w2?ַz籾@$\L7&c7o7 d?utw~ɒ%:sBo;88aN8rNX==-'W~g?zА8WXKv6om588@vKy^S:Li+Wzl6.>nFJ ;w\.K/ =yDEcQy%To}Ks b-~fj`S<z({J%1|@\L?v? Sٳuګ\.-~" 7̃ue J<>[rBpYzyF?LFgq-[mɤ,c +/MIO3ϘuWH\~{%0~߄zL&@T qjW'?~k0l D%/5%b7oozRd2Z \ tӦ+Wjƌz l5V'M:Si&{Wv/-iZ5T,r:묳dɒPor?S{^KJ4yi@_WC,@"$QLhv|Mw3τzl6r? *b?=@S#<{7{  pHRd=]\ӃM/nPQ*r?; 7 wO׬,6W֩z{{U*8W&&uZZ_z֯_o~  h74 }+_ 5K ?bBO)fkxP144L&@ vw0w}zꩧBD Ny>w_yjB>@" X:P/_T\7oI'd2i~r r@} NSLPЅ^j}_}}} @T4476W4tMz7"L&YDE,ak~Gy${ *s(pk $dtM7zaCnDJ|Rϵ=g* '[p?:@;ɶ'MrY\rI}%I *ZضPMj2;/=U.9@$~ujb0TSO?a` B\t|xSʕ+u׆zl6aN6MYi̾zUyJtI'iƍ(e *&=i@W^yebz"&Lwy̙=uӕ+uTp~ٺ;BАr'@Ԗt`@-L,4׭[N:)M|\Nkth ZtӦ? .5J% p+_~| }bFh?T멧 p_Qxq-S_gJ>N+Jqh+iEBkt'*L_(ˉPS@UKzLr/8_.X.tyokf>~J&&1T |7uY!?@*қzOR:cg>~&a?Nz4KWPX 'l55~a5}?5)TŸ%9k֬j󞾾>y5-Vj*K;8]|! qPb=i%o5  J\:28TN=" 7^m{4L&5}ti[$IeY5:@T4|_.P6e@"Ùy|P .4\.)'=^O>e*_rN/~xWOOOlcFS+vuuc ur'CqݬM$]~a J\i7M/7?裡R)N4b54X݂*,:X.uiK/TtLl*WO_(d86ӐkZojlrC=T}}}cAJ%N4@de黥I[̃e @QK{ԊrrW^;NA`Q,<DIӣ tI$QN_Aӂi[7n4?N?k0FFi^jXyfye|RI===:bo%K_R5 @@?SSL?Ob ᇇU(80BHZ,kua岶l?@~r7 t%oppn7>3z饗frdaLz=tZzy~eω:Lz,:L$]{ޓJܤU*W]p>l|g`;5 |^_|A/9Wl/}n 5RPc %J G+C5 r"N >g% /4jZ໦W^1;NT*q(bݫv/RK4'_ڿ0;Q*2'M]cz]kJ0bm&G>6U2$DJV({i07`;wQ*֮^Zh>v:&D.!frI .$HSSuR$SYfᇆvSxt[if?WbQ===dH)IG eoPA1@ 1rKK\.iӦò?(Ig7 ҟv,:|6PGڵk裏6{hh;"3N7o4 Re/6]TVV uϲ?0d<G j0_}cEe2N25lYSwj) Z X.gj?bm>״iT*Lf@I+̃?"*^ki`6lf@ϔ?c%5!-v^[oe>v*b/?iF0üUW]e>vPP6$Qo׃jecݬvW-f* d j:b|oTX4ղ]]J(Q6?th`dNO7^~;YD yaMo~c>6(*K|DN~^zsbȲ? _vӃmj7oެ_~|l }/T~UWl?bQ\s UK{ZҤ`Rnr!O:4}t?@ ]/k`ϊ===:蠃:jeCL?W@r^^~|___>񏛗qtEt@u @QLwYO^XL&я~H c%_*W@@-\;^Sm*Ҝ9sf? W{fa:nԌ|5\5)?IG(SW_?P_谧Fe??PƗ`Mj3f͚?P:NN5^{\Υ=9U/׿5W@@kw:ӝio+X\.3grTVU_p_0~k_S؞?oo*D|>'|✂ot?5kjRSR?@-H]f>W:U-#]XjX~ӟr TX,~T{]w\.s TtP??̇NӜ_ _1j_岲,'SP][Kۗj;0uwwjSH&a[lW˖-͛MA(p5Ӫx4/lTEbf3L7t<ϖry ̧5Vc+ˡ?իRL7d{) * `3X%So6i6mMd@=}[Yf[ltaͅfG %*yڸqltU9vZ_t 2c<\>׿uҿL&cQ@ۓ/1|&M ̇D?ӿ;`7FN60>yN0@ٰӍM ,0W*t*OIMkO'@ҴiZ7Qty[nż_6e ґGMm~|hN7LT裏*J`_; -7U>}6l`:n2d@ ҹsMww֮]k:l\f%xjU3Dz?{a vYklW{キyN|aʄm9s̻y&M&ub)_t\n\.^{tL8@!u|T` vD>K*D;Lݦ ,:4wuuiӦMÖJ% '>ךjoVFS;HGC[jgU=kq:;DNeS/|>o;l.x_DBƍSSy/rm9g:.李Acƌytv݆wnnJ/^l:&k隣Qcǎr:ۙvvC=ꟵI5pv+t]k8;g؞c}3 Z~b7Z[[/1]Mwyy?76&4TLiӦixxt\R{{F5Ll/%-ǛUV)J6z芃v N7t?$94zh577>FR_[v7wuu}N0?f566_;T[o)NjtѢEРѣGo?wܿZxYO30}rΙji@3fyK&LМ9ssz)m$Oh;e|WWW'@,Ӹq̻65O`{7 a\@}xw߭4w ۈK;贵><` 'm.x\fR}F^S_ЧfU~&kZOCGGZ[[ksG>5k(ɘi$Pjw7m!-]z7Ŷz=} va^ӃMMuA9i'/]r%:BftFD؊udR[ģ!;8]{^oN!t3>;<ԴU{O2E?BX,/ciHh>.j˿9k:+~{zb `d47*Hjk/]RɼRPbƏz{9s~/ſ{?WA_;Th"?ԩYب'x"{}# ==7?`a_fh~3jKKKV?Cjoo5w;;ӱXS LurYB 2Vx^A\f̘C9$kֺ.v]{{J>6!KmڴICCC\@joog}t5ׄzMVY?[$|%АTPCCZZZB&̦q|zսZ&'o9s.P+s[߽ޫPf[?թQX,jݺucgS>Py`$2 >@ b⛛uwz:NƮ}ߛ#)'}a/J~a@0wc`bm-[pT*\.sr555)k?pwq^{%0kJT阴.SGGG$ s=^?HK'O2>v_[[wp 4/p BGtWt$u Px'M:Uw_?>}ToھBPnyP7 ^ZK6Um[ʩd?TD"ƿ;OSN5/r|J 5'?aԉkuכK*eOs:cڹsJ'[oUssku{ [!h٬LǤu7׿^ףޣ*kd!l&?j{gX\ s}Ye]X7JKk?c9FᄏMZ▌mAu+xZViR0b>czoPPoo/'ΝvT{S'OFqd3pZr-ӦMf\WO6|}% aMO?tM _!5;l[b S>ao?o?A7>  &A___yTŠsN;:T*ìgK؛=\S/_wPZi@dSw>T_T?T07b1q~nv<PkuT˧L˗۾@P]wjv2>=3[5J* *sl;qs{{|&@'0 1#'O֑Gi#vRJ"'-zt̙:דּ2oq[v?Ǟh]l?T0WanջU:@$@2R)[ <566?x?b/_s; }Su7'@hjj Uo1vr{أoS̙3C P];-x VU*HǘJgϞm})??ϼ g&|T]VyD+22wVCCLWdu9奔ۻ[eVbݫjnC"0o&oxoDsiLuO>t:IӧOXҭ:$O͟6K6Gj;0S5kMﲶ!r?@Ӵr0kc=؊ufZ@ԍa{ !ΊuxhL@:4st֬Y:U*8P̵ 4$ytɒ%:Px,wjPk&FLO=ɉ?T0k=XHmpD]̏i`u7o!aj.fʗK L2=u8j:Z:;@ҤAGA#Adw|AE6@%T';?i*]PP{f*>{o|bٛoi^*&@}aSLXߧ>%$TTb<ϟ?t T. [^K{m+^y y<U]S !:Tj*ieUw7dM̏vlSN5ٞd@^O8QzC[[źwyǼT7Հբ]N^xt P<po{ V,ZT?{Qf7_%U`}}kVUy6yt&֎:PIh=B2<7J4a„usQ9\nhhHwmz\O=@Gon,:ިM6LJO2-\<AoDH{*Wg(K4Tlmog>;+ʪ=2ҁmJׯ_O:ZWgl*M&m7v^GCއLW+{:Pob Gb1vww:X\_U 9:Tj}@ʥ|UpiZm@~:P%g,գY#أbٺuK@u ֿ---jmm%S^~e|7?.PWǏXVZ&TQCLu:WPC[F@59nժU::&LXƭѐsRO?SSMu𞖺 TݻOJ4`*볭,v՟ c?f ,!#} T wR.˙CPWY=ŋ͇uTW_jhS˹34f̘I*YU5`:P{Wcǎ8]mVڥ U9ClBjHOiCF:ն1t:n|Us`#~Tj} 0F6K=|i/WźA1@}v6k3j4JIx 0o@% բ! QYJy/mիWѕNj#TIIm7v6@GGK{4vuuXw2hTLn @vrBIڻmoSmogT+ug+ :* Vmmms)<*]AnP-@;;Xv 5++ * 1%Xl2ƌ ^׫a ĹМi6խZuڨ@|ln w;snj˟P`ۼt'~@< .~:PcF7@ iLCCCje `}|~@QE@5p^-;BAA`U4Pp97bN;;Uh:@v,@h&+ ,S A,XvZ2ҫU!`۴isNmmmJ*AkTe:PW=U3i#@kjj21P%&'MuL@mvlStA ۶Nt@cccŚPrnlkX*v: ^Ͷ7d\)HSFMXV.Ӥؤu===<.5#D_LXfp;iSfOvNj&`Db@5H 'Lu6l01_Sf@kڶ ͛@0ՠ#a&@01g!u%iRi4J;\Om491Ts` ;lS|ur`-= v@ MnuJ%ۚNw]vXdj2ӄ z{{̓? RGPyuq=jB&@ԡ]`U[ks w+^(h@Mx>n s;Pyۓ$ jEcTg t&@@h.6 @h+` jFt;LutVǚ, jBYƙJy  :ю $O5 ʶmyb2= }=ݫD¶y ibĊea Mj1k[wXftK;uz#h@mH #Pww7@A<(Xe:@0@uAXs+xr IMMMtjAo>$@ Ĩe\&ʫjwP DXPG42l6K@QE6zhk  5j.4f:,9U"4@/d3Jf#2 @j"0PKd8t: $ b.t@Zr [H:QT@(mOt"@ uJ?PzZ(<@;[t $)W箩Pl F\Hk,6h` c@j(:0qv@YJ r5j*4)kc `pw.?w_Jt#j񂰦@?HL]U5 zS@ i:#tU D*$p`ż;`;,0oM- Ƴ}kSxld@@{j F60 OtVcIENDB`DustRacing2D-2.0.5/data/images/corner45RightPreview.png000066400000000000000000000321101360473665400226470ustar00rootroot00000000000000PNG  IHDR\rfsRGBbKGDC pHYsu85tIME ' #p IDATx}rײl-f`xn79[vaZ N уJ R'XY&jI|n $Aehx:RcI#nfmX Boo"Lӄ($>C_%(4NQQ-TQΖ2S} `euTUdYXUU)3 2ΦQ)Wкkh"'lVz=t: C,Kض ]בL&QTp{uy UU!2,"2)TZx||DB./_t0!22􄇇TUib1ȲL5̌!I\-ydAz@PBLac8 ^/nd2r{Pב`&4MO@e tr VOX/0c o߾QeYuA\_( D*b=Jit:a:p0jy? x' |e躎x<|>FG<=>Qk Hu\gsn aX,j|>O=?k7N>%z|Gl6xifDG>GQ#=~CD6<`9_vL&$I}wwwh6VVB.C~ oh5K Vz0L&v;HD"RF;T*I' |d Œ沨kxxzoh5[es%^3BV=iA2`2ePmTY} \`^qs#&J$b?U2ΥQWpxzB뾅BUUl1 ~i ?۷oߟd`?UϚ?I\+_,-!/mPY|' |m#Q*k:=F^/hFl6}?Z막?\侀{e1vM}|eZWoTJxnvpz"\xxxcr ]v-z}=xx'D!g-r9군7Xu{h XVp]eSePWoO>\,~icXr"UÄ[~xV|>Yl0 nro{j? /+o*b]yxz@DPjvLov1N!T*JfR>y<q LGɌ>cgZAۥM<ζju߳/K0b#& ::FQK=B6E^=ZHX '}.:0a-F5G࢏xX/r_z!{Z!D%Yyh#w沐$ ~NX3M3t F#TSO 'v^}tˏ@Ƀ?t̳ߣlX,"ǰ1v-jH#D)W}rj[oޣR2t]t]wFAr j͠Zub ;t^nч>@~nMk!B$+ t;]_)h6xxx @C?v_G|]בpwwGDQ ~Y)\>f:Џ{E yfhO}?LdYZh5[(ʰ nǟCO Ho3ThoݣZ"O;~hCC?@bFmud3Yj`0@`0xd7 D}z cx(*vt1'5MC.N?"z]]S>OL&G='DK>Z-f_>]t؃@ҟ_) ￿G@6KX o^kbFC}4#D)5 zwMku{X,8ψb~"a ͠Rw(K٧R NЏ@ዾ;-Tv/0AO D7Rq oݷP3_zp^/"OO K~VF|=ݽ3m/PO p_)UJkޱ\eZ8Ϙ!?L~2V8<w [kHR=Y}=cl6x'Jz.l6 4'|?p+ˢZ\Y};FX.mjF6D+]Ftl:C`0|>I~rFzB~@JD"B&wM!<>~ ?2"HjUq׼")nFB \ҟ@?J]w;E:{s:c8S'DOҿިy$?^/K C f37+$"\sp?E I~"hҿ( Eqc6a0`4a\?͢VQO@dK?_ȇ2(K C }ݧhVX,G 5t&r]Z+ }Qj54 eZ%D-뺎x2ZzB!\?~K `,* :ʥ2$|yp/Ij5 $ D`uԪ5d3Y*JAx,䃿JZRD? ?u4(K9PWdbjUX}-˂ DQ UUa4* j4`Z3** (E@鳿"C]5uy躎(4xz qe_[Td`()>yO{eFrD<q?/]僿x jl4@t*%R JTL玿nt*Yi"[注*k(, `Xb<= D-C_ZJ+I-&?5? j_`%,9  /FeL&rjRD? jl6Y8b7ϣRT*Ѳ j/ɒ09T+UT+U9蚎e_&ATBTB. ٿTb|cWOUUR)J%_k DQ + 3PA~fYh՗~d%DTEeG>Si%T+UE8\j ~z]~' ?Js:Ufx|NV{bJb˴8V& )~"[E2`Xwqv\T ُ? ٿ/2-zd*?erds =9& %ǣ|rbMOٟ@_*\)P(4M/WL&?R l"eQ.Q.A?@PW(\zzd2l6 O jKJeˊ~ e@T{0JP,E7MsS7\) ? Du~l>t2?\O p? y;.)n8%W!O $> EBes=_uq? /K2Mid3((bx/ٟ@ |!b ?5fsw<K?bb1T 2+_*(8X.XV8No~ $I* DQ ~/2-v|bv qH#nE3J/V0d)ϝ%[vW_.C:K"1_It1=۶HG D$I,PUK $ å?*Yax"l>b\.0.6o߇&@x~$S/J*-o^{럤?! __?gÿł;Kpe:Ʉө4t]gÿ*$pPZd*\>ǶqȒrb[t:l6T*E[/y^ <2 ̘ \.Zg V-d2_6}߇pDpO=\ew8a^c\b^t:dtT?— ~8N=Ck|da$H8XVX.vg&R2 $Ko6=59yt@LUYy+o*X,qnZ^q8o"L&x<]ש'|`0@p8( l6d" UVqYo\.O$Qg2* _:9zgzg*ta=V9#,'|Q???~1A7?ΤgJ3-ql7[1??@|>x~~g},ˈ$AVdQgY9$ (~'|[s SO :;>?߿`0bxKuUU4?Vy3u]..iKdfdN#zvhj۶Y\E&+^T ml6QG?/6Ndf#6c5MF$R?w-(ۭ(7ˑ%uwxyyd2n, dds@P7L6Hg >acZbP???̿n@2dI1O*B6ôM6 V6 NOre~l6Rv-2?XbFfj+q'G&A:F܊C$GWkV+Qt~8N(-<σeY( h4x||=*'&GUU!2z:3{>;6mHHӤnpr`03 4Mr9uF\p_/h?-upk}fxM?ᖃ?8yy !Vx+ɠZjjT.!ٛ&r3D:F:f8XoX?,hp}m8bL>!NRjjR l,f IAu]ج7v8N$IM G,K Ct:m ,Kض UUJP.l6jPWL'J.>'./NLr_뾅zl. Yo@/^ҧ3iQ{~fv+.d2IM8XVFvvFXb.͢Zyz|!-awa0gD2D:2ba^c|>0 % *-dnt^nprwh4( :LOZ\.ZT*|Ä9o? `&t]Mf^~/~IQ,QoѸkT.JX]NϿ=Ƹ?zpdp R)$IN Nk+U4 +e$SIxfng<`a5_?EA/=Me?>|Xȭ?ҟ}1&^CZA:J6 ,gKv8?_F}+>btpSxx](PVQՐ/}d ^c1]`ñx.{sUO'HSH8o?MBeYn&_Gx<W}t]G&aٿVCTf.^_mw1ϰ`l+?S1EKuy"ٿ\)#N ޭ1& 6 NS(?ק @2dv޸U֛'IP H#b?Jj\znNG M`& tdz|=?G^c<c8b<cZ|>CQ$I+e q8jޠNfǟ%3[T2n1f˖i|O?ᖲh4h4rpl6rRt6 Y;00`l䚾g~~q<x\T4#DMrlb!cø,awa:xrߧ"If4 QhOz:>y&J!e?f`6Vk%8MSWbЊ#g^EV:.(|ud/]v;ai|Yq<1_1O0α]oEbz e!nadI}fSQ{Yߜ"?!p\.Ƿ]$2 2 ˀ ſ pȲ,о|4MQ|>c /]d2H$t gjtl6 +5}UU>"?n׮xx 0ή|.b1q$G{& P{/vMػsn00ͱYm ?Z@Hz(y%@ Q/}ծ8vJ#CQ'͙><__K +2TMEd@|0 X([ ?u]e2dw1M=%6 5-eȴLēqX |(p?*]frݖwo%,k DQnCbh Z8m7!8X(p\!sp ?9w{]$Itjslsp8t: W X,O DuX 1#H|yca`~)|)-S00888p]( TUiPU?+4]c`XuÌ Ȳ et> @MŠQgv;!|/ƴL* no_(Ȳ M` 1A%ضӑc;?Qnsw]nC7cc1q>E#bC@l 0!_?@5!t|m~/حdl3[npEH| Č 4@,, a@ q8#5 6T.~ݞMK@@@+a !\(P'D3^rŌ!|.v._jli,z[@4R7эon#&\->"8Ƙ2.`YfI J K\N͕d^isk~ g9z Ap.cELlGVg8ws\P. QdE8# eY^ QFpBcr+ 8GlǾkEIo`ZLPԀpz@zIq1qt1‡۵qO!# vL +>ߔ Pz'tq|?B vQn'  ۶hQ 9Dv 1fDLAd[xZ UJ^X$z.# %~  5# 6?WLӤ`?Į̎:o䆀kY/IcY8@d#B[~ Ov1=&*I=3q/Ϗ_K@CUȊ,]"Pp*}'{/dYZR/[6'1TUU\"p m{*@PXL'۵g *⑄}fRDžI Z_B@ctj, 0@0p#f00qon W^KzL]+$!ϟH24ECL Eb.@۱3*xnޓ,`HFG3 )tE*% arGp(/@i@r;e$- v=_R {^|6n[}^ US!2 \%s @VdHz(\ ip K@APTÆL @$U@UhUS!Ɍu0 >&2)  Y88g3\߅ O!PytC}chΊ?  N-%8 w>$ =ly#x wP'D"6.1| s(."; yԫ %@HU_%+ |ׇsr`mvy 8NMw _"+lV`{p3Õjϛ T 2RM@ Ze/w|8ށ{p=x_S[Ib>EfL'yfT {ou|p@H UQ!CN܃ sRņxcCC \NL@Un%hϼ,3akjLe@bÃ煎#M@ʁ@r Kv><ORH,ɪ ;p -@=כ<+EXп6 E$H4Ybf xU FD(Gy ( IK>˗^C iC qε'VNAW_p@Q@<ɻ~2%fuUj@WtxkS["ϐ! .<ɋ 0P$AS4(r=bۢ$eY$8',#Ѕ\Ʌsm@t PȒ 09P!jA;pwᾙD?|[" 0]7$0< ϫ$It!3Ё2n Bt;TG#lUH3Tq#,2dd $~oR9 wk&.gD J伊 ?n0LC6۽Wސe6.Þs>61櫽aA>,ᖲ~p\'΁G}5% W~; }/?xW#xs`k@a܏kԏCm1-&@ Hwb$]aA?TtxWODix %| @~58N`6@V*r8!1PW)eYcM@~ ρ}<H=?d(/N@e'$8D _mJ +p=P?3+nf)pJU<8q{QIO`:I~d%w@C $<ٽNx*   x $俎@:O"07/o YM@z'w]7-O&ros~6 j@\UY| t: j[Vt*NWUۏ*I[(]fhM*JJ= $vẙw5SOxm OOd駽}F |~3,At(~rj%ij`M@UVÞW{`"­)Ub<׫AW_>= [e!GAi@$\*Pl:_Qb1zks`?BY.X)*:Bg_m@p9h䗃7_) 6Z @dw @%ճ+7+G׿`??:v#_9=#| 4=f=xjC Vq ?"׫*`-@)/l@᫔o*c_TU6H 'x)p S`0{-3?O 3 |ޫ5—|ցAқ8A@ |6@/ ){C ཧ) ?;O {IENDB`DustRacing2D-2.0.5/data/images/cornerPreview.png000066400000000000000000000321231360473665400215040ustar00rootroot00000000000000PNG  IHDR\rfsRGBbKGDC pHYsu85tIME (, IDATx}vJlhdY8(Q"L"hv(3c٢,d%KWڡw+2?* @@ H @  $@ @@ H @  $@ @@ ~' ?JU@x-)y"[9J}$Q~>DQ8bDB(~{@Γw{{9)Q(x2=(S~?scTN@x6[)Fdp82+QU~ H|UsLThL/UmTe:%pgR>HThTU% Yދyzy@h4i IҪ. $ _2MӠ4?؉# _WMIӠi P䕄UVYDbQ'H#nMa@g:#9EREPUU. :_йhL SN`'J{mߞ?#{Ro#gbKrk[n#4h:` Ài0C34[rhaZ&f@D@g"mhleߒ~?!E4WK^y{Uu/+‰,CgX1š Cߒm?δLX4aA8Ơ:9牴}#| Ȁm.堄d -rP]n,z cMCOZ7˿ # UC>"u`[^q+p3 Rdi4/,/9%lV { w}?TvRZq- #nl Xl isXˀXpli2,.Ba2N|]eMeΊi [ț)'pIbgGm4I$ 8.,Ao|0b/liŢӘ$ansn$-ضަcq8۴9ə!sw25mM\=o}%i)$-:vQ9Hƹ'GX  rYv[ws(l&':p؎-I.&5&s=E+˔bΓ;I9$Aňa""DQ8Q9c>{. q#Nx ȾO,H/^6^ݲ, ۱a;6\Dž8pT*-ؖ >93v-:UQE12gDO[.bQ 0@FK' RCR{dG?h-fJ(ɞ hg;6'yu]%NRv`Y<Q艫Z,q#>aJ b* (~\. P _"Kv=gvi^ "~{ʻ?1" zy "扼O}bi&8lpI5ׅi!*$ jb xw9}/i*_rdTxTT+UT*Ns{兾-uj {bg^c^K'~ߢGnC" cEr ELAd]׿I+,DJ!";'"+~ x>?#/ry˶d<^ㄯVwO Զ+v[;&鮒ωYcIldDl#[.<8t6iH-!~B Lu4_! j+$H@޲?R8kU5j5Ԫ56q9' v"G1~ث J^!GQtooAI.-HOn/ (y_"|k5_Pv{_# 8"׋a۱9+Z z]>j ^eKzў Nj]T7'O]0 g[%E@4yyr 8DWGypBQ~?'86kIXReo4j⻮ VU$źfj] b(^^*EP,˒' BWwMmn/r᤯lIllUPv2Q^|6I Zd>/l8'9]=HvEN 0]*r^)l _(WO@Wr6R^o6QQriLwD/8٧)ө$~"҇a(I/tު " s,ys-sC$Mnrׁykhhwvhh5[<y:IAfbI?b2g6=#'䄍\\HVT?IMv N^N֖eјd@+sI'L&%$K!TPRyF|_>@Eu"; eE_FzVnn^Vz}K|c i" #>=_H//lEo^ ވ;o a%;%8Bldžy7vnh4dT if01%E PϏ yB<+P?Kd' |# m\.Ktl4Q*-[~rt'F#F#cEy <J ~!I߰ηߖJ%TU4[Mt{]  z=-T+Uض 1$Ifbdx,?dmE) sz1"hZr[?_A' |␎arlr?shwڨWp]:ӑ$ ||>ihGNTE/;/EaOD.e[({eut;''' vh(0uY!x>AZ|z-zph4|^ ۼ^'kO@QZi'h5[T*L arx||ӓ$~2ڋJj 9nQ_BڶWB@ qzznzq󦓩$=0eqOL^Uu4Muߋ!{O'/N9jvIggg8?;`0@FūM^[o0?10N\.3B!OZ/>ĈpO@ ߲r~ӳS nz@UTA|{^rfsjfv{7!"ڋ>R~jv q~qӓSt:T* @X-Wxzzp8-noo11eE,}vV۟ۏ +YnG \_`0>qۨ?wwwiBUUrztvz6O WyxT.ިWWW8??GGVi/}вRl~7%>|u~0g:e[*9.* !f$oood"Y1Vv>K?HO ucZWV% 6 1p}}˨/&TUWhMib\777+1TkVm l!@~uQ0 p?~Շ+}*5(0p?k|777xxxl6vEF Jj5IO P W_Saߨ708 >|@GRi7>pw{_˗/2_,r7[NNNprr^'>}9H~qvu]4 |׿xQ*PG\˗/+POEPŨ? tdO߲,'H~/B[rl6qrr+pu_._~Oq}}{L&cr}Qߏf(_/Kh89=_ǿ> ^RYa>?ƧOdo6}dY0P.l6eOޏT#fo[8=;ǿ>.Jn ib6>}§OW<<<`>#eYT*D @7F|l?~9.\E$MgŧO?ׯEW|D8?%v1]Bmި>| N"bL&H___岐j5t: E} [Ζ|swQa2ّ4a\_>?= zj|v>7LN \}µ]$qdk?qsshj$I`OOOqvv&[|V jO &zcZ?!a=^KRL'SHȿZ)LDZEE!o4}෰ O xkye[*ˋKVAtk<<>˗/rO_~"?ᘡi;NЬ7a x4k|0$D~9cRV3v wS~b?roy5jqqq =~79y~q/ ChrN@Vi|wZA...0PT**V˕ِ@7x 'h5[-{_~ 1{N#ybO x֟1 ʧNnr{;1&~qhС  vv~ZMӰ^y^__aBUU8#^\\vrY'HިF ~g8h2-Dado-{,BVCٙ<_VaY@6rW}?=CA-!K3, C~C-_-~q_XSt]j5ضMy?Z/pK|OߗK8kcl6Ƹ-F8}y?@F@c,+*YqE7‘ 3t%շc0poR^}gggvUߔH޸0*>zj~}m,.$O 8o(yvQa0t6á<# `0@kRNH%[6?vjPrKP2EFph$oUmV箁Z~ce.:j GtppX_BAݖWw1(H޴ZABEلȐa\|0 ѿn^Kik Y(^ >Eo@Fzf)HްhUNvG@EFFf_*l6tl6G h*L6@AWs+P^1L',KDQUU .Gџ@ɯ(m?Zv V jn"b,B[~ @\ѿj<%_*xFD)AQl6L&F#YoU)HtkhڨUkL ibXb<r,d?O .6?W*CS5tјG?]A }E@ٔ4j Ѹѐ?EH@ޞT+h6h6J9O2XO snm7kLSc'I"O?pl`M˄Wh4h68 I`\a2`2`X i<fVn%IAZE@VG)AUTA|dlj8ifFrLS8ʯjFJfYzٔ 8/ZZ^RЦh@ueFzr (bZ֟eY<zZ|$ r}_ہc6 K a>.޿ar_ո/o /MSL&,|l:1:O yPr_XyB4abS'+ jJX@8* j* l2H?L1/ *خ"@ PUò-Kex?cH aIDATfży4C 9^o-8Z\.ϲ y/K Ä:o&ZcX`(? ){e C7e|rj_Q9y<σmd cK@%r v48l}_LӔuO ^:lF\|UU15%50DerTD~0 8Rsy2 V+)QͿmTO‘ L^±:1dl_L@@8Br]%Eج7XV2?K'|q (zjf)sG G&ªkw\pazzbSb>o;`!MS~պh?H@U]qQrgU I}Wki? w ja O (&K%8.x`fAHD@ #Ja#/8۶)'2^bZ\OAHIc0 i6#JTuwu]k$NA!OT]ס:c K QtaBQDq i0 eLS>_7to| ;lۆeY0 @8&@`[6\g+(2?_±LeZ-aBS5i0||gm YdPca`TE @rhȲ`6LӤ? l4$ Nb @D0 X%(GXg Ӏi0,Lgq,+`H1 @nشMخ ˶?@@@Q@4UqX,CE@ *:o:˴4,,q,F "iL n@rf&I#MmD7x@Q) arp5EQm07 G&( 2`:&Lk7 0?D@p N QrL3tSTƫ{HcND;ݵrX ±9`:C=lw MSn ?*(ۡ19շ?Hۀw$yWGQ 0 DS5*$I8] .R$Ofi~( T·  @xND -j88@~D  /-8a琣j @^ ʍI\`|'?O(|09 Cl6kl6y xCւkdY[qL\ץk 4$l6XVXVX.X.l6P~xz.G [ *|tno:Hyj|tdtt|z E0>(:(~'F!c'Q_DrlxhF#L&f3, iEM@xK_ZTPU. Nfil] N/zlhp{Y9Tkj(dx `ߚP`X 7770L\.>0, ͉ ic/=ʲ#"/hA Nxxx |kL4rƘl[%c ,/}?ŸL4M!'30X,$ؔ-V;#eɺY^ $i:/{&EXxzz o515(9S*y* * <ϓ爎LcvV<" /w2hO$If!|ϟ?XVH,xzffzj PrKa[MuoZ[~ \.1psska<cZ!cuQtvjPP.8b^av&CeIi[&}ߗF2뺎rV`V YUU!C&Q'1∏ Y$Kd t{/ r_VǸX,14MCTB.//qvvnZ˲ެެ7#|.I bNt#IdF @ sF# AlF^`0%QV:$jl>  Gwi$-:yC'1 Wdf4Ma_>nt>+ W@Gz,c RVC>#cLgS5n`4a>#_>WH8q#~I +;N!qlPUc2`8bx7x4b~ Q_ 7M{<4M{02JLDXo֘NFx?IxہnJuŸMFߗ6ak400#Jw[GB'$?MSײ,X3QaX/X- y׃ˣ# y_-z>a1(@6+l (xM -*R8_R=:z,Co7bp$@%_P!{t/K3Da_~纯%KA "|H WB TEdž&@ (im_r.@" 4_?Eaȏ!?՗BOPLewG@":EWQwN)^.O)/nE @'2V%m@UQ') )@^m5^I e ,n&D_싌/ܮ{^ 6P b  A? `+)8gz)* Gt1ȋI N;_ZaNtUQi@.ŝ=( s?*ThР)4hPA5!yO_*P*V_U"k ߄? Hٮৠp5yruVIENDB`DustRacing2D-2.0.5/data/images/crashOverlay.png000066400000000000000000000001551360473665400213140ustar00rootroot00000000000000PNG  IHDRwS pHYs!tIME+30*n IDATch``(zIENDB`DustRacing2D-2.0.5/data/images/creditsHelpBack.png000066400000000000000000022106241360473665400217070ustar00rootroot00000000000000PNG  IHDR5؂ZsRGB pHYs  tIME!!-U IDATxڔm$$yVȊmTsΌJJ7 (@F֛|QYf4P_6e4kҾf/ `0p _67`fFONfnx|cFƏl~Y.|_ /$/a_/n/ny׫@~7 4#H!4>^*u8׫WZ0es w̕~#A䠭[c+̱2%Η ]xZUU7@ Y}a0~ƣ`ج羬}Xny'o^ܢ֢2/GgWϟ+1>;ສ|1~~w݂ysd1m׮o.|ϯ<.yyyUXv}}w1|w̭oq Hژ_}׮f|k`kex8wOal"/~{Zj=kc^{^2䶗{ɦ3 mZ[\^>C3a0|gu]lh+P !@&8-!'/ldk;3+ f@ s]}j}ǟYrê>>wQ:w^e2a;I_fNknf{Yȼd;z!da/oYJV)hux8VZ- YNWU^,'Di;`lI{nnRKZIuF[xQ7g\/|{< ۟ϯ_~^90b醻;`u^^p,]@ ynVf_VCm7ֻncL_`r_Ap<ePH`E߻-ic=Xpi<7CQWʒ0,; (\,%HAlv/%.i!:~[D/ccʺY5= GS_'ך[<_w}wYk<ЮGvD C-y[/?lƸz{sy$ssh1w{#M</8nҭʦQ(M~1A⁋N>-PYOrXaA#؅3}Ҳ9,-l6Qz.S6j$vO1k1  9|kÎXl\Mr>fp4d0 e3պv3c|і8wNhT:jxHObZZQY_=e٣/'=UgKv1f'qȏ1;. )>e+1l& 8cԡ`-qw34.^"QdLudu.]ԁet},unIMEvgJJ d3JX~hg(" Ճ=D<6 #-\^:Vυ @sV1_~>헽1ms6cj ( ZY0a?< B{LD ͬ Y'gTG$sNRKG3=?_k>S=?P4!"d[@.K, k1`U.T:G/%P7(Y u{zTR˳b)IPOg\e@pK\kECڵZDwSkƛLύ|8D0Xd2V  E߯.oZYa57޿5m 36WPVx+A"}%!tT> EZ!qbPm>%lh:(ps@wt[6.3rPǔQFi|GX9cM q`a%x @ Ǐ^oOjuS_WN&C牝DL=U6=@o^|~UZİ%{d an:`n9<)^dž]J.ioT? )eW ycX ZiÐ,ߔk%Gr=u =5ǁ\Ge^+J6V92Stjw y&wG[R99<)׷; Vry=FN1|3ޏx|ȡVU@imVd/>݅Z,\7r"RXDyZL%+S/4(Em])cN$nO~Jz*0z66j].͐\t{F-2%H`zpi|B[{ͬ\Z[#;~Y Tr] &DP$*Hg,Hrr[s$˘ 7܇R̜-b6kGȭ(,un֩BP ()4fmU$dƔjO ԭ悕KZk#v|+emWm]&e$JgB#+3^] !h~_}98m}JpQ I~+—96#4]{0ZvSb:剫?O+,0НYi VSP޺@Hy* 8.8B']'+V&%k4&_Pt~Z9 V'\{t.*=^1S)OhUq3*6oO SQ }Jh0~/{?|>σ݆m\NTt=0ƻJ  _C-}fT7|.[pl&b )I{axl;L`dtmvlRDu%Z͍Edڒ%@?A?)S_,bgD' V&iE]J-tnܵb ȽϧR#2i U}P~'P@iψk_ֺrP8BI1|.TH+nn·qºe2w@Krj=hb e]݈6(U&.y!c0ػT}zU˗ld;E/\P.e5| d6](@ Xq m ms;yN1pປQ'p-V["4V-d~|"rI! *:t&*"|WǕ:XϬe+hK>)]RT{Bc .l:b0(]k,T ٣T,7y5lrU@o%̟pi^eȬRW=pj (aRq* iIY7m6*bg s?89vtK&O+SbW`܆~jڋ-*rŹqsn&ŪʞG/5*d},< yCVq0Ɗ7 mY?'UVOT 0ǒeq!g嶑yDsN0,خ-Eq>t8hvSSzY#m3#M&;GIX68` JQPԁT2-g\X9 wLfe!6^}W}v5ɛ2bs @#XWq|@t< 0Wa~G@m]N۲yv5="+ZTG k>aLCgZoZ?s G412f3Ĉ،SmRTҾx49"uZ2<3q0|ݰ3N@)mӵ88"?:BxOw3 %eAa J[_غƆxIj͸:]OTc;ٝش$*q驀FZnԀ?lκdqjS*g<΁YUDI@aV+EM%*$y˰99CoK6_~f!bl2LQ-<Wt w64ܻ6UG>&U\^i%G :6f.;6S2#Y--'%Ƒ{; =0Qe]ԿMܦӑR~၍YZ7OuK 4:zAvp7"z)}kSyږTT5:&FAvD:M(0^i[9"vG WN rV(Xk({MN:M-%cqzV 1ϛ>:Z!S-Y:FXO.\nD{UN# "RΛE_\&ҵu<:~ROYTN7Uvcx;Ge}y1gl¬܁9tm0AucVwgX7od#aFٚm Q0ʀǧu<8V?lmpՓtAs['~WHrլUV$,,Й.CT-.8= W +S'?kA_(KoR8Tyq0[ XYU.?e㥩P=8T`USEz}^;'G8Z,l !CFa&ac 6 eŴ$MiHCCUklW=I`v/c?1s1Cx Sg}4EQ\?81OCsx G!ګkqϢThD T? 6H48lHk dnXTfޑMhC"Hc߅ȭWt,2)TVS Iv>=rpOyYah6T?:d,9یwS;vC"q}\jc&uu^g%ڡ:A/,y;~vm h$̫iϽH@ }SrP-f4W DZH5ӥD_5g/k r huk[AV?$u٤WicE{Һ찵UCc*5]%4$8MVoj"b7"GDv 2hbzF;7HymFa=&'Ǽ쭏Rq!u;vǰxWl^lJMMS t ^~؂h &>5,%U*SJ1T,F࠘.FMf| wwҍΠ֎6F<Bm\P3GQ;v^QB 9m~Ji C n  WD(oJlYG>-ϑwm1dWnYlM(@<0񃊲T$+uV)z+emzasP ح[^y՝.]Y=Ga(\b1m떈&B9/ca<ˡJVQqַ#x!=Œqq_7N??%9#`yOn@ VVϵ-Q;Q. SQ $mA SQ %sǝoD+AWOxm;bn;L+By(v+ Ƀ̐qczbImf{dA킣wT W."*4=ɍQ4:ԅf]2+{h:|kl0Qf0pa{\A_g_TB9{aK ]鲘,I NHق R ꙸ;, UB~.bQa¼ـ׶,]3)n>=M[UB{1؇eȱGmehfaGYMGE\FYkncaH 'um҅=^\8b\ܴhπ  0٬zҷEqBzPCFjQ Ĥp b"{DdU21 IDATxCJpfOme>1klyۙDzher%0A/vqCԢ¹^O`Ɩ($GA``8X<3s%h^D rIp"Xwbaוx!_ͫI^7?Oc'!;0Cz@Y^t&f^_tQbN+lUhT1jOP1#{VaU9>*4;pVzX>{E0JR%ƶSm,iI4"9q P 9Ӯ-`^=~%J +֨|˘K*!kkw궁G[=Ù G+nӅ]:&ǎMNuڐ4MIR ȄaK #CIJjU#6r=Ŧ  Ŏ]y @-Ңmo=rЇz*^ݕW'A"`5uS/M#JANXݳK,w7IS?`VLQjH*QOs't923ל5v QH3(DxC0A<Ǔ߬5v~ B #a[Ҹx&^8TteBAIu, M^N? uj7J` -mki6]K҈&`fƚoiŠ.s}n? #v X?0/ǙZQSiwϏf^֛S@)nl#$vR*qe^ ;oӖTag+|{Kc4K=̉5d U߂9l^Y;<`U͞Yt3PxT \maW=EM}!Lɸ Z|&xZMd0d{ ӛ8!""7Di moOYMQhQ}'_,y(RrjP3GٚTqF7;ƀCu͸SfM֣8.`t[=v|L;T/;hpM,Ȥjr䙾m@_thYjMjn}Z4v= pF6~R%PˮZrOh@XH}LVv.GS8]z $ܺиJTnNv{iַT  Gun(r{SۺiFa땿1SJ}KPع@}?.5v) b'>Afpv5?g yӨ`e^Ԫxs UZxkfpa0';xEjLvVݲXL ea\7CQ HK1 C C 2TaV5Kֽ6܅z¾JZajnk*DaSEz(`y jmfCl')mnIf@c3~=̶O zMf@8Av53d66rh%ehI76W$Ș5_[*̋rBDI˚t)sW"_R+νb134a@/3m̺s-j{6 %/ؿgxNݹK jMFV1G^^Țq%AN@H\82a鋐o7&+'9CvdvCɳ:M~`af_gLwZ,tf`R1/(<[&. ڑ);x#?H,*G\7*d2$ ,t9ׅbѣL4QBB-fF"-ڳg~a4$ | a" ,F[";=V\VZ諫ڡ*`~Èw{[ݥ\jxY9+'k{(;[κ̈J;۲pV9+r`}Mm8Xdm}*I]`Ʋq94Dh.lr\lv1H*0T(gbm;å=]1X v]L$#gqՒI& eI,5CIcak99IOf+sҘJWb^yxNũSZ b8@.ϙ%jY:okޗvb6q(0s\5UVu+3H"]1Oo;uۧn8&wmxu,;zJfG#7Y%]BrUiL)ӵB?)N"T YxfQ$ǁl8 ޫ>DҨa,hfZzsA\Va0\+eW46ftR"|M<~_{ư~@󦴽.G*=d!cUYE]G:7sĶ݉qɩ>՗.ݑAӼ5GS+Ȕc~]/ɵӘ,W5V˛C$KcQ\DU/*`h,-W j vxGD%{ĩV&_" 4˫/ZgX MnqΕhP)d ×0$*qaΥm\isċRa6kl>ksW Uk-aBNR\8%zo!$R&zsn]wpFٮx**h [\3!]浾|WM՘iu?*C/%ړ;םUXu4_Ξ办gOi#ѕ8ɏ>>qg=:~JeSSqF hŵLQ꒛c.dBa T%84C`"<7VG *ІqDIG#{KI:5D5 IHa(Af ^m$4F16#Q&ֵ㺁*d5*3.Ujm1e235Ic {a_LJcSP& 7^R:zYQڊ-.̄;31S)M+JFJ}JF\Pل*^("t\s#0k8r\2s!6̶Hw̶puNZ2]6d~jҮF:Ya;l9Sb.ԑ<ϘzV_ʟJNՎtL/Ke~s9NMSxކlЇVL`˶T;[K=: K3 c7/g_J}Ҙ}Q~E: X}SLaō  #F0*=Y>AB~k^'GM3 $?N3/9W,2؍{FGajf0@wKrҪa0y11?x%68x 3eJ8墅ߘ8Ju:=d`{rت7)4%Jn)f>S]ŒyȨGQP—hqU?HЈ&q 6bvjI`~2P2x丝D5:ӆv+cģRLi)1Pl6]yeW!{;*sӗla|vr.1wdɝFfBȵ].]sP M4lQO!.Ω&w=eb:1A7C8?ysGQQH>V**PN4׮t] {G!u~=o?%v80PH鍳O"m#ocgfN/܈Mn%Ms]*$U_kz dĐ-a; s;l`*[B2r;%r|UجC?ٝ^+P6 bWܩ( nno7T ZCV$ߝ 5gm,ޫ #⦘gB5{Fj9[.LJp&@<^ߥ1A7>a˷^[ֲ93Pv~IXIii❏cS&vYGRxڍץG9-Xv )4Wcc|uwMmV7*Qښ=d0F`c w|9_k5OyvʣRajJR)S- RsQyGZ=,j7YB2HrGhTw><$xA0dB^& ~q&!;C!N0#r-")[=P4ш!f]//#;aQ<-nU(Hdɳue"K .?̱jؽ[lvb^7hq X%m#-s^p M|qk,7V2&I}#)3cV(N3 L(ja~Z٦sm"TZe2𐄃&#6}lc[ed7Sl8>Ez-``[ƁW#Ǻiiݭ y +WH Y69NzAõw Aƒ)q5N7P[^М(UŸ~vօ4FY7heNG1ŒLw$8o.ZWj5 -@}Ll0ɐ[ ]bd "t,i~-/@j6i5='2!OkBf2V/o[<:fu>߱ĝwvVj &kc6$*G {ƚ*Nhe ۵7L03cmҘfc2R-dpsDas}0>]뀻NjZ h&fervHUJ)OlPLI,{=AWL=.z,Dw 7[6|RM: T%g/Nvp~&+MiT]4ޣLhN:maM =S-u;l#"۠W Gx`#YS[Cl"uRኒG=66C<!v9ـFevMS[piX68IKU<@ TUn>-mgNDT "ZxD\oE-.(ywܫ{MgWq|Yt$Ȟ4bk~Ty2S,dLa FOaqX}X1%N()XnId |QGԂ$ln`;PwVy6[xmgz>eQ. g]>s[e@Me,0w'f.o[o;7c|c ZP2-*Xqk1S^mܥjB#hop{m/Ձ(塓 uv7B1ZX&[!W*|N͙%qcPO f~>nf<:_dͭ3,4s N9NQlJ9dߙ4+6)3f'Ix9.١C"E;Msz>B%BUڒ$hۑh&ض=Jvv?É_{dt<<&ߦϗ_5EHMeE;Ho! 7[R|Rr)[9U?j{V8zx7G+*,Q"פR/:yvJz]`oɘA9)52! Wt >6x=9gmt1 #=l,\S 1aɔ oDn( `S˴T =Rvo,S?.,5$4kA}N8tH8G?as8hjFA GV"kil`҇8xRn~݆-IcwLD9';Ju'n;9elLT0nYΙ@DLH,^T媭#ڀ"8տaϓH|>&(tfZ 䝌jݶ-*J̇ӝ0b^k #a|+flb3[̿foLxX:H`a LB2knf#.'Z3 XPF0E`۾=]`8ZQK_P&]"sW%kPYh,sI3Kf2"bQI= N Dz&B_ 9~`gGZfnav IDXǷZ8(ہ3۩q"Y3nsPS+eB@I7G*Q}\H;I9(U 4>[)il_EYMjfH#1ixDqh֫&dh"1oXpǜ?8 `b%{n(gbܦ~q̷dU`JIKP+ >$ELD.X1>wC~8yG]Eaxc~:~5%YP?PQpaLʫ LvUsI ~c`Ie1z TPUn CԯjfUlN}ϝ▩ sLKCUzYtɪIKqs)ORW~a)dPyn~A,Wn=?.Y_8kLO~+U`V"+~-<3E"sA~(prvKBv`t0Qy12 ҷuCD*nfw`,+wwNZ8N&,j'VHԶ­th1=,2fS[鏖z~BjȅXY-TkUi9vxTu+z<{y^bR*(@D=$QCE{rn'jX+<DUطQ*yvTX ZWݡIR3%1d<֝2XI2X8#~,Œ:M#֣k nB395ϖ[tޜW].w^)un@,1,fc&10`l݁(m lGR j7Nk+$zAz:o7^ETNx6.VٓR[yZegm]Y;H.zdb0kvFq̹wK0K>gaq"0j2uӖ^'+W'e-΁GS'86<p _ |K֢,=[~Lbyͦdg1@sJO!Vdл}Vte@,̀3rL&Kp=tPK(oTM%pZi:Du6dyAm4<{=,>@R$"#&[߬u?~H/Aeͦ(vPt|ܖb-FƿݪިMEV n.; 11!PTdZx(dq/}Iޕ''@kȑ0 r 򙌭aa >𧅫E6T㍪4#1u2)BzڥR<=fM~vGBa8UkAM%qgJsdTmK/um_(CA*G#jXp!jǢY 8Ll½ܖ[,ںRP0B*XctiS|q%32JҮ<&̴a CfqHXX-"DY*?.Fkּ%ت?4`YRK}`QO6$e(@\fL2`ԼPj{ldVl}?v1 A,w`}"~Vk(Ԋ+py6˃6ӌNh]0quO9mD Bp&,j[z(=Ρ0 Eu.XLӔ gaFtJ0>ff٠}E|za$K{,YIQbΆs`J}ܟ?l-N&SI{"L)u=N2"ef ,#dT`X[f;s~ ,p ą#xOk>ϼ] a ƅG3W}rhf1l򪱿q;jT pdd#6x'{jNTrs~bGH$-3@!%[4qi𿲌 Ra<Ocr|=fbϧc2_A⼁@&E,aAGXI+Տt 2mXZ4)G+| i5}1-X&XwE]Z (*2sMa\QW!@R;A QhTB~ -x:,YQƱeRS`~-Q 0jTW,DVnN[9`NL/y,wŪ" ynʲ_#M}`wnRs8L 7w< DRɷE-l@l_Ծ51rI|^U*Vcze^[JE?LEQ{ЄikD(nT/ɂ%;r=@{X%SFQІ/v,&9/;IXa z5(jd>@<;ss]<ݮ;#s& ;i. dE.|?z]" K( {Aѧc)RgjvgǡhA ( D̯H)mL XJ,hؑ 4LL\c|xwղ4÷=&fKژ1xw~ǘ d8gF WҚc;ԉu0'ݧrJ{5^X-+4p999 ԓ/ MіεaO]0qh.iѴlf5]{8y9sMkŏ k13c3ubdoOU [`Dl,-=k-lMGNBj8--V+"\D o9ȘŌD}#q085ueSbn sZk4R:t N.̪R8bvqĈunʦF>(I2˒HuA[|۰nb?EB!8MC ;JT:j %]Dp C&cMUh{%J($ =ir+O-tZsNܨfRg4q5QMZ q"(y#tnr>,p"n 1ffM;I0 WBI).gn53mb,#p,bIB"ly iRFu{2J/L4h?P4h'e8kF4IVА(b\r=^RlbCదݷ|Sp>'ۈ96)ظI#;?άYjKDkK+~a;_c<4xs.#tП>mwk{y+^WZf 悬0=I|^##PB/X 48}6@b_O洇Jކd+?9j)NTڜn, 3S{Xmr{}%7(Ä3kgPf9Vk"ɥVOu);6r( 5qQՀ{lTbHbq26b "kͿvizgs3#9{EdWۙ6"!JMc'\eB'(+O42e *`wE'Ү-G,hr[(E}ܢ# ,>-Y|UR7i7mcɚ!]]JkS_S1B|C!н't`)vͅg3i<[^f~; 7Z)5h4U4{YUxp+z8 w~ǒZ<>}S/v,Ii oYu5ͦrV-3+OL苖oX<F ,h{rm  *eZǚրA0ElM)H@5߱Q_pCn8Fk8>E{+pԙtEm?v[jTs6yݮiKzU_&N(¤eA@Wn|,6k mmne=u.% USyQnr w-aǝIn!r5{; aO 3M PE7̋xXzn-W~ I'"[ d$$A@qI@75u7G6;a8OF_~r}K O(WqPǺ Ae Uu@.8/DB66EJ~q$ lf7oIxJ‹' k:T8%:zHp E<Pب@Lۯ*P=`[wdFIJW.H v9!$5GNג ;&O-Ye@0VS .,;$4ցP|fΏZl+Tۋvݢ14u :""X`)XQʝʎҧRL{̎85٥c9J@+$F1y;yʹGL\UO{q ǦjۨYKVK5k) ?^S)]RQcyVSf>5Src3ш#UXEAL\G޹W6wֺ ,P8;͘vF؀ʐh+U| t12 ugz/\E!n4 ʬFJ$K19PlEPQ߬c@+)}%`.*RT bk@[T|K'ZUl9ְAL`7Z`sgQesA)#NAsHUO/Vw5[]SC's$!0{ol}q?/MM^e'P(i4L9<~dzd1rG{H$ q"΂4AԓU9GʜvINwT8! `L#0a?teRc(C|[Qۦhf8KˑM"ϩ6mdF2A8bY/=q>FLo螝x%ĄSխeNg'i8 "qFTx1Npz?<_?|ɠ=5Ur7{IOxzJv.{ʪ>B0@K˯:yo:#JBFYiXI4v2 ]dYI,`㆑u3-;2r&[_5Žg8tmI4~yz PHI\C j#PkZ!!Qq1cEy|˥?S,1yv!f{m`"f7:(tc"jHb.+.kiÛ%VjfJcJ6UԭF[ESp&x#>` sŐ=4=s#1|Odr OޟbV EGnfMGx2kKEK4rv=}an|v5_&(hW!j!|*ܰdy3 yy3/$X;0\8=~zM@!, Yz,YՅdA(-՗ a>& cQ" >}65;fs}R\,ʯKn1e1{y>+)H4ki*Lny&X-|E0`. IDAT2ۍex j5OܵVhI?`.2QC "\#aYS8np^=CIũյӤ>shعx{H,94|gb\zIV_\, w3g3he.WA2W"%W0TJz^W"Z:XCg'_&_zg 1&p:зfW0-7SgNE W|nZI*<6jO1-X4r*ikR}AVĚTPxKcy<7 \Hďl` w*洀 rSSuϯ{sߖ\S)B=ЌMe(q뛉3(@S񭓻c$P6B,4b?x@n]aN?1vӱ˱{n{`s=)B ƶU(ȍ)"<ڢ as/9xEȤ) >VWmÅ[1߉8bOӞolXө*ImqH.{m,os DL,ewn+>8R&2amܱv)" J p6(cp-dA 6zw#']d.醉]1 K!#LcHMj/h]"V{gJh=DNG,;1YNFyb܄` `P?`(M}'sZS($򏳒û"& ѻ/Tߗe5IzHL,1k WϢ|%2.Jf{zwiW_wR'xfxuj93Zf2uؾgO;T.C{,tQb?0F?ڻ.HrH0xT۝V @FdjwԚTw'.f0_جލ+XSqL5kbsf*JbDܴDZV([h`wru J<:# 8P0@=#)T:2Ո""7Ey3̑F*`lR*)u_ô3 0ÐA,y4EUd3mS?dVQR_q,r7+>Im5o [|EPY~2QW%NQQT|ڸғsKqv,T2H5jQxe {&_-p+{'E3$9U+_N8VeK&֑NoM~իxlyWYGAy'/#HSoS @nVx3Xdacn90>>\r5${W(W =n]gᔱTO",1ˬfeݧ<{}T*M]PNUߓm@v\b-JO[}/ж?JX ',!`kr|PEҬ)v&SAoߌ4s}\>ב9]ClTRKSVVk", =QI? xPFneŀ8a2}hiɯ'g`Rb_>AG]%]zch+ LuԚ}nF( ` :<a9a9 k*4QY:έ( aU D: AB> E51H{5+DI2-M i:%YEQe[XRX`91kO9or:` fׇ,?>L 9u؂MI[</sJuxYQ"兣p_P})QMƐǃgl2Ϙ,޴Sa=6[jy?{DdSk O'eg{?7 `rr%8ZmTXzb_1*IG44YKt;/ ɶ im!:$JެnsQ8';o66ZtjA2]`=& 2fǜx_c12ݗ?ǟ˧%CsExK)ORiq.? 馹7oŽA_MCTB07k-vb+nEE8 ݲV|Y,On[ 7Hh& (ϲIQ$iPMG*lBPSY#}uG5 aaᚓFJð-džIBb.4U/v.%JMBM68 ՍT59,GWZϿe*˗)㦵R)_Pdɦv Iw#"D `¿_bDzb]e흥i0pvjԑOd$A$HFS)A БMIR2w{~xS,Nq:NRikI>˻ rps |,1*w`d13<5ծrhltң~Ss<^chw:Y-??p{Zo!~vsW1N_+l]ΕG!.ϯM@ƺ;j^c{~ϫw)x`4ɝ%a3t҆—@a͗fok#= ӚK+MuGk}L-泆mB\qvV/1Cm[yff@mf{%Oe]Fr2#VzIKBT\nC>o<_`5aurML q 1 EȴXb-)aI V>OxdX Re(uMR &9{Ɇ}^W+a=.kKtpɄw+kz=kvZ?㈬}(:XAsBJ +9;FK4c1(-@Q{>qw% U(t9AFhPupqWW~KP§c5{a֗҇R% /C_dg$}V~Jo2 |//|'h-]f8l pom<6.HiQ}>|=D#!X;}b/Kr[0e6Wi)!Dd S?HE, 4`,[G <>kG8RD`amlNH8Q?VyzYĞ'=SNU7v"2ɧ H~Ы4@JD8zMh>ktAiRYBV,8{-35Ĩ /$ak؇0]kb>釮T^>0I//\η˷1EaJ#XvC^ċDxXu&m\ QRVS\Yt-,V 7 Ogr+`%ʛC⠠MD6ފj8ʆjx ު%H ;>1y*JnMA-LA|9,t!z祌AP&Ry`3Iik+a9V)@41ū<'*IY1H1dzBBm5; f3n Hp:u&?XF>rV'ؗE>*!qHCTɌc=MwRaE]ӧV?'ư3fiü9;rVud͗w1SHb/ߜ&Í9ƪKE_ 4tA-¹X6GK KW\i+3܎q^ S߂5Dg86ߐW3Y SȻ>\5Y [*e1JNRk3rȾXHXRStA>b -5\p0#9Zc7i~a*|-< #R$eN qK|NQ*6. }MeG9XSxlJ/±d\02)#2sH=grxE8l޳Xu⁽ X#DBHMyRמe3 ZjA9Zͱ20o݋ii4~ ?*r>y@?vZ %Xɑ(JDiȥf& {UƝD69?]8ݞLD jA6R;c`u+Wh}BtFug_E>edjZUT䊺73TMQc}cM+8U?C:f+H } X8Gn'uYjTLVoZruA?]Yj93K1tokn$~3A>o3akMm'#cXXs}>㎞Z Z k;?Dj^n|' ".{6A)Q-C~ ߖsk7ΟW5-dⱾ|_joU1'gn?W4BH8MT#痍×oZ/dV..5rm݆peY8\ʽ ~,l-#(l1ՕSдPz;$<2Xuҟ w{ܞ]qwL Z.arY?Q<f=DojXH̲tJ5kRBdB5{O# Ȥ p_%c[O=,vBn%K֯d&֔FDvO 旼ޗoPoSI[DCkZxfDA٦f9T6a/@y&R[Z8#U2W2SXEy^,7*}" "r6ݭ;=3T}#K@}3Pd_h6VUn IR/mm4:8@~Ѥh9b[bR2opGO pdM|CUwxABʏi"HÛcXp'_NlxȱYaukZ9>yO-~>hX ֍_=@yDGJG.=SŮ#HX%MƢzZsESI%8W]9?sHP|(ZwN7 ncgܦ8+v}38(z4!$"*~zo{z.aɴK?g y~ˉx'6-9g0ر~íُ[G%RQ(B{filXbȞrƁ k-u,3kq9aؖ]it%'8 [GInL#T;굕"uǏK3HڍT짧CduT|N1 IDAT:{k.3+Ac7/C^anv1Q4e͟L(~_?BjdQ6#bX[ۀ*&3COKDaexխ|1fˢoi$;ͺD3bMޕc"\6(^ˆmuPj7 On,-; cy+hmq?eTxu!M>B `"u d;E") jflw>pئP>mY| 8_>}JBu?XI.Fҽۛ tGWO _7Mjzxܿb[ϿW?,>\j{n2&A|B;4%zL=RY4i)e #^J]ڈ-5 ;t^*:ѠLLkMs~IN}ic:@LU?pGbҩc>k2EEN&9m 21uQz2Y19z#e)"ӟQv-x21X7)g [ G46E$m/9 1rϳ JyS*1˟?Cu]TX2@9MEћ^5Ŝu;v0g (q㦶OMBܞl\]{||.sϣmU#x 9b܉ێ/_q`]uA-d%@Qdk~F,79h~A$R4±]Ox@k~ iqz͇3{`)5aEĮiJT`sr92J%!٭dw@+guXRfq<H+XO!2i~4.(C&Q]ֈZ[Wq!3#BS;)&Iľ ]YH𶫢7D ̳^v6ppfHYBSx3_=;"xrՠ; @>n;7uLH Un+noIJZ+Ĝ<]ԅa81;{ 4/ZZ<JМQ`Q"Ace̙Phv^;vauWU?.i?Hww}/<\EvpGmt=cMp} pֳ5rIiY\BdEw@b4%]쓽F=&}Dzb5yy^=l2tVNyzoC_}9.jv_w,CG]S4OoJS\ET3n9!r*G9{ }+B AXCRjϭ,F('MrVٚhd2P.RSOĜƮMLyPV&E<{QE;]0_,lYmžΞfy-9dc(tuqH[+Ql D6eS֭!Kx d2p lF40Ucc/&קퟥ=uq[*td`+ *$w ]tDۥE2w Xy%ʪ!ۮZXy UtL=L'ȾOL`jdy-V]{W|kHUs@ k Djtٲb#P5-)#qGpsԤ|fքz]۷gy#;<ܪ'mo;}kJmcڎwqfs&0h;EفK;r#W eL d/B`eZvlc ߏ~ym1p\6ۍ 1ّ'VGJ^6 \dR75|?j߁YD;ъfq(ǐޗs&<}؃=Ϥ[ñ&\rIU}Rh&67m`F˥̇&nC ?HǪ 5l a̋5$>If@ti4e&G93UnqI{k 8,B3u?DŽׂ=*!A)Оc$p 澎+,*ud`߄1$o"2&yx&ǥ/l-Vo*2ZuE˃56S"1[H+إݟ`vj>%8G^öN_꺣 Oaca ֋IT"26!zɆ"KʒT}3v,Y Ϭг Y.+z%j jJQ&/o30ƀO(9xc 94֎9 0O,Q3KbBfHۓ*G!>~; aԖXlRGOs{|8gttO@՚7 RTeM/120,67~qlnq,X7nfu)Y/T'm +u_yސ;g)! oj?N1/kg! Ϟ_1; Xzh^7WȮ,]kv;])|R0`07f9u ^sH;hI.ธğV#*$/u%hYV Ku~By×r6?"ʰE_ 1fz$To 1_rqhERtյc)S@D J{䍈4$j/ 1F, =ݝʣgSqrfJ*ڳn` :޳1=4C><,>;BMjMe`/W~y RVGxm4X'ۧ%VM[ه{EN@I69bkn|(@D݉3-ox ~+pR_%A*U[i_;߽A|  Fy&yyOGXm1H6`b^V6#)Ԁ3(fhȷ0J4^U *ȲAe`=ɬuVVgiߋi2H5=4@XOyHVd]75V͕^@%"Ep̺=ʾHEUM/ՔyXT$FD|f|3AڜovE;QRNC5 G@f0 0}ɖS]uMZUmgvzp戗&dTzŬv 2biU۲Cp;GȈ5]z,ik*@$((#cG6nyTbv[,!Q3f?SrR7g"hcJyӍ쟴ou (t/əHX SRj{ bcfa3ӹr7~{x|R} 5n2bnX L̹Bfc}`M;:@S?Y>hXa7_G}̵ojO >륿EoWEdy>vY~ G͸oz})ߗ6]&U~UM6^~?۾!>Z|RAms(y9.;Mdi@qK.x*{À=<{qrJCRWZR|o Ӳ. v!J7sWKU{ RoXx>P$KZnCRM^@RhrVKQǧqJkiIaAy }@(L\Yچs>ZۺvV_srxˍc4%ufOڌImJ i1dHJ]q/;t$<d u޿ytv2̕:CCUBI^nْMQ"ʳ/*`*P$/%`XȜː*U N>"o 2I:e>yxd$s 0iZ ۚi |il+50IXYG#[u~NYK}ɂĆ02W EH>"RY : N_?0[y.eIaL8ʴ}/lf[$j8KeI^e ̺EWf次dz(:յ/WկѧQ^zvG/~mBe?ڝ˫:b'Z[BV?zEsY/m|VVl;1@>/?y+&WypbQVi߬N$}QpgP5~j)|OOD)B&2KF6mce& U[^gDXw4|C Ѳ6D풧cffkJLܱ΄j۽ 6u.RKegµYc#=}(ъly9ޚ^~R*JS0s) Ґү92*B \GSfIUK`8ĩt.@iZ3NEdO4CI/NR ;-;:fY~Σrtʴ*jl2gn:w}!i9 V@HYNꊹ UQO)p8ճ—/ 2*`'(ǘs{ޓTxAUAlL{LqZjaޡ"]FC0Yfɻ60mlHB4zc-<-Āʢ,RXɉvNMwWB|H/ki6 *36G hת*ltF;>w -|.-/trN9f.Le&%jNɱ:bXts{fO Ltv&\8qj ,oGRdw&j[6Rܣ=rek1 =~x4ۭo /g5 r!wuZ QoE{Nf~\kE:_yH2`*vW2(xbx]1L{/ccxVG|{=!}eBk`pFFClT[HI2G@7TM]L0EEp)ќJ9cROUDl-d+h _$n&ŤeDuR'"| SҖv)!`Q`Pbk:5ԫ8sMcO}6,BEBIͻ]wE(`k1(ݤAU*2g!DNd IDATv$"W*QMM)6@WLI^"}kcxօS: \t6E7n/sV45|/>>2ٞl-߇uhIVT; "5{C8]\!Y:X|Zlq;oF6_=w0^AZa0K`\ ,ᾃ%2L[fA.OZ/%8++oxHǣHLʜx`w 9>Kn׋o-OAVS:~ Zć<_;켝fCttC=;vgtND^qCo] ,b(uz^? l7gpM\;2<>ݥ\RC8Tv*>N6fnx+UU?[ǁF㲅eO 1q$nQ*WkvZSaViEyoab U䀜jU ׺Ai%D5-@ЏKߙaW$:~ Ŝ=C->( mm+MV,p٢  ݾ{3b/F/v2͛zYkVW+2得 I]=OЊ>8uuҐT hUKf#0gy4A(`:kڬC5'CZ'ԄѶE>ҷmc2G@r_+c2orȯU΀kO:4 2UXYT-Q$5z4y/i?j#OyzwP!w&e 2.reG%Uq6F?F vO`ѯ>znt;#1_Tl^ANJ% nn\_ @?0wi_fixhUuuDO:Rg4ko iI?[RI Cw|<> lvyz^k[cR>1hge?L,[2@b9 AzݰJ9vt݈u2iyKS55̯-Rm%iGIyQ\SuT6bpf44 %l+욍fy4Β2e7W7M<;U=!Z&E ?]t%R45dE:2‹nVdkX$d Iӱx zAxע|$1%*xP1\aL kYm4TOHDjW]ONEQ\PDqJ/xx#80 ($s%t7[3隍%[m $i5P͍RU){ްGb1Z 2ƒ2v F`@UFO+ _n61.cɌ`q-{ZH ܼ|: \)8'h0<#heee[BQ⪼'1.?w'٦ߵئ cku~ڽusƹjUdLA 9j _g^/B׵t0y꿯2 Ņ]Z\O2#kKM 0<i5+}bmm ;xaR1]]xx(bG٥ꀴˊ6)51\]ǃsޑ?6{ۀL:sn,MYzJ3j53+B-7,VN9څ hՋ + mAVc7ؓcW0VZ4Aj(ô3/C}\me@7?6?%cqgAF{)7JAuwlGʗӲh=Sr ,ƙ8? Ns88r}=yWٺ Y(AyF}b{lXlI _"Pk€A&I"ƈI_J){1 7/]ITMeDTIrf 7][7]9KW+%n˾.;<w'菳Ф~PE?In* _6}_Q(sh8p5tv_ĿhxbG=]_;GD@ @ $Wά&i?5 K+bL\bQVL* <3U چCh_Eќ~;m 2ukvL9O׹'08_86وLZ6 |!7&D{)0gkjXQg,c() ,QlurFdPRE /= H{c5JYdUp Z&du%*Bz`2qlRLCv+1=w U@ԓ* JF`w:Vw;C.7ۓs2/$YT3\)dd2昀q[|ԕ0c7C[svfaP$gFqmv(xlZthS %7YX~kFmq<|Nm:`3D08\I)^g(9zk1Dk"_ (\ _OW cn34b˃tHe5}h_D򣏵 dkn¾ymf ?N+R}y(t:?C'lԛqTWi'f/i.|#,`es#^[wOumYֺ?P}}ͱ^pRo]ŏ"K8-ESN_v>~be\49k$9CS'L745J%asr aTp[UO6h99g+ːzcew^$+ޚ@ىiͺM{ϊO%`nRm#h:K[;{2\2F=Kͤݹo'ƥ*CV-;W¬W,NPo|al6&Exaxv% Eҍ&3T]ˎh_`C"@o gXhc\ {WVSOCgq#kKDhU$h滬@%m)ٞw Y*Q'Q@1A[Gpfv<-j]_ú-Ϗ=@{Xdh,[`-\M'B5^zH#SK%]HNe8ķjV_T >˗J߈~bMƽ-TSכP_ܧ`Q;;;t*Fjn,\(a_`y |J;e{:s{ߵ@A~&_Yot`[;Ҍ틜g,=}_?NmXӀ As\=JD^rUMSp|5)p,um/8E{ 7>ςdh֝`[|j5u3 k7GDuߤsu]Qii"]bUI%ojD5xU6? b?\+#eg6vI}Zybbmz|ߕ(zr=g%j2Czg1~)6Zڷ9ipBJR;\aDOOO ڵu [TU&hvk,'N)ydV&o"7|dpBiԙ\oV$G_O .ڭJ[\ggyrx<ؿ@RwqbflsjjZ8 )E*"E#A&P Im7V"Z;|Hn~Yƒq`X> bxW!zLcD$w `[} mLչ{[55GI' 7~Wcaa-D~8)Ҝ &ѭԻ[𰋕hP밺kvL*+ &[,#7 e8 %Q&;{7@ш= H8vq<Ç[Ԍc)ޱd*uo\ϪWIVylK*}qPF4I@Gzv%EsBIQ#OQ o5\Ȟ^l)˗Ê$My(e!U'D'jP8X+k_ S[gJ}ߴ9_tG۟fS ߌ.\ZQݝVM0P>m+B6[NZoVd_K45!cLkiY-)U'Ta:˔@ XpX&sw|h]G4붫efFgiDKüyrq1/=@I):a2KKWA]̿`[N2:fixETֺe/ X]&yPuDty0{SITͼ'ʳlkTyrS׉iSmjg[Hzo;z"&xM6h^S}i-HṊ)+!Z=Ŋ TLXhSkoV#;az_ԋ IndڱVX3uLcЯ7zVcyJ21L+ ySBI,IYM?g;}S=_VR:'{U,`(> 8_VU]gUR%rVZP| kyھwÆլTY1^`-7՛P^q2&2^o(pUA_H6 9?68F= zz=Y /-sԀcp~dĦ(l2'`*GˌդdA T%`fX-ON034Zt,x|~Seh1"/(*3?7B̵RL&z+ r, AGKcCT\.!c:]nENRߨNhjKD`d"#aK hWƈ:`Kpp t`'FŸm?BVVg(q>"J+eGbgUmʆʌ䋼 }܍/gPPDZqvSU4Ry51N)1^!aUUJzD[u?ϕZ˟tvDUv~s)kF`Ra [ssz Wʹ})Ɇ"H+§6oe _e!ۺЗQz7C=b7׾iͮzKᣧ"tޚO"~]iJ~&66P4:kjˢ8(W{˳GRQ,n&BHM#FvWgӃ$x+V1vaȷ: H:/ _xϫU/~ܛT+m<g_4լeU䆘ߜĒ1%VD>NVSjeoގj%]N9,?P|g.B-Jrw:fqIsnckRa7[\jk$p1CQ*lc~FԈP\Hj;+nD?8 [R/x]PὂP (I ׀fY=*짳{5Հ*:‹vE twh8N6Y\[aLt7ߚx!$x=kUܤR uRUW3lES#0B`6AGnnP{3bZh#kiHk˫L­VSK-2}o" PַˢJHzMq<JS5:JH[+OkJ1H+ˬ (!KG8 Eh GtsMHɔ:z*˽gn_:{UOq!oclgGk`sř?Gj}J=9y5 |$l{={cڥe?kF"F;e6^prk &6kmC̐2+nTyB"2G3R4}PM^T@RCsM6rɖ~U\€4qTVxeh'Z9Eh8>XUz= |'H*Lv^ƽnmQt/V"O3kih)l!a R^DӚW[|2î[{x}=:^C_z=?6F]$ef/aۯcNGҷ~^R CqOgfnkSJ%}3SfLY7.v+(Y Ĉ]7Խp'&ni褃= C䴺FoNoq+r9nB<5ص3NX GQnJYDf"aĤJelyjrn-JyŎEJO[rY"țo²%ZHHS3YVƿQkZVk'>`?٨Mkݕᬶq0 y`] j$ad’j|zC8r_~Dy ]BeU 9 S}=xϔQ7a@6C[4ՈF b/,FC2*]G.@tIlǏ/7Ev @S.vJ{3"ISձaӋ:)XF+xJc .؃idjۅv'H0d=̷|(կb@rl^[L+;#su2♓'.D(V|E !_R|Y *"䌴EuF)`m 66eJ>3]#yLMXc,t˩S85 *oǪ*͋~mb/>U2?&@O@?a@JҔ+Yc[ۈ֌/w{*_ G9He!c7'5{ߢs4dJ=.U}qL`h">ba(LP7ؿ#̽\~ kqicW [1&r};p1< ?V&۰8oC_;U9KX/8ڍqR2:3˸'Z5.HJ4z],GMɺx4 5`v =AS0eL[׉~XTIk8Ѧ* V,e^yaX/yH9#!Q09L+e݈28DET#jI${)Q8Ms @呻nas$bn-Z,7:WVjVCKzۙv_o {1B})lA!fG?nL$ ukWfluqxW<{ cIrG)XHNv t oB-m^:b8wGr򞓭w̼?hI&1vyS?/pX>Dۀa]v=7}ym?ѐw17fys(^)x ? 'u;Z-諷<,ӘTVuq_o\SxbvjӶ:Bl9V(dQ4~RuSU{,`Wh +Gg/}} zkxkOgAf#^ 6'V4h-=(FxC.sf!Eᾁ#[JYS3ee$kKXP92͑$g2r; R(?p381eq`U1B]Rb]') ݽ<_%Jx5 Ũb9RR&}iF@aǓ )K# U`G2eboaU=uؘ߈I0XG  IaEZzl-.pzXl|Fb.c{Chz:.^nrPZ}zFJ̞W{76tt:350\K)NDf?ɠ\I1Ճ-sZտoa&9ϰ櫃L!ey)KU /W<>5kmiO0_-޵ E`8]]0e1/B5 x?+mWV\z;K;X@L%mgoPx{|H=ӴYwP)qPv\mK"Ը,Glz+V/| zGz,?"I_JLۓ`9﷬ Fr'17wsa`o7~{,YCiV);<Η4G( NJ)o!2+Yc65M#Ǒ@H~vq~J{N]]Us @>f Y,[Y`Tf)a"&_D9w1X5q0]k$c%Éb-=# tPmšH8hݝK" iA(wZ5[nx=QK,O)O X+t3%=$\DFBODsTϏ-'CĖf؞MEŴ<`cI_bMςaxs:hVgm̞zґkiBcHf+(XۣeiDž^c,Y>z8J5ji, (Jx:ps-gІ)rŸ_gik)7eow|5<I50n(?$g̯ v`*a?*yɥ5N)$NVsqQ sͱD? TK@ -?| 'o n1Z x$uȁّU;O8j^DZ[HV.o"~g-N:*a+^Q|s+:/gl -Wr4:f*-JEQ% Sڪe {h#ADT%h~((?QZ6)>&}0MBPBTQr<+a$ixhjŔȓ΋= TWK{eXW.)VRƠ)p^$O :ӓ)S0=Epʳɕ& /C{VHVLAu $۞cqg>;՞8i '+3fH=> `B5 ^qKfH2Z;Gr4וj UxaS3b`7_.#]L:VCFdCW,N6NpOϘ1yXwAH7S_E6au"b#zN46Qlu^ \-U:x9MOܹ~]&Y 򜠉KVx{˔ [ n#{,ۋFns9W\Ue}Ϭn&De5@"TuO懇,|NҫH&4dj5} 3YӖ>W\k") ^v]š5yrȁz*|ayx ๷_܀R;PI{Vý2*IK⁌[p(<0WF[LnFjR33o0KYN״%@/RKrq]d,YQ ̭. rLQ5e]EUy1l"aX `5zz7T.aV&{!ID6xzF "]|2S EL / r,feHfxJ2RIgR{bs=ϳXtJOH lI`Ke,:zF87xa0P{Ӛ1 AEvqhϒ鏸{B.^rH_|?L3^fKeF _~ɶ q uGb .]\!xaر*c^ZoJ8Ka25eSDYdF'[o9X:W!Y0\)>_7'$6o[&`]?_ݸ#àjO$oȣ>GeI)I³[sf T!⩺}@OKuKHm0pjs<^$w"03=a6y>hWXmj{]U'8Z(mr'#*)uPيɄi YkX;z*^%7 '@K]r"*剦>c|x>T8L$ .Etp߅y}zfǞ`L$: 6jMGw0ם~fpjWcW6c jtZ4iR*zZV?7t45䔉A-b 5̇(Q#xE)ӈe| P ㊊ZUsEEfօ#c8#30JSz"EK `lXBCvi_V>wCHTI/]W|hO_Ig$Z;F,5_EףijoP",Iڮ}bX;Z-uߤYm"A'NRKC,6ӪKtX M5!!w>Hy]ɫ_ d<*CnG0 B E.(|Z^d\2KRĭPB=AN",ar;9][iTr&(R 7=+x!fcܢݚ C?8s#og*)ЀIxP2~ڎlv_fH^('*JἏ'OMV^Sp9.[6!3is޷hwm _CʬMk#hm1۞KMUȵ]N_6mqMd<5,XB\&7%ԫ5".gJ2<(";("{пVT?^s13EKٽlgG7kY?|UF<)S(|WHݾ u6`3|DUW?Ra~`?.w^'dO6Ҕhum6byHH McxjšEȳETX%hjnh1D^AЊy(ۀ*. IDATS{rG%q_a V\+`LBnY+tM&UYgCฆa&Ghr+_Bɦj4ם']Rz4w/ aPy(OI1BOh{Yd W9@IЩVx@*j \\ uU#R†.U%XЕHu-0ʝbXi* ˈdɇcKIT&oVi6^ J!Cޢ̭/+r16\ HUKTvyapɇJ(פhe)nYޫ\( -Xj^ fyiqC%)UЯǣ8uc!h=q% )e+S9'4n_D5_1ƶ:'Efq,XM^(|]MNյi i22ow+'3gw)\]֊?ޙRKm/z2k_L ~3fDzSNy/k LZ92L4t?Ūo2/DDZ ER5'3TNyC]pO㔢FV]WLKӰy6ݴNRQ?jGX ܔo/iϒ(nR-߂=(W2grA{8賘}ܟE:RGoǩII<7~iiA[gq!wMsT-FՀ?Vz=:hf(d]bc5L}.E dhͥ*y/1tŢOfKїp&;,'OUdMƈYg{+޿X)CU~ȹC!so61(c}-U ɟium2x?=o?kȓ|+;UD>68_1\ Zy?s).Akuaf_7!tLLk `a{0y./JOCo8 (lpP2b,Vw^{5!7.71e0yA riE&L;'|:t/X[ XN؈gRpb;$$/j:H-y D-t6>KQ u1QB8;DSȃ,uR߿zQ帨WE\s.0$_E> J߽W(,vm#9`O=FITAɦ)~Mb_mE8S)Cd@fJ B(~16wlO鎓ŮSL͚ugLۄ1_yG+fX%K-+x߽6qퟠyi}DpHJhΛW(C/k6^? I>c{9;Uų? 2 1>K9mLm;V C/5`->kZUVbKN(Wޱ L̂S5 KMZ4&t͞dE4aLI%6VKZ|,EiRkqBη"10 FW|bzk Ơmhl9W-zjBk]iu=s|}!ɤ'SK w5k/j)o6^V'?T,ME/n\ńv~cEQBDppȵ 1\9iJ<%TdWYd6Z yn #" t]>—">]R\Px>}We}'[#/j | _~8va}'ślgHa]laW8fm\n6j C{w+;ugјjeJ>Vֻ׶̽dl>Mksm:wvNug\r3?* Dn[5uYRNR#JDtIXw>cưER+{5W#I䑦O+5^s%I{t0G?M!"qzuSyFPr%yſ@ 58A͗3=!AuBȃ,s-dg;rWTdpfϠ[xg,JU^z_7Q"ߵf&P9_xFƖ(~e]JΚރv`Eo6hԄ{kŒlژ;NpcPf uRǴ2q9 L\<MAeRZFߛC%h Gj냩_~pL]aipAVfǦr!̈. 6vt8O YoP$V<譸fwV !"4^z{Ry/d硫K*c $G' e}19ojZ\rcS|eRb'U[u;+B˒j o̖#+px"`ޟKv-rwשK_: ,_3iQu`Ϸgh_9I^;>mUV^ݚ?x*͛6rʯ΄*Ybd:2<߈ \Z lЖ]¶qZhq4.qcgASRɐk qe2]w Sp(!)l=u$uaJ[;C)ybr^ribfC@[W{,AqXJ0rq֑P9(k2?j~SCa!V` (eJSV4q^7['Zy¬2;o#8O9o AE|5!e混eil7RcI GF&{DOCU/kWNg6Zi \0I{a ռ o$S~HcJ$;2~89$q @ɇB֟uf2ǩBah~Ѻ7y}ʹ1\u4A!)< P 6։kS> nN2{/m"fV&YgIs%HgUd=}f8 X. ȝELPܫ`uL Х֋qxxt<=YŚDTIܜLGșiH\W|h^W\T#K՘~O4jGc{拨 33Vsp4k2<>ОuO:GnaCd"pfQ3TRRFY#Y6vnb_dA[(36{Y/!GL{0/·ȘhK5'U 7^e C^2Yy|tA!6@gh|ЮDz96+^(%!ひy00oZ0Z"сs&:0̦l~SfZ QlA5,5 tLfsp,mؚn&|靹g3ٱSM>{taP0mmFj*3Ez=( `+WDIC(/uVE͙G-P^AM M]IGדּ,]fOLKKYi1Lc_qE#K&K5 ٧?ISh)o˪}첮$CcBM{0Q "u cף<R2EyrCfj啧|5j^T k B LIM_nSim*ʗ*W3y:T|8n7kQjW]7 lr|0T`91??!/CEMY]'jrG.: #:Mkc}`A)W3ˠdD(JE1k57@A+**CEJXrix>c|p|`6-Ll. :wiS;i6p-M š[1}\e]z>DQ8ݙ4WσM#{TCw SշsD08qvZ.mwbeN+eH6.B0kjސ$l_H%/W|q(wrN/΂zvJBCټzU'z)|H9YFv0Ns_"pXu\/Nypj@&ǯAU|dnc!?O4(An|m4th^0y-/"(8u4꾐`ίKr>G:+TK<\u)VwL2Oc-'JKj$.KZ$g&,PLܺ_h5 5VlttR[nU'#EKm`2kz-pc[̽ 6>+ mT=UGd$qESA 1Q]GSY'>2&ɣk$Nc@gc:}\rFqϑY]Q2b."]4yTE{ +v}|o<%Ȥ9Ѭի3ߴ[u3eoQF<0pbL 3gJ%U(D9A`g3CE 1LSyxt32He+6ײlc2Orymy =8ʛ$QԂ># f]pZ& V? Vbԩ,|Ye<{ -ÄޚZe![ p: Q[V$l¡`QH {QrKFpm voRnx %xc'BgUvUO3/-gS;ՠv#~MKu'MCp͏pg͸ebM/ vP B’g%^3UB|0d< 7+pw1e*Jy=q;NǢ~Ϧ ˚iOrLޕq "u DJ'U6nyo<Y۞5PRz<Ȯaٽ(D o#axJ Q[ w^Ή]֗qSi*F@Z-z6[|ޭgzxO< o#FPqK@Z}2`.{$Ŧί&MV`gp*>S?ۋ~d7x6O*L i.lwp27=Vk쪩؀NT .4ED|8osKHAc T#lnݢ!z4?9wBNϲ]9¯K)Yd#ysd<&U:=9jͧasti:yo^?Y. Т { 3{0fg ]fҚmt\TrP]CtVKT܊\F\<"/kؒɝУOe?#U╁ !5 `yqC kt5@~onHiu r>^vIWLPpbӌйyž}$/vg_y IN$?]rn W$ ~|v:Cz#}A~ݘ<#3R砈g=9jOEAX/3/aQ_aTb ; 27Eh?U rjؒ 2i8H+4led2/kh<9 X_GKJ[}L^ڟk弉{874%W7XJA OCKdi>犸w`Ώ[C}'P)8E.ؐ ܄yL 4Ys*n *+!zh2} ‘]0fd8R9}-vrh!m:6<$K,g}ʇdFL9yk?ðd*׵NYL{Y+?*uT85ײk@l0[0I ;ag퓢P" V&S˲Pխ8~H<.5.vȚ zR F^|!7S$JT-q^|5L)N HRrM\y~m m}fpumNpT~kŋ啁S7[{ï^L9#scͻ0::_NTVi{pVFk&u~# B{qm i9x5K s^@B5H4kb/1AE,''=hZuΩ? KBwo*1+_ؤ9h]Qu"M$SzV+_+92WVyĔ_UWY9C)a̫z6X>]W$Ucw4?dzb\( xÑuhc1|zrPmߞ ]d4}T0~ z5nSI_n{ aFx*Xk6^q- :9fJVP /P`F\JOb!<H`;3K!T ){eCLl4\9cK-l`#2L`no#K5;hd.<Ўd:v͵][Ȼi^.KsGtjoG(2ݓ.=x-q9(x;&"Jʼ#܆Hc:9&j59ɔ||>y|#.Nrf0- ]!LD%:Gj$jDe}y gVwRxY=3~##5deګ,uI1(X)DUYCR앁T[9 E 2.Rɰ~8.$_sJgŴ;DL%9`×OR(M#8pRձ`Xu3'TiNB=/*|(_ IbOrϗ="tKHj(y6 |Ou.鸬+R|KI'm}ˢfͅ)+Ikrj ~D: [ Sb64m}5{gAG_XkNl%S{)ѐ"EV;WJ]T/Mag/-D^nZA~U3s+Y0S|9@8J!E,yi}"%r˓ZIpeDK6-SaHN"`6geW#mϖz\ƳGŘQ9`ts=i9W뻎1>y>Μ"`ͮ K4LhOiEEl]Bu%7 p. *Eo蘕5$[1<_`tA3 {q/sq/䶄H,QIo`粺>/{m!HMG{>,qbZz޴:"=+ل͒űk,B5S|IZD}\3߮oirwR(<4Yx^Ä/S[N1m#vldxyqRM{ޅ2=+')pҖ8ə%h=XMV=~ }$sh5q!9)q^hCۊ V<5rI*Gr"cpy}2ƕ"Ȕm@EZ7ZDM1EٺtM9;zdDr3c-RDzƻ_Cl"ؗx!ɗrž'?b&}za ɯ/ξ\$~Y(C}I Ve=&\¥É\a(gGe>L03~#x^d3Y`VK|3O|yrӁYտϦՒ$ ]Q"LZ$ƽ4͡rJ4SF)n8FՒDuy8&^$b}5? ^"y9>i&vN?F(Z#ʵ=q (#jl.n嘩V&=}΀UP81۩ CT4%u3?x)eږX[Pw? ^v{/CZJՔe1N 'ڢL7AD?\-3wŊI7lMyQ]"yCׅ@Kq0j@v\ Hka$ruI>3XfLlT* 0CYBPJ`~t~y^xG9f])l![|?1mW⵳:p=*% c)C%i74QUIw}+2&RuOղ5 ^F!4o!xw?|K^drp9MZ*>*跿6T{IZMٜ67[Ö4ydME6'`=H{쭁G#:9&#ѝ{xq~di;u^S"jUߝ.duM"CV*< eT+k~Y2j$\D~!ԗ19^"/ՔUV8e<2to5b`hEƒpjlnduZnjYC\8eFy4<-_o?""Y)IQV8Jl[F']+j%DT F1.h'ڸg<1 P"NBc+?D&ΖmkDur=Zq# Q$mDʥM5F*l0SJ[AwҎX%6!@!c.b`xc˙ YFܪӤB# ٳ*Z= ƪgriB9md?]()q_/#/7v P&,ӥOF og.+y#sioQY/9yeP7}ro:/Ix̆9 L)?-5\؏ @DO՜ۍ d܇1e͏-:,Lb(t5Sb$Mokb @R9GLJVl%t[1^ |k/iI:E8RqD51¾U׻ 33b/rJ ETn@0%9'>3먈ԛx;ygc|qXg8?m>Aǝr9 "ʬI@r 9񜬒~)ÒQQ%d[Tw3F8݌A& xV!Rsz6^m^|sYh\Lߌ3$OK"Y򒒽Uï@"nSέguq7$۲ ;gE8?]׹`džUlկF٥ ۡ}tB7R!1SO$, }l)K Ҭ*d9Yn<ʈb[\ LamFJM-@܋0k_gjIiIPފgPCX>[i[P$\H$J6l_~O^ |:ưU=Ƿ!'3εr\;b-OlWB6uK/&tWR}`q(Z5Y !\ @4PnG ۰k&HpJ kX/Ǭ]_el:6B:*yZh1?+ve\$=~4JN'a3iahd+ up0s(oCZ#.xDmKcbMVǛycES40TVY!/ŔKv`\ɪivNì0"`37MAqD9|D`puo|hg"g (:?[.nB'eZI9Lȓ۠{v}T}+KffH| Y\.8ji5}fyTVz"8 0g-T8 85ezMwu =<6-'HilbH>W3W˃U>>*y|I rt,yt٧GakTC3󲒧pd%{j?" 1[cI!ve-E`%ѣ_T3P^pV-!E<*+el_-kJk_u8[z767+yR[t+זeUx"r2n{$k刔қ+Wn '8Iªq>?3jYh85!J;ZW5iZ+9Yy-@ҫ# NMj}g߆HdRrQN ~QK㫩Xտn=Ɏ/WH3[-2# ݒ$:2Q8:5E縦Ez]R;K45a6(s7Ie,xQibPrDhy!r:o9I^,4wll&f@W)Nv/{; XMn-sg03(vG7W2|G>*F[8zN1cZsz:c|ݦ\ym#YG)^B\L:2EqK\4@Sy1Jyĭu bcI>E-<_0[d2t?FcA{ץ*'G\<-V6{CMsؔ:K˩-F+$' s}!཈υWėUp=H/~l#/Ft+Mˢ. #GH{kNk [ҀI=Ρ݃(jX VLۯ:eزO fM`YrΌW JR  RXB0uZU9QKv+ \Nȕzry8(e ƋS2)P iW:iܓI/ۥ.\VJ*9Pw׿xB$:Eu}IrC2'}_ kTA?2;I*pq)b<ʟᗔRg9sJsB)I}ti)׼N.^g@JM \tzW`S,%~^1 (ĵׇZלq= A DEI|3eyU6ˎ&5ID%I\xqaUo.{Q5ghs&c.!VmO,&r[~֕(:UĢ 52?mI"KU6Jcʦ )Y4 Na(t#st;_ݜu-Qwæy%Uzч^|cKdѡVu䖕zu.mU 80 {Mxƍzb̙M+7TNg̥ФCbbXEI ^JnCkK0]%Nn"D J:N] .~^P@+b 2ؔ$H`Bt8XF$??C 4Z’:I>2GGƸ?1dQ%<. ^1 -DSW{Kʙ˓7D ?QʠdMک"-Y& mq퓶@'-vLp lZ8xv0M.(o:U7 2,3>J~j?=c/g?jv|a]N8t6>bB~sP"M9vQ>_Qf¢tz'?,թ!?oQSryNv,M*#m Q*8<&'JMpL><ݼΆԜVWDR@Zu{Ыɳ7!jٹȖ\+}`Sg S-d.7 s&pP'rY+aězJ6R RUdfKݗު7piJ 9{86gHT:F@:]e(o*3p,Mߨ$305f%TYVI"pZƒ0 L|/S1S}c ')ew]TY1@έc P~'"@p`+x]Dl+(5ίw6)8^f[!xɕWeOy?ţ[%n}߉z>ےEF-hRV}).nʘQb {\"ewފ[pT}4|k)" a&H>vyPc=Fa aA$s cmzڛ.Fr#=f}WU dGVZJ0cFԃ.9KYF>I$YO[$ |1ơXK\Tv6>0lGاLW[κtM'KI/Y5q,Ͼz*gqɂ|흘iʳ]<-0OO'@c65F]Rb3~g>a!w@tޢotct+uBpa+Q0a->CYNswoA^h\z #kWwz] xy\㭴ddĬj_ߘE]) yZpSQ,>zHC152zTBpسkjaN1lxo&]Oy;hFH6>P2jC?ؚ̊ e%`_e]{&p5r)%v0i>F5͐1-3^J{׌| QOY 'Pӑ^Կ,먛@HuU:8j-):j;Z IDAT 0*q㙘%88 ysC,f Ųwi۲ Iّbٞs΂$'Gaql%R֝_(k{iM`ܬ,^:g[ƓN[Hϋ 5\8 4fNV_6#op[<<*Y@@QZ0nKN\32״6̸ft;.[&(9g w^ny7]P{Nc]|JscmZW[zP3ȫ|EĨOF a[0C\\^%Z@)afɊP.rZV")Q!/o0^$ȸą~˵m k;{z͝ClK)ՙUHRXNɴWBhQ~ "gQx(6^KKR mDɉOqn 7I¡S;T@ăIۗXXvsA>Y uzh BHh= XWؘ6Vw }Z6\& j^1ϡA ES zv-#RD:6Vmvo&oݖսݕYk~U/N띚&G+xHz@-u{Tp۫oBymv[D[C!O\Ƙǟs[,6 -P ~#Twf2sE8aiqp̸spQ)SϒPȪPGdstin}w'H{:<|PMK팔x3C :M>>p|y(;!?5x7ަKI j|bhkvݟ|?HIK뿮O!2^Bف.CՍ G/ VVtbm}4I!"(WF԰Șe-{co&jC% c1KuR!3)j&?2 },4j9Ԝ9=Kc(i4+xvVז(n2-c>,|Iȃ4}~N+#zcDs}O(Zkcq˫/$כ^ VRn6Sȕ%lO Q,!tmqٍ`f vV6ɷ6λ]9Zwwk}U=b^1rSh4tNR (8Y U/\-UW^F Đ! }!t:Hy D!ߌ/Qq K 3KnM}P=:6 6|O>Z~&8ݐV`w)63NUdkvr'qnx(Lպubj䅵?g5?a| Ԅ ჇƄ|hVbjp:&=uf*L\͓jI6q-E0N'M\ɴe3 y\49ֆc6Q_ii @*%8m(ߧ&r {˕5^UݒMS?YK`ـgiԱr_?%!lJ mE#{iUs˹v\Iyk|SLx< QyfZ_r~iN`'#wkYd"5מlϚ]྄[էX፵M.\xY/{44?@2{4]Swߵ5f K@]?xPV.[Z<{*܈0WKh~ؾw.Z%'vvZOTMƿɿokc}^}0Ǻ]:œP_huu}6J}OUڀ(A\ 1hJuY̩9;Xv?8ߓ'id>"EM,1+uV̼@:Cfl|KܳO=>x?PDU#cm,M3H S%YKhL&L B\V,!Im A4oI}կ̀sIA Ǭzȃ7 ٫9?f +k1zpfdh ͇Vr&kfYN@{. +H.74w"76ǰgEF e/ y_xѿXbyBκ zVRO{O̗ tYL?g V /C)W-NG$UВ41!xZrk'q҇O w{gyLJB' U]~o/_Z宥Rks?kL}!+ujNן*J{Ple\CC03i8)s: z?Iurm7 P3Uv#fd_|J|2"UAf<þxǦ"oxH? ~Ӹ i_As0TӰ0?՞~,yoSr/iEL%>e&m7gM#y_ Hnx ,QcK`!4"?b36Sӻz2D%F }~(:#jr-ǖ:4bR^h0_ W3h`_%- Y&1alWd\(]l˪m颴X L X \3>-w}rffaqN!IK-=ޏ$]')[Il?49VvXP? $oVo{{uu'֝%4R]+oELX(kv6=oLRd cEM2f(/yǨ1N3:} t~FA^:a^koo[[v߸+Fo!%ܙ[}0mxGuWy?^_ןWZo0`џ%] sg=|x0O"h"ʇC1 8wd/28T"pot<8 9x7O"xN>ty h{aTT?g5g N3ysOv(1-gM=W2Ta> mPkP<jI\VNs,@hyz1ʺ*2iDcneb Enݴ:p;yl^–X0R}o b:->!/f!Sx-Լ/8B##_Bf75HK@.d< #@m!4 ;Z6xm̀sSQ+?xoύ%VDb1lf?j{JDINSn"y hnY,@yWժINW)ç^SBp‘TQa-!zBVe}Bɴ]dWŖ]v8m,}`3I4ުk*q?;%lja1 ku[,~nGVMc"{"6o7|_(,^N/.ϓeYYTB87#2lGy7R=k$7P2>Dh.Qd;mkL};uM/*o3ֻ]>wׅf}W<|pc$F6Hr}Q]TC }0_;cH~ouH {Pgݹd6z_΋^@E&pYk zZgIgo.A'@nɡr]?s}y$اs2vsO_L-S/sxq<9>ypv ~ЀDPL/3JwZ1gpY!3( YQ-O |X^Shc7re{>h)*s9*Ag(LRk]=rrEQa Wĭ@9;, 1)_)K@pV}FQ4>-1AM5O@xݣGAf٦dN TүP4P [А !4YGbjK.! OA%d'iP\wY|@l!c=Kp_R`Z{(l(KnwK'm'hԹXǥ;9Hҭ+ڑAn-P+b*W#:vt܉vl6IjhUyJ5k H6o} {hb].jުNȯ~~_/w ^V:7BfP"Qo:sj!Oپ_2*1?ޝ]nIfXu:oƌ7,NڧV? AG Rg5!j$BL'J039lY?Emп-{( a!s=R8IBR{Vھ C}GAf=g)؂1+"3n^9kjx^>#*ĭO)<񬞀-u &=am=}&!PD1S=?n-œ؄x/vՁ B#"uy!4X ұȶ> ._RmsrNJH=@^b)aw#O @E[NWy>e*vڟp:$QG>\+`ߛ{_T](#W)׈zWšܩ&q;OzPE#.Grrs+)K)\^.8z/M.wxkIw\fC|UHiR6Yq22 "+jk '"}^\_Uei~E‘?EGkS#F,o\Fu`ficvkKZx>, `stƕ9+1cHlƑiR'pO_¨.SqJdOޏcuMS$wfV<}2, v%D>%rMq;A@뎲 CIKմ4ȢND 2mJyHΜ"TC s-b22J+g)ir?fI=!e[~S>C.q eL ѝvkT$l@bvq7?c0>U.y]lEHe$ KߓD QΒ`Ou;2!h[{ G~ݰ :'̜,E8թXP 2 Mm;͕w S?ZeWJ:u\z})kG\ wK N~ A HIFz}s^/y/MSBPf-~J)F}~i|rAr`#ygsRO Ӌ_*sGt4AY}*7<y oWbCB@PԴ3QqTpy躗)dT1EKc3p%@? NNA_O]U1@Q@2YCRR*;0J1W]2r}hJ)qO9# ^@]BW=M=mi٬L̟ޅFįF{u)X,aX4f=yK9"BnUv7vϐ;0GYF 9_pZ1/mOΏs0SB\>/bGe8l)Jsp0ϼaUƂ*i(0ҮIFաRRFR}G0Dmۄ3:in06 d +9Ԝ^{/f_7vY S]=ZM (^ c]/T<\T^e0}KN.يA6chIa1ⅯU^*i=Ј?t۟F+Y*7J>|>pB4ߑ;`MxB%GAi7 Ms Λͨ>81c:*{Wxkmg8\"qHo-tb s V>ޙ}kM8I7"Ph:y **"yr!Bv zzlǩ˲@ siM_7sЕ-Yv.sq0{5ZCPV}#[tW*5e} *}US-6%2]0*#W'!p~'5G܉,a%jl3.~n!,ʚGЧYd 3l%} f%ҟqb@1CJ~kO]]%Ny]l \. EFɢHr*ɅR!d"MAw߆op7 u э 8{6~owwLTVwMmc:jf[-cd򍥿`surf2{^lg1)rs&fcW:'5jnP95#"gUADPũgh;7#:}aiW85-oM7quyyZ't*hK&B4%:(ٽI`nF}Fe&)kj,_,)(׋(S'x|3S;tbb/_\5.8M#\7*!x vd <tz9C,hl#}_u^ov:}ҭGҚJA2]¹^C<\d5Wyհ!y8L%GdNS?zsg5u`*˾%Hp݇BQa <=U^ XW\yRo#ſ-e;F^xT[{YkLsH%ɹ(CSa5mXr(q;ӝnMwU]u]ȯ}A d=ӝ[:;֊~L3QCJTL/5KpQPbw=e˖wl`* `+RKS߲5lDsapFW^PYd\K#K= ^z u{y,9eD?`m'5:04G*M>Rs\ٖ$>׬'^N"fF*v!.>}3~)3}Llxa:S@.J̮2SC.sY+#K dtqRm0l{m"A2DNI.C5HddHK|`ztnvQ6Msuѩc>X=;9i[oek5hgQ rA"}Kd3ӫ%R?n =7h{oPd21#jDw?Unw<ɲ({SկNn>,?;!wg,3^c enG<  q+dFN(QlR#q%0l<(_` X<(RhnVZ0eW:oMww^^ZZZjE}yT9-9'T_gpsηHKKrx 3iWD)h97^覎 jTš!.xxM=t}gJ&~h2[`{ :__;ݮ16b}~"ҞX&Tn8d܌'>Pg+J:44OM65Dd>`جYrYa_~^TUr/˽j|9KpXR`a"B=R+y̎up!d 3` Jd'g!4|VME+uV$Ǵ@Lj҂aLcfCm܈XBQ>F2)ړ^ȅI̡TRe Fui*VynU  <ÀQy (g%p,{|Nic.MՒ _ D1ˉ3SlriWz|`@BkDDYNl8mm߬Y^kuĿJ[iኞqc[a;?BCsEOb|OĶ/( =?"^-e ><Nbu+({2.7ܔsd$ٱ09N 'ߝ 8T+`} (*Əʟ0^^Ɓ 2!ͤ]ɣƞ"8O߳LqpdD2u|fr E'7ݵ|082R̛XcեΙg}(7rg1dK/ ~}iI%ϣG۷¢[M0זe,>:jW鞥EMC]'r+ZZnE,1h.Y}͍ڷ(*\,.ਃ5b)iw0I6~ɣ~OFZ>W9#gmG52e!d 0<ȐmE+d HS9:|]8m浍7qєWN{Fڪfa;mEs(r.t1?5YԻq> ?6 6Z bf'PlmbOGM' *簆_: 6*G쾬1DffF[uޕ߷|wkYݪ1 !(.ʁrulFmEe v@YϽ iRDq$tDԀَ Q2 :\uedP"}5suʩgAr V?+Eʾ>&ayNG^zfׯs|ߧ@!쓖!@ *0OXQo!O ^z}լe@5Z@}.&~(CAVvg L1/D5bY1f_2cB}@"##8*)N!IН+ K?D(8Hw/Y{/S!qU" #2KXYDuzPnVD4qx KĹ( ҧsߘz̰7PCk| *E Qd!iHd {g"Z~cioٿv+ڣi2:|=+2̮ǺL+`۲t9#8C)(ZZ!. xɯAsY-޼XkiMi-Swz}JF@t+ĥkr,,K/|sb\l'+y~ϕ[B@M L叅-d8oFyc)Lj#qDK>:= C !n<䳪 l cmGᢖZpBXXbV_dV iT`{_v @8Wq <{!NGvpktjP5$ E\`s?;4?*+,Ÿbq][eȘ)nURHUhDj.i;{/IpD]9{Es2{}] v+0.ec8/N~FLg\gi!Q$X ت h`ŮG n}Ϳ_}]kqbpMg0︂PLPՎ^ZkDڙgQKlf /b 7ïR`Ml-Q_$*5KSݍqQk8g/5ˌ;p o yn0OLw?%y$ϛUxn8Qce,̅m"aAX/N?ҏ\>ZC"0^ ! >t`>uL%H U͋Ig1&:) |saMln_WHPts Oj c)O6e;5p&', r` (kR)- LDh}MX~rDRE].ȵy/SA00 ze@%KJ <>_? 6 9VL);þyר%Hy}!.9ItFۙ YH}RƦPχ%@,.6¤5 Ϧe[ A7{{] M{. 6cbeRq%;bO4"zA<x%`Õ2dwsN!cJkH2]չw˶ pZnjﷷLU X%YxR 9D(gwÛ )V@$ gL>'b|^Nv儷lH4w]qWfmna(+"0E2zZ^"Z)8D/ ^\8xîÑ\. dϥ Rݿ^}7I 55Fq+%onˀ1~쨁T%ui)h=2c=wX ?E `ԉicm+p,{3:eϗEwjzVMeՃWc΄MZVs'-@RJA=S":2\r T1R~MT =>M|rHʵ@RU$*qQ,F- As`pi * {  r@ #L"Gɋi d

dRڮ77,%&}/lIgsC5@af߰0Ebynp > DWdou.V nbdql~}qR=T۝AńHV 2, Ds:h<4uOeo{1l=WݨMH{wOS7e rN;rMQjDq*"; N#;A#es`bvw0xST9Cו-& b|gHHo_0!-wRfp'ϷT~~OE:{Ѿw&c1b+*aQu<d{KBJ)]SrTSia8. P87fא|5<4鰙 u]WŸYl9QD521nUy (P I`a4R;^{G(4@t Tw]P%Yy,-7IQ`O챡JA36a&)m2!D?_N @̌, IDATr0c 癝>KzpY8"2 iU 9 ӅgbM>H&BlM{o÷v˼yaT<N0g52ȦA`r2f^%Z׮Uz|wíX1X1/(r6REc8ɰ1s2~kk *  ŭىiڃug?A3Wd(g槬" VwP9r]@yRr? x5![`')R8pݝYE ljBJF5`A iaĹir2lg=,Ĵ̯ix$&<$&MK@Zv }+Y-/)HTl{2Q#)3F( V}N F|Qf};˘V̓Ob!$ZF]ʞDvi* ya~ #'ڳwrBvpq6$\).ږ/k֑Mec t((^\4@uF 4+6VLqz0 ˎ#Aeodf@Qq/r.h e-d* st֎#%ipލl-)osCmckNTA˙{j5m iINr++߁]#՘Sf4:Piwxe޶m?ۧ5H$(CW]\qd4/0."`0> AڅXln>oZwm](E-1k'#t`k3`m sY^24q{*Wjy i4eJyg fI[6&8 ש tyḙʇ UэW66y6s?f}7j|[+%To&`}' 0`MG< 7]|,ĽbhFWl[t?Rf=w|c;Rod)l#r`K|͆8nhn0p.Ӣ/A 5oẗ@5yʇ CX*\%/t[gHWөJWز9,!7\ydGhQ3`w1]>cnΠYu!#|4KNgaq8X H`HÖ 3r̈́(Ȟj9YϞsEv^r$A1h]mO2F)ݔ(+Bv'D4!#/Ѓ [v{4ZMyobϮ,m! xr3QՇ2sVSiU&xZMv<VF/K_$W9c#' ^<-!'=r~U%56 Qrü {jƣDBfòF6WNʋ4:_r/4QWk)9+o-D"+jU"QMkFRcG$Jjt IYy4Qy!hQQg^oRQT3_+,\cp^FB;n.ӗ[eQxäT jfckO!绢qC"i  Fj0_ T@~2~}OW)Ȟ5yycJ?coz|]YD/ojqiWQ)cx U%@- nFgW]bGk5zu4 Nm*y1dc6ptvA,<(-5W!ۀ&ǧZV;Cvs+, ]_mOg 0ɱj?r!(v`P6{=Ђiu^/Yy]n9K/kMru!uQ<ǎ@GC#tE+\+L01YLT@=$A`MfiOȤ%f 3U%i,*/,mnӵLndnJ7uKJ~f*0&Jp$9Z;T_,=J+\ȝzϱo{g#W2WYΜ$u_Cŷ!Y <Wڎ&a֦;x.JX3'mq#wIJA5YX gj2cR8yikt{4Yaf;6L}~uxuHP"O?TpYXfXbFXzX|")?эbzvZ4{4qd_gqh(B`t=ۅO7nd!Uo?(=b3GwgBAcZCڀx쿥>z~W3Bcu"t*;53Vɷe ԷT;e3@1 a#Scg!oC6h-G2qo>җ&6^z],N[&u 53j\x…WNFxRF^oW#Teizz@_tlzRk#t?fҾg%'Ob%@!9j2BvmUiPW# Y7Bl 1'!~<xa=Il:g7Ŵ)çd!mC6X7Xͦ iJB<!kN-E9ym1&DfCܼ,a^lNz8 Y "ZkNJݘ ¬N,]{$"bPSlD}A먯 r\nvjM=`<[6m449JlR`gEY"dTC?VAAMDX ~\N7yH/V4gB`gzj [n0 %%? YؓT#(dw*}xoy.o?8Q}f0{=6nC3'k3MoFrp7֓={Pi6!kw]p7zL㤐L֢eOd:CX9TT!fM+wm}ׯۯZ/wT;'?_Go'xǘ_Ä:𯲆S+.\Uq-#Kb;+uˡ@dVx/^&^j51x$i%-Dvk_fJM `[ٮ%g;O0<(|8pvg{jߔ ` {@^rɯj%\a J|9~ڊ7YsV Mq)y8 s ub֬ q8J7w3҃xؙ d>:OVrF'=:9 1zVÿӸc&",͎\HCC|5I+ab+FblXpOsc.4xrwǦ| H勰7v8z&JcH9#*ư4feΑ"D9U[:פX/&7v{ޫ64JPA~Xs}P-~*'ϋq{?tZja xv/Dt@ Y'*$#A>') xZ {]G ي$-~$/k߇fk*9߽^N<[IWq˴-(0BjB&H1e9V!]a~zD(WW ?YRg]7 ͖{\d0cJC%UyB,~Xl~;gpgoPnm!`u|yRVXfdILkNfWlЯˬة[a?xS ج-dE4-ᇶeI n(NN*34a42_RCC 5 H3 %?p'%z<' 2a Pl+^:>DzO. @1*V\ؖpnd8LUPSdC_,6Cff]{X:e @ O-QaLd/:/ۯITe֮(@k Q2Ӆ?i7.DcZ0ځ'ǚ<o$7 kpud!Q1/46ɞd9, < # 抟=xN|p 5vo)94sS;ٯqV{T\MBX+Ovq^G2 q"qJ)^fGORO_zP9b*j%˱4k'\?[oC^i$]?{4AL>ˎby1pf޺*̭y cpwOl1yIsV]" HToB^HKܕn'?St4dO1Qٳk=%݂3w?T d ?F8oY:92xoT'=[,Q,/3Dkvè- BK&˔{}(d羮fHU#wt DS^%tby k,mC%%h)'~mN9yPȦ'YE>vEb?.9}mz6xI=h*h7^'no.o)Uyw ˆkiOWkXyC7OL&*]CBY5~,[9mp3j$MMF{FpZLSf؞̟LldD6EJ=XZ/6nhld ٬_GHoZnttr5뺏>[ͭQ,s?0}Jf=\pB\qTǏ8}Kk]۠GY$S&煙HmZOeQv3q̂\ئ{IWʅIKH~~{ƵZжUSjiSF%NMU֚_yko.6nG7Y駊nmFXbdTX%uG7mAmJ,2hʗɼ'6/Ɯ&+ IDATӜ8ɴ6zT[A{k th6ǀyUL-%=Ȭ@w~&"O^$|Ld,f"k][+es¸ `N촇{bN`JurLQfpfiF2Q)eJ]q_kz> j&R7(XJ,x2ϯdݟ1Sغ|A~Ֆz,mWg'+:KW\Tfi get-$眼+}485=لᛌZo[*b<: X0QWFM4F+{z[=kLnzo?~$iaOjQvmxJQ'}uLfz_nvtt5oܷMZTB9B7Mq9?~;?qEIO Sb%Kfؽ "-l\fb fic^4 #CZ  /P9~kP}ɥu*lc+u-l /oj ?er&ޟeC4&L௱wy1ǃ94f_{)$ALu*Ijf*¸bGmcĿOI_3ʘK@3JlWWDxN\p}5z9?9| @:0J̱ZMJQ &0z;ӱt<5+#шۜQD[BaOӋs y1LBx<7]B{'09CS|neSHkO^RD87;5V+勁=.ÿہ_ۯi/W^Zj:w.՘sD)cT( -[g,^zj27[":c1:I ph'UN9k4{??~'ѧաv[|9QS z3o[2LNnTZf;wA[XheSŮGꎏ8x<0hI:ݛʖѲ4Z80W%$1t~l^F,Z^MNg&\e9^hx+ g=>m fW*נ09JH!kCw 4"W &_w+uSKL,7P7|D}[U$'{Xv UB Z'1eg eЭ.UuE3-X{#V( Dv{IZ#9Gt_ޅ%f7D2D+u49a0(L~|o Ƽ/e#9 _;$V\Z 4L՛ڏr#G-סC|9"wK@fMh›vB,?ⱑYo/鯄sr.n~y Η>]M!)ݨn7'?Ad.ɶWbE."'k-EHl.ȉ7(OŦZ۠ڀMEhQ?~2d'чeviWBںw/ܛݤ,H-5}L/ mRSU9x/b孓o:p!CCΓZM}fu+maE.g  1W̎A\ɔY}q oԄVUDceOc0dP[) ]d<)<&D8& 5ȃ0ڴ]HK\79aîxcBXEGp"pSWlf,Xb6/ʥh~G|^rlW~\.ҷc29w+޸![vg{vx8b} Ψ=iaӟq[6IlE`e?;_i9Z)ZzNوX\3S&ej:=7n.Ud`)Oegܚwӻ[Y=6Z$mjjvOiy0!sS`6Ns:^"w<:_|>x$iJc kwDQ{ 2<1Ea=k0Z0)ӥO+L$k[,=>cƥ\{%}09RY  ܸ9CwfD`>7Hc9ΟǏS<tPyi;2Xl#-3oਖ਼k.V AU5+~ZY!Q W^# M1)!:Gĭ[Bxc."?!RtܓA 3mAN! ,I "nja+g) Hi"fEYBZRflbLLD6z~Gjr&w%՗::(A7aH,laxKy%@0_k p_u1tᰳQF1sʟb_RTN8yl,?E`/>6*Ɋ_K!yM4eEK%~חZp&=6T@!&ҥSx\%Mc(oyK,(rF$ . G҃z+k1%ȞLBL?~4$Tlz7ߍF׭wnnZUuZQ Հ5Oz~Wy"t}}m9$82c~:btqq$'A,(6qOnZd~RQeT`5:kP"}jcͼM.d./~r0VMq4j߉$"q0O:*@K0|S>~Ϝ{Mwq%fRh_}Hrv4t7Q{U$=Ifת(ʸVݺEJ-i Em:i3Я/iB>F 87ۆ1.yb2W -Cw;Fd_9ͷ8cy^φF7/ƺ%QѶ$ (v=KG)3?]3-)0+df^U轪v>eTv%Z&%i&i񠰚eRk7 _ Hqm x;YZrR{S̤+ng Y/l7ѾC5deb>ay3͵ٶAuhN[LlnOW 6Sx:|D-qo Yg0lނw=θIi?u{u%FV4iw]DOOKVmM5n*mWu{ylպpvO AEa' Єz X: ȊW,PE1rqPgA|b sZyNiyq33Kƌ]@ ,IM( T"WV#6l/Uo#uε˞Sg#rsWfrǏv%3Y2t%|q۞7=xV854&%|N|,̀q- ~[J:(R,!tGS~yp{ =zY,kT e%f!YJ:]c#U Tc\a1P~G6e &Ω2PG`%J7r&@#*ݯ `E4B_b`Ni`@(+ܗ+oeKl=&0Yq u-{'2o/EΛm-k6޸PQm$L`RF߰gXx0Zi,NƉvSQ*~޾>m60x16Xg%J4ܘ Y#kfM'9)5[[ke0=/Kz5ӡm7ٓ쳋z!@nr7ovH?Eu)~*A=05lNjsʣBb sYyg9^Ij b6pEl2s[dz]~o6 ̏R*f+ ʐ =*wF ,HIq{=ͻ(3~+SnzD뾯z^뾮r_ukkf">w]N3&Rʜ^FZh﵈k ~R_ț е}i%kަԭTffPdeg ec APd#v(P k SUZ.É9d" oo%FkT뢚^L 3!\$-ƍ 0y=>cE *vWPR]rHHVY`qu9p}` H lo(w$w^}r>-WL 7Y]JyBϗ`HsQ6W#뿔~S7fogJ5M9:[T0U!}dtV}H<ІysF.əs7mM-D6ߦc}Z8s*z $&4D pJbJY~}$rodݜ !"xobY-økH f;`htuvewY[*9ۄs",=N%mD&mMYHE}uu}]+|w=rAjo9PWM&xVo[Bt̡{@0ʪʿpr*y:HȔ7ג4o aqyU-rlWo٨$N%vK8HƜ{hw#a.e umݮqFV#&m(yl(oI̞diw6vnkTZӦϓo0Dz$vSӀXGDbVoNtBQ 6@']{|-w;(i FuAnxdǬF:ATc]A0* ^RGhL-,hr_~h:֓Jvm'@eݼ۹w=uE|^Ogvy>jw;%kLwk珇џa ?fqӘ4p.YφmN mgqy}rvol 8+I m&y% ^R0v/썪>2s'w^ȴ%r 6Hek 4o4QBy$Tt3q@0WHFSZіee.* W_8) *BYbTεn+NjGrϯ yBR8ZV#wm x7vxg q:Y*;J(4N2,o%EFp֪!AB6><=4;7!kDfv_fW뺟Bmntt7ܦYg8&{R~MJo}MAYuAle짙T~o:QѼe2c~<ݔ;˳3> |W*EhW rp=E'+i/2 ppo|tN=lD´FW-riy^Yy͢y}~>Q߳o"8?0y>1C0-W}Y ‰bhJM3 2,rrKkJTFLw s0( i:hn / qW{"ʜY3n);U-xF)0Q56/'^:82$J`#ۆL{ƉVd?&AfA *.$M+q%쑠;MvX5$"m@5c4Ѝ.UI} CKk,oTmL1UQ6;-Roם_~#e@閈D>xҜ?487;@2s3LJ?Aw3UCưkӫj5'KŹ,(VYUńHg&#V&֌[RX#j6l&h&jbz*{!%::w;n~^:| @\C)?^ ó#8cc`GOΐa.̋<`s3ld yTd Xy9qˍhW޽(ߟ_` ۆyq,-N{tIH޵&=纟|!Ymq?UVY*wI!o g~羮}6r2< S2_q<$cjE)zYX-1}S^#1 F ;?-&o%+qk FVsƔx&~%>_r^,͜oEX}Pc&@jcֵ)lrj׎ju*Z)<,2)P 4LvE7oL /M;n7Fݷ›)15ikE54?fY#^[ǏmuuOu\\7]7uj$Ƥf:'ߣl%/[.rL͍^Ƀq$Jeu'pϯuTR5Hє ॿP"hZ68m"_~FW2}B MX@[i?Ghx6 x&Kq~s1nN`pYKZI⟸{ze.PNn?C'b"~)$bA Ǵ8mX"JbUq528bf?֍-N=0ѕ( R[3& <"*mfIa$C%@IX d] $o V3ByA.p[D=Nqn\t29%|(gpdK`@6< P!U_/ sV o]Blʹc.sjy,է"ɢ_h6{e]ѿU)w0Zw'D׀_f? ҿ+ׅ}WY7 _7Ob03Ynaq%"i 6_J%V2Po;H"Ū(Xl> X-If:ǹ+)tn@XH`=X!1,c94@8E)UK0J2ʀ|fZ?,1qfӧ4Q6B C֭eA l7)d&4}Ϡ=|iAdLbd,̦:[c:|]omjES@}wV[w !!/KJJrxk}]v^M_7h e wi_V9]KosSrMA'=|' !x/R0@ݡԘ.gOOOgoLoջf[{, =F/hz>;2"_h[&wGWoϲFb v){`$8%A+yC:0B -=ɳspQ6Qm&7!Z!#Ez0+pz(Quo1Nou5B֭Z8ƉݚDvb/un۳zGA#0 |Ĕ-aɟ Щ`g!?pL¨m(^8Ȍ= Y"0ayp.]e ܢi_/K|_=*r&Gd V\PҴ?T3nc3TϮz&=͸mq>S,KP+_egv|Ӥ7›:ߌ0w^op-[L~ W9K8AJB̓$hk,E0g>2tc^1Ȋ}FYv̎f>>>>>>>M=K7wƓ mIvxpY뷦M)i4Ň6 S7?Fg~boU=]A61X~ Rڥ?u]vXTiqG]OT=a.385RwѤ$u^*O^oCdwэ`H p#%S)i֫K[[?sZn4ܭ 5lXN6Rʭv?-[/NCcNT hsgpf6YS R$-u[ig`ȵ@6Sj^$&e1P$jo9&!:1\/ZI4`UP4:nu*}Ņ3:'3=帞yFuwQXudI?W-:ga:6!cSv9[ۚ(ہ d~bY3! p[ \V\#6q҇>SMp^ Vmrxzj8ÅCIKIӵ@`PC0tk-' -jEK:.3P&:?M7mMK޶RZb(W˸\&}[ 3 59)@I: hg׵,IXUCVk}/QLI g(ftT__l/:?} 7H6d XrMdU'NSbSC }^\ $(ih(㗯K%*PgT`e<hLoٮK{Mt=>~$ $}>'S7vt7k9TNU6Ù@a3UU-+@B<69[' ))rc!s0?cX@ȯvU!ˌx;0HwBښȾ%YŶp;^f,eUyPj Y!x4Y l{ck`z¼;D;#ji\%9E>/;n-5Vl|.>_Y)xPӧqf16xy0BB,AtL~AWl|U|+(soG8^%X*NagWh:)6sؚ%8rì B:!&jf| )ӥ?km Y.A`v\e98@EUtG1Z֖b Q!!Ԗ+ZSw]a,s1 PƋ+fXfb΄*]r[-xȿ>6od( >vMB MNb3fpm^ 8B Y$y𪧙.Ð{ի`0/?hp*_ lo ㌏ZFY3i {y7(̱An''G[gPN^ch&+@Q` @kTnY${~}^魃BMEե;̞D.NG#IpCHf$PϠL ' Lp\ dbfDB)Ȟ z{?eLKɢa /U8iWapc s G4O :68mݺA*P^GѯlkWB{p{./ü;-`Y7jsP3<i Μ@g6nxjy1Y;,s*sFjG̀R+CyB/~]N&)c ;m\CI:@C۬ ,T/jZ$Gl(y#l!UaLs^zŻ}AE`$KIKaI~(N7}ͯV4PSU萪=.(9=EYyTk0$~ܕd:hrsy x4\FYnLtg. bè ?o>a}!V>q{{e}wUo{:~UL6 KS@!Qa#Vbc6iϺMf3fuIPx0^Fy #Xǯ3W Z%?%砕)cJ!ж[=U;&O[XLh$p epsW"<u`4*ASKXJDK6C qXgڤLqPO,`yP5VaxfuiE?hVJ*9q)^\H*~ C@it ].s޻"VհQ-ߚkL޽c?t8}yuӳ@ qΑD3撆^>'!oEˁ>sέڐe|ɋuɴt] QpY_1{t%X:|eFr2 p$4",A#c1XTp-zg^ DFeNk#OC՝0>0h`*^y'5: )|Χ05N9r763\S&Poťj Ȫ24}LyJc@^x5#m5lՉJagAfT3~;O\K5z2߀tռk]3Yʿs~f_#q=6Y=Z5~s?8jL> AZ /e!&Q=!}E;X=̌Jd,`Ct8[22 Vv6h8PuڨF)o%|6u_s&j6qaTSvUD':J%7R#aK `0yЏ {H~6 i%X}%j8iȆ~ .uƩ {`q, ~ڝc}od;/o6W"˴{ bj6̐{uM(!!vz@ҿ>6vB}S7 IDATFRfMz`MtJN4q&S4J fO+p 擭nakR}œ<ٙ$ 9a`tMʆRr,(RxӔp:nI孺qnx]e{X趘֑'`3}m9Rq^bfPmPV5T-[AՒnji}Q@k} ϟwm|ooiT _ðnj~AwI0<',tӦ{y3IӴatqW8gu.)1'ePٶxlSD?dͺX<)P@"8mKM J5sHP) @uh~GZZ*d\ `.&e@<#ׁqJ3єJfĪ f$.䲾,_ы6=#=7U@* Uՙ$20+$qJWGhrۓܑ:%[|~~rayѶ43>L pRI1`!V+q6JgRiB?aĈO?>__>Fq,)sk*'2gs(n: OFӚ3&P?QNyO2k8e0|=q:PSPVE5ͳ, id=w0ۊ޷{j CF(;N6~xT2M-11\ަ_oݮm#|Z8:H✲Nj$?›ʔ.kj)cKc1ޔC Ii7v,>G{C҅]^UКbi5Qcq88r" s-o- : =ulݤِ>y<<ΚZ u:ͯ8$<.zl)Mx LX|3F3p&ݯ)3RR0JaKւ~bc$m^B/9Hlk<+?yt9;Л0U@lZ/=i z|lqӆZ/)=oؐl{ǽ[}>`mh%(>Rrƚ515֤Ku2b !R(NfTi!LDeu}n{kBVc3wً}-~g& ht$?h )]51P}I#C"ӘV\9ټŀ?d"QP=Y[gPDn G=J8 Be*-Ikl&JKZ wVr *2i}fys[Rz 'R{|7Or{]AHg z[鐟0]ƻ7f}b<@eFr> OP) " UX`L],Sl$;,t|v$Y0l\w@_RX$dJ Ñ1iE}E)msFTy68cDCS.|{7>-8 | %ƛϸJ@XQ\܉L9vu$ y:|s@{0\.鹝sn@sz֪֚Clff6tw0XUJ-ȔvEphdI~ q0:AI7LI03x 8-(47N)9N OȨBd<xED9߭~+X aglf^H~Ţ/tr^>6Xt>Δ99 dhCg&2pQgDu%+Ɛ5<}x 7gy%hJ@krhΑåc$^ס9ftձH<5!AjMQ7ȶ[2%94_\ "{NX5 b}0|*;3bvGҜ[ǀ#d/Op?B ꫁kX:Ӆ Gjp< k^ަw -56smEwAj˓SRafΊ0l+GjEHPG$>vȒS؜ô#xyG`.l$)xK<0Vix 2о 0[%@RƏhI?aD"rui+#8CA%kW1Ɣ. f#㰙%gmj6S{ n\@+Hρ>.!\gzޜ{Yh4+~`?@_D~awcjڤu9æޣ'G3tyǃ:xK:ir5B4jOP3&"2qNZ#Ce|y |Rc6jɀh <Nqkڬ4mfeu+(74Iݹp< DBWwu qFT@bA_/{ 59^}d`ᰋ…D؃" zl54lY6oj\^zA*7ohZV̧ǺiXwȔ X%@NfVIjCI˓K^ 9Obo=WڹkBi`4ؔXZo, ePƍS`yfaM65xw- Bg$O-ҟCuj*v<ɿ26yRu]?w!iys*2\ЇPBvRҫ2ZwG>.2J]b|pL !0Ka`d9EH>O:<I?t!_CԜBS/WMbVQЈr0-iL#?+CRW03s_X.s0'CL’76cJt/j*WQhNNMԤ1R (xXK^Kb@ Gv܁Q7$rEa2(m#%2_ rE_o}Loڰ,2䈉}=f52pe![vɶu uːj@x&Aǀ6U \c5;FO`3LCGAԈ5QaPxFͬokܭښ5P2"^ƨ/473)xB(s=g,ifߋ{`1]w.Du9S_Au'$JhW@m{BI`(97~'yG![HRU(@UUEqc"3zKw%@{ b_ |B,˘d5kݗOv}멣|~z0w}:>u5М3HӍ> q Ҹ}b50)d䨞zP֛5oR>ߚcubVߗ _7"o) __wc?qav&Yiw'nqiLZsiR%)NB%=AVR5)3vS&@]cJP܃1j]${:G)Mff"r5pLͦtmIXdQ|D窪ծ>?}u~Ϗ~~|~~>l.3{YkӪts)6,6m^B&D,,^6!זXcÕqVRuJ%@ИaX7vZBoc;侮' G/ @{|7ez4^oy01\f vPej8ofYNZKCFރ0ߩF0 xhz|u-Ը{!4!lL`a/'}6יk QX BSvϊgH (po\^r}2ySaߙۿ`5~{l~qM$>&Ro1N~0(P焝-3=/*|.;sAVohM `Yɝ5fcV@U#иia'03eeVdYhTfOHЙxM 7Xh X7( LZ6g8ԇɒEu5j4?@D&kB²{4,Qf+-!tw9(''0zߥqCf**d,P7jo889 j@&y!b -UZ_ `N-KxWջ?>^?x?\?>~^s4S?5]أ$j~ $~6eBdr +f<8ګ#L"sIQ+aS6qoyFOe,P4>_z<1|1שrJaey*h,ؤ /$43/>#n؉-lih< NR6sLTJD{j(-8~'BD5VC0fV%.ظkK ̭ LM\s輈zjfظ#[< !(^KCw*ayWfNٗb-Eq`LD;9,gfޏ%a`K"o4ZZ7 yV#%AcFI Iݘ 5ڌN&C#?BVc5jL.UoQcӎch @`vn֘Z8r3gG%{֢&br"gX?"0Ҿ0S%o\i,̐RNm:/8Ɂ8 f._X2`1q=cX3GтɓsGPH=)2)r̟FIs5v##jsWԷqO,`saNTRSΓN{>v?xF[޷sƏR~b[s $FlISKgf(^8NkPR{`m1b T/g_!ⷼak9k>N>N~xh?F0pIw6-(.8[%:\QL0Ĉ!U0J _nSFP1DH( w=*+xBŚ8\i/sh}clQ r*Yxҿ^er_1. s.D/DI\Kf@1,ܛ0i9G ա9sZ҆??????ϮǺgZk4=eG=+Ď_q>ZP +pf]MdT4j`,F"ו76_{z0j2U+iy14 ߷L6{RF-~+~} \%[cVUo/QQ (8‹[ +o"TSP9-䖅Xqr^,EGk6ScDJn""x}WC ;z,9 >N Cʪ:Y*I%E~S?G5;|ʎl "v>y{=(Mty_?\pbZ%ڂaB kBCcM j3@Z;/꯯{Hqv71gb;M?V)r}d͎R6" k!zyn?BfDʨ& A#M0?9t:قG$SrEer0]*PqXY 3SfأgCG@PnnCAT??Vnu~@{y=}eSݯk*t7%ЋL3}d?~8yP9_ ija 0_-WYpԵe)C{ n\vқfj/w,k{rB t Ba"OVه.)bX5FGO __ h$W)ۉj*\hN.vYApIO&Zilj%ȊIÓTj6UN&]D]mB@iMXEI[䎘UN) p|*^tiX#ݤa~_u|_?oq!Ugt߬)}9npʼ<&Ћd07tk4IֺǠä YE@Mrkq16@DfsS 58gvEuu}F1I KSDbHA:YF/):fOeR w21JEi&YGA_p=#V:Y%& z$AUFIw$i0'\5sH!98fw"W \A{e5`D,h:OQ×A X?nz xr=q&uo;EU,yҐy1d!T1T94g8a^Z`umI" PXްX y1q^>_^9>lܞ(IתA-8dP a!:F5Wd|׋x3k_'> LYi $QU$CTD&M9nu}ޯ:mET5$dtrش' YQ{V3j6ٻ^,9IyRhqe9 i6BT$?0E eHȧVWY5g߂d/UH28JPmϴE=ryo@kD1;{W_ix>8hgWV+̀Mz@fxSٟ my1xo EZ0W"BhUxFLV"m:PkNE; k:/".ZA]- *gCcn\c9@uzLoA=o+`(w'!RB3(Tb%K)!V[hmXPP#ژM è[((3I~'pGN(j4Gi^n@1f1kc"O G 'THy˼d_$i&o ~LjB'% jڶ+xTP)Q+A )Lk\`[w~}7'kgv^h6So'%IK9ea3i31}A`f )UZˡm@߲ @3] 6֎&GkWm{d Aǫ_8q3v8+ƘIXJL]0.=OjQRO&LQ`/m}_Qc9ex Rx8´H 1,m&XpH} QaO5F*U J -cH}9@ ޙkc`~X8eV?έ(`Yi\p Uϧ>Cn 岂Z>dӟP)Z>\)]gl u%js%T5M" 8iuBJoF1!V^WJV&w!G HC~y$p~ f:'Y>xp݇' }0 HItvLu-4Yh߷7\ċcTYօTb5vȂqA~]zztt|үw K)GKpRBǖʸBitBj%Q+H{ pPg _i% EG{5Wy4Cb0!+"܄i{z}Տx$;uz^IwؓAF`SO)80;iBH)gCmRUf4EU];:HkF"݈Pc1 y׋G/נ 7$2pgVʉ*gGӯ=>Kq&@ DAS^E;gb-BWNVÁ}e#Y$@qR$rT*vJyͱG]Sœ'ht˭%RR bw}🜯hV487uonիo:4 s/ڃsQD % T;]Qӱnn&sfrKySva8Vс1XR I̫V3n(@2__y@xbm$GqٿypBaθ=i3tzpd)'/SӃڏA9amyN-KUnc˷뾯:><6S~< (y/j70Try ;H}f2}R6Y5J$pPor '&o8YWsIwVӷv 1D7QN Oc/f]u}^>ðլډEWtH"=P84} Kz`famBT%3q^Wak,tm`2XI$^" TI$ٗ+QDX-z3W2C1hG;x8ՎѾl p7PǬ*햦_R9fqj@D{$&EArlKVXU%~7)(-Ɗ:xAcյ8Tk _wb>uٓvb"Ct> ER #KjCnɥ?p , U-,6GY&IK?9?P+N *[WL}̲IM @X0ZM0~n)^L -;|-P piz0X{E3>z黥~i 'TwM C@ECГZ8EEƓ5Ϫ^,:&"ճjpU|^*-Eɲ:>ی(%PtIƹp+x9:5[c QRJf%Na,x_n'&,$(w@U`Kݍ5?h".{N;ztD]}u]u_ua5u}zv=^n[$BUBxBTnaʅI.څ1½4Qn\߼"e4P 6Tv&{7 ɐ`ϵ >"ȩD-Hfī3eO<$jgann9x5bXz˖_^cs3u>!!}t-be/Y%U޻hdOϬdqq #LJI–7xw kӛ'bdClƽx yhmB }`Y[0ų\Vnjd* ;ymoK4c$t>{z%'g47hmlwsWLY?=vʃU dio)+P7-gˌ%(^}:Mzd~%A~~Kv X$xw(m{Q'2O_KӤ \1;VLj[\cj.  l$p\2aU% =R\Ȝ>(GCt.E+!%&^+SDl@q@;Ndp@*]l4JnjW)&ҭG?Xp~w;IgܔE]"&tۯ6>gxpe:WaN Mf@ŧ'uH5!!F&d$,/fx; 9E@EB4FI{JĢ+CO ܠaë/N܉n+F1|W{iT>aM~04AlG2_\ٜи*q_O!-{셇:g#H=F.k=@j\y wX\o~?j BN>>ݹqwK7j)4[3&NG.0uR"j*N9Bek}~Ҳ^.T@ y/oEnsXceBZ;#\!7l'^)16弻=[Y(J_d N}VQc7Rr b.5<տebRWҟ?tgB,? Pm9%(3s#hׄVu㱹0*8 I~[V 'eB]#|qʟuo}fq(|~{{s&Rjj/>xv(SѮTH]zj zm8q " 0q0pk[ސrY@бLaBS_}~524W2+E5|ha^hcq6gH^x52a&OCEzql=ݸ K'HI",ܪ4F` P>撟W 3#:;vVe@jt| X_3v zHI%}@^9<<>pbrQhhu󣄃]"\y/QN-~Tq|PThRpLVs'µ~K$TXL?V\;3^mc^t~  ﴡN]8LӍiҎ&]onqF }'fH3VK՞~Sۜ8 Y2|iuDAy} &;% hVS)4,( k&dXpA3;h/bu@:}k (>>JGFUګ!pItUMȨiq釫gmf]eb7Q_}߷rվ8)M1tf{ S뺯1u|?Yd?qqt O=e,_"'IzmWZtJdʼ{}",'\skhDL^s0f?R6W6pPn2A.sNb۠6~p@!lnM0z{I?y/DKEO"67RKھܙU(1sјP_"y]݃ȳX?]u }t`.SRA($-ʄ(k13)pa[s^Zq9hg(sJ@&DisםJ8Dvӱ0L@Di$U?9N q!71Rg2e^?#TӸuvzי!A\IGppF;4NAa C_6)Z+9߯ռM\!8.W1x VQ^ibϸC?󉖜*ݜVr|dW]:} i[9/*ə@ <^ٜ#9 ׏Z~x<朘p3@σ}?Ki%&^*55~;y<~|>ϕ6y^h$H{}}ޝx5FN37)M#vY&%IbUATɟ%2#w$@2x@S]vՐPT տ[$(sÞ/[Xu4>E+UP>,Dg?@ 䈑9^TWULxޯ1&TD}|>/o'q!'Iʧ=s7Pw؜`?NYbAb&RHGwӃV ,i2_\Vw)DU bA OƠd_X C{R.rQǿ_)-\~l|t-IjK?gXg6Z;NXV)S,j3ZuҴV\2wz=NO83QXvLBY f[7,1&4x~Νo z Joλ'^-Gr;9q3j][(Ovg,|.{=fRw`%/:V bbCX.@rRM }0h%鑃bw4z)kBWS),|S¯aВ-cJx /PK_2ሽ A?)~|xWVo}覆R P[1I[{y0GQ-Bb{wJv_y?$Gk}b:khI^yMS m7 9#@FJ ;ᮙrO˃!a\X5#DˠvU$|`-Ft¸Ι &7:-sO[4!̇i)k'݊l#kP%F;cwj?:C 5DeEgW/US]f`NR4G1sݪ P}OBGt h*KCm!P-c=QntBw*|q+A*p%7*yR6P8=i =+;JKL՝\Nh>熨X?S5yđQ@!?r> =C䈘@dԜ,ZKC$[u \s0v&VNV&cj6K"@8}y_ԕS'^6 թwK&* wa1oDĵB'6 @iagKɟMO̤ž۽Ai KƖĔ .0\ " IX}\bz~,[>'oV-VRiz]t_jgU,N3P8@4ءzZnng K(OMZD%m%{h D_ʲ.D|`5XD^XB0gU)W}KZ6auQnmwE#;//?kZwͺ\/FO]ktȿ]?3xg(y^|sߧifޞp]$9_:H%S_( o$8αh+F5O3bnd *̍Rw" څ Z8u$6)רUɁ =\K(H jiMLLYev"k4W# uk!C\*s2L{Aܨ߬7i?S皘D:Dg*+y{ڟI5A5[ ,`Ef@jPX;.Q _sM) }> Uxm)ꟗ`qPuV4%U,iN@r }PVN=\\y7z.u }~} \+8/= c~+']>nx;r!߾Z{Y1MP(HF6WXxy}}?LY$@c3x8[n_us$VL stLyG = ppPZaᣆQXmhGpu,q((ERY@`3h?D$ Kci$MYh3˦.(5 M}ulQ aF.еpU\$UU\} ٝz֗9=,(tF2S<S|}x'یpΛO.x%䰙 @M}O"5X'2A чq ͺ aVSn;BH{k%ܣ`/RN܎XQ kJȊo4zΝʼn50ςM_} + S%ڡsH 3-Vt[k Ȟ̵TA =6<*SvN16ZpTύXYMCݩICGs՞/gXVh[ݪ?=~=Fr kS%2x(r~s[ Y=Fwf6so]S t&܀GBdlٿW#^n̢O?O攊w#F}+<L8P.ZVX0g !mTޤ?ժT"$E$t2GÖu8 'ħ߶}u'7 ]@3)xBp pm.!jҕI)o*kzl;3j7)PuԠHJӦb؆5+'T`ƊyݮW-97^uraO'}nϕ[WiSJ~wr: u e|URg!+ˆѪљ6:耩bKQCIfFHSYhH+c;#e}Y(.JpnQ7)>BxzGBA*I䬵67vc&~WyFWN <)64J$͠]a7쨴b,r|beK y,_@^o6Psm[iW{XsEwY?XxĴgc=of"1"7'@]p9C5 8%?n'^\]i һʻ&S?30*u{o(5/"(tR2[EF0hq/XL+u$Dgq>Fo&`k I2`bC.IXܥCO)A[ q2G ٦ަ;0)qv"EqJ :)dR,?D ضwQ1"\W08J1o!Z)кQ߽̤]ȂEJ#ԴZS[?;t-;n1ϳ.D_UKiK%CDӻ}rxU /{;ﳕS )<>Rӹkྡm2',!A9yjG@ ' f&0ZQQ|}ጸ:a<$aI8{BnC8Tmʚ}94m%9~E]}*ݣ:؄_ȡ6! Byln?`##rQ+GY.f5ƈ茳 />A0,Bd ܔtoj\-)rI攐kpk[lK2*wl8TaD\`0;l_#y 8\ IDAT?uտ vJ Kf֒ ?L^!ni!+wsݤB*~%Zjek:rp=lRbwִˆDɬp]\6J;Kڟ cu~ݢ6iBI WU;dҖ~/I /_蹛t[w*"׀)Zl? rg<#m%9/zhF..;9u3l?6+{:u o/Z,$@Jim"۱}0JHk8 7zx4͒è-^gJoZZY'8Te΋SoU7Hod!eV%J܉s=u g´Y_z;ӽ; )RN٢Fwm;"0z, ,7CaǝKSJrצtL30LIa=0kyajIKƀ8)Frg3l{~6ZaӅAoi#s/XYvk -B~edee|R~~VlYm/?t b{^B)U-0/IcGH6mp%wYcx ՟ˍqj.1fۺ8 NzUCwuaO Wo(ET dw(xB3\z4L+0(2W6A ,1Pߦ#8)}@|ՄϞ(0.@ pjAʲ-0jH(q'h "!W7e"r>?E,n9iZ*k0"eEeɪ-SN9P72}uه5Fỡf?R4^*:y͗]Vr:}4a-Yo\F *?韮TjgFc$h1+ 1iӔ*&4ގwwx r;jϷ4I q`x@)wŝB+{4CK6 JP) ݽN^:tZWL"yu.7V9 @A0 s#y dLzs}#ͅ픿'ϑ+Z3=gӝ#|sS>DXE;u8%\@D= @SDLgke%F(ߥh -&H 6wK^whQ~$MOfJB $;+ I-g,\>-p?4 "nK\K2mSe$Pdio ^/kA?@槁'l)>ëH8$'pU@vǿ } /@mf繦NͶU+)AV=p> /CJ6gAtu<\|ǯ Kxm}_'=:}1?k6r:D'xGI)IF/Q/3ļ/bVb6nH?˜PJY&+25nlڈL½51ZW7y朡.8|!"s "DY @y2PEMR"RBc&<@;m@&_)%:?YJHiaX1&c8bUe.W]ʷaMZ#e$[J}GH(&H9@u`QƋ7]Ɍa?#P"-*j{gJ皹6旕iG}F`96 ፿"zTKI{tFt =Q(W86{`?taqA6"!L׉=1:8?]WLcҦ`pLH\ɡ¸ U_yw٘D\dZ>K ߧ27(%54 d 8Ċ?e,U75ǫLd"JKɟ(uh(jq^:gKaagX|~.mUNDSSuU .w9࿮ [}y}],Ʉ/~β'm0ϴO0\`f r$\*n{Qh Lt4 6:T#4ffΪ骽sW:?f/Һ4j1:ȗoϧmcc (&S%J",nLG=\"?0~f*gߩP8yk'{,_yQHkx$1 ocK7}Hގ_om%ZX{AR])%7a,E'8WN#߅]-h?%5~>M񰉕ݶ?VwxPnE8WȸuВjkI/ZT@+h2wĿF?HIr8w\pG=BD`*8Γ6qnY,VjH*,p?C&=Xi. : OĄ 8*pfQKލ!(@'bb^Jz+ BsrP o3GtReIy<Ρc٧i\:w.L-2v˜U"ZX4/l5 Wd{fOS{'m> Kz?)sp@9?{A ^gꦒZ$l& jfٚj({gEeWeoIY$ [,#]G#V,3&lm>or9  1(͟!:NLw=;Ep |X!.J2j<`lG08z\uqM1THQ%5Ĕu-&Sn2)|-jDΟⷞ>ȯ?i<F-,Xi4ctp`]q@ M+jR,]WvJ$9B46ym?GW%,žF Kt4v{-/DډZœ66@/=R:*t]p۽Wu /nإ`DA>?u3Z;U| 1qe7,|P4&qiPrBC~ F"@8W%y+gp۔ކ}}T.R]@O٫' o$mM,Ӹ=)g9{aϳ_=k{p+(|5e9ζ[8+'W6!`2?20)fE3 N\ `<>tB)Rd6gVZԁ;J Ra[S}1x  (< :Vw[ԥ=nK!rRړߵwJ˺57iᾝwtOc6dH"j0{4ݿn=!HktD_7cGt蒗j8M=NmAmKS5ib{a-kMoVߟحQ{*Ck#Nn Q=N!Y8}5ٳI|G r+q:L5׾ԱI&whE~W 6$c+2\x?6=ncך!1ֿ}~S-&akC95dȃ%*A& W٪)5-8C˼Krlm@} 崜 \"ޅ5bq,də(R"QZ0]JČDR@(;!9H Q*A{V~'-nl ^e>flmr鏆]-?n v+JI 0 Tn)1=66z8O{k뺯_LDp ACYOi+ 6-8:E桦jDL:4΀XpP2wS."CT{a7dJ"*5"EIy.s6cF@9w[DBz;HSoo/Yh4dM[淛 6(dtJdL9|9x'*pF֘9;Yf)XWK[ϮGwܢUG] YQi%&بAd[^My Y}KI:0JD;+c ͳ&1A/MdޔVF%"}p&hثA΃m!E5?ݺyn~$b@KL@LyWꖯ9nq ɣg Ei@mXؿɛ4gTԱu;@5BT enWNf *tZ1]3>}(d@$j.KN`\ a.#[ z7+ւ { ꡭk Foُt聴ˉx2͵Pi)m>5斍wyo8.O)Tx>`zNsM63Nv3 Dޞ%v3SUL8\='6Ve^a,,>ؚtRDUz= )OX IݜZY( 'URR;4V QcނνtH"Z>97K_gw\}t_z?ԓ'NPٽgUܴy)#ȣQ}h֫щk 7eE"ǚ[ SBUltM$GÊڼN/[N< xMDKeO"~ͫ*O0sԺ4CI9tsx?yw='!~G0Eji Bsg BػΟ0O:`qi׃Rِ0֋!2^`߲ר!2eqI@Έ7%'pp'/"AOR,NBYy']O|>?/&GZ4G&cT-ȓ酆]do}ߗw89b:\Yc큟*![owa H/Д_\=0 ϕ|cgZ*:Zr%fβpf XdDz,"D]Uƈ. Lߵ!FXF+诗Eԅ`ϧp=u"FtEGM)Fpڵr|_tz<$" *\S E b/5^}8[m~#9TcmC҆Yєn}u:J ^hU%,8͙"͊ir-G_ h-KWg>bWN qN%"G^wHMKyŒ/L}yt=S`\T{e<##yr=m}?s /_@l ]wL7E@ hm`Ɲܶ oS{L6ߺ]0Ppk@EO@8sU}4CUenڞ(tlOt_>@QAGMܺlz&7Y' T<;#}olu@=|bqjGols8벽A'f*8HK_{FD0Ζ"-i[[юK傢.ckܥl_^ v:2rӎ_0[g1ifbsӓm6Oue'I,zTNҊy:c>l?J?oj%@ޙuZȯ&:G#k=ˋ =}cL=u޳︼'DsJigf*3LmPwаjť| ̥Of݂FxYBm[|ui6ئ?ieO@Sueb0fg=CۡK7{c8NXv^[>땜{c?7(Ͻf* p&J'}_%=0dz׫NB@ Xkom:C9 1@,A$Vj˟ָO9,ZBXF8FWS5"X5SqtGيqN%Tߝj .X"Qsd޾A6U?z{Ai\7  Uy6h!.o e^'cvJ__yn}J v~ :*ҟ7T\\o~\81*Xi9s 24i:Qy&AgdYJu3V'C{.ܝ_.sh>1jB IDAT7E}fT\2'TqF 2,i GJ_6Cg^7?IIy8sE^ͫVait(~HfgKѮ]RQ~ [A!X!aoM5^IC$@#x0ʱL~j5뛌6K \H2 O^藱97`0cԄǫWWrpZr4q=?[OS݀glrjk.IgyXh10wi5jS"ZA QB ~m*Muqp.HL;!/VhVC2@y"1}<G7+`i_hUj]#~k*iO~ba~wL<$O:/|upW2NvAT`O-ej4"*:O~J׋J$T)VG eUzl}f:'4MިWe@y3!abQU~.6:ͻ(y3 ]k`bUҢ/NX5}}m?ّz{|F"t3)Tz~vuU=Vd;z{ɑ&|‡ȫKKnMy6\,-^v4`UcNwS:ׇ;@Y}[cNJLNsc=@4 UJ-y *2vXeƤ]쭼YU[-{p/X4׽9u݋??CG#YMag[ὝLT}ɛo:g7vP<#v,O܃C8`/ClqaW.I"X2a8[?9g1\%@ wsP5(`ųNT 4yJ3=K>aKFw]FL 2g}d-hbץdxv׬uE;Vi{aɺCi JVܡz ߬go֓QO!̍%suC|59l4~5~5>\_#~y4קz_?~JQZj(-bj/?U>- A׃?65^28w!4ʴ_($)۬')jn"TkI]7ZMax|R3}TCgR; H&n.Kvu d9c KIOz! ݌I\źوlL!ܟ/HO\za6& ¯2*5g \@S-xg.BZ#Kg#A2:8_ O.H7t1Ydh7| l_|F =&ơSݯE?V[OVjB!szh-qo o;- G~=qۮz&߉=8m }:ͻJ=31Oj~%Z< `q&=ov`$%+cܣ^V=DWZ £'EtC89EX#.Yw(\J`0fW#dbvhh{xh$^vjc7Sϻs6Bnu?AE6 uSU:~]?1:qF\>N&d|G:GzCCK=nv??<i[[z9GeǪR{e+Y$d|}z:hJ)Z2Op^C o S4I!Q-9qT.LEXXeے}YԄSoBM3Gك-H!K ͻ'b@-Z'脼NrO . ̗D ʋJ9)y=}mK`"gx%o|,Ôi tgʭ6: OXX5?3RfwIB\nBԕuڜBdͼ A8X7YǓ|J]ۊUӯ sJ"RrHs1~G/F^p]7`:=ⷛGTxZL)1)J+0'dp_J Q\t=B]O[J( (p?4*% >2z\ic?&MZC Hc.[UzFX-" `H;tH[[6^vr$_:Bt7(^U,G(ˠ;y'Ijw).Csbj-IY_-95~3Pcn"(_QSćT? 9,$]H󺡸<1 > TV`x:+FU=5Q뚊.T(JK}'f5,W> Oj P`V-*zȻ ʡ* 'Uݼ(uvOlp1i^t.D0)=^dn>7z'sC?s `LR(oQ hY{9\IGQR:wdw*Z3<}#$lrE̜ X8nщ]ofhg5SMt?SpŇuHKxbmbWgm_5&bW6,]ly)słeǭ$]>S=曺'܁Dmv8f>@ NWLsߥM*o[Gi?s%C$eV5a.̾<_c\u_ǟKk%| Ch1 ?tkOM/ua0/v4f`p.gvH8\,֌ Պp-1o6@,m2w#*O4æHx/&W?_%E|Xsʞs U q퇘 δb2"آ|[CoSIY[im8 gAp')GG-y5$a)RaiJ G=!%gr`Bۃ~t j#_;fLdyD@JVPTC|߄zSLoT>|\mqEoAFQB~ M4:s)p)iK๟T/ h,*g@q)X3`>XKpܿ$"UB囉.Rsr3mPr50@| e`_uz\|&Ŝ4%5iM֙=Zt?r_Vo is'̹QfJ#RN%6GVʻ`(-s_:X 9P">˧!ܯ*F(7KTgu?3̷ySux=} %ے(cZ ϓ8.Xr P ߄%% `Td6}%ėeKO-mOF3\,Ǟ3 /R:O%69KiUx`Z.o#I>,$@s-WTxWd9zO)*yP_ð}GvZV&py_(}vGg $Ў*,xnWG!Tu)ECu @H'|+Q:XyG!ڻTҗ8ܚY3ICHW-IaTv-H{ԛ ׊]5iMI:iY~~2nxNۀE[fi˕F8-9~\:/CW}tb\~)I-"p:n!%aS"֏ꟸaRlHhye}Qcu׿חALkWSgyG#]>ߘNw c!\n|;|L0n"liynd[O-AҔC?@= y0 8qB_/=j=JXY0g BHm9Q&po(6dj:iL<#)YI?z5yerWٰLW]ZIƵZssV!:~9h5srq6 W .)W#Xu8pZY"~Qd[> *3O8EuO@߾*R(;hhSJ3ږb Ҏ{``6۞`0iBPHKUo~oB+0(]HUISnĔ-rvWX'eCC\;߻Ď3 ωKs?U+'!N2^L~%$$ȟ&Ze jsR"wsMy Ӕ|L0D&m hSK A( (b\IuKTQ09x"8K?r@5XTHܿŤ+9Vއ/M,DA=]qhSuxݾ+VҊ@@@=xgJms>s1c]wo3'.w IU"2]=U( U؛a˕OHQa!W1>n|j55M2 WD)ƾlfcfgQxJZi_)0©}qg^iO.[TzJ,\'j0x;l"Tτ{`ԧ;}17ub/ozٖB'j$fۃlv_XݿK}t?O=_n3uR{Ex6!l!uʴɘ2j*1mjo͋6RP;5 Y^\J8'>vSxO ~3lA`[k%, Ҟ>g1 Jpa&?/VM`57W|C7yhپ4Cs|Qc~s)ϪX]ś4*K}/֟[(wRǿ蓨DwED,TH[@#oye qQu9apQ $Kh_pG=%JT5OE_P.Z wF :SZlW^] lQj)\?|€_9p\W>KDJ7VE{࣊eӻ}T*e v?gS]98}yb_m 3H> Q\Ox_sI ;B, ! Bl |0|6W q+˷l J=Z*Vs7ɺeu%m2[LaNf`X}](R B%i2}ȹ߹R.*b*첦Znշ kN`b-\:Ie=rӤ8LV~_5ci,#Q ; kDFgz>hcsNnܖ0@K.)halҟiDth^^ѱjB @h}-YRhZْ2-.\c /gQds$dIhcݲiqRJe뒕\V cf/Z_ !h z\ι+~{y]3{g,uVx{e߈Ĝ.l,6KIQcWU3+ Aa[4h]CCy֐ -7G#['*wIHaZs_.x2{-ѾU-aJB cЩ"TV7,ᡴ E|)z`ݜ>nm)uCX5Sh\w M颂&2kC#< Ĺ?"g`P5*E^FMd! pQ_L_hOQClw' +GRax-+;%TZk½mpIOP tu."2@ @p0VzЮїvuL8cF N]T@ݲ,JB^=ZZL|z__e~mmp@+c=Z.ѳ™s.n! Lw>):#;ugj<ܶ~>ŀa`frM8wn&PI &(bذ26[h)l@q"¬zv)M겭l ]4zUUkܯdlնr ,!̪By?QL%yi?mDžCLt OnxQJZs_t色͕Lhr IDAT>],!PӪ 믕09\Omr J:-b#/J&]CŐyfB{J~ 2Kuˁoϵ?TZM_dBczK%@4)&P%ݳV.&&r2҂##ś(+-tk&)_(k#tЇWZwYy18PxUYdvev:7AC9rPT` $7iq94z3Sp?MQ!8pnލYg7x>,vA+뉛GT<OrnvJP\r$RUqͬeKY[Ds5zm]PcXۤI}En S::~EIxYtP\Ҿ?9g<_MɁB5)ϥȸ|z}znznz~׷+]iAԈZ)ff?=(קv<2m}p\ AlVD5] ͪ!QGR N0m'*ˮtֲ݂UAts44P1e}e/Wm@v_kO|>A|}{InO3w㲃߼`nf.G*̏p*GY :ah#7 m*z0o W;(BtD+BHp1PCΈ^✯&b}~_uNͿ^7Zv-tʧRVYOR**~МN ɾw\ؓտs1f}GؚA@sA厫 mkcU"VɥZ,oꗔ7!N@=vYa$L8fb0âi2acXc[{z+1 } }!d.֮@ ^ 1շ:,I&nÕi6Ytn[ϭMMM;h{V=m 8`{"tZ"diss}y? nAo7S\#W`mo\nle@Gzj ;@p͚.`77; 1f9Uy)A(ۍA !b]iҵr %B,2nxt01r5*p!0Stw,bkO~n\0?)w$[(ERaF7 }SПdl>U60R}:6X ~gztLS15dz KJЗHhfIG8PK>=癟gsݛ 9g:g)zA1K'evd+e1OIv[鏫큱'Fm]wUM`B!XNy;-5E{zզ~ynCy JY.p]9+DOڌ*_M @9bLR, -$ͮ:FPNdVTiO;] M @zcdZr^[L 5s:tW-a1hw'  =,PZu 2&'b~ْeyC^P e%HLJ1|MR3J*)j2@/PLp e.ZDE8ȗ☐rSєTkKׯ]q q-gDK  3~-5Q2g#wcN aے|- #/Won#ԲE##HB4 ~$j Cɕ<"zH5͎=aŮ$H[8Sy hINe[qP{?-%=ߦ)i>irW&pXTB,ʲUAD+1AVf?CkY>ljtsG~nZDd#qK$Ϫ';,}~vϜu[.X4夤c\&[A D靶 - k2hFUؿр3vY8&~M o ׆UȌdV^\e N5T$/ؼD!,V<˳6 օWy묣e/W%w9 ͝k0k 2Јլ @s*JDЏu̠2P6K8Q\5aHq־ xi7RFA=Xٗ\uE~Cf8hDjįgAf d0umx瞷.SsIoO52Vx@ZRj /%QAmOJ]- ?"U QCKG0 ܣJ&dg/|krXe`60D=qny<+4>{߾===$QDOH#sJܾk:.ݜ }H |hQM'Y AΝߖ=fnD|%Ii*"][]Ѱi'\4?noxu)Uzx&TzDc 2zm`1R2JIHt]e-u6.!m6;gw֙EX'a`/fێL$SFT~fþZLd] [a2uY;JV3 (=[=i1E"akJY򂒍.YCm݇ӜsUdX@,гrM#"Uқ͊$zHAfSIAx"DU9UXtTNHJ(ʹ@WS=euvh?6GDo S?"JD't Nەxd&}7wnG`p"故?0JH4^HQY}m/{5;$m [)Jvxˀo0 QN1a<8)xY(EDFUDn{M.pwVEw~%ň(ҡJRh0)Q.թ:.pz5ʜsU~o~n^uqIIK-0rkg=jki9\zo\~?3׽9\lLJ:evˤn.Cȫڷ_H-9 šo^YѥV/}ұt2KxVmSKqn~#՟Ԉլb/z̭K{Pi/@ĪMU/Gt OKA1VÈfBi+A1IU 01 =ѷf0O=p[Rg.̃vy̧*ZGD١ { `|pQX'VnRxb^K/Q@/BtNZ.q 3UEVqedANh{>C'_X Ƚsq,*j½kpYҋK 60P+6eڀG/O״_ )Mӯo&LpmczF+*`iZ ž5U=⽝i5l>)nao gNt`h"1HnqU,a4EI$96-wLCw 2LI֢Ky1/Ua)mHllAP:@37c/ec#ý 3h ҵ3#ڽT*Kep9Tf2Iχm,z;OŌ ;/8Њ{~~7% іcf@so=t2[(*Kk a.U1\J[;K5Cqvy)ǃM4Vs-Ŋc ".` UT@J.uPƃٺ>"Eŷ%r7Eċ h7e=QAmTg:C[ #@C1ى*^ z [v[-DqUjrP0?%z !K<$_9Up]&锤Ƶj; a"(d%~k}:r©[!П?x~ؖWgxcʨ_(PlM?%m~%7{ߊ'sHY>6f|W~A?ߔcb ^[ p i (bʙq}iL mox-Ue]Ke { hU3; W1 NjAq52È'5kHnFɴh@3=Pֿqٿ-w~g۶/*Si\T!rl&3Trq{HՊCY. "LS*+(쯘}˺v W}l$DLvo\d(6Жq-Mc.dNEu* e~սr]FndHnj@r.Uﳟs;|磟4 T_v,Gj>_ey ;/}[l>R-fgZ?g%3RyGi`"/L_ u^ +FJڕJTvٳPzAe.x핖"3;&HgOmc|R[@cZgq8JMI&JZ`Kq Ҫ|i3-qĦkfmki^TW+7-rgvנ(4@oSh[3uPVk&CmLlמn`̠**b9\У,m բ` n(  o͵`buxm+{i0NpsZ)Ԍ'@S,"d ,GW1NEۚxܘ ^pm pyӜj⃦S^g̋BO{A Z_떡xVb?C~\k5!5&}k :* T Sۮ9$k)tpI߈#X<X goO˅ RzrrQʒ;5sXya >_jee) YLZBoxnq9aӌ}Y[sO L2pǕxb]+)>saθTII ,>ZR+Q ==?$ɑvDi^Ȯ3ښAK4>>26rpȀ؋Gjm Zn` n2Kχ6ojJ~fU/hʹ Y^K_ [U:I徶Om@7h+]˄4]PwC@tڰߥ5.so}߈;Ay=>:-Kwam3ɻKyA WzNڋ6&e1sIgĔH/ jܛn-Uѥc~.U!mUA`iXF.5e&+lO!"RQT*qg6m[n3(m٤?) J_Js3ąe\s-:0BbM]Zb f:I ܿos5(p'ɕy9ńwh^18QsLFnkr]gx,j 0hT0_<G~յ~f'f?uw@2柦Eo$'"(<:'iU˚d(Ebw~z{w6eSvJ"(0*5FIXC|w qa ]hcs`ā3 D]&2mN3#԰w'bjW?h?JD$E Ik F_`2>Z* >R+XWci>?A~[wHQ#ZD(sΧy\oPAK>Brs WVc5;U7eTgbؘP.+% ;gpkg3rdc{vxbeQ^I{QAP/C1XI+l *A6g sK 8 P::KKh̊J='yՅҚc OR-UC񑽍( rVi~s6s`ôFg]U?p^ȅhC9h.je(}c;n%%a,ܯ 0n /|. `(rB,<8!)mOKܝpxYz:mHΗ:,&-L4U;J;e'kF/A[>Gj2WYRӚ>-oy7 ]SעY2vEdv&%c{J8| Ym(P}ơz.A{z(7}:VnfWK)+2*[1<^>ZuWYIF?l*l[>`&%1 2kA+fJa ~ `neM Pk_Uug›1X N sCT AƏB׸:,6, / {XiDŽ9Ty1W~:/ݺ<֗# cUa-IZRFaYx0H9`JA>?O-yswEN!2R!W$ܬȆ0Jr>*j1T7aLÜA${A ׬U@E‘I`@% jf7@K&n3g_y\ ~Zu=^jOayEИE-uE MQbgCdcI(yGGPhSɮe{3<?Siށt׃ėh#Cq5Cxhji']g$OºOj?yz"|D>t^%SؓaEJqm#h#GuzcR~T Ӡ祜}+xs+sCS[_~u(/|'ŀε.')=Hi-o6L,Vw#p3.&p*Ul= #0kv~K, ٠CfP_hMx g i݌|n;?Ak_X%3־7Mo$`cR āE$'IfԼ@($HV T6U"ׯq׏#2XחdʮeK0R2^(ShvY>_vO[ӭ{H.Se(/ZL"m|;06xRVeV=pq69` 5>ĵ:䓱vۗ\؏%!"K*f?!wdQ6](#qv0DizZ<'.`TQH)8cm9Q&B_; gQ{@}űk$\0nAmd~@jjE}A`}}[3ZF> Q{$l"lYƏɻ/{gtRֿs-vMw+y4hW|٣j 7"J׎m@Lտs~Ʒ>"GX&K>RY^,51?#4j=WVbo" Sr! a@ݍ{_kOQKA  мwW瞟KT/2.qU,*hcPT &XتlGLi,o/<poTt+!2.~_Ư_׏`DC2q=^̑"ͯzi>QEI62rq& [ݱ˂N| tk0]ښ4)ZkWГ-W Uc;Jo5MAYgL4eck+fJ[J1)aX3dz_:|5gf 5 No=ǛmwQd?R޿  I8T uU TޒA'\TŅpTwP<_ Z^$o=Uk4 JXtsPnl~Bߥ{?1:]C&s4O1s+s3:ڳΩnR6zo߯ѵ ;Hx8Y?fC: s:] jr VF8P%ޏMAUGUa8xkwG .b!F5aqpz#ӐTJ`0ͺ!QS[ )PΡblXrR !96Ʃ`}a' _\qugu/= 9r|aX9& Vk0qw ^ii&410M` ge{wvL7lE{l ̯=@&U6=DB.LٗzvB FYZĥY5<@<+l+J2mюPEMX|>wG {_KmqOJdRh- /wj 4["ـs)t QCZK3lz=ne#_y|:z\",!Nrn<<b9uE`|̃bC^'g3!<^OI=bw "In^^ϕ\o'όbn)S;Dfc^"!MªL=}'LKr m  f8ռ4 X;3*(io._w1c Մ1JO9Xpε9'/ٝ2nu SPhZ!k5GIS)H'گ2َIc a&u7vVyl)6FL1mizۦ}/{hu>{ tRcp@vi-&fMuwAطW dc`mm] ?֦=]u}OnMݡ{F/Ͽg~5~~q,R49{P#tCݱqy t+ `P6e=I2Цc$Ci#IWc?c)oTݨeNۭ.\/sreQкt4JfJPB_F\lN/ )w5[砕RG0v,27Sc ,&AbfBW̺#]*H:(_jyM> 遧]k度F k%]ͥjD'C?Pw^ܺgiQxwIQ+9:V4EqkBi0$vq>Pz|bK7xbDi` <-|,j_1CEZ\7]U LJ\sx|9'VgnU=A*T-`=WiB}0pv{NjH/b4"bϖ/ h_\or&zɨ8F#:>yg7{3x%p F)|=e?!PwBySVfd{ 'n-vO YP6;2 OпN}۝2~_uk׸~\K f(G2DX2f9_hz.ݬ}NjUQ%}/^.熊ڰb?()rVۻE?6K+VLCN%Ԗ!yh11qVJ*7AsЌCUЮ'T~0+v(oj:D񅬥?VZnM^]/bgWBl_k-ܮ$Ls( @wvRt?flhU7e1w4Ok += |ohmRUi ,3;v?%E 18\I_u\;# j\7CT14:y h D=oOj/>'<>^KRa>~S i+R`{Bo\? O~F^58HzvGiNUB&1XEh8SbšJ)>Pb>w O~=@q="fVfH 0+!/rۮI$#'l c0{NCxEEIx>e\{X(o=@ \:|tXϜC'0?LOY1Ĕ+D1(AQjBaæ\~|җlˀvkITQo#M@(:;0{W+pI;A4D'ЧE ߄h/X@N}Նz*b=q֙QUl!=u6+;Do`AW삟=v/˄׏\?_kK~=?;_rh BE E41zhtB_`)?lHr 'ڬnJKJ%!@ԉ=VZkEv?'R1rj 9T.,|q̉TtczG_0RfRk3%"1B+!Ԍd|qZܖncŸ%,*2z&Y0dz9ϙ&6 :՗֔o -[Vw7$@ I`L!p2V6 IDAT#(Eua~۳{}Rodw~.Xn= J1i\[ҳo~o*`6g @L sS:rً4\pFIFϐQ )ƙ#hgEd8s-Cv f{G,CLX3$1COgfLh ȩo# Ws1G,[/֧8;6j> C_4ߔєxrZ¾ҤϜn!IrOe1*C,m#0`qJoND\yߥ<1/K]a&$%$VZ>|ln~7|>?f}{fgqj5j4`t]۰Kkw$k,Vn'cZnfObM d:p+vAMB`cE?d1B@qp<#a=#3HL1˜1Og0XVŲjRbw-~֎DL38V\^J4*ķ¼7- }&i9EVS]D+H, UE,<*PApk9Gt=W6@,*9áU@ n xzBAD+Զ8bWMRF&hd Wzyee^X..?{/#|K~{o4.h U-1Fח}_W/\_ZM * kmjX8W|`es ^5o3,4=`unLjTPǩ.ۊxX#UPzIۓ> *>uӹڣ"|nqG 2`Vʼ6an4F[k\<~{,kJt[o0ߘNR9W.4x1pDD N _8`l ks@t?* a~-܂耵M޼O%6ik?y0/6{Q٧νiJTԾ1 y/<goêfqyV)MŃ{p='ok@ o;MB!c:GDKоRvYXA鄠aQdQX 7-U)Yg

~v Ȑ<2$1yH%×ZuŪkOM!ʫ(CdNՌf}=ʂhAbbg sCwh$A!~mTDKi(=L744 0/ ZPҠxUFy*uBKH/_i\r,^NgZ{ Љ[d?8+IC6K7ߵ=OOPCdD;pB`؀pK}[0沬Es*Z[~Bfʻ֗%De,'l@5٩/ΐ=k-5l<ŽCt2a>$zN 5%S%@FEf?; *n#&$Pk!>fYgZhq-"w&WQxɁAw=`vw$n$6ε,}oC()(+ >m}\\ u~m?ԕekq1.KƔXԣB9$|oBo+>bm FoKTTPmI"8E_VB5lnovHdD/?rŮ#l#/SouɰM "(CW^%NS(B"@. *YRwЀf=<-~Mn:\[O:E+Y  QB1NUߣbݥxj wX --:xПvR pM[_0x-|0foYŒ=O/r5țޚrA2Z|j!WT sGz._*{_>ofEW,exc8FtN*J`XOÚ6Ë \7 "S8 4O\P(վ;UZwDN_+pⶡy]n-")P"b?uh~[V>L\Dʻ+1nPџmơy}%^v[<k^C.LUYwqJsK `0a8&X:>8"lD\LH5=8 ϸla; z[^'^m;/[sB6ߣH2PsaMyHZsRgf{޲]:{gC=`o,4ʕ\ VY8g4i?#fV^YIi~p:7.rf:5Ty˵( ^c@OOL?bwȜ-o&M n*yB80~{WQ_+ q_3p2BIU;Cm3جnwЃxF¢_Z;69=)v \ܽxּ]ĘDC~?Bh;Pǎ5+ÄO[nM){_2R6 W-f9 !0OP@ou!:H{ȑ]I3Tg;7DI|fpRYgQe*ZH'ט񿋕?8"=Y'(j w|EKH.f-8IG|-#ȣBA !) D+qt>Y_":N r]s;< Ꞵo>Dy)28n5[X0T:L+`2,' @ ŁOt7%BjiHX7M4P9N=O#T%f/ֻZBDe`@KF]6&0"3oΊ2h$G`1r'^VOA"(yl=xd3 @_Kx-8r֭yî>#d[LUkN bGDq&!8ܷN_Uu#ܑJc=9뎝!h.OgUG;CA9S.KXh^ɧ{' SąH]hj`Khx4F芏3fk#r?z_Z:潕izɖg+DD ^g="!/|t!Rn4BepX `W/2ngךS_Trt!{et41n}`w[OݲG 'bw*!_3L;>]o>6ɺI!MTALu5iC@OtvH}?Ue Gm>O VnQqpjTGOQJBo,zD6ol[*_Ap=f'@PU\Xb#b̶4B|;C|Js!W u3E' OJfP>A_NO:vҝxg:TMCЯ{+t&[.*jb}U!CxUl?\eт0 4Wh^4+4~0 O `aNy+[mI9a@&檡\#x_1z -W2o}Tڭ7I*J( sEj@G~N0@qYZ|ym7Jp"<9:Eo]>@t5N͖zXG7r֘Zل}ܶW̒V+#Gܽfr;-*añِ}{!<{iHOxi! <\)M -IW"կOacM1/Ly,!QFlݘWEf]Nֳ`F2 @DB2V|͵BFݽoWP`\=^DZa߆1 ;u=}U&w$WDS_v R*ѕ>/ο|^fӯe=su5Eϳ,p|qS\h&2Rqs=*F,g9xQFlNÔ< FBd e;q%r+9Scϩ=)Ӝ4IUmrdMɤ &bGUg/ɫ {Bq[I8p Ĉ(DrmL~i+@ r?uj lO RV&0 -ӹ} V^Qs)%n@I;FCmrD HR3J}꡴O7zVW{$<6r21|{|՜$vY]FZ7 5XTp iP! YApDĩ ͼ`/\O5ż[z?wk'.(x' ,އ_l=NIxtɤ>dWu=FH3#C~R jmB7?;s>8PS,.l'mVUY\/ +5 }w$^ HX 3  (ak ~/'v IDATgiMZ$H"_2NsޗD 3n[ eΤDen;Q3~*=~ç>-pܽQy񽇇kkq&Ui 48xx.%òjƴ&η0u$s]#LuX2) I/&~*/q5Akvj\ APo@ چ.,npF'|[`L*7F5BIM_Dwt< teEGͮ'VYO̵W nhR7Fsu>IU:At }?Q-? AzYX':CD 7PҸ"Ι\3Om#G QUG%\Y2ݮ7.*ZYGEbp -@1쪆*$a#~$'+.DڗT`BAvWbL9$Z9tlU|e1ll 1tѭDeE$vc5{:'aݏ= .C5g՗!ۇ@ 7rcz&([ɶDd :Z݊MvSi?RAVe 1EB#)Wk8iRCQg.=WmCbDDS[#`S%1vI EuҋQK@@fBaymt:sngtG2,:3+stOΘm_k*-P`zS'7/r It*MQmo':8m)CsgڂrM` "" 1<$@.6I,L 2GyS{"cۚMdÆwPbrnuknCYjZ}OJgxqv?K??gH^cV3BzAyžt䩲NebÄ6Ϻ:rkϴ\ڴ?>ʹgVO0+ {) o#%BJ7&@`Rfo0F n1KB~ֲ߀,H3R 7fX-`gVH䠼 |߲vz[,4ӡ:莆ڔ r 5\ܤ"/(pdN]@%|cս3ݠ|*^WWC0Cp{_MYo Jx/+i$$f A"[Xf6;}h-7`={GKB79/ #1JY C5cSXZ  z.i<8VY; {q%Zm@SYSX75-/,^Y wȞc3nU;Y.Qx$\st3ײhuTAywico iɱnܞ>wxq B}˙..it] YNw >uRCjp6#m*,J~iuta{į-p*>Ek2ېN9U1r1~VWo}o:[>~Jv"'&!@-`.yTtz*)flΔ'd88w,q*j`q g5@x~r$e Ss(&J-_`YAo(`˜Kt_YlRb)"iutV.~Q+;yc^'qU` -6uyvVoRN>btDtaf!W-r#)7y_jyΓ9 ճwUjƤ_v~#Klgr<5}z%N Jj8t7pF oij L͸C;g)k$^U 9S۔Z-Jz-'> ? l`Z1#=v+R&MLI[ S &ZFdJ=s 0}`x L49l?AQbQ2Pl*S'NSUe ` ^cN|VNN.}?rq4tO=_Ѣ^z,riLAc6x ޶xyȶ%wl _g6CЮ|?}4MQ[?v;d ;*N^wo t3wrx7 ܂ V/.sn̹k`Vw@;~VLQ} ]g܊. "h 1@"w{ۤ:oTGĜsu)n,`^Sjb,^y=L 6r@KR5%58_H ۺ+_ow?x׈;~zp:Ͼ{パAdd:),Rre\mm9s} +k5M\a y#\k[L⠗812ثu,9nXRBPw66? JINi&Wu2 }DR,N oba1SaUշ*xQ"ԋR k1 ރS 엗uEeT<@["r3!1 ˎa>Qtf0ypKaU]FA>.59CzكU#Vo5<^>1?1ZD׃ozFޱ {V"պ+[ j snuj&%V݉NGR^9.}XRy 6@t])C,w:k}M8ת\k0D4w*n- +0пI}FBOnUÐ%Wl[Z׍ŕty!Z[7mcu=}BXGFbH'DqPqi`\F w*0ܟus)fCѦ!*c(+{eC,)ThBjeAw^oL(!8~BĨx9a8M47捣fBK-(1+< g*W"!sڶ@BBzOpmfF/2u/u1OY,x><{'jRRuj!1Rgj_La-+=\.N@|(n*$ &&‘$ij?IRPRLU\NT2A$î:˖ڳ2qV$y!` kPLU3KUx46'zNS$j`+Uc`%.Xݘ๛ab2Q[˻ӥ>y[>ߜ9%$_u'Lڤ Wܡǭ_υȜ6|?#f{?}߷ySOHVlsFdwY܊F*W#݌떾5 ߀/R1.0E5z*0j햪E7u n Opl K6\f14'j{xkM ~a(Tt!vI⌺O׈[~\k1L™~tݧ #8b;{yz ~硧ŗ4u3 PZ"x-1{( f\lAC1_)\릔\h)G-0pN=#*oA>q?Γ>ѱ$akzHH6F`wlA-OB׈z˘Ħ̄ГrW֣ ~oXܹLK#/9dNC΀͘yjdqUTQ:X59UDX$g7 Y̾%GϓPZ$O+Bô3OSHVS$MG}Mq=nUF IDAT(]@Ҍ~`$7k8K?% apy\̥5ﲷRQ_i_^mb4׼3%뉢нF gu)%p֣8 ?ם.˱{?vpwB{=נ(s%'I9IO` 9f44L' /l d/[c;8x_WW͵n.& E_r]h g˂=P !`mdDF6@I" RSOיdWiq4V2s9s&0s0nfPkd9EDԫ%྇g1Eu( +QZ/|<^gpV Q' :ޘq*KtDt>CUADY s"YA3΁{@u Iu/0|-"m9 ԡ5R!bP3 йqbK0ZDe( Fcp.~8 iPo }ٯ KH'ӻne+%& đvǭ sS|?^?|}=ᘤDCR6zxs.b5w5[.gTWI{E;?A ;K>\}!̨^HP #:L\s̩A ݦܦ+u|EkI\ܭ&m^}&w$/ $|&HK/QѮb+UӿdZhs7 OB1'> aĻؖXҀ*$! F| tmc:}ǹ{&n3ۀw=ݳlI3! `|]%K5HRg&E0OkjѠB+H!\|v[Ҧ (Bz pepQK O7оPHz_sWD "aWiWL".߹*+}Z_y khk?ݷ7 Fh#f(lDxL)rN1ΔZ= :;Hi!38眇-ô|֧>(@~ t(aL G^\TGn3-A9kla Zj 'P)(Sކl(nP ҖU }27|g:NaX9и$ )nD%$RcPdSKMX#D=y3|DXVW8F"#L2OĖ2+{A틯ij }jޯz?yZpѠ4^̅w4'`g(,=o;s(.J^[)"68S BE`gIkoKGi8 >p>F"tQm% P:);F@(pQ1 ;R tPÌ+~|Gq)r,9,x"w񽢆u-˳mi` ]5?ܜm[ެ}$ ,P$tb}2Tˌr?e+Ë7?aoLE?؅{BtrMCp^MJC(XX),Е#M^]wT !^egI DYeƱRY> L~NlR/Ǭ$L2 cfa?+6SXV[Pnd,Ye{ KyQĭDyf5K+??~>~~_ksD۟FF2l`hNex`뜸m{\8nϪR-P'pz-HL-ڱkw]'^uH .`N"9Ov'G15"g(@GVy`".}&]" ҋ'8EZE>E,0rNG>7We;ۄ7~.$i0}2wc{Im96_^Hv3-t1r6}{V9-vL4PGlдGȾM~ޯt:o:ڝ^GT^+dO!ï2wK[1gkX4f- ٜ_x2ϖVu.S%}clZu]W72C'rxJ ƿ-B΢`Lڰ+f.?['o2<ݪK~,bHir%`SO9z+9==e;nwBpu{Z&(m`%:ߗ~3gsdr̶j-$75{OUPcH$\9RE@! م68Ģ2#?M!c>؀1##&wq aB%֔DsY)V.IP"ͅċL'Vk=_??ﯟ??|Zz8?o0q-%.~] YP,I,۲qq=¥EvXcWdM>w]C&q'!St~/b$#٥̲.\lɠ˔ s1^az_jSts\, Z"S&вfW0*1m_ 닩  U[Hfs֚؇ uzmiE('/ S  yNI}y8czysa*+3npFQ$G(sӮNIvh6)Hq9%HW<9ހE<颵 {n244eYξ]cM`(`+^I}~ϚYPNIzdYa{Eʿl7S}=&ͩ,}։7ubTs3=Q x?r@,P*hULh[@6 O@^F:9U߽Mps{Hq4XT[)\1$#8 (h `cǃd㱑 dT6n>h탭| Sl4_(V߃Ԣ1Hi/ZmWQyw?ހ3o^dr_z~}|??__?_ϟs2 KxS*wR#bO f +jex$b'cR3yy b^%؎j$:'ey-O ͤwEoӖk#8dI۴}GWG GPLC.( 0lk!.!Y+s&_}~nM_±?{u, Fw(10 3 lz}`=38ǡg羟}s8vO09 t)Y*]ՀllMey3'tzZu8b^r6WŃaa%A <3Vgk?#a[/I&5)=nku  \ *BmYjNt5W3r9`Ĵp?"iE7j!N'4r](ϓhΣx3*Uh9fc++\ Hs!fneqnvG}Hx9+2A 6Ӱ;5gSwӡzRft# g{l{LĜT+(9H3_7 Кzr#.3]+)9tGVK|)#@&;BJ &wl}w61'|Eݿme*7\nƉִaioʷj/?}6m ۃi8Sucm!aU,uQ5 @V(6/V=s([ PF \e0?8Cż_%9yi$=4Q^v - W_JoOe Mlwⓢ J ^"YwX]Yc?l@d/mʝE%}w9i͆j)-nJhQ qf9i06)HdHc߇'>bv륽G~o]s1a_FL( tؐo* )6Aέ@CdǓ t=cS% mYuo n$^7u3M2h;c%/?zeiۮ(d<@bX{BŘ @? ݋x.UV:O: d H!Ϊ4::u Z1%aVR=T> U&ؒ~ue4iUx@lYygs?3~?C寝IyҨT܉"Fq3 3_z˜[~vL460ØIOtd.PN6@wS ٿa}ol:%{u= Y z|8 uJé]Wo{~vA_z-jm#5]όr|`ϟz~~|}>__ϩvf\S4BnVʽU"b1g8e0:}?#Ӗ2K:uhguۨ*ZK?Roaͨenx*̑6R1P&KX)Y%bb XF{ -+ T:ԳiBZOp/rf󈚶_h_{nkWBԦLj!C(%H8ٛ w,jwݹ^g[{>qAc`>=f|fg cBKTfe][2g*s_'݌ӴZ ;Kˁae]ƅ;UXDOYۀp[v!GcN %~ 8'M߁/S&T\6Tk4\e/PG, L%Q!QNP=gtRvzc(zyV?>Q=IԬ6\:0fv6Q+ 3S?_?_|_}9$RLJcyn )3zrSq,XB<4$TC&Q\h'ij&'.`̮4[|f 57PKKw7+a-$6pT䩮%nn>b7=b41].V)PP +kV,]=>>_~4G{v_'}yzu1/M]^a{(SbZc#qf^;w=#= |=5B0Wn'ԧZ2YK!1xҟ2.Znk54({l>pPmֶdZh-3ؼy8@Stc)/$viGp|/Y2k^!2oPPﲍc3x7 "Q&_YOa݀-tDG5(YjYh-Gr>7<9A@Dw*E {6&Rzu 9,υclp6f[ TEA0| ygEvҩCm5CMmD2gKF̊3Gi^Z5 ) U6{ 5n`cd|;=p6yؤcuidm9gF!:vaKL`Z̚´Ĵج/TwjDٱ e2v+pny%ͣJhK<6WILS6@oaB%) &N%{Fȴ(pvEv:@(,q\)ƗPmfso>.mleNP/BJmz]  QFh`tL%J TE3@gX&9LH=mﳟ?4%1ݹ믣w23{kH տ}Y^X&{It/RmEwG "%X۳xw|S.K,˂K}+n1/Ř󟭶/WDLJYH)?Prawi |?I:݉sv;g?mMĹٖ}a.{y=za#j~?y=s}iFlc{lPv-=+m7mZ۫yAskjzJ)Ƭ+ԅyW* OdGj܆] Ii$P!njЊ%Y' "x3(!^5QY*0lvjh=0͑9C W*qPE"\b ZH lI\Ɠݹ1ݫ?\=%vFT@OdoxY~6}*O۬:Sk\q̘>'Wުx#k}y+xgsH군r'@< #FI* M_6/ @"ByGxU w$,^U]_$JlxiE#Ai+RѭW9h Li*w\Z' Cg]3nz7k\B$Ҝ>9EM;Gc:GRo$ )7%!T%BSvIٕ}B9#W4VR[YSГ7kD-j`O}̔"B_ИN7Gy cnDʆY=6 Ieٹ_ަt"gU>u"^pxgiCt`G[i,R6d<lF x6 f݇lKHƖbS~sptǷc?z=ϟz=:7ӥjmϘ\=ӷڍ67mµF8V7pU"D1o@r95C řcȶeWEE @j xrWR NUfYR!ى+f;l7{8XT d!tl,€ _#yc/$ < X$>Y8BJ!1$+|O/e g{rf^Q~}sـnѴOFeGZ\ RL$u'gO-"uµVx68=tףN2MSuze ٢2q"moC善2=/I.>LdetW_2.Tr%pYu@L!pyaGWS*^IMܟT)q)7.lfjdIa9dLIVIsD'VHnFĪGMό𜯩zZe*_:BL%)9e*WGҒ=`G |uQtΩ.?CƭE5/Y]DQiy^-jӹ'W]bTBBάSySILSSr,yi¼!؜f\Ƀ9mn3`~lZ<bt#( FHz #LMI#:{ϠKU umǾ 6 nnǶSƎrfQsN͉,C: AmЈ5=^t_nnvRJ(dP+`BƀKAK,ӱ]PK SPb(] U--cn,{#)W8/L*8To5-0"lSiξh^ވ;A`-t@qMćR{ Zyђ{'o_mK0MQdQP2gHMVF-1w>vt0~coi[0=l{t {<˫sTiT*ǻMo`QWNS16F \SjBV3ܣTKUa_.o!Vt1b_#VhvWN!m)norDW#WT&a-ckYGb?)qS`Dn|z?^sYż @gdNo ׹-4O$ 3[p4p'J ZYETNfPʟ/Kӈ"RjyUf*s`Nšo #{jH"l # TSdᆐR/B ݏYxNb##;+HLU; huwU߀P@ 2#5|Mc U>rTϡ57վ _g>XX/[U`lC6JJw՗.pl&#ƠjA@&SYm&j 54Gy+ɱ'˲G2l1e~b&:EiY75yς,,]i>m%RАʄV, bmN_wkV>InY|ťI:cnB%z$Ÿ`'̂UaBpN_GPq_A#I^oLјr,HB塿,A-nb̲qFy\sHhO25g9 )箞qn:^>"V'j9&t0o\;CS߸bBd8@0r3hLJ5rO&A؟_Y$EeM+C$v2s`!<ܖ$]Z gvHD#S٬(: VgQ)FdֈX}iS~yGՊZmqDULs*S]' @~L?>Sѕ2շoHH ':n6,%sV~*O֫J^"HV͉DvCK9R ;x|:5 ‘ꝰ 6LI5^3x":Jp2 . GB]r5QqZgpT"jeO]񐚾{#Ze$a>̿WZG5ušJ2Vcc^=QOW.pxn@) z]"@fa@lϐR>(5Qg7@VS lq=8^X&q}rr{ }v>1-5w%tR厦!Y+zx 4 yb_IT'I|F8mdēe~ CZX6kV׫̖r5niߊ`pCG)eYTjh !ϙZC\τ_om &6Hu`R5Q/@jcňa>8fz{\u)N:!˳,$0n4́`C_\d-]lN7.C5d}7emx|LJ<l;؟KXpSk2aכ'URn7LϟϧUϟ~{sq΍?(s~,~@^J83 >>m7ضAÒaa"7  KЀS$n{Yf*w%wЯr/j_ m C΅N2 Nyy :SM9$W`w.ߋM+H 9;aH4Ķ.&\X^oNH!ЊB!W9"zhɑ.&*- ӻ cjH;]D]8v0*v *+EUuJݼ^װM"lW5"B̔䶊`BK4ܚ(u!,e4Wlտo_Qy$zt(C ?~~?1wq-DN "u\u`<˒Jt`|cǃǶ=?(d.$;ȈX{ZPB=mKHy5~3P) Y_)la %aGyX׮B`ex*Tz6 T?=\Z_OyZnW%tl$a`.kcgCMQrE.D%yxj67>W:LSʬ5<9o~G'l!D|`:LkVaB|^2#7& S˝*e `zƖj.dsc1$3`,} Q+ڑ%PGpM }t $7{)8xSm.@PƨQ%|hB\FL/%T=s;P )&khTpO-Gu=؇\%7$" A*b#&Гl~lʟk DUO][ch5,@*O)^V, gZy?>Z??h9a.+ =ScLEa(ݛ۪|煵&:_!Mʯ5Rڹ^~ /͉9?\&I'Lrufe9m%w&+24dI5?$Gox\ƕٝFu(#zDH3:QZ(ћ.WH/QVcD5ЊJm}eY7ufVsORDӳ֌B!d.R0@!LL`B[^h3 K%PI nO R}S=[Hת)ZOK AzȊ.߹J5;tG-"PdQi@W= N@p=lrRX[MD$mB0FbY51ݵ+`J@aȐ=Z;߱h>^/?ߋ_ ~M8WzH/-[!?Jw9pAB*a2㍀x ?`yL-?5l;`_z __}##CݒS` d8lbUBTHZ.X{V%@K]^`n|iV?=  @H~TDjz8O'T l ??ƂUIQd?=K+yAc2 m >+YAv.>;7S:DR|&HVonRiN(zOCaD(u1#_bP\^Idͤbe\oﲘW5_cLd5D-j8F4v~xf-P.T,N_i R w@j"W ,*xxDMq0::Sѓ IDAT8D$7!X. 2x UBN`vZL@4hǚZE\-W.e?N$dbJ=pm1񆸯)]"B\>G1дp*6ıQyfSDxz Qʫ{YA!ޟhIb|5?eaU?vHmR'tcnp׶^n/v"*1F[\S*(4R5[WP;&,ouU=xBo*yHt8Jy0XS]-vɋ EDCel$1Ax-deAfCC8cwQ%Fl:gw||48iT{.|A ӹnki!"7ʠ8f^Hc&*Xh u~X8FB2(IPsWFĞ ůZh6&kM@'2-yc_ID VT 7sSoX&*glDI˥-fY +^܌ *X)}&[uI[/`;H*Rm:uD<̲"DQk0"N4n\ `-Ok5r^86dl"2W6gL=J]9?}SU]).B8X#2c @7 Il_ G>蚂ͻ՝E22kŬ@>&H(GÚ=rJSA߸c t*. 6x}HDx`Z %mm 7aLOU.~)eXϫ lJ%M^6|bL?dڜ2'̉#p9ZmLjKUS`{Ufu`p{ P|B_XTaXĨJIU%Tlx8]=[zW|!·ڴ [FvFya6.]*8»\ٴR Im)+ #U/w,IOia [$c%.rtv9"^P; a~4t_G3 !q[(@Í"Z7 $0B\d\hpLp\*4#c [H²C9ZKAЩ:ǰ8ERLٷ\N4"nM#|hXRFzJ.#6b9Uۉ:w9fZW)[CrЧ-R[-dp++B-q #!N45c֪b>'<ɗs@(,$Dbk9|#99)UhM?/0n6ܒOtTF&2-P%`*73ȯ想dْA6V)]W% #;빦xAy$n=xk*;=236T 'cu _œn2 (̫N_RIC?H7?%anv^lsx?ϷU<2Fxd&ADUJmJff k`YOք >a}W Ўp{Y qo_ W.gg޸w2 + ?{QA?ɺO@R8w\KYP_eo%V^ݞ2kP;~Z!cUIM 1l%#1ryN>eܖaj\CgF湮yy05QeG!v=Q1ѯ @}UC6Xv3\4}iKY𛌹U8MM>bQmk7G5EHIP]ePф|b6a.r p"\FڔJu>?>>[>ߟ???|?8>y|mFlُ\k N k]hc|s}Yz3|0.H .4u'~'VR](ܨьKJκy?-uh h^F̖OPu10\Em4^ G+y'.ꜫ> @$#^)GR$e^D^W켏b_nm@U8ϐCD>5ڑɍ+"Pe>lewך0\=γz_)uK$J ? տk^hH, ̌bHoh ܶm6"p`H4^^҄%GQ IPĹB A8:ך |y܁y_Ux)Tr,@:X_)ԾIfl%uQO7 @4A'Z~ōYpw&p|؍ ϤPX{C#殰.* q_-uQK1 bA: #A4,Do UALӫGgcsskfX8mqO)r1idxm9ϋ9K7Y"t8zc{UjN ^ݫL{c`7k B !,\Fwgx޷R4UND_5dk8 h> #ε̸UDu\D6dm2',wd1ܬ'[ .mRϏwYIF򙓢,,:KxoS|~~? |4^c.' @TQOUoŌ6 X:1؄=?gj6f5q7LãcU_묳D{`5]?"Rc8wV!MI~lU)V?ioLRN_}W" Pt(%DFn,\=n" Bª)n:Q7{k@\Xn=+X)Br^QBd xBd>ϕ1X&k._&Bȷ PӨЈs5$H *솄E2Ij=gA>uE4]s\15 8H.@?N3S\ S,)]`&DM vkSX`1=SUb?dZ1,E7TEch { =jdd =7I<mܒ_2yx˜$Or)u^.LIP/3]G]ys|a6*y(85SKf`&@T/B TܣR%S>Kv-Khpi^۶mo@5$(VF|X)P1Wy´\{η `` J_ԱkWvXksJ(? ѽ]zᔯLoI驶lD_ 6X0H%=ۆi\T|yWHAnC?"ǒ ^ PFB_>sN=0.~S퟇v8?bz{t55'ϛ%=Q )]$ӗJgJ{y@ hh赏=i{ EU 8X`hoiUPyi˞L-u_=X~5ۏn6,-VAcr_b)0$j +]PÃÀbYjk踤#Ę}w!cF#@cSyw7X5C*R6OU)Y!\DkUF"TԢZ8ma1K~Ciamnmmo xOENH x:S_XaY-.5ަ+l{WKPDP zR4lnZCV. NmwT~$YKY~oAolh~*<+AJ@1h^, qaϪ+C:ma:?Nk%kJqL)EI?Y9t)S_e+0wh Ⱥb ?[E[Eφ-p oyF [J8ع8v R@Q*o Hnz6*nhVln~`Ha\M[@YeA"YKKBEw]W\<7?]*Ziy~>uy0|V_mI#jiy %ﻟN,EsMAc5 ǎc6 @CC Ca!ZJYwzE[Rh)1aN/34nfY&tK2S/|ꮧKPsHEy⿁zWT4LK_ڵExI[C)f$.Ү95ILJ@z|Z"œߐmR\#n 'zQ1f:o. URNPƼ,,6ruk}/6p?Zt]2O\i{\ lA]D&p֖!P>JņmCQ4a!ouRH>TX,^cڥ|T@6kj>\QT0ʜ$Gҫd֓~v-UO])nUo؀ݴzp#r!}rˮalmQKlgإdYA,?wǦ_MA5֬-:XrV)#d⥢|`=59Y޴*h>濃zPޛCI[)\$r'nYs7=Xs _lӤqaQFgb:?9?=w`:s羽Gll:*üI~WɔxG{Y~1=K#03uտᮉT_d$8YjV M!@Slx|)~'P?y @!k R5$% EudPŷ0/Q5C"GXPDaZl_ $@I"*)lxG\pk:gZ[~7 dIA;GX=*<:G C{ԤF^QF^ZC? 6 L6q¦Š E#ZZ!@ޭ#w>Z9/_۶26CHcFHG:"51E;;?SH+CEݭ-]n9-Υp\?4K]%d>ER&|d/4쯦fٳ:뭬6ZcU, csgǁA,yL"{5rrycj3}2OK#u}?[moG-yWc@FR,I奸LujHY1^:5z$@Ud-,2Qm(hN@&d'[G,Vg^_3HioXώ"1 2C5~}Zvtn82#ql1Ej#`=6FFffEDq_t)b׭ńi"iT!ġTDI><0UZ?[3M2n>qs;1߇Z|vp/\s㚟s~ւAQ#p`c%41ϣzSnw~4d-I߷OmsH!.bo|譲Xb> `d:@ؒ^[RJyyLŠ8ߧt*QMA`w_{CvFX~H;~(:!z$PVtTOܚeOsypq%IRt!koFЂkaJe'6泉^X]8U1a%I9:~ !gItxOI%:NBhCAW? g? %p  8=a `1\, Ȅ)0-~kOlP [U {^\b=Z(XX# s&\Y4GP)SSwGL=k̨| _,_}sqF/مLQƔxycw\wґXN;P/ڡk# S+N@3!) 9(gP4x.{i7uu"p۷:6 Q 'H)s>~X~~?ŒiKPc="-ǎ.ٿe~ݴ+:>>ퟟU>|41c^\Z[G&$e_PWbi˭s[ T+o-DKlSn&a^)oYlch?vv_׶o1!I+{j,˖xe*Ժy{i߫f][+˭)U؊^O042_9%% rG?a/Uʿdn,f6;汒GZ(ۂx#x͵+;:<;\9t94ry% ¾Y-lEZk})efs뺊ϛ4Pn՟-\WYe DkS^%_h x;12dO`3j@L̡9ZERgZK}`f=bp4`OZG +9{_h}(oz&Nªr(V@KvTvPnO@DhCAͷ:%gIm6@Ù4JT 97æVԷ5#FYlĞbgZB&̟ɟs~y}Kd O&)=@cy﯋V[Г`rl:@v('fkJ0ʑ`6B9y[NN ]:%A6ƘMH-WWKW 0ARe6,6[f'5pOUN*kiM_.*HK]v|̯ M~t-dW( @3IB&h=@c4"ziXm£g2vHKl,boRE.eZcccSm;n/y}۾mcw]DvjZl hv h%6 Z XPDKM+5?2!/pD ݠu1ٺ!;ی5o %H^ͯ.޿iE4 1?i d:P8(̙Q\vʜ>iPpYyשu萯K9=韗mL,zlOQê# *3 [҂wf-.3d܎(~hA+娲]JCR^OTF&,Q΅[6CGdC[@vx?J(qȶ R~;XǞ IDf}~@㊒BAgK@γCKQTeQ9a D K%(WzE7XPR4 b!QpJB0n!*HIvӵjDY|rYw;P$q-֗a3$Zl/3B3+sZ99?)y[Ն่Gpik*%$JY,}p]l3 F!clE2[\|VrMCY\A(VX33; (F9-H+e,he_~E0Y#̗>8[i`M(nt$/.{tFZmz y@+e~m y|饿]]ԁa; @E$3VNB!-K*m`\Xclcq 5mտ.pae{_m4'ZbZJɆ:YbeC b[95*Sz 1n,W3Umh32_M]Fnǟ)~Y7}~ UB,lUKΨn!uQÞ"Ogcw[&WK:cGY2ު8spDKԐb+-(><# 8ymQ̻Fu9"+n#xݺnׅڱ$`{XeA@=96H$8nD ʫ9EE,[ZthWHA׆r Sc5 :4ZR=ADk sEWh=YYGe6uERG4ŐFdcHEL2f]BCY2/7\mcVA&JtVxIxAi!-'E4;*ߢ&tKQN$f LVُߗ _h*Dov4=vE(1XU[M`}nVD`F Rh^JTm-qss0?3;/s1j)H^Im v_ѯk/z` ՌGbnL-a`KJhrܦw|+wѰڣn y㹈œǫݥ#4rR)]J` BZנE7r_!}M c۶mXzl4lmmۆc6"FH(Kn[33hz\9P5l P\\|l;vAewJO1S||Yˆd_V :k]_# jN /5~-8=VZ5f^&N:Ŀcz3ʟ<)@Sߏh_gzEuZGn r`ŁSsR5osY ]O4@,*VANy.v[+2DbIQ;zKR"XPI8-<t^l $a+wvتmr`O nJ@_PSwbɚ˛vt GRƊ/K] .ƒ$ 5̍Ez)V,[jcUk^/L25N;d漘9HQh& z~_(_ #UCLyƧń6iTwY[tM8V5;gC{}PQ0"{I׶?]@Uq~:ikz~u!a#BFptouA e___~W+?i|{'XUnȽx0<g|'ijyZPלQd Vɗ>T.oǡJiK-^dXV["lrk#ĭiSdaNsl^Iw۶m}M!RqA2C_QnFAbş\KjaHC;Y]Ĉ#X`jI2.6Lο Nƿۋ6"*G1 '@q>Ǚ CGTp{R2ReۈԵ- cK[X?gW-1::fg<]gql_-К[!C7i\*Lӄ?cIwN[MNb$Dy!%2S; *[rp+O81S9K~)9cE"1XOcF ,Ʊ+F"Dz.4˼+wE̓1/TPmb'><'0 c92OJxmyP-{ hhU}[36 ]bA2Ã\OsKݾmneSc14jPI:0Q4<4s@ÖPwhX4mL 5_Z o #0،yt]:Y}~'X)e/#)Ԁi1׺_c_/|?`~ U1|c7B%DױΈkg$˹qu~ΏM'O :!⻀/U^v$Hu"-)ʺ*3"#d.`ɗwk/Zk @W+J:hƨcl۶oK5}63K B'FDh$kv @"/rВ^J :4?1T_,ߌ`Ts-c,64{~%6ox8oN1YMZ M(D~8EJBd%yL5Z/};b 8/$+CcBN"5Z C&7+ @F=Xv'Iս;ku*vK3@caS5vUA#T{ #;PCSB#M1ˡɁ2 j-k='x}z],++Si Ei;"IB*WTl<*:K~H|A'L3*| Re4l/3_fDZX7 +&x0AA 8,"!rIwAY|j=*TE 2/)眧6Jijank"{8DozK\* T"66tfm F \LT2L1$5^ j' JzЧ@*Au#xЧW*A4.aVF..4͚]oE'[m5Oۦ٫ﴽEK߁ /^dL&f\FoKAP꧕Hȵ|;/ڌ?pOL?a1><"!|v@;4bÇ6Ux6q,JoޕI`ۜG9,PIdUV5YjJW <&?FUk/ ?Ycbw>2a s}u (_Fd7Iҳgͽ=nFa-,BYרYEۯF >?7F̉2Qm6:,',-jS ~:ՐB6.O$P8}HATskU2|`$9{q=J} =J:{a${>E6,X]BLPnk"Fֈ7mܧP?w qNF2hwXSnX1oeim`?xv' xCt+T@ۭb7p Cl6-P-';5'ǘTKm~^1J~gqgDAQ/^%KA#xg-P!V4ﻩXnf3xhl>ۦ*EEǬl^ٍNojsHDOxɻu:3<?T͚-X hD6,GI{ήԻ R Nion[' ?@â#kk ~ -++2>}>&Pb C̨~S⨌MIDxzTW(:Zm2,+N}EC2'"d+qtVEKuZǤ64X'ȟ{.ovj鿡 x|XJ%2DmmFda,u Lnuù`\U%yz5b1zԏdT5huܥ$mӍ@ f[$>yj(G.أMfh`:cfߊ Jv9OJ/\[?P |eZ_yy]&Q  4 xώ7ᜑ")č݊~xSh`$!m u\WBNW~zK wEx7@<CƩ&F.Gr7(X[?`j`zs%IuM0vt,$=#We` 0s Uv;A*LJ@^V}P\#c5jo 2^Q"5IhEk!ʜgW@oFEm{)Qg~?]Lfhҝ`%VmP-U7$ aeUɦ"T -PP'mW_*:I)p3_)jt!-S4br!F7AoZֿh(~m46!HSb9CNfdxP<O:$#qB4V޲ƾmmK ¡S+IE mrL@k8_oჷgpsbugsSmW ES}ҸK] KPG][<7sc $Λz}?[͘]A}"Gz[aIYzy^QjLϙ:k΋/q XobqQa ^r}nr/@9ѲUqC.8̺5r;F-%U?GJ9^J<ˠNoi2`-|Wm^#2eYƶv+Y6f W D]%1Jv)|Lӿʼkjk{__ۗk{,r^| sHuP?nXT?1 ELJ<,γr|C/qWNK&L9eL=GE[.-eyAVkɏ+ږ].R~ZP̥δ ^QR8;R%`R ܉vpW  0_D>R6E97@";tɽGvM hp38}M s%mo Hq"-+F?R_kNޏ߉,KnƬ_LJYTiT>_&w0̥MPE{o<~ˣLީE|lPt>빌*Vg/f# ΤmtRL6X{vq6B>;F W) ,EpX `M.>]Y_ueR'VXbjoAEHrDYL =kSMiW*J5 PYIg儕깞PJMLÜiܾۤ00Y-d ؎04T"2Gr+I?83mU zBʯ%wk&l!;`'T`_ w%}5-l]C}R~=:PE%-a}$AhNlӥ_ ^Cy N teٕ_Nۦx(|^5}/lBȂ)t]@$fx@]p_-"u 2߂쀙c~z9\>55hKw"sɲG!VrAko @R{uʆB ғ.B +p+07^FG9'kgz*u>Hf￶5׶c6hl*&5X68SkmʨP 40>ϟ?ǟgzz|?9 cp, j u79QHUqA)#G䲶29'US,eoտ8"p=6et'Ԉ%6 *_P\UȄ|!#N!KTU7`WlV$ĈB>#!@TEMI PLYTx7j-B ~7.ŵȊէ+]_i?IHc1XK@(8k Ƀ"6AbYxI眖{NtڛV8Og Wy)R`)sh{SIk#|p~D./>1[p]shšdX`sJ@K|+s}|~_(}۸%tZQ-c 3 $g%f]mB (7dW]+8,* KRwa淼zG1[)BItܸ,8UM6zX:3[=w`@PFcӘM 3e79KP-> 8>ff"iGvzҕǁ0x 7=J8肙̾7exB,,fi @H8K0 ƽzH5e{6CQ%݉-}R.Y5jww^~}~cwl?Lޣ_[ݯSM3YmEd$ k'cG3=c]کQ\Ƥ P/y]yߟϿ>ސ|Bs%~_תHjGQ43Yjі. zԵ$̞`Wf%h +ճh ޫ116}z1bYOM&B1EJ*Bd R[3EEBCXXp>yn\6]keWu0j@fuXSqƀsU)EMXv]^Y7ʁv>=.rQH'JwY6|ry *Z!1WGN׼4|/cPnϐ@I\8xZTb i  K0m'?v ^?iwؑJ q5Q7XP}=vI01+,[ <]"&2.+:EQrQei}œ"rysK$@P|U(/!!Ѵk>Tz X7Pf5?>הKoF=y{([LTW]SK/к_<$0 wnBi&X6{M>pHwX+vuD.?7@$ FvZ3" Q(w, ,ܞP %$| KU1ɣ'` HddUPt ٚ۱WzFZ R2l[tպW a<~"FfJBo[yvE/%Da7=1?" wU>d7sY"H*F]^3sp?/{x FXG phpV>h\C L2uo f qS[JX\ecn`ǒZ@qt6Zȏ8ޟeXf'*t0$91 F!H';>@(.FAdMhg@^e ?,3 3eVqR qpkc%C`9HpM{0:ȗ[~Mch݊[?dKaQjE~"{FS j"y՞bmAش6Li Vܬ  .ܳ ÄUjQM#y {5n# p*ڿK~hploۦL ST,ɫs7µEsϳE@Y9x}~>8.KmLJ&[i)s*/{{ohPc V U$>J<J,=Ti, 4ҿ4 <*9h$~'S xL 2Eh b;3)C 8d/fތʌFkJf*N\8"鳚.j$e -kȗ] CmZRs SjnJa ?͒#4R i4=lr'q yEώAwտra`FbТ\kȞ#>$ .P(k.iU^>5w.qƇ~:  * 2F Ӳ!K#!ؘcrp1dǶ pApC BoYsF<*a9=pWr8=K) Q*θAqOZ̾mry{kh}d5&=h`GD07L."T*6`@ T@̈́7wUǯJ!(ٸ,-%/C( !ݱ]Z D^FwVGeB˨dA'ݹ]jldn/TSm_ׯ_mM10/Bdn6+-4vs3BQy\|_?<ϨL\@&FY M([QBS \|L@ mؓojBجpO#Zq~ZT`}-Om^0"L"7&!Ӯ,")i[NƋ,Ix!6ȑ?UK  j{5܍kxmQWE)˿*6j@[jVEBԅ=5+N"GL8z8r>;G~wVA9e?NOek^`hǟ\Nw̏.f]Sǻ<,zB&_,um"7^{iW?9r/^֨$$d/;FxNEqX1Bx<7 ?ʹy*:DA>[aV !W"m mS[n` Zth4Kf%n?Y1EX ]F}DtRB,ƛpD y} u7 !qNgnJP}sj {ڀge@sK5v910%6m̘˲XG+MҌn',؝[ Ǘ|"\{D));IH N2*GhV3x9eI*R#3;uS)#7LM!;(*5"FݱP~Gb៳|^k͑>QCPhNFo%jVRC (o["9j#ku||~?{]/sjGSyiJT="oԜa1&v`&[f8 Uz;E1f/;pfγXx*뜆X\穔$&D"'D"Ⱦ4Kfo%Ld^¼>6qDivLSQg5__W`ǮX'b-G׀ t0;tt6^+>k,7HWG]gsy'{ _|Zz,DE"aM{ ~paz =C'WnӍ7ͳ3H#MRѷ@3QKN*IK^OՕpq@FO =-=d-Ejj^JҔmRfgQKC0aG[FHUx̂@ҩej*^jcR5v){C `?@ V2$ `gJSnbDm / E~ۡ2 5{yWm=%k$IG=@q*M2^1gf &O,Btu}W&R[݂!`an3~u $)տGtk ( d+r3ԀH`r(_eE|OU㶿}wvUocĥkZ>=-x"s 7Z+w8R{:U m]@^\Mv 6xe?i]XomaPNӄZg^)LqT^""`ItIjRb" hyscjê\^ioG{3olM'&H\˽~9\ KdE߫0p ,b#F^7PӏQ3~z?g`szuq돳8F'$p%0z[.::j~*lጸ4TCBUxIh -99Y)dVJx$!@FFAaDUq@b%x J2 @-c՜*yXMBxҥE|H z[A?hdFN,fsmS>A&d$}v^8i㢼Ͷ.mpOLa+3lt!3h/c8e[y|[TZ6ܲX rs]2 6[>ujcsxw_QjF_Yp2T@O400jW ,YXh%˄G p$4PWD$WXbAUV=;sZYQ\M~{?/ިC_!b"Y&"9Xɱ֋g'Vz8?ױ!̶Ӭ-ke嘚E\mc@{$AU#i,(F=ykǮ]OOur3f@;D; 3ى'O&1oK%i bSR#6߳?q?7?= ^_}^WA}yߧwb[u_|!i!f,$7ͦ&N柆 ԓx¿.i"?Uų;Hh^Q6L?M}i l&רN L t6羯󼯙i1vhA1mw>X4[Ll3Z}k{dxOif܁K7 8NXcx+~!O6^&ž\a5U'tRdڲa# #}G|Xtn/'k PTf3.zQ t7AdAh(L&ly Ӊ~ - IDAT7(2b_R/WjDRtyXxؕoe_ qFt[e&4%jbvn`5"ΚzM̓%:=q= l46Z׊տ̴İ1k y (VG9dn:S~;j[cǝy(ت3\<JwY{2`Ma.!owÝl O,t#BLr:LY/[/AYϟ} ?`wk(WxP<%l-ECxn ӷ4+d NVӛ' A͍+̩ 'Ƶ3?BKhST,)m BP} f;.jPXB5+;kUWi u\}Bps}N7XiЃKlfK#0Sgl(V@Up +X%}.f|mA[#F?J~#z.}=?f$gǢ16]N *m#sv DXyy>Ia^UUOŤQaE3װ:Kĩ94Keoשgj/h[7iD ?XAIu2?iYW J_mNOۊcxped.P6c:7ʚD?e (p\2i\ U2Īf#V%f5p÷B7XDcJNY%At[BךaKt;jXVh ӏ2Bm {4Sm#j4o\%ɖ% CD!눊"6#8< lGU *)#3/R6!0 !39˳w,4TslI( : _"v-/_/[/Z/;~hl_~7U ;|ڥ! (I52޲~ =<'-g2SmeC`F2%I&/Ʉm1<:ihB EWf1X@"K3z},_BH{֦pȅKay5Аr˳n#fS*/IOJ+qv01KKP=**hKOQ SY*gF9Ƿ8fp97 dc"^L(a|\1 |V#^sDqUw LjL};Ӡcn'xs[Tͩs+L-6}iW?WhCZB!+SL>gژ* /h*[ 8s*)2"p^>'S}Ť$|.Ah<%h]wӽÐ[G|Gruf?1`篙"1a04 4xyn=CL O䀆3ؼ`ܹUlˑ FQ~-Xy# /W"K@qtWl2!665aZjOpCK6d3ѭ:c+HKۮ {FwxA&,sxI_znעO;'IȊA[Dijo O .'֚O#'z~k2ހkR4&=g42~R^׋AYc?N%Ǐ?R y߿^ 8I'Tb#/۫n뼮 jWzr[`mρn[?<*CRD$ d%6du<ƂF\&rNӞ;xhG~[S_ZdTW@?4QC0긙@jzQI/I)4j %Pos:]ť2hL&!6[!n]<{2d&v R? aLqm}EIMz՝q VTf p#2~ dq1`i*{+m3ٵWG)XKwʌ@]/l¶D7LhP[o#rt\`R<6 YZ~i&n PhF`'goكۃ ;͓It,w_v8[$Ƭbb{$@=,d  IxrÎEYs|DF́jBs5#4ل#-gJ%$@XЭ2i_Rk9c"/>^G<_Q:~:~ï_#^rSh&x }4L9ҩ+l%Lت*@#ڭ\NWEy] ; )qR&u~7@0=&*K\X'ఖwY{ ol/9ׂj{C\W ;-_L"Wl;Cn V1ӛ{_i佀M6']5'~"XU bZL+?Ab0zPpb4t#lږewb$+8uDJcT9i4K8Y gƴUKi'i |>ieߔO%٬ Č ]>Q2Mgwrٝ ;SʟtOվ?3w qɊk81Z9WvCM-ܶ###(nJXHxZw0&3e+-fPC837:r$!ng`͓qݭi3*Iߋ#ҵx~~8ȟ?~OuHxy_8%ZRCO (mCJl7yQtE]:1[/2%q Lj$Ċ@aŭ2R>5Ր_%BvS<HE9W!  !^*_[3Y`CŸ( hKNB`Ϊ60_EZ<}zE-<[Vc`,Ș6%~]*J@a {%Ă ֞+LGfZ6eNo`Vh3ֿ RtOBJ&RA+VPكu0>FH,)ǹ9 y]ݶ@n̝9?2™?B(?B9m #:ryaGL 7+Z@Օd]0irgf'I_0ٟW8ed*)i7@6\ד~zDE0[;gqrzπ }4 !ѷ㞿g= so]d1=@*өxIV[IE*QB3_* iز9w0&F Bq4ݽcgh_\b"ҙrqq^^/ycz1W?Njz]/$ɬWcNz;4WIjw FC2v(w)N|lFNjД#Ư(ټTfByV! 7.fXm!SCy}OY_mY涖%?}x9_!GYڵ^珷˧GSN v;S@ж! Aټ9͈9 <?<['{ݡ0}Yt ad gP$ɫ0DǼ wTă~A 8NN ɂ7Uo֊]9S@I(UkGoco7-6?ܔ?U1qߗ/5HX=XX^X>lƏ.#`8`]Z¤9ҿ-쑇^BsW wOm6or_7nʶ[}?>>DUǿ R U"FNķz('ؙ4tt7쳈S]m@@$|p˩XMf!%Qx(pp3 A'OS9D=`Bfy0S>}{^ޖ:4Ѫm%2?tHYqfqy: NҨWy$xWQQDByjEFC鸓s2aeg|}uFy9;x-9^ǝKV {xn+Pgc߂{ LEJiʉ#7O3Os5ʉ>X@P{b0&|WVYw[(`y[*J\Z9Ht;#1Zr1mcgheB`%9NZ66[,tK'U1@C^GbLqs9P強sɨ׵5 8[ b&T~dk<1ʴӂo2X1QêZEU지E|ޟy''X=wsp9?~+#jm}E0}F :08e.C({ƺIvء| kt̲A|<\"/` ؒ 4fe9=݀]uimcKFGIn|yY5/+{$!%nk=cXwYq'0|a .{HxWݯjƬڅYw[=ύmQkK=W*s[ΜV~Ng,GL9ʁn xH>p}߱Fr_ I?]oۊsuP,9+fřx"L(~Vѽɞ?A%vW5?]?k836t1f!il`ar5O% MSG,  N 8ID9#WUe~Oϗ'vPAy%H^hj&+]^7&:?5Qnߟ߿o5YsG^Қ)aY`f?WM𖄹G$V@"ujXGQcq`ba?=mz׀HM3t'ɉ8ٔU sUTEk#2;|ܐYtӾ*]7mJ6Ec l;~zW#.Dǫ73T4bYAVN{go6G,Nm 5:cBc)ӹ4T. ZaZ4)JRm2B(1Y2(B+c߆ݘ]V$|۬76=cnxϮlU@X|†:L-eH$m_>2p*O*Tƙ JZ>'m20\2okB8UP9U|"XȧHArϟX'H_AnMv$a2ͣ :ؠ7tO<:j?ۈcTcdb}z 3aqwgϽ⏤W%d-ӌ,otQΡCd}w7.yu?F́0͛ŀ!V\2Lc @L&,_wzHArG̘$K {ۻpWFZ#%:oy]H`4,oV/@m7nv<(f++85,-jZr+j/$U.ΔCmEWF|8vJv ' $sI$*=7tȵ6k= Et:'t#`W]0#H:fyg{ko ;;Q Lg%BjlT"|7#rkQzx ;+0%&jܛqQ9{LAmA`gKAO9P Ipf>;HX_<#hF= 4Q&bȼkm"۳Re]I&߯%uqkoGB/83|Ծb&iV}Vn]\SZ@\6DA'K=? Fn tOk 8ՒJD=3B0~ݚ1iőuΧl@u0p}G Ϥ|@1F7AS%+T.K$(+.?tƿR[Q=/n/>k.--BK&mnѺ'.}ԛ\cA$X32g$+{ jmOu?_/>WP_^?)z:^i=cfY1L;Э#MoW]o%~LV,pH,œ%C{/-@DH"V~ȤK!kB"_A !Ub:T9TmT-!VD|J JE=Bh`AC= ~I4[yt 4ڿ$=3XVl -< 7x=˭?9/;}?L, HLSvN(k?ZO=4" R'yb4qsJ$9q!Epd dia_nz-bI$`MRy:2|嬫Vk/Y0&IJ ~}4W=k)46Jµ=Bc > Oxȱ [{'h1ēʜgV>]&DEͮ7*]) @-E_տϔI@)OrgFJy}dW\ɀb\s̖+)@gRDFsr_qZA,BE&caC`k4<~$ۈx/t69~ќt$d!/δ!ّ'8"Zh {l&S@7 (/0QMce8Ҿ6Ǒ#r dYL;U' _k]!?'. V0_{vx~(;kdZ @ٻU煜5 _#O*"j+l;!GeosŜ0ئuU/ub~& ӝĿs@wjw&Uʃ5|Jۃ l"S E/fImd*?^š7YYs`ULXpđ60_1bQ @ClB"5c|JA+['mFT66XP70rr6 (kqѓf?~-b!F<#}|hⶐ@_NنHE8Ia?q8vafY0LB5wO8ζȱ =[E/ =, W|-)O ˞H!#ӏ5r\Xhphx'̎B)fGfGJ$**w}{Dޞ0$t)3q 4pI@LH9&+ Ul@w|H<peLoU=bz#%k9![V&-H;Oڟw߿>>\Fc0VR9[[m90:L 0Hr?{{s)_zQP @2z̐qC 2K 9Je._{T8(;t_2LJ/~;36hNGvͰN<jgHm-YCݬAS_}T)nȕ.=SSc߆/X|8;EmV\ @pusqUfY]ut;q?CohΑ,aCɨJ5F\>悤Ie/ n0F-r)}*@` v2A?m2 'NmbGQϖufX+{Cm^4@p$0|{oX63HEdXMx,h[ї\ms%:Ӑ&,[.Dq[ 0lYun7oޑa-?Fciy ߒcIVvlM^_dx='תrɒåʑ&'WA|+'-PFWhJdM# :ۉ*db*b̦l-Qsqܖ%WXŝaV<aK {ϭ ^'6hpqH?>o3#z:LDQ./\s߂z1&1݄}b1)f=JyMxKC*Ԃ'-Y巠d˒o@|2PJuy3J>5bsO 7c |@0 Y3Mտ)ݩiv2v{nBބxtMr(ShvOjSE; p#fs lSS[Ni_i]^GYK$?$Y?(˻/$Laa|- aXՏ^Pfv>6웤O0"eBjHq}@_zuMhqZMYa 3d+"?SŔIi{^~G4gpC"Ym}!r,9Vc@Al.g W@~G:3l`Y=@xK&Hnw1ٟT!Ȳ>Jz۪w|3"i{"pɧpa/j@,2 gW g+v`yBi OD"<#>M,GMoi}=CƭG 1 JBÄ] 2eh5)_+MS3=W&vf5T\jm8vf*4D b0kL;y˟?~\cwbW2|xvK/. ف,FP\a0zeT'?FnC\\iv==^q2TBkܵ0/CFhXZi|#HjedudO6Z&-w6! HWsYzc$!w^@Y<0[3z*yK>j©)Ydz/P:P=0;x8eUIoooқnw\|$zHy֭;=k:eqXr[;?7? lڡk 㙙D_\gc~lx'q i)% G*oO\K2ygq1v|A@ǯRW'{\5+2ĨFB o>Abט.$F+E6AH$fptON|W=2^y>oU<f k>6G'}Qj}^?uuf%<.'\f::f$TT[2Ājzoyߋ|s4qL~jʳ)tC !c~1hA߮+9+ ].ĞS`~,iY C_i@C$P6t*xoxBU!(_@t/Ύl2 q}_rReo6$ذ` UD3$ \F1ǀ%"T`g%vkC79Wӊ \(nݫ~C7$?t&_yU?z~~9ۓSZ.[ɲWW;r.zf f`G/QwՏ112lpi(-x/5oۯgPmw/.dO }Q ٫fRvuxOs8PusXLXEXEeڬE U+4? *OUT^YTZ ."2 q K38b.S:d2QQÆL TB RGˮHRTv֊xo:Q13I4@5kO[f01q :93m0U_6K賸d?f;5B!$x纟+Y96Iaޅ, )o_q %m֊ւUA\tdgh<-kӊ͆=.e6*apEL| $tm%91xW V=\pр_VC܈?-5W꿵տX$37_' lAkC^Kx) & ({+@M%KD9>2q](H'gJ &UbuCC;D/;(PF!BʓF0j.W!0jHۖ+֮QJْ R )Εz拏ypPV^bu8qVSO[-[XmXvRoR}|NwUN>ߩ?|uzOMk)y{׊!8--Z*t6,cPPfD,W+(aH>g܄ϐ-u~8ƙIV_nN'gta{@lO{ @,zm>6{*i&T}a0Bx%q< ~~ߟ]]߿Y{>߿}?Ϗ]ݗ7_E IDAT#u,XK!)/n#t"pzqR2Sbe*^-DAC2l*!>.a_ A"isFO@ZTtzw!M2RwV?.޻Мs;b#m la%,,bVnVs#+Qzj[Y( ' bQ`4#5ao`s^Ngb6Nw>lyy|5%Ww(v-h<Bw N(y'524ZGm}aN2ڌ`5xHiw r |(t|Lq6N]7 UL骼֕aɩ^`jύl,F2&_.FCk/输Zi\y^S]-{$Hdtpl<_C.3՛oVi&SL̴6Dyi>^Td,qU/b\5N\SnT'i~4mF/6?6ЋAsԆh )?Y񃰧WDt?9 >&sVrс o3a{ 0e?jk]Fy'|PxyufSgIy7Ρe_J3cKq*Wxsx7Sy7ҦȘ?W`iZ^cj7ȫOЏAMՀTWIh=S"\̆>|>yz!Tu"?oȪJrgxvԕmm=3#{i+u؁釷%9#vvةmFYXV09;faMDkwRkZq'?Z)gأb:<f( -# Ьv&sT H㤕'KKD|%Kosۅ`: ri˜!^+F0m*|a]0U_zpԇp1 /7(zA5/K"\e?,N:X":(̬!5B2cj>-'6guQHHȔos~"FVdl`o a㨌얫'[vdz_p7O8.yf>zj FK~sEǑ>>B>?bUVe5+qP%\G#N.l ƃ6=r}hE8f#M%_qR }X.Xxn=&☟wHQ]NfszjFAI&g_fzz]`Z,CK'+X@!TFD=tp ct1#8Zr=U8\QamkP^sz2HK{; XKEm8 d Ɛ]Ku0%DЏW&(qԮBC տ^9qDS!B@cQ:aLrz38XIP#$8ޟ`g%zLlh(26;E Ԫp2ҧ"wxa{`ɨ\PNJCAu0469oQ+!?m3X6M9@y]*||by}}[ 0|b"=蔅V^^r, >KnC>FV i-WAt0s;Ebz0{,|rj"ao6h:]9?y}+# My-7f4׏z^^RU ~mK K&}kylGz•, !CM2(`P V_>vneS#PrGzg+{T~fc+LI#o2XS35?$\~|i%炣p\4)ېL(Lv?c,D"&+ԃӬp c<1981txZwNC6tP @:eP#bu3zeh( ue_oߍuUƒdZz@ZEl; +Եm!'p\'B?,Ija΃Z:[څuZkQ)Dٝ1Lt$FG2Gä2\`e\ Aml.3ߣX-_2I~mw1@0r!U؝9{ݟ"W(X5$~ ,=[5敞kq᝖?/ >9߿ޠyz~׿|/~Gp 8VM{c`kV p+0ni=fyw~\F"B}1Guޖ6yK̵.+{2|#`>?KLu*1՗k#(|PϩvzzpE'p6o-O.w ac`ށ i_1?<6L  m*!v;)=޹y54<M鼷z C݀kؒTy$ =?[1|6=_S(`#2B~+sefZ#3>`q۲F[98pldkK1rFm(fqf6yTSﲃeʀa(КyLUCgC˱n -{Mi CDk5\AjiDCkxOdȠ͐G筯u9}bF F L@-2s6y.Cw16GpƝ@ GWS5sx ?6f ؞כ. /vM _W /y!1Kc8W*)[՜A\@u"r3>c2qdVHؐz,4M% 6ftx';YH*WX~gdUm<獌?C_ r#?r3ë+q O.pᖾ!~ *oblZ !\j| ?%C"GF\้o̺Q@_Dff_#IjDj8e{=Jq^L,,>G13Z_p?׭cK (Ootٝ$n7qTICs f?U`LLZ=+mn9\U 6Iq|WbTRӔuIuW AvGۃsL -ԁv ^в,N\ HIAW(]3DarhWZa.!Rj2<m< ;_*a-fcG5.Fu,(Ӊ].ig~baO}M7!ЌrSیGB,aihHgTڂ3I#ݧ ( őAf"Qf6QuD? hxtMo6e֡H~?ߵb\ ph 2>?+fH(H9 !tD* q2c#;f-|N!1H(/"6Rq׹#>14ec n]xL7QqQLϗO6V!S֝,B_-gm@v~ :XVa%ZDVw _b7D斷2'+6WȞYbR!զ\S-[sg_jy[J,ۮR+.rf4}'T"C5v X])i%c4;D_%Ousu_=?Ѭs&+`7aOzFrD'V0A-@3#dp$˳u?H~Fwt5Pst҈"@+fYh''+.`XFVڤA\xG }g~=ZaylmY TLJ&Z^;@&{+ Y6'8?d?%|~<+9[:Mڍ>y釈'#' |]36 ?Jv&.fuRm&HȖǡ>̣U""l_; Vy^V7GPk8KVq25o1"Z>r*xvƴ_!Oh{Dug8 {;Ҵ0.d||}"YsHV,?^./)\ޟ#+ۀUNTz2;o-8c1}`ҿq^ ~P|~r/t_ŌVE"lz'p쿚\KKE5H`6zO^K&̧܌pD/ <x-++7?%Vxw_-b#ǵmiQE}dmv[ae):Q5NNo Kc]'ý: 濂QH'D\+[L7i%鯚6rxG^<=y׽߇1ڏ'9yUDŽ=99:0^믔o[զކnaK7o# 6{I> #&0:5zl6u;Bxr&ufB) ͹5nOWz]ֈ.GTfNQ`ݤY5쾙];A<{qV6q苌c%ZI >y7^aTRY8[зp0C4Ry iڭZwB*"Qkk#$wpv6y#C w x&fMmwP#{ /er'"OC$^7% :d8SvU3iC4 8|Z;R A:&T$); w]=[0xgƶqlnTn{_ar6)ƳG6+/A+r'Gn8z1kY^AYHi9HC 44oO~j >?D^Ff̺ЭqoDa[pV8݆d9bijʌ{~A2`obDGL Tm6"(4VSl9Ffŀ_0†f\2#ek"l $ba5: m0Kl* o]uk8U,kԸ&7+\XR+}v?6HܤiCr&(O"!^/ᘉy-Ft!%x3<b;5I` 4Oc`ړҪᦥmδ T+0ӻalD'~1iz1ja2l9B-i- 6 :_ǸNXRFqz۵g;tӹ[5rݽETtrd˿ "XI@QA IDAT||Nh2g7#$5>Qhڕ\NOv>O/ѣ\^^aNw>kgl&l+ש"cpn'4 ƔH$taQ7Ќs^U/O@din``<£F[z8F~"= | Z&4(w;d /f3ϻmH]hF q>hRf͈q@=0ᩗhɯ zzFWe/avHNmޟW Nuc4Dͻ<V-K8GJk|H!dM> ּО7Ǭ9т? &zb^530+W [Ж.->-S?jcrmFDAғ`-IC P|yΑf}0987*;lJB|s[;zz(!XY;7lhO&Fg)b~zGA "DsLtKHlDX!=R  ڃrf_R#Gt7;/@kcGueIvXEN64\4eͩ*lYl#>˳ydaUBDBk1 8ma\fH_TC,D3~nkznzv/jU#~U]{'Y=h0SƀV‚&ͻY0p1T Ya_Cz\>!xN,(vVP;R$Qʭc!WX/$ l<KkZ hCZy8Op A;|( }ŧrwK<-TGsbU{rR k  y4 AL@\2k'_:YOMWĒeٖ\ *d@ܳ;{NUtί=ߎ%ܭGnT"<cB 4-wKJ4Iu.ߖZnD9 7]Op~V!RR1>wEyqlo!T1!=2 fdBKh ^D}98 f߰J]XLR2o$a+<P8ל3(&nm\-/}~&9n~\$?_?M[{?ΧCQkPwS~QWRV襾t@0HY@Kw4#P2=1jDX6w{{hK\N›a{3 ;cn~G(Q`MO| JV<}+ Pߞ曹bB0B9rx2Џr#x<ߩ,Pb]+=`ڈ=WQu?aO#wӿ @b }3wg"|`:$R1mER4d㳌bDf-=-"V!]l!^Ww%eB\hP3.Z4]pXu]¼˦&d7lNvb7J>~:K&88R~ZJ {d72QmerUt= 7YoN#F3cp@5 203/WrnfSuf2- R!GHҲoK2.RJ`*诞^ߋ@ܟ*ni8J:ky?0'>08}iTf=G xEI~/*\ЪzΠ`Z7ojVY: `~%wd@dXw7sT d1i8rt/.캵5kڧq /z9S#:,,!lj#.\ ǺuG}r]4NeQUoZI}^n\M?䋂t03HBIcʾ2Pw c3[g` ZCheUfo"FZhlq|PwR=_5UB%F^g5Uy|KadiFRBJtҼgiMÞf U;V ݈Q\gbhp_@g#$@ L@lZwfT8C΃3k $菷4y_Ѱ n2Q n,{t(xm)DE49,(DT!mVY"u1_ e "Eʡ˛o[# 8n,gɯt8i|d@N{Cyyr~JSHMRY+`1hܸ0>;..Z?++ 'y>u#HI53_F5ӇhZ]j8I.ᤇfчi ) tZ#cCp+'`\]y`"b%k hl atUVD%'HŅm"mc9TB9w g} XTW8lۋh ``5gGe,4IB&'a{l:T \E9O{ 3j!yHPb!"Apv^4ZsM^?J!*4PxEԠM(z\0fC'h)A>XATo#$Hwyv% [ {pԖO@OG RKJVq},GϼE)oRrCta+--.^ }mL{brhz۫Cr VWd/BRcsp~&FԫmwX7<?–Ej؛ݚGccot,, #%|+#$No_wWyV ,Bk!K -WտfÁup`6{t>;u[^'rN^$O?ij}O͕ ?# u|!i>wr`(~Ac(zfd z^ #:(*6c/%xW[C[-ظTPs kx._AAU:~K鰖Z{ڱmVLHl-~4(V 'ZF'(]rM2PkTܔqz^}ttx*8/%Adj p$H "Ak@=lRJyG9!.UESn)7J=qKn-a?Q]f8ke]Mmbm efM\VHٶK h- t|² ~KpĽ#{~z A>#0~{yGY@88c6 XeZ co@F(d %BʭkE)-DWU,,j)e5)~̲B-%jprsF ƝjAd-WkZU1uțI l/"Gx뱞20*^6C_iM]eK wzf_~ەgW3* -Fa*%ӨÜLGn$ذUI5O/oޔClu7?jNF!eUźdyӚa[ѵh.sݳr$tO@Qa05W`5ݦ&@)b>g8 C%g8!ev0IXۼ?q+ߋhΜ//=&\<%Fd8ֽVSd9)Km3|ģpwK=P<λiĆĥQb4BHD#0eUsk^gvvr+oft7Wd4, cӧu7&V W5N{ls Ҵn*zAsj TE f)pvsZ0Bec0o1%]XjB<-;@ 9 |KH>Tx2W-g"#[G_jϻ"7ocM_ŽPVeXh&3|z?R1#ZsQCN"#e&IŚ0bE,IHU': @T(]C5IuX: "fe*f@iQs~L-{qhJ(,*Bs9Θ^_9wWhqP{x Ԍ7`Ec<%Kܗ?$,tVRoEI}ky?kݗ޷Ωy"|zn/|7,̪~Cw)Moa=a=s"ʗ牟"y<詑RW,K\տGkdHlJg@S?)P@bat>|y wEpsqBPt홉Jl=#-<6# L5eZz]KYY9=W /U7˕9n;=@P3oB'Ϯ^LACi1"Ø_ޘ%i?CNeU]̉h}w?bߤ~C)!SBQ݁$H-^yLւ@hʿy鉏P =ohs 8o?J򹄜>=uξtSU`Ζ!7 .=|$G2m 3w# mQ"o)D:.–cXxN-MTʨZ#3]4k,GN ]yH#?TJȩDuɜ><6Jlp 9Q9]_,naN`e@WZr8?ZY4.u^V\WpƐSyKRp6.*Bf=Ngj{r?sXoa={<+RJD,%? ;[>3U&JMX,V}lPu'vzP~aL}i kј(>r\pM1}Ǟʽ~\2`{z$v Y?6g`,ZGq )r̀`{(I2>dj /3Y"FH@8_R{C\$'.Fjþ8mHsۀT Q\NZ&!eG~Zuu |Bn[$3 t[nTC<&ZL#^wi> {@fOmS{&eY$<׺:{8fOlg"2ʯ-s_sb@qJW@=)lU_Lj7kq_FGJ<): !m ag@3>FrXlB@MԒ8d #k[Pg HV>>Y7EB0ݓG[\EN22#A%pl+ǂ$[^[\dHg$Rx̥鹍MW,6X;/\R7R,V\T.4imz|g0a۝跠.2Y IDATf ~tA~4fn!| 9> r82{q^YƗ̔kZT1Va[5}J7^AwqJ] 7WnO߈\&&+7o=iNXMD"6G<6?_L.´/_ -G~m¬'AAȣBǭ L=rʌϟ|>A u{si߁UI߾_+S2u˵GS#} KiZ3 r٭Q@8.ȿuk)Jgc\u}\źlY8|R< `΍;>vtmq7ڳ4:z%؝T".?u?WiU^ao 뾁jG"}sss]?s}gls0ԝ"$/n/,% ׹c8c cwG7l2da=zͱ洇gL!udp9N= y/(vm p@R"ٛZWT'Qtk1SgW(3]SnǞv6S@XtYYN%(wV>d sǍB s߃Dpb[F#`%KC[<1z~+ܟIvc~9 5F9ȍ%5b sSjq5}PW]>c?Ճ5) ; 7@TbzǑcROqDNSKk.p37Ϭ@9}F覿~ .UDF#CiA]XhS'S @B(+h@ J-dtqp܆[O\M*/}ܟy{~>Xkj,+L#-WZBbk;o@ZY=wւ RL7 U'{0d X4ֲn&Z +iFS2<,e\"r-^uxug W8z&l~%/:]j_*mxE]sh18CRb`D/-s/9#A4?#rWӵ :j>"ᶇj$8:|nҟ閂՟ 4a/"g=˨)ڤ^ xnojc?PY*t3#dYț>hs}X.\uDTSšhճy' ډZK8OmRBvUh_c'9G-S1)PrJp!s,ܪO;*'V>`T]v 6_^WЕ?4|Įم{@4/RSE}@y!+b{*büfGb]jVAq\8\Z@@ ].GJcʼnc*|֐:2,MtZƅhNe{UpquJ`&Iu. !8 vZ`!ݽ\H`S}'72:)O-< $Y1Y'>}-# ̥=@;sy_uO ?FX?>@@ YN5Vg]XBIi3^x5o6Щ5)K+h>Ǿ3M7rGӚ4=#BhPn}f?QéT tlh ܊ ܢҊ|(}p&-Dnd")D Lϑ>?p/RY"w"iieR譚|uGSTn+`#ot{r]\Ak%5wIDT͙#=bR ܎o ͡@NrN&+WVF( yP!AT2Na}u?B;+d&EiE>,cf(a7F+Vc*<1Qd鿴 T.d:,O| Az~h M"bnžVO}{뾁Ο"8Fz_Nc,4pk` Bd`&-^ߴGdDoۖR̥bHEGEiSi} "{kޅFu@:`v_[p8^] &IMZ~cI?$=6AP,z sb_/$[㿦N Yh-\Lcgt3>Wt>.w99, X-'A :X+Hb  Pކt%*J{f%A=79 bG0xL2b7% (`Wn! $sEs 쪉iE0=_zGo4^N||sL8Ls4^@Pn *bWHh 0Sr8Xf0c ?(K^?$q*\kʿM8Ο8y2FҤ8)$j2f9_i- vu8(X)ZC62& ƺ!GoK¿:,}ETݚAܞ%ڪM6aȪ@HWۭU3X4)Qp~3rm[ 9!>D#Z 90״|J-Ra`KX7)a–Ѹ7Qh}>iA󬴳3ɐP`]Z{Ee9Eљ >}~o(ں^[k^'I( \{BK<͎?@VI鬍[قdYʽJ7i˨a?`uzK,nrۦ/ҿ~ڥqA6@a]cNz8_cr$f30KwBݨ1*̸E =ϡ>{ڞ OvWeu׻}#'jYEB<>[W5\q[o{|oγ<ғ7KҠN7!8`%\AU>DT 0fڈ(4How|h;c.QAFK%^k6@p  x/#yǻ tkŃ$L;} 1s{2{F?~~g~1"yq1H+g3uT [_]q5nf?e@,&dwRd%.QZ ѐ`bK `ZF,+"~ʧP m#N ,+-Ÿ^xoG+pz<:"L2?.5HVBĝ}}>W~е5*,medyU7F5F=X6E(o$}۝V'dT$>]F-9Yvbmp=+Sƨ{&zE_ϩg@R(d)|2'1kks陃0d,iiTЎP#ah<;\mlSyZ:PټSkyjZoKy)ɴ,4$њm6, =a%Ș)v)|Aġ>\&G{c\sqH;@nM Y[~+Tm SjPWA;yswx|Gq do|?}}>NO :h*6 (Syu@ɶ'RJ\*sտM {!2VwU.M- `NR {V7Bi]Y9TZ6u\)9c wHRvEp\6I8N]{- ןP?l4R;9u>0Np(q5'p(ö]߫o {fsAd'"pbōDz G e,u[isCYBĴq'*jRO rz. H YZ+ w-1/"dֱ;%%Z,K,a$yj^xy_8e&q ӷ-b9[8|5W1wbU{6彶Z6^HpC6ov WpR:w +y uq/赬:Sfx5Tس#4CG"Ec*.{M(I.eXHhv͎;*]ǩ(q?ۀ4?6ەlPB%1Oḟ)t>&w_^"o:-oUP%TøxI'w~JT 鯴l-V0\i&ʋTRǻ7L|$Yt8A;B@YWpֵQEnfܯiGg,Ë˸=|xkd<>(AL}qLozl"J` G5cg <ܚH?᜞f ?}=7~ EmbI&)YeD߽C=G }nҊ^7q` ZTuu?;0/xްgg:9ԏvy9eOEoiA CƁ,XKa q1OE싗/*rscXdf%6ڡ<&M j!n&#ske -#r2i,׉Db^cdxm<& [Ԫ/d5jyCSۛ8 `aK7^/%@F #Ri{WP\4Mdevj@bo㑩{^Ԝ쟢lv<=d0wr1P `!|/Fh?Y|ZV9ݢV\h^E<b2v kT XKNw`DVEWnSM5BY n~j cgXY,mANsKؔXghty:,?c4¨ -bɴ7 +FuWؔVy2-l +5/a]Jd9ǷH0Z-)¡'4aUE͉?MOr{p6MŇ=#_ruu˷`3 jҫq}$$b%$$EOIQoh`J>E;2&1`O|^eiQ4J`'WQ! Ue۸Jކim,%Ѡ@HyJU+kk]3>VK;J>1u9 #Ygl+ ٯ9gfoӏ6 ӆFP-eQVbߵ;4 '{V@,7˰{Ɛ/R~զiBO=mj2EИoV%H7L7;70UfP++׻CIGi!PE.#c{^f{T9i_xkM*8.IB*K}ꚝzƘ<+?w(#GX2 2hfaJWutR7vӰB$vWt5->›!R3is ]Tl:`z?à^WqϙGiҜXm9!C2q6 YuE'kGP7Պ[|Q]-JƱ,]^b.eeO]ֺ^L!{2Uc( i=/8,_/ |\͟˴Çd/ 8|cuc4\F~f#Ϗ7N \S}G&ϑ7= 6w;?}}.7~l]xdL[N$$UٵIpI7nsL IDAT3&fFݞ%o=X?k%Arxok+[ji @lľ 8$|\a{Znj+&5sdm@V,H`(ӊă.cMK%kU4*9}g%CMH;X&8P<ߤ>)B:NK!10%S&8C| Bac. w3&Z6zJ-DkMbgИvhM6G_/xUAen!)kp%Aa@CvTӴOhQA3nRmh=ԫub:GWM2(8 wGAʴUY\\1r8 P^z`tD`$pvC~$A{jf%@ЉcVHzNh~P2m,s<ɤ14aWzL5lrz}2:M6^+$rLa@**dHœʙ5\c k|ޮO抠ᢙ\Wdqۃ6Koh$2z"Z:uN|l66^??Oq%2#J\^`n۫7/nToZ u|f9zۿ=Oߩ^?baDЂyl[|*ݽ=+45p Tk5Drlѐ-u`T FUQ>GTY n)\\׽.\[)iV鿻p3ɽ #^ t1=1!ze -ڱl$y9~TʎӅ`<D>.G=>u0NS^ @E߆ìi -vbV?,K]*EQ2VrJY8'R_67[!\H1qC9KRyA] rFN{y ӲYbg`0Yu <;hا 6L9qB>RS;E }a] -$*qΔ*{)H( ߁lKHќ7lpc=> ﲧfvU9e ~NXMxxR/,X2aVR\㤿 Svm`ygmAy?Ja/뚷G:`-* -j?==UߵL]@ T/n8eܲF'IV6"tF$ %"4L\Dqi^uV JWHQ/@PTUݲʔKT;GV{VU+ʡ.|>74?ފ$$/L5wYkܿWR/ fomWj*j ̉RB|_a @O*sDwMC 0E?3#&z6F_[!"u[7^m$(f2.V#p{ yUGHDMy|*0*3Ѵ8/\M 3yJ2{!Ir{ڧ랷I| 2i{k&UHsu1x8䰙87Iq]] <75%U߂0+XP 7 +{I |^Q#ܿj}%H`Qt:,e 'Ҵ1z{BAU iZư e.ź XFMjjhl(6@%Zu"s7az$_+)MԖjMƱ>Q2S8_`oj !YWյX"U> c `Ŷ( t @Zcq 'SpKcXަJgc@`;A(kx,] hB[Px\S9D&~zF-<9^/Ћ?5@y)Me!!ClVoqB.oQ}ťiEi -bײP'qu'_|1QAuz԰{"J H{[vh"LQ4ȿpycX O!)]0I|ҩK?9X1zZ`"z[=}]m>]c_?o|!Z&MS/C* -J,:_ S<#l!+~ݤ+84SBpi`y L2 *Q !xrx\m/C o١"'vŀ+%ۀP;x7=`)ԋGڀ%T %C}$k5lzC(cUs8꘍dzzKYh]G>v=CϚ-!J-yMDݰu̱[8 dRDE 76R\`n&TL&Jexo g0|(mK5G\@ߜ֊C^y{ș&M-EGܱ +0=+zcC)U&4Zx'W+fp DIy62+,&qw>sp8`;pa1l4ό~}.H}8V͗ƀ"?ˣ`>N?B/9m%ϹcpM̷S&⥋ev3nՂ Tè:"5o8o -+DlX̽Ů˟#dKصݘ'''8 ,XW Pw5U)H:-JMkF0le8YJt9m6>{5lF|o'Xt 9sG13=%Gށ< ].pfI@PG}P.ÜSu½j @:*6qۇpEL_Y<']y "k1NQ9TiYpg,"?oRR~ydЮ$xpd`KDBz  17Fz_kM[X "C,  ֩*-sùTU%ʢ$Veo<ljzBJs1*6I7!J. a/?7|M ѩVeV,ihw>Bj;4I";t-Zb#%=QZj0F*I`d2p29v~[Uΐ:[B/ŨnЏ'˽gW,Nacz1ڞTl$T#r/CP1>_y uJKEd_iN'ӄEC# 9rjy"Y@X3X֕2e3/ bz-뾌jemuJ)/4ܹ93㪋 VA ~m`j1i1(^H[h;晁'+wU L nd$BҌZ*i<&s B̋R*w7 b}ϑhG5?sy_?}5}T "CԕT,D +J* }_OV{DRRF٤*7C3uVP ;>D=,t\H?>w+0a#Zb[[5"QD*K3˦â1i9eW:Q1dT֞TYM(*DvY KSk?{A:>'67?\6*8z&] eј[Tt uCY%2oN_eMഀfMzS}*JO`y}|L~YEkތZO,c%+?Sx0PVS@ zM^J n8_hp2sp{JFp5~Ě,'dEϋ6䶾ǘ3oHY/ȩ%G˜^y6̝৞@hTTО[]ɴGB6fܮ쟣dx7|#x#ynj=D|տOў12wfZZ2ްƲȩ]*2+'3RX>xA 0|CNk%" +5kͫlj?v?R6x7)?7\ 0~*P%JHCO=3|m!f noOn={fHn,hKDdD JB-eܩC]zk8D2`o .Ыoq1q=D9=l6$=[mdQvhv#mV!)b/ ‰%~!s[*LSV]4>5R0b7K =bWGlvV/k2Ѐ{&WS yP{H`\-^f5u(A;}?7o MC/dK/DŻ`D(IOm)t?%҈n/s 15<rFD׈yDA#뀀7t/v W% [ *N%/[C2GEIbgjŬh2羅ҝ҆]K=̲=|Z+r2 yȇhh!!QSQ(6.} +CKM-$^-D4N?5?^"}-2: ljgɄm>0od°=+ej}xk&_Mߖmփ"봙i*g'X6ddFq[@(DӸiMû[7?@?{#?n]>lgsϽ{[={)zRc8qrH"Yk2b~7BSvU'7.P`+!$) ۜ"y?gt/qȇ$8 'Iyz`{9S6DDܤXmRj{C.7P~>a J@@{}0`TLS"ꮢC V%a㷂Fô2wz%cm՟U&97kB<&Үi=U)KnV`=6oɮȷҖTɂK@XhhIqD,x* ʽ?[|/ڮ/۪!`:%t$gr(=sp1!s%̹S>1fR47/񦙯WEr5,,* 0O2Uŕ(V:c|ZƩ!,1y0өͰ!dA  " OO;>Gl '4f0ShB<;doL)<>=6 @m͐&$^?OXF1)x5SebXCKhWJob1I"F W gOt=HW6n9mĚ?qχ kudDz"t9 `~IWO>-ےHF8Ar `86PѱVjªSTMrQg<0|h?g{3Ǫ0/,#Bv[H~inZXR\4φ@a(.`tubc$)2;v>N[pDt j#mzU_}$ exn=| KN\@a;tR UFkžRG}L@DJxM;6ң\TE$ԈK~`)R!,k!FcU~9 S``Y7Uߪȇu7yϝ kzտB9am@XYMݴ!ePVb&DB&⽤ S/2!aD4.W-jt H56X>o}iŖדE%n&D<ݲ$ U 'n1=9VJݍ 04t1?"t&F;n6g]cX\$`;nKJ*9p=KQlqrqAqIwduX(]_y_y8Qm5tZIGC7H_o˴Vzh `,?T8ϒy\H S}+ \Bb%/ˍ5zhZ/-6pa*a.~Ei)^H=YͳM6"Di:6EE% IbZ|.Ԇ,,̧b]S&H0ǰkE`ڿ@E& Ť7 @;O`s!aIuO SM]߸yݿ)AMg<}VF1 ĬIc3Jl{o#; Θ\`d^PO#:ozLj+~VU$uUQ6vgt Զw $fŮItOY YFqEo{7aB#EfVAEx <-ic0~9 sOᖴSn]DIR)i!Eڣ˚NђqedVXQw,&UJ/=@U* B2~;6p6 }B yҮdhTg\ȗ CDhyYj oX9oWB\%Iˡf!h]gpU=b@OU} Ո#(s{.p9x Ŭ#C@$<狋(YPއZr tKl1!OfXyzo$w~GZ1sK̓uoPUхeюN_ ZW3|ޖfѿVVjlzd<\-5qeLI2x Lt`+c~ӌbo JH5BOY=f ן_P@S5 Fq25lQh82yG&. > ms.hgd]3a8;`,2/S^o'U ^ppmGjx+1nc e:E=@|wfq{x8@K2ƈZw٪AF礦Fжk[da}:%Ku} 1(LٱYmQt73~$+~J>Tr T+pȓ ݫ= Fm .U~[cжÚ=E:-Z}_XaKx*kIgIMO+3YThRzc*9~TU=9~qBE#ݼeY(Ģ?$FZ|ط.ŊV\y,6yXl~EV׺?ָ$r7DCŴAM +f'jd  e̟Iuݣ`Yxgv/3ecL9^ĩb&0L u~>x㘺[|jtpcFW ~Dލ0`i`]7_/ 17 Te$}ҺJA?._=pchZ;ȝ5{պRA6Me~bcKN[&.ܯϸHב@BQ$yto?u?[tDث\_*-=TgTcL}mJ5(K$GshGV.gt5(Ĥ̍q|ܞPS=QuJGU Zv,(R>!!Ykd qՍ Inԣdڭ{VO.0'3*S*@:/MH- #H$Nѩ+Ifp:`%G#-M}6+) lvΊ{H'D׽KEgglݧCأߛJxC)ss)Td]-b;ɸ[AH.QW5"(7[$UȒPS=G]xI+Se%d#[5RP*{?U 2qȼęY;)ԝ"lhF_ą*%*@[oտ)n@#tZ1}jP *9)EMSP }!Ғoq E66y vezSB{PDI@$@C2I.`3{"(4 !9T婧Ƌ~5ؕXܗv̥eZo {.P)eX?u1r|jee)8&C=!bVHrr?aa7{ Rq?1F)umVO6"]0N*@TlJrae c^eHy=kn^뤟UVglE`aHQV9 w,?zԼՕfIO>PVK<#/"u"ZFX59 hf^vRo$DXrõgzvk݉ a]th&L4 (~PaN@mY ļlۿʪ:u87$`!BrȖF/"7"A ,_]i U=0x}wsՏg/ 0Օ!̣]NEt^A.ƚhzSKD3$E!B@e#AtĞ>O)"g~M@&Fϗ?\;:WZ]Ѓ+JeH@ Pg<#Uc[z сtk5 6rS$Jxܭ`~-y~{?^???Iׅ)xLKۋ_TO]]i Q̇?zno~C`\"6sbO%@iB@**a D qh;Ԃ /Uy#~] 3 ֨dtvMS9` %xBQK<.?`qh./Ꞛ Q;sJG拑u?VOB{2 ZM{NV[ {|+ç|C r_^Y8You ! {osPVTU $􇼹u%r0D(DO@4_WП)h_\p-lZF-#7ӾyWUIZ qJ̆գDZK [>[c _=P:~v'~D$sz]F{ym=^u_@*\1I)%P)@@{ёDF!`(H{P"@-O4 ;f-'!Mukp>=;Ach,SݪӘp{&vQrEy (KVobL=C#؏^m/!{yL9Z+*h8)Z:<9_y>W4:m󰸮BΚM9(` $lWhܙMgPׄ9-ޕ.s|WmwpL^߶)y CڸJj^)ROW?h~cy !}Ӝ(pXl_/.C`Au~Wkud+=iD(d@h Ho,'|zAFyɀU0DnhӞ\e'p6bD&:'Vi.]o%ߟI{]s?%}l ,Ė(&tqyy>]76yɦ?I*}C'yB$BΙ$& yh/6v`"I-vk/az7_*" q5wbu9zrz\.gдTMu7愂p(:6YYʗ.b.2*+fݎ2Hw%d!e&X!o~,7c9\x? I]Js_>nħ>•&Q~'m 7ZHJ % jT6;ǝc[Qt;>,(,a&wɍn.6JH (&QLud}!}?h R,.D p{6)N=-wtڞ}l;;ƠmJ/Ŀ NV/~fY"X@tNO>ޟ dy,9n ɇ]=; T WmI%gWʟB4ľ„-NWR>Qf;$('iσ/Aֵ>N>aDC;PhjP UC\=I4ۛz:2ʰ T`س! >/uo-JU{dER*xZ3{.PW)/%قmkTڡ 9=ۯz>Q9d$C~$|zs:$ T( ]}8<>zuύY6+i˪y׻Qaap8XGiWx&!UE|C bmd}([3V$6'_&/}6Arb&XH*O`^qVϴI>ϱRW% ?}Z$=o/|R9C0OB:,^{v#X=fT Ld`|:,_}NmFUH49e:uEVVyLd:Rs7f뮞 w~:Mp@l",/RRTu)`hlm06vI1nva-mUp~鼛k4T̫%]-E#KQDR>+EACW6rQq|ޟ<*q8y_aK2ѧ7ENr NbПDO{R/6Go1,s)k)L?c+]r|[ tg /$}}K2X!g)cǴ ;lac XZ&C _BVpI_u$ɗºv[ &AMڨ"uC=_7L?X=CdfA$K*͞6уsGgļ{nMZo84$Ŭ,)snAa/%84XǓ9-$Uzu|^hRy9Ix n} a [a=B$.sX!02 @]{Pޞߛr [@RwK ]Vߴ<]$Q_"ӤUٟT031L o&v+ȒaqA.bT+9 - .oCO o#$U~_4h]|Y6R:NʣRZ.W]s_KpW`q.@|:.&ҏ8H*R2}W;II8׻k\eTmƳ`#p)~[WS\Q4$fU@5|Thhx4*XDЖ^M |Qv@| S`2NJYi5KڻAY W HqOIO꟭:$l(uWB-G[1 {GycyTn~qT􈑟h⦔CL2x?D%>>mد~j8C K ^kÆLm++PL 0"0>sYSJ,Tlrw% W+%I 6-LŠԊ"t%xNL|cgKVVߠ 1YT!WCz>diI(Yo6oi9qsHǭِDzs¡Xvk2'@6H2k) ygadh$ʽch>ppF.$-P02MaAUoQ1ayڷ8AdXh@Cn-C{^| XTR`TԿ#L ϾcmzO }}btrW_/k̨uV#A6Ǐ! * 3l*!7y(G~2O_W<IrVΆ[(} N$k{cV̒y1a_\W,p_A2O~]decl Sozg`%D 020jϺc`DFADFdiuR+B'˵1 a2M) tNE@Wizݩ%\;u|7]@VZ%IyC[ֲRrO(?ӂFe9C{v2JJ@h2c 'Z]jiCx #p+IH5DU *.hVOAd)F0R2A8BY/lO+=_zm#ebD+Dn<ģ^z.i ʺXVamˀ } +>:(ߩ6>ǵo*PAYI};+r#03o P1B]l=@,WV%ز(=5 AU@a PeF!t`T 9ѴBt/-0~8z{j?Q+tj̔S1<~n;WD;p MYnФH+o1 oA%oQHR&<}Wn3=9cc:·Ou^K {+yCDS^P*2|<ޖhWy}5 3EN$%$.7Vof+VFO](Z+2v|uBAX8'429h,2 0Y&'_,rh(2P`M&]5Rm3":eU 4Pfiؖ BW7 ^8.XhMo$U@ ߺ7J*[:+Q0cf+մM$mckss&ӳ}teۤ>uyh-1 튼1#6FV- ܻU Vl0 NfA-tSpCd<5BbDo~VKpi(y9G.т;7MOye-<*&G`cdɥl8Ye tY/,(BӼ?7Qs LYhJ-qqԫ_-|3uW0ERlC~(b,u0JթwsLIpoʲ5&RFKIYj]l%:)lBy?N0B!qCܐ6ā1,,{yXsMBRH<HNݖH oM/:. JCH^\0370yG:9258%HY99ZXh0 (Gܼ-Pt]u=s8 FY>ƛIz>G>sbl+ܿ66* X"Tua gKϸ.Kҿgud. U3 *i\ 4G%꫖WQl8]esgڊ+Sժޔˍ$YTTfZLPz9kZ-#:04~d ?Z/Kx"s* bl#T)$ D^Gp0n0vr~?admۮO*U.ef_&FQrcDN#}6qH+Us]]|SY+"o|YN@RBtkP HEp/@ uyp,a6f7@|q2M&{pUJi!\<7gdg#ڼ߇'-،a,[#Σ^m.#FɑJ)REüXd6pXDqO>''8^oU1q CS(76LR#(Q)+2)dOPU0LO5~߿o3?N%n%xV#mnjy+@qVژ :ft قҬ-^:2E Æ54redbV8(ԓPXl&Q,lfmy*eB9 $5pW-[`~ߟzhx)َ/od2;`qP>L#lKO-SX#ɾvDfʼ|򧺾4o{!ndb::e65L }<@ ?+ G)LN놬"6>&?u1@-ŝE` B4zO:0|ɜ:Ůtviltdg @t66'̉ڥk@BQ)N.uV&4d EUbJA1m0v;κUxxiC3l?h Z"vj)\yPIC ,/.#DjNȎIr<-^KD>xAhN5z'I#Hqm@ 犌AU` ušk&js!a%>7\"jNS;l)E:-G=KK@|`PDU=N"fbfd©_0, إ!ʅ1:Zh|N9)6ɘ`@ҁQAKR*m  hj;&O9 >H$\@d-n_5+?mzW_ChNEP /#59/x;0 .P+I-Xc2WF1My\55g҈F Wَkm C1xj#)?FEB$D.< R-d-Y_Y3 oͰt*b+o;?XF@@rLCN1#T%=Ԡ/N,V/9盧*:ejuK&cx͸þIvxefFNNmF Mh{c̷2wSe$ɲN3!y;i`.xkk |RT%,Kl;8?wpW[u.F]Oa(S*.5.?o+ګ IDATT7Y)UDy.\Ͱ{ܦ(!Y"%aP\EUB2Py/́r%$$ Dl q2d86إѮ 5& mLhofGW-޵9' 6謮3U#J1&&&SMaջpuMG{lݑy8}|> {|6lI rz"e*1`8&T*  - cߋ=-XJr  {ZYl4*Xǭ@ܼ P5$L1)T}M[egTa̐=^.  \^9|mX. 0{eLt 2 @sX0xK>P`a1vD^YRq,JOZπ"`nIK>*/ͣǷa+E[?X.Ͼ7|ޒ9a")sT>MTk_eҿnD4BpQv;l6`EG63nId`)dl˯=o"Lp=J[.'}jECG[rDC'%,+EiMffmT7O@PVS{YM!Tw5BSI׽uNߌ_PR\kaB_IQK w8 4n_;N*\qje(#"KT\Q3!}᫥L3xrj& \:g-ŎA1]e:wo:ȶC){WeBDaᠱddSώN0b^f0vV& ۡ26D VZE 5:C%/t^- 2V}+!Ǒؕd@bKP \LGQOYsp3\yӘɺ㥿sv:}?= k'@E݆6Ī33&IڂXZ6?;HJlBCq>a32~h=3@0 'b~{ԓQ432 PD8z.60)FuQM ;PIWrR!QA%)9}~F Rɛ T5;K"Im;&@{Q\[]DrӄlqJghz+.HîTv Q-糥d-3V*j$@ M , O9U_js+þQ sOW$y4܏=? =ñk>rm2E?hXlx`%%t։B-ҵ=a0:WE7?ن|>^c fuSWWiB:V K:[Fj4H+?.H "u.CM}/'0ra-i:%Dz3Ic%Wm,ۓY>6XY4?R+!I! @F \`B1n5&*Q`+02JJ9t܂dBC\i݅gEz~bo&G~៟ujWg3L,zΝ*k+mvqz y~筶:g.[KJhg2/RKȋ3A=&vz=S 2+.-Xr߃k]HiLDvƞߺۨz+ּb;űyǃkn&ϧ~T#1ww' M.lcdN*C)!-̏dM }qss()Դ_ aB4R|y{5A]=E :LZQ q 0~вpU\BR b+&4H7b1Ol|xxnG 6/}ʓ),+DQ3p/[m{G`4 ^CW d$9O'>NOi~5%W3"3PxDmg񢻱m 4VI)RP'Fq%WYmd5$/9,8/V`Lxj]6?%Ƞm,+էH'@Gs &dm ؖC }nVx9׬r6g5PrNYg:}ٿ??QK"*^6z*FhY);m_~# vH"y-zkirkS[ WԠRwr}y?w] 5OjfVhzXYd@s)?V~L:u cAX0a"š !b'Y jP:|EɂD< 0##!7o@9S¤G&d&ٰxNe .n,az#m1bKJ,*1dq>]\-K/2OͶMb}&[g53葤sEl[ mR#pcoixQԮ\,}o>V}Z@7Yf|Tc*u !߈HNp<~8eAq`)CMPn RW)"יCu5&u6 GO AB±Ѩ}y^ إ>#n%X'R+}E{h7OY>0Z4;GF՟!kF2&o4I/ z`z-:-ǘ&P f,[C-# ɑbDf|,sЍSqeM_EG/(^fOΗyY:˂9j}U2Uwee9KC7'6>_# :lj y(i?uѢ$7l#Nif,kf5}9pJ$f:e?7W*n^#Egw])@mW1s ؒBͲT E`٣fPC{$Z*Yy=A,JלY+V>wF#\uQω |$~QIܸH. 4˝}Pn?l?zۛ_A\JNku?:/AJ>JF"IhSkEPAe CŞ%2 ߭ͅ?)KI zN_H -=I j] A"SKn0BE W.T+V/;i=@"~9ATm5G4^_"?akΩ dB_@VX#nZ,kꇳUb#EL)!fR^8,L1?YPR?i'4hH̒tPRDaEupR7Ѿzp;Uou2ϫMURqZhPs0`@Ca~Ceqxꡥp:&K0EIԝaY V6}-/ P3+(rݗ3^1噛|lǍ64"Z2ލw.bbݔoyj&狨 sjBָNXxnj@gL[a }sre@{i(Y@X>\syW7gBuޭ-z|orJi Cc#a ELN䞿8r<"&DAA,RC FjpIqֶ&`-;j4x;hɸ?y‘Fd@r0/(J)jp3s*3ͫNCVH?=??}BC,lF[D(W.,s֠Z01V;I|] ?(_zxbWz/(B6V4+%8V&94;ɓ5T2&S"Rз^wchUPy<{6 "{>>/>yEPų 9g6R(/FuB˗'d@~o=3ԛ^E^gm*F,e#-+X!c[S?nEɥϺ|d葥RWUq́ @3wj:>}_0%~~^?oejg|+v5 '!, IS :!{"$8Jej{(!^yF\ޒ7^FxR&l[|?R\c*mC~oR_ݿoʟ ת1qL>3AJ"@ᗸ 9 F}ye) b- CAokr7vB75$ 7;o<]\^UnpSfIUzy5]=#`;DzY9 ,wW -vZ^fT0Q&`g~ eB~ c#CAUkʝ&Qg)QB~#`!T+dyEݏٜ$x(uֶ{ѶwmZ^o۾m,iWDm L<0Dc+Elh`Of#QOXeHx:R*)2!d?vRv74%) A\QVܩ:sDh^FG=@ު$ə}ahPUuRG*/ . ־(PhOA,;P"##{{.Zp)|- !$aa|b(ui' qk2`h.A)-[B`B&umPf ÜSw a^˔’eyMۃ43i6>GN;J|c❁A`ӷ`q̿(?#JrN:xfL9O%r::Rz?Qq>\?H5[ū7'tӕ?4F!P'28 XPUqOPOK%ʉE]- ǩ(:"w~?z@~ą_Ιrm7.#‹+ǫN7{MiiFKyBZCE%3x/k—|gx8ZQ慘(xWGfiG^INcm}9V? ڟ=q{@~΋$lr2bxsPF4E"!9߯y~^?_k޿?y_뼮K"飊L76F%&]lmJKJhdhQt=`lN *e I @[|wmW&S-w%9LϦR}c#r6߳ɓ'M ?43-^@ٸ"=rWi/m@\4B,HlB;ݥ Cv2JYS`aqJ Q1 m勎jH)&CpU/]vR{FųQ.|>|w# 3Lzx]Jx sN«V۠hJWJur"9~MΩ*.Ip;odriJ%N )%8lio6RoRPZq^ !U[;}Ms2_ǜ6:WɬU&}uvW˯u_>Ҳ3P0^CUrne0A<:|:IT1:Vb΂o Yn#/,l# IDAT9A4%bpOm+ьxQiHHCDKāH'5":rhQY;a}ϖd. ͸ճhK_  m|~E3|o%Hf/ř}@IAe/߃ymMc\ncC++3HMi.V<W}S3;' "%=C I.֙x)uF 0 QīPZm14xOwv[^~c۷}voض& n+ ^&X) d31 CJ y9#xmLO+9ϡN_~#kFf/ی?RIB < ~xΦ]hauX8.]tP^7w+A28mQ1ڷo(J:;ԡ2۾ 0kB]*[^B}UH)71g^1휁c.l0M/9J' $ha"r,-~c YY W.׉ i3:"qj % 'PIB"55[]OzAhixog"Vs04xJ]U_RTL!}_~~?BNt?zi5[S==@ B%0Ĵj֓F{Uو+ N4Oj}sC~Mk;1KN~FT8r ~\:bE$Xs](ۃ8//j*MX!(*7A28jt% QЯ _S,3% 6!.Y=\PէVj흇|T+F#숛:Н[tmHM\;ǗV:VD#1 ҲfЗ$GCu@*X͘0O/*ZA7͍ 4$KB@I1]/$E&DѺ(DٺnmVox<9wǶ?Q>`D1m}۷} WVd>I>֏BYZcZ6W1sTkviÕ!Ku]ǡ7Eݝ^|İ^Wx<> cZ-"jڟFSoxҿY$76ġE5걖음Ը>O@b!X$ߵV'e,ck^הjii,@T?M3n/X?lU!kd`&BaۥjA:I%w/)TfU2˷4 WDD=~:z3*6 w* @x mĀ5Yrp*0o6LVJ j &.w2ջ, p~M=A-ӣګ薲Tkm@>%=]y^6RZwN5JZRUɴ: ñFH ߇58'$_s R*e>_r#E*G"Ʈ VGFo{楂u]#2Zͫ2\yڥKMol~r)alH\|B꿣1q$Tj LF1!P;\DE,ҶDZj(Ši_Ɏ.?3pJ*JPQ2`!9*{(UJu,kWGM]gǜg) P1|)rߍ;.eo.:N1 Puٞ,1ETOD\xdD-"80d/B"4g 42(d{mEsD^uk_׾qFݷQ__) 4su:?/-U~i~ާ!-KgӞE*t> IS(, R'NA6Mp%)ce6ba2k9"&E8d> JPzM"%%Ng m0p:,lڻR^qHM#H%e9?W58W&:eW۝T^x&[YS -$(٤00o8z8ה)7m2!^~zHw bl>(@nz?nE:j(H9A )5KAGWaQttnl˼ϏURR>$SI-aC: R %v Q&8b r@ *@H"'ߝUw8d'h苹_o[\ԮOBT)jkyy `ЀUÈl&G(3W1% >s@QٔRie=fN+@mR}QOe JZ{^5\`}d@%lr[adI+`-o1iTꮔ`CPC} o^OCDѴQ{4OL4Szx uS?DxgiFZ-ԓCUv}h{2G,JJ^>u}?\y߯ r?UQZ?[K)a/? 9Xy !4+j AK`I >ӆ4^Lb%VV-ܻעQ=ES%﫚8؏dGyְ~G-d2o^;\Ki3T1_,3؟1NFkeX&hO!PiqZRחTm>nu&/T#/MW1@8e.w|/`2ռHPsv{Y@ru8pnCؠg>KG?ͮ3Y~Ien,= 1Ic\񸎶~!'_Œ9HL^YGKtm*?[؄%@y46^)x쟂楿|'VrA-~d߉¢{FH] 7 3ݽ~0u]PPɑ۟(QwuX'{!6v'ʇ߇&dCTL4FH2/N z>T'hk Yqg-|Rhm?G^Op6ʋv#S+>sy5*,1bI~w̔̄T{vqQYZ{YEQŞ+Bm+rYBE/QrO5O&5fZ%L/rMFǢ6A-3de&2hZ1Wν~htCnѾ0) A쪮9f>oaᛲ3@*ne[xe('<+gǝT4ߙMov^ ?Gq#7eRStqpԛ"6V#ی.Ja^3i6 1D4@hExjvL&$Dv)ֽ%OMU5]Vok5~3N,XAnNz<3МA\9 gDVB(;V9x؀ j)ȹ' JH]׼h1x{ qz/DzQú))BqFpw^ދG ui%Y{wGK@DFtughxUݶ9nx_\'=g*rCT]jzQ>͵nRW/* jL^QF}1}o*|cX|!!Z`֦4Gƒ#]h̬okiy=w7WnP1i 0108h ۟"aQVa`"FOZ>T4 R1Wlomk CZ+yE>9OӘAtH-н/b7I^p 0b=JpǑCN)qb`/y~J0ƿi1B8(Usz( іFCL` b|UEhWvy?f?>8|y]0e[qapkOrJ÷ޣPM3eЌHR%_/&E l]|axjF4(5؁`… GJ} cZL`f*4`1xCEhWafajhX` pkX" /}f>yAC{Lܧ`ig삨pusq%:ucV @5Ϙ`@3ʟxĠM5^DQ w=I`|:GUw{w%e6 9Xɵ&"2b1 (% ?gQ+{=d~E7߷~}1/"H^KaTWSkAiJ2 fIvILȖ^9eƂj162`$l,B3mSUFn܌HAhpt|wք.y˲pKPnpCsv fC(²P6p0v1? Xl2o$i(MٍR-6"JSuKH5s|PZ}kAPP#|* ͕` 'hGU CdS\gF[5G c3z *ɼ5GRx8F;>\wZJo`UdHEfZ{v>VUAtl ڶ=~?gR'"G\,?@qS@28R֤vG 6ъp/9acM9\{z~ty\yb;{>̭.f 1JC%aV~0FaQ1vk)w^Wf>7Y}}\ _ [ <à+x6XO1Ξ2TĪV4A إ5_hi-5s<+1ݽS9ϩ{c#?-^\rC!Yz GPjВɻi+Mx>8P #6c{ADDyyQɠr a)f0HMTSHT-T1Bݢ9Ù YL?˨n@ cV$O1|păx##qyUnaʑ9Sʭ[1E&1g (هk@_5 Gi_m@͏Q"(*خ+ˌ*f8] 6cJN *fUI,}Z.N R5NMl;"@q(̓ʔ''tiw V֐0-Ơl463?[@'!][&oPwsS!: P NgE+ "”.ʗa}gt:oK{?zs?jǜ% Q<@PRy{=m (PeK /&="clT5k IDAT@5$Tmlk57֏EUAo=O \LGdOHLXFLgiS}mQRr >Vh \K3wc^:h315@D=D>sc3%behZ.O-ċn!X ﵻp,ZTFR^ S\^3hPcBUUP q-MUGuy)!%E6ըgVcBllWAK'8[! ?FB]~>_}z ,C]ptci4a$1CCђ0~_L{g?D*dʊ@ E4e-"|ȁo;@ %Og?[;wxmXv)W_<ϕy: w^޸=.S+-S{i{Q ?wZ&{+ g१kvn7Vw03YzX{{<_|8S܏iQJ Ut25VdrqየRen=eFG;+<PˁFf/(:1*5D5 K"<62^3|)2R8闚g:!2_FDBOm49 > 4[0fCC?CeQ Y3L`&5t'r/_ J&מmB1" T @nwbz b ŭlE}@*ɰ顚? l]~H%ưq*IL+YgۃΕ{#W?yٞ |$~Ee{;㣯oI=mAj Pp766A߿2-O^s]}s_'>?/kfXu)* d j)[[iׅV\"xL/cXrOaX!NnD:l ]N1]XV"0 G ypWOxIkwi05y̐c1$BPnҶ"v=ePQ3?z<_vg_]#.&)-rZ쇐jŬFeEQߌ+O/\#/ F*$A{<#?$lzEƃ Oڞ<$ɰn^‡+ 08ިH!pN/Xi^Ua$ԩ$}_uT|oy+f~KOxBVݕW6 4@LD@|Z?l6dQ3#!ffR̘UR'gq$Z.~MN5K~& @-L6 +C*emk1Z cbTS$G%n ̛ 4brKgx={shަ0ܩJ7RCVeK-?CCuƏzZK:b+I@z쒪9ԟ Wa&e!Ij:YrΆ+Z8Lx)G.ƛ&iWnZh Ai`y-DٹY1 Z-f#,/2鷑k x>'hy'E{>^\fʤD\҈3,Yq eWdM`_w"y5i(y'wFCSW7]]I~(ޟm-gERÍwCnm/U;o{/!]1;![<d1 z?6rB2+τ Iں -LZUQzuJ鸎:J:^Q.~:_څUڄovޘMBK%bq1l?d$H)|+m&<ȃX}E:9't+ٍ;@mV4ULB *qa\; :l`_V{U**/6yWrD*0d5>i.+`P"~/c/" SVߺ$ ݽP^?:%@ *9At$0@`>lj*,&qDZ*%. VwЪ4>cGn-V L ^mI5qpH3ȶ2~9È)BG9`Glh'?1gq<++y7q3 {]q]~ uÂ93ho.]ߖO!tM(}*Cᖳ,ޯrܳyyAu;J)`@m:!(| Id:<]JR-)`AIoJjX_ -alI}:)t>%B^%5B3=A5y]ӯe3ă9L=7gt/8 PH],fJ^Q2Z#f*9M2t3XH$!&zc%sY+ocP| oOy?Li ' 8}pÆiaRJQWƅch)Ae\70=__|pJ9 O Jx!W]5(= bBj h~,sk%?5_x>vsS*86@)Ym!(}hP<:9#>} RhBܯS@ QӒ\(tcwC;R{[THV#5k7:2{cY\rB@AKc[~u3葆X"yH` *;$9' `]+m1KHa.a8o:sm)+Q 2cI^(ig?ӻ9*7.0CNh D[/5o> g bS`ǐڍBf-fLY:nt>f{HZ mAf5ԵR)v=@فaW#C~ Xť@±&7Ytw"ːpu.PVZOmP}^ 3A+5ӊӊsRp2IU27q2Sgyi{M/լS3w=g{U^o-ghNgi:T7Ʈ0לD&fd<@Q$A2o f z'l]:OWLmd*<@%ZÔ>3rҖ4|`afȮ%&|R<>wӾuXuzjo ױ_78bcMњGG)O[l,GaY !@Gp0c&ޢe:n4$N. [h]n?5n8jmjԧ7 hqpc}+tQ Fs]&̨!0MR]J1Lƅ$v6n&=+up| z}iYUwODBnrA,َ5&V% ,CAZEYȪ*-%n1w88qzx|c?x NIdX?s5k#jCZլ}A3X.irE8N!w}_=^cy< so>`X\Zp"UJuKz5'>jZH٘eDWmXdȇ"s3+ocP щ~J?L?%<QQBiI[f^fR`s~Rx c")tjK\'Ii5Q]YV'U'WЪ(rq'%Ƈ p`~L|_ {{.){5XQ$پhKEʥμYȔtF; 6ӛKx}n 2F5'^)BHJ}p0å(m08umK+|KD3 fH{??yg{>3f[J_ԧ$OEL Α `t/v&`e/KR9f'+u<#rή_ ܏}Fh~8jHR32?oZuA >pn*酸+B;pˮ*EFO,,D[U" L|8gO@jEjhg+x5t=.P7$!gQ1% vN'^O5E,2Jw :P;Кq98<뚅NNptqH_ @oi>@֜,%~=M q+y8&%Y>0?^bſcdPSSeL#c96v^^؋AT?z?!vN*h4X>V^-usq:_gE!65xU"Y DĮ6p:nj b D#2ZQOnCe/vάf]sVZa% ݕcv | DtqO}'EC/u4ܙe޼Gݵ7 lTcs5z|ZH .oca==R|Og>Bu ϙi΄k [2h8e+.uYu2 vah?su^y%?H[|JW1@I|WP Mue1Y}弍7BngiQ]iVW?e`O-%@XI/%K;gWfҸҲ"iB2$fLُ =vty@=-% > )[ӾebLDed4X |L; %om'Z)lt(PN7; ;߿_{?ש30&Ѯиpt+eOM;w,0C< y_.^ PF_\g*%VƷʟSAAf⥻iW۪.*;å3|:_:W:x< !kdYK? p@_\[ݿ|Dun]6xKՆ pL!Ҕ6ƥ\2zɩz 9tl{0#$Ϲ2K`= pU?K_joK4=j12epcjEq"eڛI5=YPYMaW2dh$~ |~Dq6Vp'}x/R3/7, ɖ4vc8'`نl&<(Gsg|l؞x>ϟ=1m8mS$M l"-q;NXYV v7u!2ⷴ=i9%u^1ވ:#t>TD<ϙ]:/ӦX&ϧe@]o/@d:|.ɟB.Zǁ%,+IBjI7-~ h7G 4)$b ~wa AB CZ/}ze'7R}hi%53ѦX*`N ^:=c Z\@{-mgCE:31uヤ#1#y c %1bn՛SNSWoǀ2iv<5 XT=JK@L'i~pބ\4flBYV{%l{t[Hيic ˛@LU}3ml2;?8I9Zu$W,` Għ&! IDATX߬gѐeKPO pFFI&2o29Q\}|l-SOydAi|wh0T+L^](G>LQ R \j4xNhY,^9Ĭ},&3z;?}-QO,/>̘W$~\ 8׼ %r)WQn(3&v伔Ac6@_cE!7˪rBAxY;Sʞ #=r+;w{hY]?ߎ< xuuygo}(41 7!Q$PhDZELOuj`g=.^c4#>kx5 ~)(@Ss T(`Px&Qs#p^xiU`GQÄ*)^n[T=>NU¦v 9 ќR%Vc3q._SI6{8Oю ֌B7>&㶆q=Y:8X6[V|lV.gGrwMH&@E\@ϛy&79`b^zWVB%9uy^u|_Y}DWL3n(q g$y/ҭo^+&MpMIH*R*2~<,'._@Ȍʣ UM]dL7[}nAu%a HH!6:̈H ,Y 6X3`*9dPScgn_Ek3̷P ,$H'Wy])P hzJ:[P`1Z]{ݟ @!KjM05䑽k:‡v9űՎj^Ƣx36tjT#j<VD5#},)-Cb|F+be8 % q tBkˢX@A- vy)L?OJt"ID] 7jYٽqo߯8<<`u)#{f1S@;MZ)Bt|@FSәWth=Nwk@&*ߡUbc$}( MnjGu9׏ `5FNx'J*ʦb_d":JJ!|7p|6Ւ*#̮<%짰fdɥ4g=MDt* gL{x~T鯶sJuEz\%پZWb1?QMVMiNvx50)\#uvydkJj)xY)U{h7#ZNhs*:I,YW1O_n=F`8 *{B0>1^'2]tp.g;-ڏF} 0~0T:}ЁPLvQ{8.gWQ@s#r:˥ mIy읅F&:K/o>D0 0֭2Դ؟ rҢx/"aUSȰ뺛*༩$*1 7Y]F;kn'Mf\m]'WMaհks|HXLMEUԡ"٥^k&ҙw͸K.wߌ4JRYW8Qk-#B৥dtbo2$#=9|{tҖ+~M&*BoKD 4Q-dK ZY*Vu#BbK#pw[en%XnűvLO5g 7?z;Ԙ|N "3 fI{ޒ͸%O[9.= ǣ{E?-Bv_b%.&DG(/#Z%}Yg9q^g`B/XZ2lP3E4a\rsRjna1bPz}HּBd{SCI״k,,x@D٩tv/Wv٢\ޥ}yi0m=b#~?[|9Tn` ШRi XXB+9(2qҲ->faO6Bjf=["a2Y@܈=п ~ËR^?FUTςFcp36KݹQ urr&uY0nԕw"$S+7oS Ea Jϗo6|PǾP]{A{}Oo~\0u+:TN;L#pLƂGzKzGRg4w_Z Fm}7Pn~Ǎ7^? vpG9~#\/ ]`Tdduz݆tz!n Y[ * OcKmQf8%a9V}k%~dNx_9a&VxiOМGC!.I)6!FC?Wg paϺ#GYfӺM±?3k`e_>H:AO:sM 2~3MXg[P^fkb{fN=?_uDקUqS]C-*B2t#QjA?d6ԯd_`A^K48տT ޿V50ZucF&g>,2X6m@{xYv4eLMohtzyGfOfޑWaE(y)1 ^|K㢵/^G7iUpCK -.u$L'V?6Zhd d_ZFzhi%yS>ujHQGp]yӦ_[ڌ @?oeMR Gg,IJHMf+ &t! trh G0 Kźs0xad- `R l46I5dծ׆8˥l>\bS}_命>/z?]V9O)udFE@Ahq=co\)$B*zj^iOI_"!c##~d^ǡ˵ܻЫ&Wـ&G+cYqlYF99$)48cA7Iw,*dJ*.̽Z^y:58 I.j9`tӮ+1\yLo4Lo.T/)6??^lL7YXb^KWJ,ݨ5Sg xdZߴr$^`@^Yօz !<ðX,k>ujN#Lt-w i \^O$4s*k)ޯ!_w=B0ŊRD爵U/؞xs* a^N$Sb5%&yKR{Q@QFO mek 1|{D]Ux:lgu&=n9LԇN*:WJJ/@?B_"Z+W+LWu|Z *xY$h;+-ebx3ym4rOs^= u 6j2Stl~?g',Rk!\{o?:^.#&ymFP+&K952;ǣg)~sXJe]۾` F[`Ҝb kO L W$Ȕlr^:/K}~}C~yg&["+}!C6)9OOOcM& P 5%[q  #`1dM({ pϩa<|0٘̅&ܿn˶e |E]>9al.jd73{1od cc3eܶ')p9ʭ(Xo6Ҙj;s|z|tO=/;1ŅԤo̔]Z% ? iMyi9\/)C˒06#Eh1+<}F%-c,?f&b,]JL޽Ysu8b)Zҙ\W2KН3 u$2o4Zn 6 ͷ #X?uV?|x<}l)mp H=$gT\QmH|^CiC|=X~]N)X @T{ש o.KI=/4Z o}{"&`%/ iu|u'` =RG^$wrV Gk_&;݂W.Ses^J}=;@{rOߨ.ǜ:lAi 5\Ԏi5ϙ]Q4O#ua  Jŧa)Yp c\+s^WK_ EArݽnVuӝZT0))c*b5Q$JA \AS߾ec?3w/Qu/ tP3 kT@4w~)J:T1\%K8? "~k14K祺u~gjՖ5CʲWh`tOSH`ZHT?zuAn{DMI&3+1AaԻ>?"WǴ#(=kbeZB pEVz<,m孡t}w0mgp9S[r3Ve&OHvjBS@6Ql&jJ6"$.%\N4F`06-BmO8zal,9w4XyŵE2{%=QO_וNG<ݻKߋrǽ'vpD&*mIXþ#ʄ|=k-)BFJe1nul Z-ٽ}\h`F >QP2)Q!0[K-$M PܳbTk^KqF Cf0d^oKDQ+'"7r)@MdʘSV~jSrYO=8K^ IZ(NBp\Rȸ} NHi#dvݻ1вjy\g1 L6CMy ̵ep%9"ⓧDd=jiځ,J{1`V. `7i?8rNu~%~quf^Wꌶ*N@*9kLUI;v/Ivp~{P!`ܫ0]U$Go\Tn" @fVUcUI,in͝M_kܖ&^e L_urb=\_U@aa 2T_BYy"8." b*֊x0gFtWrhTS' gYwb:8A.'s63{XC!Ȑ_RA*;C,04°UNvi^kf6VeY6h'_$?BsABD!0&çո;iVOƳ| H路u<a^Bj~?KH'z9+ 鯅n/mkBDon ڜ4 Th,H ֵC5jʪS51ym߾K /B_feH)eW]!Ps*HSnѭ^%c\fpؽ&'CaӲ7f|L#c¬ ^5Gj%;7C|K `;~GVW&a&eGCGO%E2>;2OUkOYsuڰҋӹD2a 4 _ÃeUo_,&1 T\8$a_7wqDoZ$F.ʘ{Cul^w??1;1>*e*Qbj<0p~w|(!GknCUt]Ey,?}߃B,pg;N}-1N+h1 w1t䃛m@<K@NWHI, ( waXaA;L y:̐hd˂9#o;W65ԷفWSM]=@Bu|*tu-1@2FEs } 7 = b"c|@~"m,퐼 zjoȪ|a^cE/dhjnR52iPZ٢R<$66%GR^{r{_uκpoUs-X.xl`'̘H/.+fɫL.PտݣC7p}FcÌ G5לWX. GRe<͈Cگk[ [()KIf^32 v+mb!OI ^X5g[ک*QGTn_K2]e#6U7 q:LMHACt Dh]%Ph3NYg,nmXYam9!<>ȏ-e!n:).7-A`,b& ]c!d8k2O\g̕'`W;^=w?z}|twç1>eq5)ԈB&Gq18/ar{ks/n_c`VME523O3"'wRHOIKXo!GyFa|:a5!aG?>&4M{Jo+XIA'Ri;;w1b 2$|?n3`ҟyDΊnl iX2^D<.z_&j&L3fڦ͎ǥǥ{$کwߥ`'8QYjhTЯ*`^iݏVP6hK 'XNݾl7_!(MP[jϓ+e zWt?11%>6=.GR"Abut`.w~+W{Guݽ|.;[r (韭]P -hhH ~G 9Lq /P0"E65Di5h*A4Fj4~dugum}f0_1}ֈ$e?)ub#?:|ؔ6ʂ <1 Ez1+EK&RcЄDEnf̹RtJ RgA]Gԋ;\2ؚqvKAz(:%@l/,Xz'fjQ'4ElķQq@AjH%qGPEV}7-4/ {s0L\~%ݿY5f0EQ,h?^ΐ%6^jh@T&ި̴,-ٞ-bzߊAМDRӢOxϓz?%*$34YQs^LO;`lຒm lKzB΍0^ϭEݵOA@УW["yW HE_idm@Pwlf~ r5%9ЎYA~M;u_.r%bYehf~f&fT]U?[8:E\ޖPxOFWYs:݈;(&dyHIY{eK̀]gwIhKIyQhz.".o@l.dzK:w0 5 ÿD?lY`L¥=ho]/`}8Vsħ"3|`5mN!W Kϟ2^4x5?\umpTKx҄m;tsUp*st}&$Acj!# b@\6 e3ZL}-1iiMhE?Sv3tsQ_v x.;/hY#+@$̬ΈΧ69Yyv %0(mjԨdo5 s-䠹Cf~k7z:9VAn׷U"3u4\"W٪pK1wSo`|<|nϧå Xѩ3ٓM7z=j)|niq:Zi-K,^s1Og9w]_u37ꤗhL,Q Y{Zm- "W0cLZsFPp"A!l 짶rME[Ak91Xt>-P*?gVf-~ >2}S{a1N+7%1E]ל<*JTH@+k ?8ńMɄ:f3v={Ƒ@rVc뒖HFw5kjWә ._M ah|gGJlIz822W 'wOTy?X18@PP2saP^𥣖4L((pZlu7 ԾǗϜB :[L~)GUGU@5 wc$pΣc=# 77?H}H`7,qFm{jlI3 #59A_)s 9.YV'Bd4K}_gߖ7(kI ss_=Y1i$rP=BaZG)qhqTKA}8pIU@B]cIrX?S.O-S,\!;يgWZB_eqN 4,6-UDI e"BȌpR'@ϴNQ -ܢ|?Hqp:*|ܓ|*O * c@=/ AJzZ%+->z ݈d^d9=t`8W5K׶m=JPWLʟ'+x[)\╔O߅D03kV OftSq2!fG2GQRHyϺv瓥ZOiI=o8$9n~b֧Ke=2zV^E wRzCkXJG9ʡY LREFLO&T.75=TL#q%"$"v|JQ\iW@-Ĉ =ІC:2~݁wxMKԪ"a v*ShnS7jc0|??mL-sloѱ~/|}E۞'jU<6uJ!y=W=ZT5`bFG!Ii';ys~>VxT)Fd8'dt=NYPx3B݌B]jhrUN}0=@yt v#Aӕ,V1Ntyuy55%01Ks'M_A 3RڸFs1#4ԁnܫug\lû(jy@GbHr ?}P!U ~w;cx3fl уTAR]b℘B=bcs rmУDC"Q}Z [e$nRSzm%}ꊓzN45Vs[OB~46>>78:ԭ^Avw_~%' 78Aܦ [_)n#7096eۨm9r0/v3czQa1"0w@deYp .5Fa $pcv2ɕpY 1 m81å]ïs  p{E %[61/1=Ѝo8Dpdr!"Ű&@k0]U0`a " Rl|XdcТ a45S4H*.+ #-A61@ߩ?<<5纬egѾ!06ڬ?5>oy UPcl`WݼX!2$,s繮slYDkb}00 t7VbnU츘f0olV7Amn|&b @ &2-\ /HFij8)aIjž5EgШHݺ-̶U*ϕ 餢Rq=@=6I@ȕ`R1^ C6(Ķ{e6Be$ՖA X1!*`}F#p_0ȝ7J~#CC=hZnhEY:*%چAeo\}y٬}TD#Eb*K@KM5v`Bh30v; 4K_?. i<[f?}RYi27n0h(W;E<~c k.1bqd>WIR9tDC$"'g.q: h}"gs* k1?ε3+];ɞ]zmU,(O1>]EIUu=W4U[`L\\lmߘZ^'gF$/)EQ$B",BjQi~.^ `~Wm͘7K]5>b:Aw/UTtehprGzE%PXiv <'&e_{ $߽uD퓞\$%qjN/z}뗼/_8LxA tp|23qŷ @ ȏYcm ,QVl%JK5~|~k6y~]dmKJiV*ͦ~t=1p!PQ˰i5bѼ^$hMAS ZNtT/ .u}=qR=}>]E7(pO,DננA6T42.o]5h1098AٙA( gPe+ 0%@>tُl?ylRVADS [5AY1VP,$# 4FZs*j|i٦9 9#F) u)&@:͹Z 䖐e >B 4šMUZt%dRJTeD>LUnTY]D@[%}go&n^]|V%r4%MH3CЎ=}1.Ġ"h7Z.d*y3uJ6?/?ګ!W,Ȝu +GTւ).=9NG >tRA]cˈ :aGP}Yud݀pbA͒̍EL2o2|Ƹ5By9o0}ȲXbx+Vl%N@ 1_+sF¬'fvekJLNq6^.TRK9pluE4[A& AI&ZAruq SyHl%tXw~.[5=4kׯ5^_E_ɦlFn\M  ֿS smf0){ ډKdee3>6o7GץR[VM#g#>UWLEB,@}ϨcdmWկ[_k^$sG.ճ/t֒k%\r5ؕeiҸhfi!gaQkk61\gic\Ugd-"BIeװw-bpe[rp!'5,/Ψ]E IDATФ /;ZAi ٣<5x@Oa$n:5r\%KQfٴ H~X,B'{E*ͧXO>RUfIDd<`vb <nY." t4lM 4,KNK~ .B,VPuv֟b]+/ f( Nd?@Xݿhm6]~ޟ>':V_y7lܮ ]зի~wui`tFMY I%[)lv@%Dq+N GB~~}7H#VMCFu|(q쇶K16i0hzDwAf?sM0BfݳG״\`nk;uBu'm%*6j=6fIi&mTįX=L6Rd-Г{=ܨʹ{fɭL)oR*s匄EzcAhgېr|yt1#& 6 P|ۢ%Z^ W*:vm;J~|İH/Ha ]"a%)_eF NALZ&&|I {kA e0}B!mx۲"g 4hhn^P=JأWfozn/쨳a]łN:3~nm8n"fASe|KaE14G hpϜ=gϨtk} G%wx b^J`D;(q?{)4_{/D~$ْ7E IpO9:wNfyٷ܌]  W\'%%QuN" HdN (2'#+yiƹZnHhc*o=bJjJ\O G_aB1Aaw618rP}/ݶ@L=W m/_ׯ"q,H MoX2I$=B=z_C#mqzdιʯ 쥿1GLSOgpmM3QhBiAz1KaÍj F[s:gk$ :.3j8LtZD=UI`I1 `nN7Ǡm"Q:iYq Ǫy[PZ_d[R:n*rTd.߼^^7JpW..ܴH'jndKJOH yX$C0ZZ4ڪ caZsA܃> FIu&b zi\"o)b>ҥԚ[.Ut '[+~iK"dL_vN70Y"JsOyuO]ʋ"87tsMVk^~~oT3D> 6}F &7H6eL]_"No?(NK ńYGJZpLvm.]CVPΕ6o8,MDEŏ!f,Z'N)"^ 2'JB$cei9+?y*$"EF\eo-3^CMX(5 n+APћŢ|dׄƺ󖫙L3jg51k@/z_?lؾ~.D 4Ql0&]%^rΒP )t3 9۾xRJZ9uEP0´y{VA*ڞu!P~o"9.FxG^@li=}^?_ e ;1L4uqP =|O`T,{p16MdfJv+&ʐ JU -0Rl>)"ju$x.ZUH>6q;bh1|9^h7:]+רDACI`C+ɼAL@5bvm \W 3Kgm {o%Ed,m%|4i(ɭtCBOPu'mcn(1)65^+g#+wwy% mؿ{~An ZؓL9"1L =KG Jx:e:}58q$6>T`QPl^Ū|tY /otY+*x'4NheE#lAt1 (]%0QEځE } ETpBTOڋ=ڕR˛3sw% @;̧|qu~`DP)_3,dFa^ñsmЃuYk/g.6[o9!X$>>Gj;5!2AlżSШ<-08U8 5 }β>CX=QnqZ(#zPo;Z~+_4v!K 2cLQOm>禔zEm^HifUu<{~~y_~Fߟ~?.*ʌ/>, }D{s6X'tW>wp=Ey ~ΌN_TBK,UV†k,&^yR'uXxYяlX.f-'O7G*6$GE&>5@[AXEXFtO(eAm G]9'?MĊk ?f;8ݒr ZH!v(a9Ugg$!uC:л~T5d`yD@'@ a3=ּW\`M㙨X%2n H Ucsh|vX&IWˈ݂$S3$rSl#]/zѦYR5`pŘ>;oTC "}ɭ$k * kF<;i`]&|lC>ӧS*+?_K"zhmT4;L %`ٷ"EZ%xEtFF'5k9!Y[}Y_T/4WfAgsުU?Ev(zdM׿UD!}Rf:bGF'#4-,%-W {Oo9H8RKA xtBCKoGRB.񀆜 jjǩwԷ\DߚGE\b=lS-*qn/enk{ھׯ) 6@ba!d\V{PwC%4Fp}C>R{ c)qkɜ|y[]R}9}/`՘z <+3pyHuLQJP/sln=@^=Ux d9y F0v YkjŀWn[zrXTm^ @2Vf,սKd7X6L.6 (6-Kѝ].JB3JVI_Y0$Va%Jyd׭ࠞB-1#6]*4]}îz~]Xk9ҬZ/Yp"^wqHA,&T,Tg[,Q(IP-K[iP7>dkXʊ=čP9]C'S%j̽{^ž ; )6{.C(x([^Ϳ\SAdɬ[$ʸ!}I++Ҝy[ ,%<'x|>se^yA_sθs)%ܟ=G]ήaeuRIAI)qU>D: U!E3wliP 4 8:I Tv55W LX1zpoe}K7w}~T co JN,_i")p)?ZCe]-W5e* 9͠P`VSoLMFP+2w/5mX*n q%Pq:+GW_9Rh$qA',2}m_5FKciۑ%s)Չj.bh4(;\IcUӜ jy{~s;ߟ|~m4HE%тۤ0hhH9쿤te :!y=(AXR+^XxZ&cxh7o€$^1cgtZY["lz 4}lCAvcl3!3z҅n\DmnKїmZRKΒVp lb#wg}距?6qh\oaƞQ 74pɻߋ];QuE+p JX]@Jtպ`黺o>7Yaw :󇅠}Z%JȰ|*!ظ~,nkĹcrgMeSja¬4lfʕFq 9&u$! +ss?G">rxURy "K @\/o`H7&5RI7Ҩ%'yr.LR\qiEHP++(p7|0m Ю'5KTQi >xcAa.e6qg^BjW'KшP#RL߀O?Js_ ٭CkGpePYWh>N[hu)ev(}6D)*1RTl,ilV-E<5)f-_01 `/S|*eYGI; ĿcRȔgEo>E{Zv]u5R~FjA -Ka68/Ӷ|LUbOQޒx9qsڬA@*ڰ.j g9m.[M vl"lv@=v[(eQf%#lˋ@@c''.@8PT z*D7^yx? I8_q~ޟ~|ch [IuII-zt+OB>ww1PuahS= Lb~N;ATc* )z((JGX)ӳ@@qVaI)`缩hP)@@6yD$B$;-B`3,,82KDd%N|zpuiPRsY px>H>A,.Ç`DX/I *_;Jo~a5ߤqH-0Jz8zʔ"&%J+T,'ϰ|3Ц ]wq3'{4p@%ӆ[l45^_ F5m+3JtC)^ |٭C$&&&;`g鎘pg:_/ߔa`ŪTzyu(l))h~ T J,Wa\vJAS@mS[RXsky%XB4U}\1Tf{ˀ8}o^XO@1:bpO"wDwɠ_ IDATϋMQyOهChVCeŦb9 pK,[<9ZuES4j-Ֆtݷ-sy[ e;"FxA=Yr.>:F.d/^q*wůAEe=ۮk\R6AO [@# Sb:CjR?D0pYA Ej#O!Gs MI1vjt{wg ;%'!tζb8"`13y\506ma ׶k gY39?e- g敖IL7~PeG%F?K8Iϼ/M+1p &.ϝe%:R}{rWU;[Ni9WO߿>cZ6o~_ꘟ~yb!)-D*kڍ680Tt\eRAA7ybi_`!:+iq_N=*T''1bo/$kk|-55$%81m+&qB1r8Kqeg$zxͣ]j1^1&ADZ-\+V.)ʨ־%2TEUHu`JCCg``1|ULW@ݕ,O[~_ss1q9b_ڛdbYGߠw4m dn5A?jR+Lme <WTxSkt%kV+~8vٍX/gkn_/K![.TNQT$.H.)*y*Kgki}Ϗm ٵ5y]zUUjE̛??u)X?w ATcGzη16-> Qgڤ+mQzrPcfCRvLRK#g2R|ɂa#3̑<@m3aX)Eӷ sbxE:kgcG4U?\)?Twp'ݎ<2@%X5N 쿚[:ĐDG`&(O$j޸iq#(ߐh2zŨ>8Ph҃2 =ݙ[KIx<ݻPH_E?n5`3t@0ViSzZ\}VA}}-V6~_\^ ꇥrEƍI\?%Bn OUԚy*WtSKjTqa]xs|=8 mK].QULDME7$[:c݀Ǥ2Ne).[bˬn&.b9E1ZMVb--ZMG5!H.AMӠ. GN)(`gj=tDW `y`Ғ8iošz3e]-sj/O絀Sp0F|&Hɐ=/\S(J\ILtuʍ%@TMn{WԄC2bU'"VAkw{ qƅm.e$R&-]P!Ce5<(L(V8QҌ5l$p#aS}pTDD[T1`9rnSl+Tu4.DZ\\Zu5:i3^9r 6ɣ͞N*| ?>ѥ»j_ڭS*^ Cl#O[#rm>DI|'N cJ77Ѿw^=m\"wIe~*˥b#nDZ[2宰˙c%0;ӓYĦ4š2 vdz 􇙗o4G9A6L\py$ij@?1VhNH :(j+{)ʯ{Jn8D9̈́Uv82KW0vEvzo-:La,{}H  Ф對+ק&ĖЗwAJ"H !K r|12చ+~[Q і[bN=XFb34HWw~=,y 778bG*!Uң}L0;ſʒ"z!PEr-6]^>ۨQKz03)5@W }V;ŒX""+!n:b)7ADЪ5ᛰQow !@PԙLAQRx+bu!&WI@|e9<lQƐ{q%<>1=yb.z~Sˉ1D_m?HA 'mp|gKu.,04;0ts OC;FM$@ڭk9C4m)!!MJL׼zwV10vg̡(7WIeGu9nY]m~&/(wR蓶/[5̣R7QT "C퓥}-oaױAJ|VJ #p'hJ9ޔc{~UPlĭ>؉H,3|7!i.!M%S*MI5( N:+3Ǻֺ<sq b-ҝݬ A[ ]Q$;YGycj/ y<"0鄷m D>3 U_~kkln"$\Ϛ"D])U2юN@:.9L&'R|K1 XӍ0'&Hp"aK1mra7+pm; {vWӶ n@PEjh{B#e}'\¼ي+.abfߧJuKo5KN$T-7qYMdWZT:˄{s`+ٝ':{-kN :8{s8?`w*dz}-HwpNq~) WcL'V5?T įi%,1s?JďK]j 0*j%8k3Qp4`qq/(C\Cki4VHHvQ- a{|E P&b"s55954'beZYSUN0 \,cm>ȟm j=Vh5 |V~%H#!6ӯ(N* 4BҴ kZ~&T;vo;&9_=+0z G*9<]s|hok*_%*GɅ:!!gsGrQOGt6N Pj踠>yM4N?>'ؿs3ع}hcpiMOka3}a}9}1ۥ(l@D>uȐMp)ʹdF&--q G.3}kU`bKהk&KrdZu$U"ʉuo< ti!'4 iP2 ѕm‰Hx4e0>jqmE]z/*ez:OapH1VC+]ǁm@YJlI%6͏z1 5AMOAVc uH8#Ҁ{YG43^cmC [(/zBN`^؝͍Dwks9]-y+.H)"D|&5fXD <YSu-=`>? V\k*Շl (*)+$rx [PG)AcR6lygOYpw *cNJ&h$Bu 5}V%;.+T#{-wnRLaտ^-ƆF7#r%? <]ߧOVz< WUpN"سde"Kӕ6Mdԛ0]u |-^ÆUx)uC?-+ϞCW!$Ssc%$WpҸ늟,xxѯ4:[f1;Qr)XjbnqL@:q?돡#vFocĹ Q4 MG8B(S[j`\-OZ8?mO-ƫh ~x= AuB&:o5~@~nZ?i (cD`,х82ҘҰN @^xq9&HYVAaa\|LKj+j2"+/iq(γ88ĪBѹi] ۔(F;۽~/dG,xJa/.{pNrCBy4Q=@͇h >xNq <=M<À?5fL:"ܢvk6uҤXAqy6w*,M9.Kue?yqy}|?C::5˳V 4Sl#Nb4HԠԱCMl/s*_nWONQא>v]=#`UOn`G  "ІcclJDCi)[FSN#5g;&u?WdnljZhN%|<-kœy-#^K\䲄{ͼ_QO^ g^Тk.~TwO9`4]泥@J]7[}+C;^J; ϠA+B>^E_Ưl\N$ 2HP;Wro,nỄME>A*'DiI^Ho~Gu#sO4lռ_Be#ccwR"K 9J_t& iۈ[_0`_"d4cR|Q:[!KgBr.4t1 0Zg'ZG﷝wSͿc ={beS#NTü@2-=&G.^uyJ7c/iCZKkQS{0/TPdpc${ 7m P>79L{da{h# IDAT{ԲdUЉd.heC&c( 7$V}޿025us4/>.R-T3&|'r+1=Es5Ј2E{`(suה<ȑt}ݵ@JFP ,zxʣZy8kʘ{CP?rqaaf8b [$B Cc돡^~6,AcnJf]BX4PRh;'@uU觧!Nฯ*WJB<"bXZ%™xݰqfv{y}mN|Հ k l'f^f8\ l1K4pCIҀ3i;HEL8 o“*|,@$AdLȣ V)Ǡ$y:69v&o,*b@ˠLy kzn0|2OoBX4 uaaIUm䫨ŁV@![jfhȳ".BdMn򫜟 q, h- 96eӤJju[3Sev?O^* ysj\5 {mA'Cb<+Rٓm672pmyƂ\S3g+0HA63.D>5mSq1VUBRKi#ju[2ۭp촿d-{3vhH*DTԙKVgb`BT:>kZcf5%>oST0Nah11pl[YugJ"DUb}hGQ2vmye}C,B-2tVPTXGd[WMVu _|_d ]^p*HHǟ$?嬾5`5pOZٍE׮]ù?IobMBֹ{Rt8%n@Ole cj}n6D9zꑩ?/j,zP @Mqm"RL',vQ'n[c#E9ʪ)]lf__o!Br~( 3c,Yh=* ,V1s].}qYt71繖u]8.bҟ5r nDa2F-@c+k~tx[ؐk?7iVl?dUO?/)~3?H Cڒ?x80(W)6M2M1#E5KRC4,d@hɹ_*̡N={l r_o>MtꯩU|y^n\7c͖W*bm+B|=Gm(z a'bҰX9(BPYJPԐ8hN5 1+Z)࢔M8}Z8]ޱ^±H9yMV=й؆(s FbadD"bf o`f #Ne֝P?,"zTQAm @82[blpTsfwa+dWI.p0 #/kũ)=D/8D}a,:.4e/m0 dr;}?RY o5j0Tq)MK8C@6Q )Q 珀-[D*gw[60d& =F/}/-)Ɨt+<'<B Cɒ#Ԃ5*@lhτriHGE1)#_ʦqzшXv.ŋ<DZ6 ףV;j6G~$}a@of7@+,lߝ_݁-<ߐK_2@Rm^'ﺈb#1De8su;TC3)zFb! DwWը}j ARa/ z5wKfUOװg׼Z߳~!$~ Z##(3>itƕ>O]b<! ܚ+pcܲ앰< ̛mզ 67(lirFfkZ 倪N v RJX5QK#R*l-?LRӦpD+ 7DoF?[UK+sW=.ƈ p[SQ3CQ ܻN jV]@ȔPѩxI7H H54&_m=n$gdɳV[U$3u}GFeIE&xz[ؿϾkE087B`9+ xGY?- Cl"y:"e_GRRZ{3fKJcF11?Ɣ({ sN KLJ: H!o֑mfo}PfgWz-#` 0G\ -CGu=5WsޚèoZsJYEMae, J*seMI/-hcK4pe{}CǓT'U|pe&l(*=$5C:}W&Fa@/0e 2DH|:3:HkTV-8}[6XC%/?UE} _SaV`=溕տ[ٟnKO5 $sVK ԟ;؍9jc R*$L,ThB1W\CőN"~Z,R4P{#5qޜV0=\F Se?5K'A@#u<9]%fCJMOb 2 BϦW2_@ |~"J㫁(/}^uu(C87TŁ)zVo3L(S^r"#`/)kTZa'>Eew {DM_%=;TH|q@fdZ&`8b!X  y)_É2B?RQ9OIR^΀N$^rpԦׇNqF0P)m>ʵ>A^BgL4H^`aǰb5aQE*w{U6WW&FZӻ8CV=m%B * e 6UH/K׈})M[Gt%@mzީdSU`|~F쿬 XjVLs)%&/֔L>Xa.EBR_AtT >+z 7z{) P- Æ~:H|m[.KQ%ss\\;^u욕^._sj?cK=Yoy^X;DP>~!i]\T̺c9H @@u_Ta 'XHwCel9Kٺ@$"+Tt> uodށvXڂRxuu-Xv~ˉ(BK$$ آveϭd~]h 'hcA'გoAJjïn. 0)vZ,e1kdIUԼimj*DM*%WpʽJ* /-"=zݒ5%-Y >4j([- 0>_lc~btg{jиh46@ם>fXБYE"(˜2ƭ*ķQB(d-p ګl1TQHlzzKm@цY@$LA͝SڊtҤ2zʭ[׏N&Hh9&1qTFȣ8.^Rk#+jpl=jqQrZsXK!ޒ:}[ǘ(l-1詩K\}}oc mu Tu"&@P%7ՕSdM`* H˞!fWu]ʻ$lijQ@}^o`ZNI(f $NR .2\9BH&`~AEEJ1H bbƼ&  (|^Mb*j-KjRDM^Ϝj[yV&@g3a`o㘣W-Ua W LÛ8X2]nn !Af$ +<:2*({`aUۡG:;PG xX?^?oz#<77'c'KH#9勒ĝzcBA؃ P 5#j2/?} [,Az"6uO߮8M.PeCAi D(6d))lFQkC6TePn䓂aZzם;Sٓ@rORw^} r|,T v簿dxmYaɥ"᫪BʪoENt~/:&O%z:ʂ5Z4G6krAk7!gwWSLVِ-OJ? XtWIZʿc}PoSq-/f~ ;0l:PD(`48Xv-A$sA{ė%#gѽrmcDZ[D^C|\b`c_CWQu#+'j33%T:{ĄE?(8y)$")O2]A(=kz)9hS\:>C`u𰑯q#l3ӂxWh=)x=||4?yëV#g~}UY6J}4WTDUIR7_ުV4Hu S o)Rc]$"Gf?ix!V.]gEq#ڧ4ۜC\T l|򒧔tvؗtc 8f{.kf }'{N<83-5G/" @3!*>6``> Y"%mqسB'vy QDZ)Ɯi(Bqhxo;, =&ni'!FeLک' pȋ#& hKi0&Z :פvAXݖ HPӌ$(8(m#th=@ @7Q4 8jtn}Iœo9+~&#\I_p|,ո`s `٪@>b{5/Qz* i_r>02 &zM^r3E] ,Pˍ_[VՉ.].|ԫJB#t^a; 5We@Fٿ%L_%uY(g郜鬳@Pw IDATF~luUCsJ"_hS>~`,/d+"Ë=G٤x* FzV'uj_& fmxQbS`> G܃z5Jd `{T 1_i)5 Ceyd"_.xa<-y=s>. }߿}},7~6C:nnf)яEْ̜c[B:֯Lj贈Ԙ vf(Кm d $>G~FIA K/HC_/Q܂4 XM® CauFG}.m_ ʮ6{:j>sMV[oxuUbp'0Z@̞ r4V,k@P>C͓A ӡn @PԔTmsW6pUlm/EeDdDV{Bo!-[BwЮC߿~:Ri;ĺJH]'C؞|Xa,:5٠sy p?ϳ/!)4(xXD+K 2#Wwؖv!A`ZXԈT'EjL5f[rMk=K-|W6ٿ%?=oHȶ$bn8gE1@ha}LYݧ`)2n{?ZǚKy`~u6?u@(IՐp|` 2А3W\0Q( `x8I5EL{TT@^6CTtEioBYDrD yoxU\5( o-.?\)2ks5(%їAJ !G]U=DEm }gi\I#}n0(>[+,94(.âi)Z ɺWXe[ ]Ml3:qzu{:Z[\kڀs]s_scJתR)L1fGCm(~ЖCԗЈg\{@5{;KŅdG;?`v^JAɂxt0RK{xbNï}$);=i/i"Z`'_@eAU)>3k絕^ 넵x=KYӌ%V?KE>UKGt3֪8ɱ槒Oh"6^=Kk,ZB6xꄫP5pmynRؔ j\q- "(AªA|PX4EQ J<K{qp|vFTKbmu)XE[0s|⒯|v}]LfA?|Ix{EYxƎtYpuzp_ IPD8og(fm*:`7;g&ۉiC0G&*3dK7{T#\YտonJv8q,Y`r嵻+yҭ~z~w&?NxP<B2jRc|[l`_-=ָsVkond%>;th.c,¼ M&$vϮ'vqs&|'L^&_e?QXr* 9 ESu;Z'Z6ZtzЮ{BlA#{&vTވ.*@\"l] G J\cߗ ~Gikd=v5G鶱Jta/\Vb ˉSy]uݟ~޿ﯢt]"0^s,=PpCQGi~`:Go{2}T:A_(P$WcJ;ʷj*ۉ]A[k1xxd qR, v~w6n 5R1Qֵo89|Q ֋jr%X*rK-:'_g=?` "pK~h zu&XQү̫M X6z[P0.7FZ/Ig!AbM,` FҚa[Rc8{S^ ;~~WGo #A3BZ8ނ /:O<_t)AiqZIɹ'*h*4iDaA JfUj lϽ:nk)w QLvS8ѹ|y}{o~cC?k}d$J4 =W١:o%д! l֯mh'@R? kWR_[ue *7'Oa<,ϒD30/f;LIZ TfyPI H/żb\Nc9PS5F Y0?Gވ_MTe yH_x p$a\f8]}GY9ޒZh!\v)M`){]\VWiM|z^޿{~~ߟg-A<&q8HR1^6*P|ѡka_Pt&7J.c JPe IT#hIh<`?@}V>r*~@/[d?vE2W~1'>)+@jϫJ%PY/dgj2,0kY\z>yYRhw ==US%# PinPxU^DAG 6{ k*۫"e0=@WDcEhn:) `둛K#zn2K쇊 fX!-G~\E)lI.`9cq85!?dF`T=J !aVP+rGbB sF֯.t:Pq= yYm'XMcZ@$ WxLrrXcu:N Jz6ّ-; Jˬveo<_{8e(Ϥy5Yɖ}I-*# _xFٿη3,X 烘z~_6O b?~$ ēpHIJbŠS5wWZnN3*dMK[SʀFC<Shuˆho :.'+ϙ-+~~ 9X"KV/ufA_d1,UD*'|>]I{;AqWȏ^ Be*d(3,kuJ#Qm;WxFXv˽j0o:SS=ƺBJ!"0jjHz2Gp/|%>6X Z 3\旽YNpjD3`–0`q8ɢ,N 9tOc8qctX]`adXVw):-bXEDSݨ>$(#'(SxYeYE`3qM|^ \si\ܷv h̑ 9 fH%Z@̓Ԙ@(ďm* jMm6X^w@:S 6оeKV]u|e?5,b17В;@Yn-iTڒFr[# hP!YB'N{bYL6\I`Plp_K4Zda{0?1&&Rr-03tttrGԘUɥR,gY=Qu]KJ\T) +zS@U󅇥Cم$ǀa,?Q+:;qTdw0;"\H; LiN}z^ZJ޿[~&3y[3xc Y`d ( !t%|[`_$Z @nI1Pq3wT b٤7R,7;D%ZO?D/LOyTU Sw.ެJm\ح e?C!e~_߅ʵzY׳>s]r,rxh # 0n! :/ *+N ł2@bԫ^cN>l-HugAqgK$U^`a%Z[9Eљ"#K+ZOa@t&"pD5kb Qv!}G<΃947=cBܠ׳7l$<9X0E-+j)R σ{(@}CzMGs]Gz#|}VyEOh*UIe #H.ԚVT% } xBcc41 'elZJd@[HKa|;bU‰"YVh-q,?p 6%q"  f;Ĝm)^e`?B3D`N0KxVe>+>3Tb]bS{uiٽ{/+j?Op|"v빎"8qمy{[4]U꛴%w* YMA><ʿ֝c 9I!vm4ِI$mRħ:O%-}1{x"p'QYɔ%/dKBitr_ ?oS?t纮~g4 ~9\\,B#6Eyelpkz^LOMp5 :Y s8,KkM|տN;!n`ѡ7;O/4b41`/REWW&K5BTl`WR۝M !FY]m$ruMEu r\8ǍAI®/eg%ӊ .1NV Dʖ2(Hڲ3abvumA;-L8q'AJqL"ulI_Cŗ+^GnOgL/oEsKzzppaOQ:r#!ںC j?JRR,[g ?5Tz9f؉xjIx*z,?QX}} q]qy?tYS)Qm} 1hX}좈 h`47U#nKB k:~4u+O1b>ꏚ !B LJ_ 7uĕ"43:/=fzlZ+ECm!!k:Կҿk- `EoܚIx|i=5(5ɂ,8lDߚ\Si}DPuUX[cP 0Ds)cG@h):8!}(0`Ĺ-FMV$?[&W6 Ѩ UG}W^*U6Ҕd$<Ο1kιXuehJVS8Y=86.C ?j 4 bcP3O6Oyc #AUOE6&`7$TZm\ۛ8kRGK/!X qPkEo[ iJ; Piָ5[Gҍm ٭E$ZH~r^=h1.'w GL"1*i}u=!Kc{nqR˃4bKR:k%LB. K{2sh]99!Sy?9[{R/ĮH.Րв=䭻!$ GOJ2mWj{."7.&jr 4 " ߁!v#{H%EcFfqB$0XQ-!h^k1WNa/Q8:Y\n,@(+^>b'3y.~ּX/z'1/^JTyMD+X2f$|`hV#i Ԍcd~g 6[{+-[{h`9&w=Pyݥ{%^T3f@"m{bgwo-$F,FOxD84Q OAP}J}fxW5U5|Q}_{~ޟV)K*0<!7{ t,ݐa=#͵6A@k`mB"$$?#ڄ5ÉBwbs/ߪ9[l%q0'gӤ>0~+&oɨBF$yQ]0!m@RiK3PT}N0/BCX7Y;݄,)bz L $A@Jk% "Fhql(6c\i%bh]].VCѣmqfVH*dتZ]xSkXH[mgȖțoj4oa Y?:ӓ*1Թijۼ76.}60 ˲##_oDNk)UA]Z )dH,cZ>bFUރ"RUT&ԐQC`|)-5R%HOKH?C4JQ gh_4> $CJ[3Gi*OPa L# 15+ðQ#bG t7Xhv//EV;m6i _K9XcEZ%տDNYr?8A)ڌxcp'tzշH0 μ5(vv)^4֝'&2\W5kCa49hs(,2E3L]DJHKUɑj~֬D JCUL8#p IDAT q_~b[ȧHRiͫ@B7[voϘs9T)cLKx\~h}޿Ww,VԽ>ǠXY4K=x7l0b qJ}R.Q( .L@! ʷl5k&YZ* "V!D84+|j_4/=lXɑMIQ KmR !b*wy t/l!_8=98teOwA+ys9OoU3S \Q^p_ZϓhTeW..I!6r͘ݐ# mi)=P@ OPQ%/<_^?uvG]7EULW\ˎe6`Xl:CB|k^ܟ߿^[~ȺkꙬb 0HUL5(Yes6b:I=`Lg +{%Čc RWS-V?Oa1bGͬY)25d:V~M1V;'u\BlDx|lY{X[,L 9Y)G>keց.ȈD2 E@,Db2kuM܃h ֨}{rW~=nho^}QYU젷`Ď/:؄}Rc-0DM*anm6!_%ciQD8WL@,#Q:" ;\㥉cDʲOT?c.ѿy}|XyskY}Uxa$89(jR?̀F(V}*BKc~!{j]s5O;x#;\!{$N+W3mkgKC6%R]kRԦa6 ~|-7Po)MP"\=@+l@EؒD\ Zp &-ci!H+w"ږsn@Jyf];=Ӣ{xj%缟yMK b{mX4Y ӰkpDAY1sbBΜV"˗.Nͩq# 0 ]E-adrj]G/kQliC}}e"q[yqq(Οs3%RXT^ Ua\Q젏*䃚=j*իq2_Vo/}Uy]&œ\oeȳ8 ]wYT yKW֘xaIq E =쫨h_T#G|K:7՟W H[KG7mg`R߃BS?_K$.w$?ُw`P roހ CSyW4d aا[[=~5=k2o?~ZV_zTk JtzIe,g R@(kjG B?IʶS cb}c{aA0 vᵴأj -(bg_(eZggftFk e);<#? 'W& /:@W?Kz^5 u.4%[08m6~3CE X 4Ruh$et-,-+`D <,޸_"gL@)_V #~R Dvni/A3ucͻ[^_"Ɠ=J/ސ1/{IGDĞӦ;{0hq;|G1UE\F{)k]ĺ<Gt')yŖ'Q^Nju$kԈ糞{\n뺔HݎƸde0A#C#ūD}sXǖm%E.-%'BqGtV+p Ѝ} %@ͽr>'MYA/=~rZO G { dRchHLI:C՞ò[^"u\|ufB28RwWgvط`clKDP[} kR?ZC0/q `Rb5Df#x <:bLO ;hs m6DAg7ܦš6M}NE Lj@@\jS1쥝:—q?8!d)g{4?zGʖ $RU@_l?k3ά3F`H{jR-zܪXr<۞Jl +0khiZ!d)Sc@Txm?YX(Q?$^($mT;gQ喘CƉZ?p/#=h;ٞfi5`w mgٵIz "|^ >_>y뙷$zJ$)D1 8f"lW bX@$qe=dc MLTF 4J"R;NW' 0YK9eN~ Љ/AldϪᾡa|%KI@>ᖼB/S#ܣ!nWcsu*q)tk,X_@7gaD$ӈ,4Y`1h]\ c| (&(wLNLd RzKm4DH$mo5JNjB]\f %t bC;׍@厤6cg \JݮsJeZu15~؀9WS2_GǦߥQ's={ggeb;'1%=w`Ȍ(rڢњ zjߜJLfTz(,( y!/XK5aNAkUBaDLW׾ [;PCX{^"r|Y&_Srh5ux)Zo VΈ%|hZMy sH}X?a>J\{{3y:|CNXOupuqd  (6f_ rt1@917а*1k@umJzXYs:N,h9(ת ,y"C`Hxyh15,2a k ʒ_j֋i y[XiYj:NZ~k>a k]9=\q:+Zq!<>J~{JQޟezKL`f;D!5(yեC 6Ұ[]Wd${mmXo?(>c+ٽK^ j)ѹ|BY" ‰ 1x I%:^:6\TB1dJZw/hgVpDS6VPm3eHf}fFtI3Hq"ҿXkZ|з%cU-ؽ&b:J}iWs0."`_+~xD2=/?:Gb[@~Tf De aCDD%JWhѫʵ"#~{?`._R!a+U"M}i(ygU_W5` V {",)# #0 HZׄĪ)p<S:8s D\(O}Ggk2_D,x=11zg/ w?n)`I-Iod/46aϐp]OAKdL 2 )< y\\Nx1)[@4UO*:l]c-q!tZb9^Td`/eIiI@ lk|UU'budF},.}_y?;| }FS"tbFVW ~U,-Ti`Ĥ(jD=y7\Rmd ! A(Rg &l}ݽPCjDfTux^ʴxFX!MqAB1AQ+-HKfQ g"D!!8$ߺ{M\3b내.KEҏ4pw=s=kdnGZU.WH͠; z\\@m^pZd`"JО j.[tfTZW^((= ⫧G^RLUoUOMm Ǘ<u TCTH(0ZS@ %g"FR~:B^jLC/X>]oz_6rd>sVGk2`a[No.)3uH-ٍ)\ U97fVXx.kš:|`MYVSx_*L4Gn4]A4?y^NǰU?nPbrǖۧ8iu%U>㴯g2bg:-< L%8']0h)8)cǡ E sp.XKB"v2f4n= 6'"g$3>@Xb--Ȇǯ 0ăgRG{i0$RqFki"՛wJ"!tЍzM!tT?8_8_e  -YT'ǹ Yw r0M#-RLr+/+ l"1@ve-4Pܗ}J}_swGk95h;K#93 dKQr!MKsބu~c|d rCjIZ߼ŴQu*Z 0خ:=I|߿Sj=|n'TNj:k!R2aKdvYb쑬m 0IQP&\ UP./9}לKJg/D%3'8阤 sRQ\bX0:D/IV(es vޭ@+W6mŁfMwn'lm`tُ5ff@ l͡'j jpCܘJuP~ _u(&SiKbz]$]a2W%?>_BkMKF+^C[+L*,znSՇfoX`.Q?z.CP1y8o~yyߟc;fY^cbB5CmD=jMX-U¢ʼnzJHq] ۠ I9mi\-lrRJ6a3 uz}ggjЪ(C^: (;cħسB塌@Pp,Mo=ĔѸJ b}Ʒ}u* )jϒH꼺eP'=Òኔ1h^K ȟ}(np оB. 4ɾ5{xF C6'dmlF$aY(\tR8<RC#܃J*D8R^>`zO!`eYFE' t%V؎.PIȣvܔ6VL߇` 26Gddڣm#QzO+y4l8hl %2~ʖL_a5Lϼo7>m\|˦h/ Q8{U@Xh_p.}&߅ܡmص=:;+`>rzVAchc<[3m? k^qQoLUxqay^?:_y19]ݯ`| ##Nˀq^!?PdtY\#JXA19F/prb\a]D@C0#}BDqxKmVDaRz+ְ6ҎB]!1Ũp 00 48XkYzfnXc 1=eRݟ_\<:{>S%*_3_Pe&%4rk)QqXeyY _t篺{c^ϳjd~wO=^#t!HBʐ"+4bW]L D$,@+=$wM%yovň7_j={=zu_r_ܰ\Su%ߖBgu?I{E?{K>`_]YyY?b=?5A<[QBh_^E\붷yi߄MZ{?N_Ͽi:_8HDxy?}Aǿyܒ  욻!(,-{J5KXPEúH@hڲμmQWf^,[%&}PIEҪ9(>&7}s cO~sq$yI[,/8q˛wЈnIF(%Ccu(Q.qsF=DD8ƈ"{í~wb_4 mo`Xƹz{nnu wtx/mo`QW_=@({lWO*ΤsഞP+@ v`RnbJ o)ePxf*H^8a']Ɠ u^?jx؛s5&y4 GkN]; R:_ॿz=c`*wt Ty,rZ+j~.ύc<# ݄w@!c!A(uaC$AmWZ:S/|QxoR,ADӥöa_Ax_g|`*2?VГ\к'!n27Bt(vsf,aDb? ~lNr\[Aey#tn/5$vGi.`&?*.S.8Haafh5(L U``c֖#%:D o#uܰ&Bs \2lH(vh{gnT0ukO=2>up6}htS|OKK"Y1x<-H޲Ơ1q{^k>9~^8Ơ8\G[Dz*1p`3O4bnPh.RUea 쩰QiUYWJEmvـՉe^ :s}:N)9"~d`ChiBkڷ35+/MxEYA$Z# %\}TPK*@ u݇=@L}VP6!M*0(8";_87q[ErJ%ӊJCDZW߀`\D48qYbu8LU=m)vf;Ebx#"v 2U ͫ 3)~rPo}/D,n\K}Slhz>R5|AwUo7+%?sC~ At*?#=8Rc߾$[1bF_PEz0ށ TN&=FcW PAOX&3ߦx='mt0O .Q,n+a9OE>ѤF^u/51^:ג^????o2)Ðz2ҪKJ%aa٤G%ka 8쎠.b%gp.=R<0iXZu*J.o7D;lYQQ11_%!?KsYj%yvh?VXq}QM;.ti7jݯo|+K&|LsnT:\:1 @a~^"\s^CgJH,ajw(0-=d˾ az.zQpTKm/h9[󀋚j:%r]>_2(5B>Է H ~R k`S= k e0X\*n>kU6BV(O J3%PM 7Y U`K)0ږ3|Ψ 98pԟ?UmYք5.ٶWõ hx"ʁQe۴9Vb>.*9Ă{ѷ>y|t=8.~qrϔqjz_"*zKD#Ű$U$'w"?q~t3}>.?FQϿ߯玤E KvL2|pWA@)~i `g=tlH+C_jXɾ~E 6 EW6P6b:5kJ)CK[voLOn`txCy]`CC1eYj׽U|-|ХEƭڈ ]!?<|<ϯן?d}_q zt:[@-S)K+O(F(ۖe@2θw E \`FZ猴 sJ %D>BC?dHa(@;`C"B5}i8tDM7mqwέK"3RHHB|lFs9@XAao];?z_.S3׼=PuEiF@*F+v++Qx>k[I*,Wɪ%ИHs;| vsC:P9,nϑS$OEzmvl-J* 3\[ ԿVB $\f䑎i 1eeb#- ˭2I2$=9$[g.O)| Nk88""!\f=^n\tNh[4J5ԋ!Z2Äju(Vņ( ,Tp} Ѫ_yfvw .:2K_xk~|ڌSx$,7%f'"SaЌ4 ՜Xyoz~yVu6ᨔPR~4XTs݄$HqU"CY <_ǴS[fXp˼a޸DtVV,v#W,UY22=dY>\ Jgρi̇ f5 a`J.X`#^* KEqTSOc⯥?myA,zAةf WZKB@Ȥ jXbj8.>>(44&??Ps ]A&Gphhh Aih#.xN1aՁJ?K 5P~HZ\P v;\0v}O[ٝu֨J1ϵ|BQJewx_~g@`tOJX!%?JQ ύHȂHZۓ}$MYYa`l^ slSIEߪ%M4^c>haJfC5o4N TR]}Yd5ݵV ,46@˔$[%IOk=TZEZQsIPs;5[x1>'At4ŸW:ݲ?`?F`s҂v ve5P-|)+jR5ń bɓv8!6*:mC3LxemOTP,_T=Su*Q[c5DŽj}k)^}ݮ.}yߞk]Z 0\ZU35+ qWFhJ5fd<.j PH[m VI,h^:ܴuJ80!V_ G;AkopTPG| Tq\B~a-Fǂhv9l* z+ElB(/2|?ZZA@.AnTo1_Rq f^WAyO2.[) 0jSᕭG ʔ?sgį&=μ'g?n{ڒz-APU-oJq-s-u4*0i͍{h +lr[nKF9Tjf ^*)Bu2hg‹œ2yZ B"]uKp4 qj?p%5@;XtɥEf\g(h4[qt꿴Ŕ'!oP'YY7#tp9iAV[SXKB@'a!fT~M%zwcz~SH?TT#TP&_~ӣΧvXv7'THО'S hL/G2CvoWjy͈~^#W{m4K{lm#| Vu%6KVD" X`]_вprcߚ2MB&{)5a-\ ,v^#uPJpnsarCAB :S%>(1VvL蟩^z*,9_/2@YU4}a4O}}>vϟ/A,r G6ԍPV4ꗆ T}NP{'aԤeg1?q%LRr[VWpA}9GAU,K_#ݡ!zLϑluL"dKދ}(% y"OX7MkOuV9X]3콦Gg #&8as: DցZIg%5}($<c hUCpcX8Byl^#"\u@z=/v({'HP B(4f=/V(3;lh,7ُi8}ߪi|񽚶>ʱMĄ|=7@M` uWIYnAaLX!XͼQ6 +xYA`&/C$/P2P{ IO¤B]]{TҦۉ}-McY:#wE.R-*Mi7^1W?'_K_ؘ&sbkx㡜J>j}~)ϟחp/)@-+ļaB D2j,A A :HnҦ)1#/*|qj--!ޫ\ARGY`槇pEߩJ+JD;n $0t~ @_KeoǓ&7lctF4[/u[\4_/*Xxư[QM| @"=7H"D١?WR~) R6JVǓwENgh[W#@16~ <ѫ*d>]T$׍F/BVp#_;ωkš 4i"jjDigx~0={ޗ{g -s0Qi9$=j[*lm@r `pT,,8vU1*ϑDc^e_h0;4LJ #o! uPr3`3F*19?.w Pȯpwwd 5[$ep\/==fR^^r&; Zal?Tſ~`x>sI,jGєV-/٢ 8Dh^.:)Ա$X`A ܐDTvu$oli-a/?n|lj>_;?0zIDth& ucJoUUis]Ep"K||U- ;i@@D<"pJf^DPloy{Zgxfp^Z,0xB'*l.jKhmZ,p]A'K(m3R1+@Y c,Ӊɢ2ǀ,uSRل.`,At1ꅚp>iG WZF5*HӖd~O12eD-} ,b[zPE?{&OB"qzXloPW;uǀs?^;_^[? RfQ kږ8jt1"r_Ekρ= SS*a$}@_ic#1IV_x5Aqpa! 3.~>|Qu>!VϷN^yp O(¢f4^g\E{au\ͷ@Zv1@m =/_Nf9Rc#^:O$@m?tK`jZ>6f*Ċ:JО: u5իdf7(ʢ5)I#S i^\`.hP@a ^Hk^PwSE>__ϯ?:>0F8x}QXpeY`TKU=A1.@T;yK,`3F%v0"`=>vN0,%}ACD#<$$B̮cAx$%kš+桱8FjbRå4θF}Y8z-50DlV o 3 (9VS|9qscnLLjqcA/B7D&%m$?@6 Y>L]-e+?R MdE'bBf>~= mƇYv(wW?|O<=*g<`b!)ڎhzY(5\ƀvouzmTt?o(V5uf"5I/b1,F;;TXMɥ[z~ګ$j^6ۿr6k Иن6.dV;vZ5 HX^2o 1*'Im0η]SIȕ)r/{o!KS\LEu8s8U|=ϗzi$B˭pW3?ػkxҤaRTs#f@ cKjRy 5؄pxy*skp=h@$9*(T)K #&:бՌUp,+;=[wM@HMV*%K ŤÒ 6I?L>L.{o\nr(a>K8@/3Dv\7QS.qT: NrT*^1n}@!ѵ-[8eKԪj&]etDIJkUo  Rwf'd_QJvQE{zLr^|ceQ8\}ПvWQ~aKFgA!ԧ9BQ,bf۝Wq\x" kҁxZOaH+Kǭ%tHU-WAUj17Z00&rSJ`JO HkQ9 fT|DoadO"̻%$x( %=ڶ ~i]0fM5%jN'o L}`POY# nOI -jh-PX#}=bXj2Øw^ϚF"2gQ[{U,< 86eRy$xeGDwU/RlE,Ue٧&_ ˆ?8d@*S[uw<<z?28O+pY;Le$#8>[V?ThCb@҄`a+=MUtINB0"RR^JqQkܦ槒X (f?]waE5jȬ],Z#)TUߵ@%WP\q౪[{IC/j#@H x@8ʙ:춢'8! ۋj#\KjZ)bYj7I}V{!,qkhRb` @1qt90f gț2tݥcr\)EN{e_^TYU4C_nb=ɂ%z2 % e'pO'dzͳj^ D$`noph &/^ey-g,t^u[ٞ6^ratA.De ى9=-K98BAaPvҜV?WI K/AmlFN P0skWM_>|e"Q^rP#*ΟHC#IZ.[MØ*ҩ??߿_|=<i5NB~W2wE|YS=J) _UjQQeDd,|ƫs߹4NNVן?q>T\k J׋)ؾOaL>'}ad˄yޅ % g&a ><8"k3d | h8%0&$ wzfPΘrarQmcBO"XcAI-P<aMEJ */6Opuvs2߯=x_|T( 25O|mtvR4ƕJLF u nBК d Aﴽ)m߸4AS *D‚:$ ;DX(abʷ, 3N%w勸 q~D7w=Jſ"Y#bSwiڧ晅+>\g@!ռ<1tGl<CSǡlSjcS1REꐼ.~tQ4/~rJ_'!vA3${AM﨟aCDkG?gˍ ;USLBHB`+ySGw꿴58@^y}=|2k:Qy[ݯZY%=AxUIBw)nQMSHvrM-|4.VG~Z忦ro2I|j㚉˫e{=SMRʩ*ITnjxG}7Xe?l9&,IVuNM'T/Z{kkVdz*BӦ@Ž\"$ïtjmqX4߿kM_;t\(眷mpt$S4s9%vHgh6 xrTqb9CsoC=Mx JOQ'&=*mHtz G?[R4BVJwӍΑ$:JG-/F`FZ~i&*.^jYKeS*] ?gO슼0-/6+KE'5$[mCqU5>/e!]6өݵKVZ1;&/Ki&Gw@; YƱ_ 0/@dJgl;Yx>\5T16U~sk>,q!F3 oe` | M<#'swoHڄea*sAx}1)~~MmP@upK}c_z~=#hP<-pDhBͼ[_ztTud*sQh`knX}b~{!N4=Fbm@ԵH`7xb`H ޘᤥl\AZ9XC7S *F!ʨ11r4P=],jh δqO^&|O\1I}{I\b|DbWM{[\6]cP1jcnOPAhQ@P7btj"6 #jɇP#ΣiqǓx<=$E3F("Ȃ$l^ҟB$""CR]6;W9YxMV~?mTz{mk{Xf%B@}dӦ+ekP~ ~x:9p%jBrd'vO IDATg1]\OUJr`[Nu׽9e*59~Aɬv돬{aOG=`݉GQSXwŧs3܌SZbhH(4 1 JEN4Pm܎"}*89{1dM#Jx޼6BVz1ӟWMZ o T̪QeC 9OX'СNC-|ת}8(ڞN4~0VyLL[˼_% {`n3ҋb0 O P+zjW<֝KDnh Fdm{.)8B 5 J?E.kY9C7n✄0z/:U}{^NNye[|lXʔ$s^ [}%PCa,?S5 ?lrz k6j]tRRyP.@ 'e ٔT)v0 kހ*[ٶ?asp;scU2]Sesg ʺ$v#El *Ռa"~u"| sZ-$Ba/˝-# Sy_DvՃ=ju Co?~TY]i‰%eCÐُ=LܧGB#%7.:cS]|K>e4ϗu_o5n>]Ս/ ? #<&=I= wPvA`=,`@SK/_HKN~(gͲyfi|O5ԌQ\ lN̸S&JEd@YDCJ$kYl˽=ɷq. h,*拼/"F54nYG`A`Si@hتa:-\夔ky锊R <ҏCkfla*L׌bٕmr(UŽvNNА͘5|a8|ySl65x/9 nLPP敀DLe o{"f_ͷ(I0ݱLQ3A_N/M佮uT^eHߡYp*C~貖[>Us~Rr[?zO&E B+?6 X땗Դ*ѝD$RҸTWb[^oa`1?a_B3 . -$F" 1A&kxGMRΪQ/lտ ubPsɭ *$o{YGv]z c2D\Rij/JTCAA9m/"]7X3 'Q8'jٽ|8Q\e8 YlOOM^J)pcQT7"U98p["qjќM\5̈́+[ 62PQ",kOe6_K5Z=_׏.7i X Zi}1؎R30ѳEB[g@q4yEFih-[#OB}9uk\{&_)s&לrԔ@8SX=&k c!A"mz<ػ.k55[%X@ =, V[LTԤ8Cz5˳_:L8hx0h" ̀EW62"]("6>,RKnr<M/o/$l"=rC{(\Se]#Lv:Pj#E٩?s[ .uHٔ]A'?oT3{}\>Esx#XWBfZ c]֜ТWj TTfbUTkn]_a;Om+Y[_D_QwKJ|j(4*":^s[Pw+SC&0+f83 Iԫ.xEryĄsI% G^{WN%;l| &EeT;} m;rzK$<?s:n^'8GWaY٪dq?K5u\ШԵvs;yˏ e@ٛ:nIIȚѓg< Ix\K7ЦQ'(zѶlU=`{E@/PaYpbjk (vT?v_ LtQ i4tTAm5?3x #7N 7; )%WWuϹ83{ uG޴⌛T<ȑf_/g1uqE`݁x0.h0"Ϊc(H1 `r9n@9 *ߏaFE ጢh[iW hs}n5iӈ,5UHQ0?ardP0#B)!%y@}r"͓%MA@0A)*]&Qs4}*DހX܃!aZ֥j^o--羵>,[`!)|qr(Ky6~Rw1x3H#qFk[N}Xk6VX:ULơRˤbvaLh)E$*Ć~ﶭi˧sk!Kzo_%kxxχϯ?_|}}}}1Y0ovFֵ6L-r\($hp&܃h T Bl2 L[){M!P6'-/cȑ$eH\8cעyyD c } ^-F Cl?J}%MG d_MPs6L$ 0( x3ȒS9k*u^Y[p'lHp( QU*EP@B]0`@[=d@ )| 7zz;J#>P;p_LRcFaE~3hzR~p%JuJ-:"L!Y1Q1\l`OpSdnJ!|k'Pm{/Y2K Bؽ~Yd5=܋<$d8[Y_a'W*eZȈ$BI+z [g[$6#}5n5kɡ~ۋron2 PCw+2c {=<)f ENkU}NQeKjɯ響^^@9 6(b0NëO;6/@m+]vO&m\,ddPm%@0M>&{-QJ20ten%~\j+az~=iZ"%ek]jp6o0s(S zT19Š|MKTd$jE?ZG~WٿѸS7bIPx$;L9[ebXg„Ӄ (7uSP@?Bˆ2r]geM!ۊ{_3 k^ e4]pYyPV5[VS"&NM/:}Xv u`48#izژ= m3S)!o hUb,2M+.Fys]Kw=ub[RU@~3 R/tY Ӗ-^ged#t?-ʽHDt P_ U\x5%9.Gm$@@$G{RU2[h JpBC}ʈ꒡/-bz3 6WUקIYzt4FIC.TPD TmvD <` Ú|_4׿Tzhv}mk]BnlͶS\x \H[ёcf e@eAEHzf9 ˡ՗6dE5džu?ӰD.Q*nZ r+={ `9ؕ߸=*:OI=} u/_ -x-&F( raqM6k O y>Ԇ?ffDR0 |(l y~^YSQ 0.=cAg]s7wpMY-CDzJh T{E?q> In%;ȪwcY(N:Nhm ./JUKnS1$> -ґָ.+_/u}_Z;y˝(RZVۊGkTu y[` MHPUR6`P;*z݃pWGg摉L=2#ۏzVH3n񗵀-[s!CsG}B$#ꎛ8-+{`aE.- *P~)m%<S}`=^k$U "uFRv Z*ʪe 'p^!8cQ3g ( h <6/3*\cnH$GD >͗єPO=$k$؄157mXW[ ~3J'8eB`$!9EJaޣOǽҫ*xFD0KzK#ͥL@U2_eɺ$n^VvQ6 רO\reB)r!EltqNKSIId1%K6Z/o,wmGܸҩǍtV)ՒOPgYZ>M0 v ̾TCjdTao Mr (^x Bdro,?W?|Z(@v׻QR0d )HPJѨөaMKh*ƶ*蹞W^ވ;H){^ۺ~@ZGQ}Ewq[x6k>7`z6GɈS.#l&L5j[Дy.^@ ! %4:Z;yK~.2Ģ 3|0bo19O#Vvd.mYwBٜfu$52P؀ =0S9:i7;y.TJbIAv+-YR[ Qsy!9;w`r 7 15]X ,0o=SӓzdMi>p'[ =M1 ۗJ†A+a.‚Vnx v>ٌ}ݖX D|R_E'n(5zqOJ IDAT,XNA>P„R,!d$_Z3s;Z/GD!Ie&A!-KZ@d!3,a%"&/X7|nuޗLWUͼ{}2 D/,y){W?.C,5T~CnQ{ /bhlBad/T8']t5`S =uJMj`KsShd ) [6; Ahxq508QSJ,{Կ}wc>v,2&pxBad)+6MÌ|KQ>?qq64D_RyD`٦j-|\S$j0N.z)e-^`Ш}C_%@E֬םz@6W.Y8Wu%[ץОT/C :!֯"}ZYmڨyG*ِLDۢ,jfg,տ wWc^ cBD@ug{=uyN#czղiI/.G84E|e0 Pz͢* ?4q3OT >SK ~pC6QN]ߖZsbݖyt 4 WÎiY/)`?T& XkzW8̈ eʺz}-ĹC<]% M_s8OpO߾f!W?<>PTlic"F 0+^3R% qX*w]sgq'7hcYkyhI\RB!!6>̮5qD'9xo`P0{ RY?瓡;\j>JQf .\<5֔yr~tzV R^ 'Ѧ :t*F ?'%@LsnHNJkMI݋X*+X.zL͕@y-ڦB ]S΄;U A"- C:)PdA%s%\:ےxaF:{p xٽ%B`uX{L:?6-/]mxrʱncӟPX#ˬȶs*hqU곮ti(oXη}Ju5 vE5)~&${t_ΜQ~Too*6\,v(.*)b7c7sVk?%Ĥ.Mo(,x!Z j?Ż$Jҏ?R9!F*F?"u>kAY7;0/ żgZ$a>> 0YԪf6>9dEiaJtzG=i >(y2zj-CIX"$?s$h*e}Yg9-ؚcPQa O03RZpr}|e<z^:#DZ+Pŭ)MȮ*e=NjF+:0)K[T?"P0.~@29ˣ1M5GGp-yw#ؚSBaXGr*]m }\x~8Iq(Çϓhl݇2aHM Lm7R)^Ow2Oj+MdJc"HSgb1GGZk%h>|gCb)v=pB[CRa]:0PNj,H ߀&o,3:N,eRﷁglKl\A Pj3/)b _1;Fr݄f^6,鿤{P^mB=5T,YSu5_:ҥhUU6A4HbubI6x(^qK~/bY %Wم-<-hVk+".}ݓclw6Ռ`VhZT 4Y˃ 7H28/2ot|ƤymbkT' 24%(º dY!.%@z W yp_r]Z߯Y׺^zy^>@pU2lq$nkR| gzWé- ut< o&Hi?=j_}wcGW"@M ŒۋRK10<gnr9VV,4]ߠlD1{D  #12" ;Jifkg3hTHӅ____ _16SjlgZ, aSlDž~puA]5u @Htl-];Ps^JA9Q'q]a85lU d$@ml U!Q^6WEW`#*Gj7*L UTzYaE{ul C\ک&B0~#]si~_u_Z~m"*1OL?S*DOM~V O(FxY$˳Q/Tݑ'*icwPĐmS.Ԋ&5Y1?*Qf= a!G\ TK5Gza+@UWE^e `x/b 5m=^߼Lt͖V2i<9wrCOEW]4PAZ`"lj>C/ uu[sL۶OZ~]g6톛R ! 'GOƏ Wz>|Iӫ@Cu0hc$K/ (qs FV|1lKQs,^+_||KyvuZh^w 1Huuo67$l&Komt%yU~ @IMϊtm'CBu}|; X/Bh!Ģb]f0O_&7չ۪*jh?5Ζ1JPf_,JUA(Hʤ&n:<'#8?z>|ޟ%,SVJ\llfsIImޖf^+{]PUe;)sK,Gs*dž.9C[i8q*g0c`Y٭oJ(flSHX@ab^H*Ӷ4yMqН2{Ϛ25=H2ƹ}~|_/+kFF =YJT!܏l<z Pk6qc4:n`ӠTLU6¯U>n Kk^ҫ/#xÔjAUn<>ҨҶVQn^]맋앙3'bw]lVvRVc$?T 9xi9c` W,§aDVKbT}v5ﵮ9?xe$>߂ހz>Uzlb] EDR"K݂eL9 NV0TB\lWjnۦ9EO͒zgR;|ojɡ63wq]z[B[ ll礼ߕfA:Qeg\x.?J!ZKeO$? (N2qӖg[Frj軬4mO)MB|%\;WSYcMKmyV{mEdqI4ߩ=KD֨kaq.⟀l@ŏbpwF?v!Q!ϒhrLzB_4 ]SHn.fi&W?Q^1+CuW6x"Syo~'poդ&V6f0-\˥B3c!s^eN&Z+IA2z3Ԩ '=s仫ō9] Gc`kbj9i1_Iuu_s]}2s_u>}=^KscBWJv6>KvC:oQ͘v~~|>g~~~޿z~ϼq_1y{٦*?w>\\\4U)؛\E}V2, Jq^9jo0 Dh/&NjMrS:C訊/rGe-BB9VEKFk{h4(\v 9筡i7>wAwJDFM {{ȥ)g0<QK$x4qެA-w;'?_|yNjø\T\»K!$89uky]7aޢuX$!kyu뾗5n.ƮL )|pڎUjf`/.[SE޸;Ĉ@^ڀ0dIpaQlV h-7gRk^^XZkȘs>k}*xve8|LoZ_{W&FuPZ0ä>쑥RIGV1%#",/?h:T#R!.N\=G=32xKRyE 'c8JԆxh:UxaUJ`;fslm[V&jYX'zYZ]fQIe܊aϧE)Iݹ~}!"/U끘{QggkkϘ1?c^ϼzfҊ_}fI1/h~p < \GCџFGHdi19bj퍲Z͘)iSD?mEvuVVbB]#",hQTd-U.Z8%[+]0SZKA{u}.6ߟ}}.u)ב}|r;5cLۑPXx5TA)VzyWS&+$%."?TV9bBՀ:'mh1 BvӌĞ4^oB5Q@R98P_/6!~͢(g/T6 yePoA33VTq1ܯ921wf~Ȯm[#aa 8Q/txx\!ph$bl \5 V8|S;h;.4vR1 ]\*/¶HFIwc=WM#(_JJCZɰ `U;5(yQR[Ľ?I-:S5YysgFX,~ϸq㹧R%C4['쿭.*G/~T??Ŭ[~lIҴ2r:RW' Ɋ+C%7 e EOX&׸zޅDg7.О`Ocgw \gXlt*GC|'݋OZoŃQZ&˾ |0?h"M u8N>c n XP?I@cq?#1d#>7-8MMMUR)<'OyqZ[qYBBޘj0H \]p52ɦIkBk鼍юn>U={" hiwiM}>yޟ~WPT<}[x;JD5_erPLVgRĻ9똿pq`~sjRlYa}Y5k@/S)ѿl۬?7!Ȍ /giHy\V2 mHt烩jhMz?S1{}B+e"M D] v "߰ )/&3HZyGEiįm_;xzQTK(&Fm]V2P J\>N"{T֠$Q?\)ژTvQ^ "auu??"i-),}5BlT=^~BoJc;ME3<&nYEs6ѬsV[W B7@atKzO4w䜙5c?<ΐcG+]N6GEW[.͠5z|ǼmOZǰ|UL@6fx5Q]o̭+[Ix|#;):%{U!h:٨5!jEV mP@j^aRJ sPKzM)zqGzC zo\Y2$z3X!I 6) Bq"9r+jǪceЁ< p{FϿ Kh}kN)<{\"-늝ʺ_rEbg@- & 5>Z[K(  \̑ik iɖ*Cd =KF)! 4X&=csSԪVW~-aO(8|ۥ̃tF_sa|[+ٟm͔Hר|5A1h XK}l]7]|JA Lp}=O9^(V,SZE.Wy}۸ {h]I%cHOp@ǻwߋ]yv'BM+i+RS!QG59xWndrc H~6d3F- _3LK8bB႘1 1SP&[/UCd:Q #k(e>ڀ?>`_0xp傚E^y}%AjjB[iSZq4_|'.ĒxSAH <挤Xei_7,1U\X |KTUн?uHVܺ5\=[Wae>Aa%o#cOlLKuVӬ z$4D2rcN'/'EU1>qɒlV~ S\v ȢpnWo]5V%鱙(!k9{}2?o?6xn-/da$bqēV@Xd7`QQ!fSUςm"d[b^s{P"zN_'㬹l3RBOѴ)Z6)"Lw_IzH`2\+l1 *cnѿ&Pڲy i獆xX2DEc#G|&$V<#a8?/9j6_mTP\ oxu-^YwT% b(e>?(glS֩ SPRS`h^׫^[Wp4y6RMjlrzOY^Шdw乌htq|;~8 dpQ4aY rgڜfIXYVߏQun s]Ѿe\32ciSϝmٛkB8Z`z 0{Ch4o${^  17Z| .KK;}m;*5 `7񅠎e+CJ";JdzVZۭADKrnX "ԌЄ[Jo0a|! <΄\ *c_\Dxg,aƺǼ6ҏ)ZÈEQO/ܺNmval[Т_Y wmuX\`عP?^K-hOȴ681N>]|o2jgMTINj~ȰMGW[BƠBMI>qV2PΆ&#J=rxX?%__wu= I)aږECJlnTf\ \ ,?A+ZgťA^]A'!|aES!Lh4)o3<$k/D0cX p|{-%tAo.+&3fAep+z_гhY/<&$^#&ъ /Mi_%%sj=aI力pmk:i%[[WKu#)eB仅T PccsN>ll}Z_K|_㴢sp9jչ1Oۛ T$8fN AJ~SRw2e`3z^J 29Pr={>ϼϡ"=sK`zSDYZo^drVLr,Jhٟ5p&G?lT=!m٧p7Gkŵ!}/ `xzN.2܇ŭ1!<΁'1]wi0]?gO^sMkdhҹnT2%ײt+$y𢦀d%/+|"&(Zc]J{kg RllQ;kzt6ϩs{[2xPrƆ-'(=qo 6;M^T=EP Ld)iyB zM'x=yt|Q3$y,2z[ȥCpqimT:,\at\0^V~A~_Վ!R5wCP_eBTnOv",{4/_f_=ev ڗ?A6 `@` [ /?<*Cgjع==B>"1[sGL-3~lhӪ~n"Wz5i&ϿhS LvLG-}nn7 R!l$zbJP| Odso8wuS,hSM}2z(l}ۃN zH?Ѩ<:{_=$RLoLMG ƪu0vkls3:἖Lf5u\ѰXW \$_Ex17 $ 'v!q¶ps H߉5bn_}勵D^)XqܧK#f&u^?-MVZ5q#ZKx YGo+d.I :yؼ_x2-, H.9ݰ <.rjٶy.rgwbg2B pvfb> _:LuP;S`{yAthe,5я9# *==Hz6D)勼v9 KwuԢՈcaRбx-ݓ'wdIzgJ´1m6>Pxy|GH}˂n!k<o-?Khmiտ8K Ll[my ~["GE]fE_IBi#y?(WScę_Yq- 6b6q9Z&gQ"6N  8H5BfWH"q WIRcuD%#YY"6:;,rY`g{ڮyY-TU5 ?~zu~-Qs z#Z/ HU?[S )A0h3⠸ { *XUEWT?5eʽT狏'iWӹ\Y+׿ J%Y/Yؑc@30C Y k45~^x#$Z狾gdB%"ԉ~~O%@#I=b4z o`?@ap#4Z$Hid`Ȋ7nQ8{>aēE%nѾmXVvE1â޵l}_NI|i;iLQH<R/xe|T O\u=`cw]%zlMӯh7g>BStSx"|ۢUc:vh\ ]j35b3 n}` ŷS$v8HeM\GRkD]"͒1]cţA?*f; Ef#c&=\u}~~>7ϣ'>߯̇+W6{G;-Ihl R$YWr V%3 '͸.o5 0yo#.-){ ܚkVGtۡ}CB7Bq0zCCZo.s'ٔ=\"&[Al0p&qQD{P1%0T-2W,2'eտfC!lylp> n9gGoGGzjG YR`}U7hﬢl; Y6P7it0fP^A~;`-A>HJ,xD s\TKMDs^_KM d˼1s>5J}<#~s'Fpl]8C\wViv'ORK0*"B^Ҷ,50~Ȼ$&*߫,S{^Xz!]Ğ 8VŚ3ujj 6>^ZeX;I icIjԺÅ|.!̡B&ȞSDoWLC(E$ўAD2kP=dkJs:v\8Bqb ӵLuoZ燴u4 dI})77Ŏѯ& _5I&- cn<_s^ᝩ17q-*\;m"ϒYkBuj~bbS{vhkv {hGog<4hbI s(E/}0/U:2Qi x΅?:mYڍꓚREij4e(T:#a2:B~cL&u0BtE%QeK_p8i4hk\B 1}~/~z˲{,KmT rh(pkg/pZbA޶6 )y򟱯=@m*-r+pKf-BH?H0g)4,m`7I "U9%C*"8O"YlH\dU8L `-E$AXE{tpsJ IPv|~^6x5&#[i'P|5=D>JzVo1x_9`m0Ie *lewBRT,D- Fͦ&۲@Ma64 @aPK[ [FexGLJ¡ILKH 7N?A%/p]8$B"_u %C(] @z<}7@$LO ma7KeB;\%:lpM q-,Y3܄`UP}=25K`ʻyWw/m}^>o տޟu> L|D|ֿ?GWn TsX}c$ &qjPTY7q~$eҗz@ճ-04pЊiw?@gH/΃i˪1@3D\[]X:ISJC)mI~LdG9K}[i!-oQN](}VޱhxЊyɽX}0?%ӏJv1b-v$m?^yYv:_譻=u):/TD=Jn*͚vi46cc<Ħc@Ұjt* ` >!e4я9~w?(O[L`_n8ypB4ɛ$e`Dm.B!"hxL_pg:ȪwRQ9:En{w==-5-w^ bI[dVm ekIA,! B6$٭:WDluwn]*:-FG {]<-4]ٍU=U~WݹW a^S5e<>}>K1Ni|٭\V qYP"7Z>\sCX A7Wo96j5oMf*;>fZ}zRl|3lt/#2\,ų&cVY.s#dmMQ@[f\ARXLqhUm:o'%Bdwc`͐+o^(݈wpcFwԺ>|Z3}p LgLgWa.Щ-Aswjw aܯ99^ꤙTF|Bick5 °Q+Pn9_??.܂Nh2Wլsqrn`b0#`xґfxoq{Y'q?R;y^ຯKӻz'AkoQܻyZ%%lݽeBVo^Oo 1~Vmѻ;. ]᯵2pCCޑTLݠ2!@}#&CG`$^Bj̃X!8TE׺pFxqī^|)3}J4]H>Mx+di1PqC?iX35z9L wU L`P(3dErr{b(a=@L 6x0!+"H:;-V/D?3yiJKZ9T}Io,Wn hqM0)֐H83A aIXZ"똠.oJy ^,`8kI"88_jKKHdgy YiBDd¡ݍjcx& ,PC?gcl `VkV!0l&]hD==33Z;At9`vO˔]tڧ,ZmLFkFf ) Vх E6zoboN3q;˜*_!yr+J!Ū~vXu*H+ږye_ E@VyLgW4tѻDa6hB75Bl!RahY̥HHX/`# TQ-G3k0-^K%zۛl1XX qr ^YZU;gp @D`ǂ ƦY!47 |BW_߃NX`ؕ3U'8DTP:ߊ|Fѯ*q~}ϭ0U *dI=V#ƾ8h^]MKOZ0=Ŏj{k~V81ipʬ)uU&p_+IiË? i bL}|$ǐB.êm 2YVJ[*\HTUS\Ag35ӗL_"CZ6`OO' \Â8^p/Pz2HP_>k9P ST/M΂R֒hIOF[Fa wd"4~8Zbe4-!T協G] Bo9!;D$iň=)*[ l1l'G#8g>Bch+`X,7]bI"OC { OwbЧ^|l-|v\Ϩ҄ݒ$;rL06i%U2:ը5^>4\>@`# Hi_lvPp OYiX1g:YW% ĆY {+x`'rlnB+^;~ e?O p& y`hYa0f[1eDnCt"+Z-n3(/&JC`ʡiOL^[XA~?r~Tr8MøIL0tO-y,f"@_jd<<[LGIZk$Ce'08M{;ФL1U7kMYCƔi9n{X ]ͣ^OMN-o6剺?5a0WCZY튷D-A䴡+˨ 0+W|۾xf OH0r}g H!kprT>\)_?-&TI뜘/.DR:9`M֢UM&c I}2ƄLXZivq/&p IM?pZ?AZ?~6W%`qם:&avgκ@gwkXs((2|b0_'V0ʎm+Jl%*JR6*3ұF?U`\S{a=kW/ ="mqp T H[:)9rgBp5 0RͰ纴CV}Uw4J|ck/yW pd4s#,c.., E?۶H5G!M2V0s_K>De+RDn%UWmS8X\Z-ֱR\ uS?nX@Tڿ՛9l<з4<, o&{6\JI5?tq6G-.@h0?S͙Uk0Y#\BZ I{z&oZl0iN>ȴ1 KzKտsRoF1xRUFeٻ(1RM xyY3ܟ~_.׏1㱑/H{ 51̜GpD`nMW No| 2A& Eel0>N˻ NT8HJ)dC+"״/4$Tcտ>r:'HCX!oN@}3W&Wuhk3^}ވb^,+C3Ǣ)3I[%`=uV՛T@h&`ϱպ|11Ōx޹1wuM0v8f^78ʷXPL?sy\xwBDvTRJfN@7x< oCPbC|wJmlF,cVT2,Yz2' -uI\%4+={ޗe4ަWɫ9cme-i}/Wbh#=)u;?h ("~p[ȈTY,Iv%HlNu#Tb~Aৌ-J46z_iV~~o;߾֝J}~e@WKsWȇ-Ss0k6$4=a SY`ngb+_u6bF1?3UU ӴzRw $6 Kϯ?롴JJޏhR Pj?V9eQ ,< ?{D;Y'/lmp5C2J ^$*Ҩ>O{ OяS]{`SjOA>>cEj) eqvx#l킦WccQ8$ <,麇;;J;Yғ!>Ԛi21 yZ+D w-bE@VgԴyQH9HШE}3Z0X )Uw[|gA;!baCճ;%*.YGqd8qS)-}qnOjK܅NQ zX'Zê.92lMSś-`ǒmi `D;c%/ +@v :[SKpcѝzVߟF9^u?7kJҮ1j[OKLX`¦ y &] +Pw/C.oZ RRlGT9;;?Ϗ5Oz 0ZnV1G4Ζ0 (oz=Ea'r¦wɊu2=E6r7v 8}/AΓ 2 9*SJ U>rTF=L6o8`r0PU/pSvvc,K2}_u]ǰ͗=`3Dì:mx2B?˰C=@l1l$8Qjun?Mq&Vɱ$JT@ r[*S )+w[;h̀MP Xx5+pϭiN^A|c5`XkV )tFC [bsժ%U\ȵYyE>8~ Y(5k߾|yx.ƿ IDAT @ߵ2a#Kfy,ApwfOA@yTva{D£ʍ\:8Wহr;umsto; @W&>ٯR^-(䛽T&% p," ZS",cUqx~6(Fep[?Kz& U 'Fh #Pk\Ė A"*Ɉѐ6M:jp %$l|Xˣ\"hHSJTi󳒩ohE4$ rWFտޒ3Oc'BxӿE 8?;3jO={LNSזGLRŞƚ2-u.۱fp }RV싸tp.(L#B.ͲX4$'ҞзA٬2?(sOgY@W F&cB|AK&l-w?L"t%ٶ)eFĒa,0Ah8`[6'!z28Ӓ6@ċyQQ AMbgBZCkKd2'3Zsƃ$Si5T6]3NP-N)Tb{ʊ͔7Ζ}>7ml턧(C L*)\}~p7E% 8cmh:ISLk1(+ɺBݓ0So?kQ_}ȝgST2u|9q?sϝ\zQ~ELgt1"z=S|pfrY0wŨzyy~:L1[TH\||uw^ %4!ߍ*ɇRkߥZSY GggSX u;y I !EG}FL2mԚV92cshYaG5] {rWe-Zao}-1&FCl~, &LEpML%0B0!aQ;Fś%[xeO<Nˬ[6&+<%K-0 +@=YO;_|yR:s@A9׆Lf!hHo褡P]:ZY=o?|؇V㾔uҸZl"eĘ?ѶA'zL 2qSi=nQ N9u@~ٜ, .ߢLڢ@& 8R#?J6S@CؠZݵѷ bAM*KL2hMpm^}p(%XkgIf PV~nKZsFNDTݕZo~ujO[ h$kNMbn$S45 `.T X1/`h`b(KR$S4vgi}&T LA10X(4UvُW'g I2<Šd)9G4.| -xm+[Co钤m4u=>|~{kyߟ-]#I!4M 8¬bA D@ȋʴrN=໚+.yLCiK:CiW G- E*HۀS<=s39>o@o8d|n& ef M3Ոb[%WKOx/&FM1 1'/4J1@5 0T U+a ጣ 'gK$ƐU%# Ugu4ZK !o{N&ŭܻ6ǩ?_܊QGvbIb65C[" j#0:e  fi 3l,A[O5 NPqKJjB@RO 嫾W" Vf5-=0Ov.^pB}C=abM>eiudmBPeޙaN,դ#T{+e#o~#c D W_i?j> 9?tN[>{kK/IELAF!ID&69ȇ>ozߟ fRkC"ˌ-^ ?C]{[OoEtDQ[TA'ٰm }0rQz Ì881{fjTC\O5K\e^9}߃B=ts üo<1:J !@AkpKZFnx1euuu{mK<.)a Tf ~C~Lz<ϣGH},\B.xq+.Erᰃc}C=*&&mA~GBT΁A%Bs #5~)$< lM /!^ w!J#$&'b"5K*gxx=N}=<ڿGQ6q?>m@ L\ 0՟$b.^+̣v{VŘ|;Sgx_0AI2FȄ Hw ELҞRsRΘ0RM@ZˢJTDƜu+uT1qirh[lOcen"_$1KXOKcɴ!ZU'x;Qb2p Up/؁%T=딑SW>_|g޵* @ivUCi"f4[J",{!i 8;{9B>>RQD>N9\>kZ j^V;m'Еdsh ʑ?lmS Mt 0'A,%ԘRg+ͬ_{ﭯ_8n3Ŭk:L23 ,wǤ%rhaB0h~]/u>jm-d%!LzZǐ$酷 MQCՄ s?2w#ܷ hPq^a d5״ѶҚ::# yNgraDty;EP%AIXQ `SL qE %X>VeV6hWTԭ6R~+=@U`<(kG4-^f1)_|P *BeYC-O}43y? 2k+X_{NsjBTq_ee{ɲ،7c|p!_y<}<=qmR7Ƽ$sH6OZzٶ (*iE`؟3,qunn+_>j~tW.M[y*<$ڂ? E§"ڬa[BXw\\-u}01rGJZ!cQ3 Q#Gm"j2{'Nz-}G#-F3Sshp??ϟc{Ɂnv;1j6f0LVrujD皡07̚h-%@<^\+3.|vȥk-v[ÓW5R]\\<ך2=?Φ`4_i-mJyHe٩&MCkG:241л[h^˜2q+74#9PP\Gܯ@MϾ&_< Дn~b)Aܴܬ9S'QJc[xac[ך>_Ks~:16Kw:uN].غʲ C-\Ug0 I'q=L|R2+nl%, .o; L*nS_t"J$2- uzZ.Ͱ%V'Lm _/%ݎa @9ڏXEdoܺæ&@y([L,bY,l~ r"4M@R׈B5˓Py,cc :B\7:6^??OX&?y^>Թ>hsA쉀~'D|RWWЯE t v/Ns>&=N}N}5uZG/e _j0X%Dv}}?Y O#ޝ3L\Pu>u%SچѷD[HIrGd,qΔ Cwg<:]> /3;D]s!n>KQA0Y?,"cqqq ĩ`yGQ>mx_|:.Ý o @4x,c,SX(hF \Fɲfm7n}/ Ua˥} m F}fBMX@L-ˍATܐ[jc)Tm.N κ =b8(@=:nNǗC!E^{bIJ$b^rENCcIe؋J(!7279-3<X)ټQG*;QAE\=k\s=O}8O \Z»4[{X kS ZBP֪+G;bP|(iKլbGONni$ĸ(%K[iRz J} ?D@!㨌3J<,u ~߯}}d$ r'T@h#bQ,͸ SPnh es2Us?w?Lwԥap/$L8VJu  Pv6ԣ,(6B>5w6#Es')ã+qeiDu2^Z^3J|+ qW 7w:nP}ثhɢ$]# ȪZwb+Bdcz|TDq5M+4D!" { Nx=^K?xX0Y馼bv~?Fu#ZׂO1@zd'Aҁw^w9=\S>&Y.ƿ;s Dȗ}9? v?c qAꚞ]}glyE~u BX^ʅ+LV6kV,,=H@Yn讅mrfAUwrV@Bʴd<a19m-=2PYM3Z&K+^ezܮW| ~pZts 6A[bV IDATJ rׅxA9 v?C wXobpQڨl¨r`Ur6Z6DH\jB G.=ex{UGY TcN']EM*d!M 5uM.) ׏1*QМBKK>m]T0a uppQ!wJ 5A`h^=kM*C9icpy >^`[˄|&^L$uT'dD5t֚?_Oh*i!sΘ-aU&8.nyam^|OGo60/m'6mW~^I8*FEi7LR(JUzn;RH2H "Rvӯ\reҝцX?>(@76zb䈛D߫SUU("pC؈gu:뜏|\zNT>I&Y>l0{v6xq7CXWnHEL3$@bbΛv"Yz81,F\P)NȮ>_ p0{6i)2)݌aB@.[Pz ykEoV2߬PsLbiğg'N|{{L~R8~J~C>a5jِ~-&@H]g'xDŽ+I'rfזR\X(cRn&n4=*G (9WV*"l?>Ɵn[L=f;[`Y!DxA7y: فKqfi'n(tP[6+w7&zF]*"_T`RѶE#`_.| >έMVSeXs2qu{[[+Dg/Jb'^p(,AJT ;TOuϽJSqKZE4B$v7{r S;S+%k:߂ Mu4χo%"gQ\> CR]KIyjo::}@b_+fbf{0g5Kެ[ө.KACom[k0OXq}&`mPW>teAjOa_z<bJ[d)]e;ٜct/?'/9mN]fNas"I"iW6O3RQcP3w0pyps:HE1 id)l&;o#Q@HCQ_x.&fRe"b6C9Oa)c'u "nY4k5>ظv zKXsPV.?SO|4|Rs6x ٞτ ~a9Kyn65*fnƫ;ot6⮩lD6>M{Blm{77hx"lPFǍ~6EGFGhU|c{ajexCfǰKt "E\nљ@yW?>~~>}y)S~eך iĢä,"~wri7J;̓:`.țqNB^\n "l< 6^/w|'~@G6Oݟ|IF7t_mcW&^YQNACqo1ؗPC\#{7OvAG8/,(Wײ}g||NQ5ʛObWXgڵjr.wc>W[-H#|..r*bҪuq#ts#Vˁ,'k ǷpWJ?_Vw`ѝːXS!#oc5%`{%8I:  %UlkLbts1Tpwva2_YF4?1I#x)an% U _~8oᔛ;c oQέ`u:98u;?i!*p^.ֵ%_bi2A{Ʀ1"7)/O$L+z Y|R)^WXV!3>re= rN'NXk\GL f5ɷQH84 }{Lo/:oinįv6?e Q8$T0H |z`gr FVv&IhI>{3@jX_ol!߻őԽA@\-^BmZ,a{:&m7-/%q^2Lz#7ɕ$ ϐ1'{}ov8,w$d 8Y_s^\iMZEZ\ KR,XnɊRp_`*ߩX7VS-_Z8C!Q|X8c!**5?=77'_) DxZT8_i.̮ZiI-%E˭#sG"[u(3 6fɰ⃏D2:6w6ڛTapu=¼/$IRssN3r$gei<4" JzȜDH.[֙q_sLJݮqRF>d?)1rkfÝu^:i"q|V+ükfgߴ]Ȥ9OKZȎ:ɨ |'_d/co;1(0, qِ"3} 7e*1q؆pLz"2@ -Yn8[t\7 o&u)8\vEbebI` Ֆg8XĂB>ߒIWt#g%-[2KRL^kU0f FO}ϊFo9}> ~! ːuKda!ںJ *ji/ 0>kl7#6(y\-+;?oW9=Ǎnw>|||ğ]x y,+0`w?t* ɇ%߀0)u A:E֜W\E'7}=OkB5]>.Sn9#w9jKϪw;8`5\Xj/! )KvK.8[L/, h#k?rAdĻ:A= P[Ғ\ av?F\h??Մ@٠QwE[_4y]NXYs`0{gB=3=aD9d$bJ w7oa^aEd~\K!R-L+U79PA!*:XF-6Q?k }z N(R:,e\Ud'` s[ q'ƗrD*ʺ$̒Iտ%SCQJDj!7JU/'u~;',gX=a'!l}_:VK Z2t l 6744-9y, 8\jk3\֑ݠ(C0bFw* Y(3O Lw-bT-P` |i/i('^k` ^-12bUA ޖI2㲘X~_$"qк"ӿ"2sMs~&v*%q* lsVjIDt HRZ#+ᓚY-ej2kޑftAڌ+ NA`m9ff_d0&aR1/dz! S ĴH^狄Ygz6^/GƧl3];Xcj"ilOϒ4JO{xW';'_70FS­])l  ]tC`ov5e< ҤOwW~v'Pq (iNQ".[rdj"X%NnHqjav957tTWNJ0eqKdGk<S4 tu'xA x9m_r-*6s!$(-jAҥo3. 揇2Cf=Jʬbh69w+Q@O[GP9S#QI"-h{6ZpC(>떹i0 /}*$9uF~3`,~z^~Tzz5D+sUɓ|ޖhB't% ۾k 93k +bO45׈`$H]q#nѴ> )=o~=ꛮ:^A Z7a"Ee2iZ_m&,6Y5omw]dٰ̃Dy2uJﯯoQb8dpOEwj5g$l{RxD6kaa0Py00w}LPYKPV.+.A2jk$6V1$A~3l^y^k-::|?)V;K΃M?Q̕1+zW3&>8J}tM.YMWU W9pC2pz-YrAN;%MEn͛zh %0a_r/dS:.T-)i˧L- Jᵘt%ϲܯί @r@O9fd5d{m(Иd[ Z8`aw.=ke3Vy76IiAvhY~uqPcoI10ׯsYt  \:$Y$Yޘ[^x'\)5phȁ|^vg}kPILI`(cfŢ,KA]n_r?W_/}}3=:ђ ƶ;tAJÊE{={Rh&Ꚋ&yyz>A{O| o 'h'٣":ZY/->y $Mn# AZ,p%{Ύ3 t*p[wЪ]u5\_JJ%Sd27 Nj_h$0;u}A͈Їt wby\hs>,^^ z1=M>{ͱIy% P-qe8o=vg(bVThEK_f|t4Zb:>Q5Hm[ AܰQgP\tR>(`q"CNj0Ƨ} )ex l]w)&RDr$_ (FrqcRWqvݿط?|~64X+9CִyqSpT;!]Ef&? VҠGf c`#@\ Wlxl\דH͆nOp#*<4I,PH~7+y䒽6Mk S5<Մ}Ό}7e]AΛ#) #^Zbݐ=/y| -1Df3Uv^x/6_QY2Hlr1ˊMp\dS&LSM3FUcʗwd}`<=b DՂ !zTKCSv/xH}g`,UT~7k3uqe gy7NÓ6G;~V6+q3tLjlCNj`zo+)!¼UfB xOEA-Cy,E2Y&ɴ`__o'V媬>8 Å_=]:wkF!LȑX, Й^><~}3眧SLޕnEim:JL5`n)h/+&Ѣ?[#i{WI@!'G I8'g&UI=VD|BkrUu⾐6Kn2zQ4u8̴;ݮL*LC,96n㸍q8nϟ| $ʑ]=4fFZm @z598 4bkZnVT'Q۠ :+m%&[VU[|_XW`AbGF5D">D L : C~^Fj-Sǔ1Yҹi&veW|s9ɺr(:AZ3Ҵvbf)A#[Tev|zm6yPpbгk eMC%u" KKo϶euJ!2P7OawڜeWhxV6oXTX%]PN* bor !dN/J~&ɪ3A3<wڔ<V0KmilV0:l@-#G?ܘJm]B:ی k4یm;?}6dL@T7Goz|qc9C8DmԺm#])MŐ _}pq5szg|M}> 1ycYN|Y㰕w@@'^o`^K[lH8)Bfe3AWtB!]Hy&1yik{`s}Ɩ2_]ߥ_[&Cwr6PA?MCQ7f5@ݻ7&*%8ac-Lo=v~mWYqϟ?)oqEv7O#<p٢wk)[n9˸[W_wo.$r]9/\j`2ռc l&ZDEAeTQgՋ.^%Q!uZZ'-]ʯrxkz;؝t9:$(ė@Z2zi+vm 9ȊΈ ni(B2I,[.I/ t 4IwȿdVcWx=":f^m͵k&M(`h(Qt_WƩ(oV X`lJ%]­2Pe_i{x&Ѷx>i G Z?>}%KUf$h炤NJ KE5mɼk&` U3:b vI -![9?roaٽ^뻯א7=ү bDz)]MeXݏZ5v]ůS󇵴/C_V?[^#t3f葤=a>nQ^_5Qvxs܌Uϯ81Xk%'|lms8 D{)p -GLg ;COa46Pv=Q#TWM$dU]UW*[0+n";WsiDeqjis1aSFעksΗl< ckY BwdTo FplErg Ҳ {-te@٬VuKxiN`GwU4A65?4CY,T8w7CB+bDXܹW;@=K.'\R!~ so b!n oεN-O5'@^)i!b0 ˶v8Fxl uȑ*&fx4™ŴH2m_n:!ƙZx[WY' B7sޗ\M3n APOR>),,&ܾ_tۢ4hO-A'Y@0]Tah56EyNO60>ߟ/dz|}Qva#κ7 )!]chOqOzQrS  Ai41q[UE ʬׄ xd3SKԮ%(fp-OիwY\36u0oپ ѻ@k&-KcP]2cak¶^ˀ霬v߿___~݌c~(>^2~{:,fMQb?2`xL~ح4Z[3kSC}/ȱqS\&yT~*_b-–]G%$*0L׊B"5 Щ9Ϲ\s>}w[䜑նj4)(! ⺺0͌Žđ!߻GTr_s|2.ڣ]|M-EFsx}4s˨oV1mc7FrzT& {wD2 V^k),8B  ʗ ĭ]p9DtqlÌ霝}Ӕ1V僾AuƷ?Pڇ,g;ڇq^]WN>zU9u8i+2a:$XE(T]c? ;>2ax'1qCFt~3ëǵT 3=_4im̮K_U iQeb%D(TDi{1ڮD_HB|ɣ(-Ga%^IJxy8y Y$"qk|>^{s>i 8q)/7{#Xx\N1[-kb|m(8="|ٹczw^+ bBzО@[> -iٽȶoG(DÙCrlV aa} >hQ\(,z AV'gpJ=ێ)Ii0]\~ e±:H>dG23jSS⏇`Rϩp'_\ʅo j$qĮx2_T@X##^7=t|ne$rXUmCƈ gh5&B6{ާA 8DlLh\\{6ǰe%W6<~G kVm `p ](W(Бv:+[+=[z#JYO F}žO4Er\x{-?-sk }SQQEAמC,UWc6rX\?ƏYȜOԂԝXО =C58!+ B,*K0!0)Wۑbl'6&2D٠q;8n0Xv:4zz<{ABNi0׵ m6 5qYTˈ)û5<7j{аh7sCtYK.DʃYz$BMf!=X>|_}9Y- ؇/qV-L?~w (wi D8"OjpHd.oۍZ LAсtĘ.C@I`4kk[!M3\q+C⥿7'y {4L6m>&AH-RN/Idո~M*Su.}{7mr`Ik8%ǽR9gTMٖ\ƘwMGK-S:3ݬ#yϊߺP){w?ZS" g$V*V_|w>nN62iyVk{K;͐F'1Rwl˼P=|!GTâ9ۆCI<~~~{ b[Hv!ďr=U8Dl+ [>M֏jU,3 |76&C ,碽oGVO=7g1.;^j/sƠUm-WJX|l2|:@ }S_6 \s~ xRϓ;a2HSapSK֗,4q߾<4>~!&H%.:Y{:!2P PKw?oX`T{*C,5U{'5 +?tqq{M]T S@ekGW Yw|vOpyd >|3@tHk`|725f, H9ܒXEֆ`T:u7R_w0 pmgApE_s)q[Vݠd2nYwTg}< 4$"AB'72Z?MjG\V׈zٔ0- 7k+ӹCq^ "~AA~MJi͢]EȣNrBENo g5Q$fyLn`q۝o_ow>n2 h@3GpUOYDS[g( D1@0kIJkYz ~<^ǁ~>^3"g+ ui}RF B!l'x^@SKнM؝\5̈TT#: X*ÂɲQ8 LDV@LR Lī܆=VWu*aAj_a%%:C:*i  ţkPpbfϿ^G0_oct6 :,Z:&LAb_F\e "ھEG7H 1Q8WBSEk[2>`9`o*~ ,gz?>D] IDAT6`qݔ?V8xeMZdjf%I?CD[18!PJ3J~x=~ykA )(pe]d80L}6W81mX)y^oܒ}5s|;K ?cje`ZPp͚H0#Vqq:X( *- ;9ϮJX#}j1k7M#gBO C]Š,B/y[b= 8vWBW_nb!1vugd!l#ÎQԖkt (m<0slYa8AB+mi p&o2s~.+Y-_5~U[ɤ$JpB 0yFEZ[Xfc0+Eb]uZ6TPb\N8*it @1'ZjIq)2dʦA0J~Ĺ@l$I]Fsb/.*O2٣HpnIs~Bzҟ@J`1C"oێ puy VU㦚ڼUm93W{bRn(fx5ԜMX\b"<}DMh˘`1F qk򕥿mݳ?3?Wڲ< \*\5/A:ƀrK&Yd{wU\XcZrO@yetY$c\{x#pՀbυZl ^OX˾kz %q6}C(~n'Eژ?i jUw="_:SӱS#܄@1gLcmP_Bk(-gnJ(ݦLjfV[q+McO݀+ГvViu^b {̅jo Σ q[/ :f$~W1NB#U},=k3kHmaܝDz](6x&ڜH:j}>P尢_᥿!ƶaa=2/7NGr9fmJKzZ~>^g:x< T;>RC` nEg茋Wx v ̟06$BHRd.K ]P\ ',@4Tu1+G}&f@1# R,Vxy:e#BӒf`IUu13RDO ũٞ.4 *um-aOk %4 !tSZ:u..Rm 9'ו WE~O x/D1pnVV^CkF,(k ZCâjtq*Et>+`OE\aO]  >Q!ݪ--鰽 >A^gLb"]_\AëtO 7b>ў8ﳶ!C=.BjP)rB7&tPzӨݺt"^ \Ԗ$25cޔWAdvuSF/ezu\jo{Lh`tghz.ZS#1 }u}rT#S?a=3*z;oTj*A$zү%"*9&'.oUЖZL; 4 F/.m^-*LUk6k(X9]2PS@ 6s}'nJ q/b|+!ndjQ"w)sN_(DT0PHc9 Hq~i_{TfFi x$Zz^nrC\,}BaJ59aBg"݂vO8#Q]D9Kiw;;-=*^[Sq1)%y_h,;_tt܌$PᐋL# =z#, ٧mn[Eߙ%E7ɳw eI^Oz>~_i, V< ,+nS~nKmM_]ۆ AZ EՒ0*Z܄Rk!BJPF0' f)N$>d#8ü{j?ܨS^/.`'J2wUaBnLr^.fДgYEnTWyBT!/Ak({JEPa8:Ŭc4ՍhFAhqM&?5?gi~ 8#koF ]$V[Vĩ1Aff]l ieydm "W|y|řda^Nea"·xٚdj,1F̃Ma7Mx RP GbHCF<;2:^=̯oreBPiu72z{ޑy}L 7g"#kǬ/ҁsm#)juOiYY6q'!3>MWq/#R /JhkOzvxu>g7gs{샏 `/Tht\t"CykR0c"̬/;L2e,,np=;gN ҏyrSP=VuK;7 tO2&pCe[ 0(LOsa-_>F/5O}>b~zĻKagًɐtlb["UW)Ƅ/Dw\*s_&?({Q!?>n[SV#]R㲉7HTSH䝲/u~<^^/ڛBȟ(XKKt.P .Y0.e5zk-(-嘄'We]9*N,;NBҬ<G--2s!ܡѤ?X(=(9kiQkM`X yCfÓˀlK z du拥cIK)\Z9h`ös= 4(@DLju224Ecⵜi0 -~f=(?||^1?gU9!z" "n~9@@&|p&)̀S#Pb=n>&/U:Y l*Jxh0*0OCyq92jX)r%o RMkFo:ґ9 bk#au_J ԤQ_?뇍@\~( |rl0&d=#ff)'KAe ԡo(p-ݨR(vn)rX!jyqL$x{-;|0EX5_+̃=4%,vMOx_pr PPUMSb',?H:>7"אGnտnG]->mctWV|2zm^`&1݀+vq#9{]* HVhVK%2# $Bx-2VyWXo<㘿˔켹Ch}ڰ h+NQϋ=ܐIpVXX4=|f3 P_d+Թ@ĀzL?,#o҄Ugo`*~DzAd?1xcn "sc +W05όLYɔyMX+N-Yپ26s<{۲ޫo.)Q3忝5;-bνuwJh>s>/”ĩ{ڮ$^ɲz\;C."c 32>Af**Ѹw_wS!=7"\a"# YSSSPbi$) ԎȞ|??&pEp.zA҅@cXNxS'hi{ d詐'Y@xcg!h&'ft@IY- wNKA4ī4A #O@ Rq1W9؛6Pޞ'COeH䃌-n7xiDm/ [+%}1WvOowCU/OV<~Gzt0lYwYʂvfrMi];MS[`@Ͽk B2~JSjjͧ &4=kk_]EkA-Ǘװd͔1^Ab1eNU^?%P]”nnݽ.w7Ua_5 %?R<&4zYzWWl[˯a{ºq~q5"9k=yixaxD*7)Gu 7ZǀNLSn sCٺ,qZW`=asmD"ʩ6l}[,aP3DtRPYPS=%Y1F$$LJjIzG؄ŰpҺ+HdqD1<WpKOq/4a}JO"L3mLuB 0{Tv43Pi֑1L! 8b^[0 C0a#km/_{ߤG3+~AP;3 a;VhHڊ0QXn汦Hy%3$<ڦovi x;ijo`i©muRv.U|qmK/=x ϱ? Yu}W^5O{>{[u-bzTQX߿߿{y};3xsN}B_[ӼG=tK2I:& C)?̆~8Ȉ8 jp;֓0μA2Q9Nt9"2 2P5c8jhs|-9w ͧ'0O%v lFb/v^5a 2/~KY vGLI|=DMtےy,K ﮊ(;5R f'$<q+Y}=y} ,uN͖5c繟羟g3ۛWc/8Q\0g#\8G'33@y;΅fˡYXƺ8 ˽AAEU=" G#۶FpҏrM/rt_ؠpki)S#moPDJ4xƷѭvF3",}-7NzK0o-ũ[ДCJ:N͛iqs>}﻾>q P>SyM-CVJ3 IDATϼLU[v+ULi,MkA"caQ"xJt X:iyi7:ΆXcP\SmRo 7Gf$1 ZmQ2"2W*QݗtgDckPMlŀ@K`ܗ5@b{YmUtfk 7P-䫰.T ]lbq7vRptq\3aH {EUVQ6+A%%rUD^G@H5{?{-^:Zkxci!_Qz T鿛`[P'@o^}C̛^ߢC{k[{' kt_fnǶE|/}HQPZ/ޥÑcxH~*Ƌzca3<$\l) -7j̾J品ʤ__x) {}wzs~'y}ىBT\c/"OL\ ُQ.P"Nes [P /2HKDDN4:Ÿm@~4XG *l[r`T*87O7K@&S aȻJy±4IJoX|VeIlE^;1nVzYaMt@d9ffsy4 `5:9W1d0C YHz}I쇲_W-B< W Ko_[Rf~_tOݕFxsOTUlh۱QsYz <Bۍ 8h ;0a]7+*8b,O Uv,^2K X Ǐ׈I1ze¬Ǟs^Y8^+=?y2%ͺ5?^׶x݂R(ZkİNNhف W;eǹu[Z8 mYa!!ez\2 $Yv V4ܫ!gxbkW}* [ GwLJ]Y^F/||o'hRInGWOX $!IڎdiYit({{n/OO}./&:s]s2Wuy't?#dXDȔtȓ-&ˍ /!E+TEن C1atbu;oѶZ }k,96%16~HLGŠO0^S5Vc6vdF6L ZH oa`j(_]g̲֪:'=>:7Ϲτ,~:WDO0:xP{԰$CdU@ET.䙿zYθ6_s \O3UDAF=so'Pt>FFM $@lϷKC 7 bof`;%@LzV2i5`,NEe[^jA<<Șb@Cndj2fs  }B7GkGq S]zөvn6 BГc&oy/\?[|6|M~ǎ>8س{G { *j&j*:bc1<Z5+f{R=y 2Y3X }[TYɾs}DWFt'JQ}exc9暬@./HTWX\O;_Mf |#=45SUaodg*@k0mN:߃,! 2:RW"u+)4Rd`m#ZjZJBuGqQxM更lZ<l.&&j6j{fc8]75@i%_![ Xu],#2= C(2>%yO? {BkVlZI:Ca~XF4AdyRݔ:`H5 Ӧ}CKT@ Aa)mߔKkX{9yuu9Gm>nQk= s'>|jOź/\9<7Nכ7 s/}-_k_uF[ 6r?4Ι1ˆPLic՟&wщӲ/ųڜ*sڜhS}ӥ`R @ M맄RL< 椬h 9s; {σq9WY[MF`sBΙ;pq %r، ^?$~s3O E`2G.dzBX18@q@=Vv#:~:\ g\'6ҟq t~xҊ{XRlyIu h]p q"x Z` Q'~:Vݑȩ 9cP"T*/L,^cE6$-T|`Ɇtn/GSо>5>HWe Z}f׃E%P#)aGI6=\#"H%ciy".f>; GDyaDV&gDz S oU-?? JTk_X4UoD<QBv/DuW244Cn;-@.)ÌL!j㊞+_ JnNa HQ*Fr=>H,py+7bz?p+8~8>,]`ce mL]71* :E~Ϝ\PUmw=C߿P" ׹ iGi3WY qbX}Y$ *`|^k}+JŻ!-T}q1]r?΄/GpKnֻ= ֙V\U*==ñ/QG*DJHUU~;0l+Z-\`@L< S?oiΝr#z?ͩFꭾ£An,Z:7|³^ޯ8 VΟjJ_h1 E8a2ڌ- L.FYS^=Ypr5V7Mt ]ƚ]o m\3=y7Ƶ\٘8FR2pxe6~!͌%7 ҟBEC⎾`ޅ7Whf ޥ L!rs) yliIxt6\ͽ͏!.}/qN?6;K?|{c2;=WljrQd:%VJ-Pi0X< =w= sWP}{^Fy׼yVm>Y6AJ+pYX"c!S6#tMz#fk|aIs#j8yFX^&#M3P*VXONI&=tJW)-+@yDX۽y쮀o" @B<B mwOz=z=z>z>Jx15rXdcr8AXeQζf}c$6v=WNVHPຯ뺮y]u-OE?][  Gn%kگ%ʌL*Ky۔ w#ҿpHB{*6$@Qck;Ck@REDV~C߈XuΙ߈T!eo_2G{Oi& PqdͨDj]yj 嫐VԔclMY`nOzZ8rvחXkʄL3u>*A[\7Y#]81Gs8f7JCjGyOx(I=ޔZ1UeaN \H{3~T 73WzuS,7o3>-S  *Kq-ѢL$FZ`1̩k^H[PXPq Iv?:?|=o~0e_ReL&[ U)o6IYi$JƜ5L{meӪRO7Pɺ>wq-vrԭPL߈{t2?>rP{ڿM@~i3bK 7i]YSɋa/t+ӮiYy>vN- ?hi{j"3Vօ7^[ l5GzRp `E3g9/}.}n>3a t?u_tR/k㞲WBDVtEL3XwL@iӜ0}&ws]E)Tbb#5r(cؚL ʹfbhv$LJ^5Dr0TMT`G䯠/zJw">3T I( 'm7 SS T%ߚqn`M+ʳV>ۀ4ENecK'%w(Z)mY}DekX*]@9gu5+Zs5m?K[{l1gY*A{*n8?m/t6 K3זc3wZ.l:_~#+myR+3=%5kdU?,OrؠȖG,&¦ð<=MMy-g}U1{Dȋäz?o.wx?kSklal"ϫ=+w%z]6˸tm݁Zbۊ:2V4VCq&eۀ \*4nÔ6k,QYӐ왺{3kP6Kb Tpql8lbZK.>&lEyxU@ʖ^s$u[}+X${ī8c `q?lJ&/H·4FYspcP /p8:gmm<R6˄@K@JT 5V[ eh(Ud%RڼTck""/k?+5:|K.Y9#< yPj0iuȖS w;.^K+(Ev9]7YغCc%߬ydh IDATsXL5[]Fx8la&MX)Xc z0OJ,-I~?+Yȸ, i!:qbiQ&(cO߉çEB<^fm֢އB%UXЯ/JLIb,}E4JAֿpx'qjOfhӕno}eW MK3!|$ 9ӣlKqx::B/c{E5@41^rMLߗzvFSSLrGiIi>5s-O["mP%=od5eez`?6( ?DDMWq ܏[ч"UP&IP@smXPkx/dHc*IY1S6N!dSĠ[S>[`_(m{u8V:d*+ٝZ+o\Q .|`sfx=6u-f[z{chˋkc0c -M@ĒB lFގzvqoSFd6`bjVz1E2 EuRfmT)ʎֽyexWdQ+!wL3^j0zo#p2y@5 (RÊg(QZ4^?emo~WkS5yPAoSeR@zm9h-[cbW9>5 jCpm/uu%@R^*2䠱ޯ}Cu,Uϊ:Lǎbzvy֚[:VSmM8Fk;ƀc  *@Ro|>{,i; l7+*qPlΈB)|gq{g9}U4&Kg32YKE-菼.:KBKh glk`*nSz= 02y*뛑 ( @]{-ۍ0?a>=X)^@Piߦ5z([g ͢`Ak X'@dRz#ѷɝ8b1mewгj<ΥH'8 U2TUafv?UggNsj7¥JBYU]0IQ -eF QMYgms4C 3 ?jZFq6eT}+WxaV'd-c'2@cYtX7 gAfb<l&ҴSI.بsb̢aE짞b@`ݲjɜEa7*Ƴ+ \sOkQ}$"E&> 5=Hr-dr5t 63ۆxy$@3]~wrk9-K8!w"E|N\_JSθ[c1.?6a;%A*W kI@,Q^ʚm@<_1a}oCVyR !{QR}l<~V\^(dd(],r+\yuJo.;obf2cp";g(p;r',iGKТQՕfks_~ѓFuN| j#yP~~ w3d0r6;pyMSSgFe08^{",1~P}d??ߣv[iK<{]gÁ*V[na-!K>ƈ Zub<5; F|)C}ϴzQܦ(?<.57RPUv>kD"_b0*y[29FX jk ?=Ү5|yk}|H1[ޔX!̗4uSTTEYTX|Vit!}O\!kz6 y!$]fX}43ցH בpčO ȈYYhȬYKX RaAr^#=߸ v0mVvs6t;\kˀ k@ӆs7M_/X\#2~C?i!Jҍi#2ggB6kVҰ-{mR6}= ~#uyzN@ %?װ\1^uO(vطҟ.$ Din\,WYarNr-{i{1iA_EݼERh0G(R* Oժt͏cMejSFot`K>:l[` Gz1>;cSA O!8|.s={ҵDD\xA@{YJ4'oj[Y-Ha=̵bi1*bSjmA~Ǚ`ϣ,*ޏuj+a PQ/eV-w{Zu0sԗ΄Aܲuv!p:] w~߷-onCɁr,EpRL72 jBj;@& 30;Da4͵C&IN\63ڼ Mw>ux\g?ϳ uMu3=`uLp 054ܖ4%KL/.Y K'Atdoo b,[v$hPV˔<W/tmhB[ϰ 5ykXѣ4 s1+QL xt jWdcƚ3=L NmGh>nKcik` cQ_':?ǎ?K rh1^{?~JR+CWI aj7'c(CYgN}y_kǧ%?~rCgnp6^ro&oKD1[^^]VK0 y7am Emp0353SK}38ŕPu3P¬dp0* 2"#S-[x1F9ʡ,66@)G?C%̵z3+\]fCbc U֨*8Y[0" WM@K uPMq7e vB}ZcB f2"07} YCoi d2G(ݶ)j®$ gFKZ!2M$KXj^6o?etԒĆ 9·-~vaO֖%"Of:,W`5_s@|z,I5?ჽZXe&h^?#Pw0ڣ _Yء]Xn@}if|3޲%f60j@4 N5|NKoj%>ob$Ʋr,^HЅ^8YWx l}:qףǹS8ؗYģ-şr )rc>Ks>koTӇw Շ岹;DD1Fi^Ch,ŷ @>Z*Q돦s{. أ?9oVo6N6Dl?m[6ӱkGǼ2E@gvgb2j "?}Rl0AZNM^4 @3A' | Ǐj=,i=ѭ|+]jit*]Fm+aৗC힏'lu"D!*2x:¬d]\U_^2Xg)醖DGĻffeUU)XnXb ~i?L 8lY7NS*</*ðh*N6,;^ѿ ]UqMɗ>h[wIL^; >8u"}[ħCp6*Kԏh$Z׌_t?xrog$| -lݜ0Mbݐ5pgT i{y & z,jvtU7gWfz.{4,Yϲ.k/+1 ܘ:$6HNH"5&Zhey.?@ÛB{4I@pk6ڛz҃2 b1zAi,_ք>~Ȱg5&@3FYׅZag@Ec?ēd2Mi2oI5jllzs;rw7$ @LjʿCdɌTW 7}*}iD k*0:Za-85'-`NuMLD$&VS¹*!51M 혤O5 jaqc)}XV\jK ꫇  u ?MI= >@ BDDr` CS#B{b%Τz#=آi}H#7#[՗, p?>j˫ /~ @*ì53L&35ቂ;tRD _k\iA6oj?!Xň|oOZ\ײb[^-0Z0|s^/[73GnL@|"bcQM⍇I:-|?gFYE%*ĮN<@ϧHR4x/1}w13q֛3녕Tis{K||3G4 (`7[wF@bD~or8x׆,ۨ^6P5xeͶ vJüz &ea{oT6h#jȑ*oiS^V1&^0`; 4pېEާ `*[ ƀJzQ1X4juj= 2@{pq=wᳪ1^C?YsV9Y!=Hh ; ![Ъ놪ygie-`)^{\y|s׋~=]W'{F!~{6F |iڏ°Fм(YLX_љAA٢m*T<Ԯ Y.w@XVkq5ڥso C _ZslW(Xo ,A]s->^~ !!A=r s85OFg~9nՌ3j9yIa,b$bJldb&#,YA`"iG(R2 ` OP_h/7Z{f>{f+q/`&S4!-Seû̞A0G~ vյyɐ@E[fn!d&\5J-7 Jy ^Tq`S;a)B_=q|ш+0aK#rl| fYKtR;q*nuGj_YV|}`%P^ 9|xB.f ѦWZCÍdKp=aU_/f?`o7%_K/jY^#zrTOˌn_RW,5`(X7a[Y5O[VM/.{U~2 }N-(8ܻbwm(*Cy}\CNV5: IDATc?Tǔtcg0;|{mB#8k Ooئ’ט (p%skYψ 3sM1wj+#:oUP" o8Kxة'bf ͉cYM{P;}y z{Yi\B?2l(W,=C|BlAXg-&̯؝~<4؞[{/jӯzĉzC]:ܼF[doB5raz>|y=vP=ebLf,+Hx](#}Jē7"ǪX9kJ0u)( ;4'V=`Ω3SC`UdT>B@V /#kfcQv&dN_TҼ+(1¥c^*`~mg Fz m(!AWCW M.7b'aR;wkym^qsI*Y0 o #ɵl2z`7C Expɦ`rW[}!WlKkr̮er~ˏ3c6mVi)vP @t]J\; B ֢z xYXz ~-eci{V}_ @4ӊrhkc*@=&!}-$TܓM4:%g, }: ؒ`Ve^^<&/c#'[4Ub" V{fX ̘?V o4a&Et''Fg{WyszݟQ``Ta!<;:d>RQr+0)y'BP| S"L?a7nEUJpB{0gMгSɌv8ȂbZ`5Ȩ*j}Z'm@7#A"xΕ kP7ȦË%-e_}zI LVϒ]ιDTbL&LB<Y c&eVK-sKp?Qf5|tde$G9QD1;&lY3XZ)L\`!K+ L\1#Mb!b#ʃ q*ߕ,VQ%3{F4}e9'̈HID3٬[jU=_=]g37-K.qNS(\gNDHt#rXX&UԪّiK\pGzApT}D> 0~49ﮧ,\E}S=c}yedIH y-|hmZk"Y-E(DJ2{(?U?-`o};>IU'D(C~6|=OQKUq@Rv!w>) 9l*ʣ xFH:~ha MES~n/ Ŗ*~ήJBa)RSw*Z"Lk=*H_{ | OD $B1\,D 0=97O[*CěVb.CPyzEE}_8U@!̺heOxkdzGEwur&S#P3enEnY?+s~MwYIA٘WrvhqIF a@CQNxў &h6nloCOٿ oujES<}3UOȢZ݂(_w.rA_-g<+)7IW[3װoٽmRC!bZ.BW?qem6B^t==h[wo@)Q@x@^@u5&uD-!<'{W!鉷:8S،XACd(/J'\0\b ;8DKTNT55bcεF%Usz5O 3߿߿ss^y]}] }]؎ U5.h4 "tFT.t 6*ŕW5gW"uW?;/` -ZoP3[+b]JȨ&JkJٯG"63j9wYIS&YlQ1޿As#׻<-qz[kUvcҗ@Oߊ}Dw_?z9n4# p#g[Ol|e[P(iPmkͩEHU`&S[%g]V+:JGxGzқiASP7C,1Yh۹u5O-pdnoGy(ޖːrW i|#֡༗ ڤ=YXF)-) TG-e>98x'qMH(زua{T7qa.W_# *UHԂjX-?Ak6P!BX+P5 Wn'}rZZm5}i^wϺ5W{4fyWۦorvm͍''r}R~3PzvfD 5Z%0aap c :nP{d+6h8hk|r8ez!i~),=P5b@ k{ƷqJ.`  ~85??gEC2Vi Y/e f%G zӺPGP?}5%z&\oI^ ;TY`[m]*|<7{=?u^u}~@m/SA;B?T4}XזӒX{žq or?f9wک`y; `R%C!ȱֽf4-'&+ňKmʲÑ+|vQXj`XuFyk~k\ћŷkW%XaȔ4;4YFj]E[)çlEP}@/YG% ,3^5ˀ^~E'\EkYpYo<:OLzԁ_Y`I/ZAJմ:Z_93h|="5ZGڞߐ{q?NnHƟU'qf6t*O9G$V^. =- "c =TԌ6ΐKK"VWBLxƆ gMiNga:?}:D篣~>{y<+y/?x/A//lGY@(+lԷL[$~ܯzμRG1ffuSNuϪBhs*YYUO 꿇FåڡŐ+ǎ(+* ]y z[nt@'gozC | 1mٵ@]tF0nH68UsWkdt]~楿:?|e0cfY&3V Բ)9:tOjmy>a6>ȲCH zCqŇ]-C]'|+ҴHn^d)X dŌ6 0bw@&4fiDj+'UMDܶT4T wR%a՟u{lk0T"Zim"+?kK'\ CԟẏpN"K(Ȍ=F UY&MuNͬ}i4InYB@p~dvQ+fm\Sj|nnapdouU$to\yf8T_ݯI>"󷬢r\gk返 ~y(h an m)iEʚi$Epj2t۰uf(Mi$q]VT> s9F,zq7})0_l3hKsٺcui#K}Z߿ޠ{C,!b}8oV7#ߥEi Kx8JB7 h  v8o=#} }տ4?ޅ@d):xLϜ*&@W91ch<%= T9Xzsy~|u}g㾿As{ijֹٴWpHYY@<دa̬ؠ !q=ժ#kUlZw_pL7]lٕt$)ٵQ˒H&p`NNnm5lbbEKu-e>9)ݤd*y +3G[kv&iܞǜ2ļZ}yQS{I"Zy7Kk\6`{`@7Y.K>SQ? pjťTx_{'2dI&Ƹh1N뢋S^T]6hp'`|̻&(2p{褧7H̒)M,Lj^琛՘H5ԠD 0?^vbbʥ|EwM N+ފ"Ԓ4 &Jb{<>]Nң&a3Lr }kJ}S)~أd9bE!E8PFJ"[VJXD& &ec֧NJgWUfo:D外-f,H,@)+A1k +K| WO0SUEퟳ%Y2VTK21nYh_JL鼅ۢY^LjSM=R{ X[i28/ʲ;Eӿ,}7ZO?gu*mk"\ZgwK_ҟo6R*?9&*q2|6@q 9w!a$ S/ ~R[I!Yg+^z{(BI5y:^e~'|suu뼦zVHQ,FtQk׺J Xjs(Nj XoqF@ pڐmF XyGTD}:g.ʟ[H -rST <%B=jcB~k^s-*5  vv=0.~[=]TP+uJ9|&|&>+tQK!KBr|]U$Bs<ʦ%jϮ:W R:HnokUI 0`K eͥTߴEYg8CJ jP@ *.Jܳ& *?Z΢ޡex'I1N^++R94i:89VH}y 3./ m410*?K:|ؘxp(/0^X@ lZ3ʄ8MY[;kkRC9ؾҭ_5d!(30:c H 6:-ez)aC4=.TТ]XsfqAĚ7n-4m{$}N=Zo9)g@%O=Wz0  u:C"?˄N(#:9M#YxJQw8md$S ,Ti7g6.Ұܛ{K tȘ R qXOm?L! ۊ=8&suN^GyPg AUOc)~yfq?[~=oU6z7׸?/On_9ѠenyB}k`Hs;j==+cax0L')r\2p*,R B\o}۶mJIrug33 :8K<k[o0,eft9pu :9hلn@H`)>U/b2 H/ۣU&+vUV|ҽB#DMEFK#,UhpTk՗ui 2nRc񕸤 "^%N>vl,Kog9jZ|y ǐ |po;"鱒GUoA&'+iXN}+~>y+Nuy9%/EDRzTs IDAT7rUeyWT>4@c-xǩS,p#G6f.ZD{+!tn>bӢ 6I][y$RnI&n gSJRfٺ!U0~=@cs @yH6pc2s'5ǨZĩX,R ? p\$S FVARc|<1֚3%]|p|>q@D{o۾پ,YAל,4ɼP+^PaY%}. [ JIJSǗ~N{bV2V <4xRG]Yr|Sq4B b%ȃm.%⢙nb鈿jǘNi7f;>舀{r+T)7-X;ばՆh ToҚ=~4,f>PWWD; ) @'pJYۜ= U"vL9g{@$ @L8 %P\' EUMZ!GW:z9ݽٿkIIO Zcwn |S<`LjkÛ>GU[O؄K]ue7Aq(BJ നt9e8stgo7`d p[& qr4ܮ9qHbgWM I",BKY{^_gzc<>qޢT~g=ӷ?Q 1M_u p=i38\2L6D[-jTĪ#Rs G I*tЊfBamw`?Y nWj8E+{PСZ/`#~=ACQ0觛 Byy^sj'pKE~~~~~Q04 sA7~^[>8xNVg%i4Dh^*Ji1>򁾳H L48]4Zry|& .-KkI]xpC_RbC_BHeM)#@YbWYId.ؒ&dl0 !3!,Sզ+O`y\A;].}B]a&B7q+R]~*i\p cd|Ω=K%JxwknB Je5_t*B:C[-[4f߳&t"bJܬz-޲.7XXPiKxJPm- i{D,\"ED3R ªW՚?݊h$\E&^Eed/ ߟ=D6Q~UD&dEWy)y~P D >%ЭX@ ]h|u"p?ފͷdxJ +>}^_?z=>y블6×9{#BT|΄.Kuأu^rK0) Qܪj\' _WU"z+6iz3U86hS6chlz)Sj?GK>~B$T(x mc4ȗy^uqh~^yP{6,e}2uDdcU@")]&A8 &LȳM$;8;zy]3u9t$vYi@+K-ރ*{[nu\*KXMZNs$42i]'|/z_& Rb`')Uyac%l.q.[odE($ r**![*E{/@U? IF$.}w3fjQC gm ݓi *@!s_R8*R.,IAH(A`ك-Y cbpdCyyYZ}A$KIwtĭֿ < P3@e`iĬ\/6$:ɥ:_l+5i3DM7PF Ģư$ Lc|=h{0Ri1S;T.@T~#,CyR![nD&Q#WEBmSnvd^"&[{HyU#ãgA&iONſ.*|[Ie-?%5 ֱKQĞd ,'1sk`9Y$a! HصL{Ac}S=??ߟ)~~|>h @P,]cmAf|؞xl󹮓O}DH4ܮ}kƤɤuffvTqUG!Fb$aMƑg]y|:>EѺ6ԩ4NǭwlľFk^M%mt8-jK\lzk_No"I!6ֲ#^V D-a*(}k.=dp5_珧Y v̵$θߌdL- U< \JotF-i~x4Ӧ_q tPh:Y Q-4LCi5mNZ yf+8.tkߦu_x0Hm>Ģ,Օ*9Pkdz@v˪%FCk6@󹀿_BkTCu_'˧*LOM0{ "$wbIJ4ITKm*_ܮ? 7^aٽ:^Se/z޺?﷢=Y}EX٭(SD/-Yƫȟ[4͟!-7NDmJUۮZ+y|r E2D\hC/ӥ 8|{ rB㌄Fg.+Ґˌ^Oṟ1e N16N@ ᜡf[KV"x0'lZܬ ҆PLҾMu}'%@@OH@#ds1$9C}Wu?xoPfPcǾ+S'<crB!`&aljӹ@u-" 2}/O"cNlōPL×M<;%ɏY_=x:9/{Ui^ @nT 'Xj;tukP)5XҪ3ԃVdz4Nx-v/k4F! ~XE}l[~,V/Tqx4qi,e>k Kf[X`2DKpq<DΦ-~WkBvǫ 51QaQ!P_/z3A,%>Yu55y橓I`ײ Ç'ՃvWol}o8RP)L  `Sˆ*:l\n?DȔHBZs=Qr'R0=_*`>߄6J}vN5Yo;Wn³Hy[u]޳4Ї;‡o+ICx ր%~yy*٧fY!3LiߨצS* zXkYdV)%SNcJTX3:@SRV.$=k)26Z\:,rx|L}1bI-Cw'7h  +}1w$۶???ϟTTY Q[(@@CT㥿}*5UI&p!nݹDIƄ/;^u|}P/| 8 wX%nFeP9˘ɇZG-1JۨX ,!8764J6^C-*@^_2'$Auɥ g\Y,QܓM\wK.U)S`&¼`WoܵN `>UC9~pFDl5!:o҈>Ҋ?zu93ph }˂l  '"ef ?~ ԏyx>mn⢽ٹo?=b8\E_띚}:?x_1C%5g毵x%zB%r#q`c|պr0 d/)B6c]*צ~~uon۶ ,LJhj?L@+{6s|2/u m21)""( CD@6HC(e*a)5 ' |ɵm<{,fz_2Fg<[z(<*6ئ' .7ۀ|a4rR:5CA:_!2ׄ"wy1- ciz f0)*@KE[rE#%8<]CWm{%.E B 3Jb%eP,AEE[3\5\@m*w^² tO 84J wP 9~F훺'O/?XYDr.[4ݙʿP$D-˕oUle//NgU]b;HvK ׾W!Z(KE /NW/ / %Z*Șcٖ/+W?ԢP "T[`6!@&Xvy~^> Г|9痳9fPD'YWO3w*%; 4@K%ɟE8IF?HE m.G"D?c+ӫ/|>vUAujW.h\眧2A"]Ȃ0Z$M'8 Z+AAU~I^>ɶ)J'@ȅwwInne,OFYH(XfjG*!0J^4 K~Z+K:-l[%5'LMg*e{}VY$K|(X!-KbicCrpuz<`hLn!j~XO @(Jy;k2Kkںl8*D|e=wiz(]Goc2V"GkzkQt$nUև$H}x/cxelG HۆFJ3Y0 1miЧ>ReF&:hvx_iy(}￿߿Z_&t߇"c8I]^;ӑRq |Ge-{|y.4^ړuU%Zi~tb@Ѫ]DIyE<8Yk:IpI=L^c|ԽƏCu bQ$.y)%s-2*ڤ4p1r8L/A)=ZOH "n~Q 4@Uգ_qЧq~ܮB)6{ ގF`66*Kx^Ӻ68q"ˌJߣy4+poZ=2u3tM7*˥%3yJZ9`Jj,æD[y3ڴ,Kblv`"+ 4%sjݯUVgQQč{:ߔipi_*t=Pi8BV85#凑|TRsy6\CpUOT"`Lfyd$zl!NTm)v+ЈzM{c|<}۽_Ia]vu5aozdd1k)97Qgdxġ-&B,Db<(-qT&k8zWݵ(ӴXms* ey7BZԔYoCX{!ZpGi& Do"NU%SJ$s6{[YK{Ҫ!_Tij`6|$3$D4y5.LU&[[w%9'}@ԭ3(J?SCQ?c`fepXGs{Q7I9AI9jCɭ~C.m;@DB as Rsu/-|ݿLzʜrM7p/g_Zo [@6ao /(,y:= ަ`Mg̢mQsӸ =R>Fq .Yf; ]TEfeHl uSpZݿ=p1gCp(cuʽ\U R!]a% HcU.R6CD|y^GA쫴?G"L- 5LoJGk;e`+ϒ;A,Uhk2GЮ%; f *5h ->=3X3e5 '2jr&000 #N]2_eu@sg Pg ߫`fus9Jﹼ #ޫ>'岕 bJ. RCQRȷMg"bGLT;d2_,r2N/ } ɲaHpپ۶j~ϭ7e۶ۮ_+}[{ K=!2 ."I0HEt<ܣZtfT| :NHrdjxc 0;$+DYA/f&ִ@d"*!6T&@-E8ܕ+ij%ﯠ0Di %歏cm T~FGΩt5*5@. )닍 Rr|;rd= H-_WVF0ZT[Mwo1LzsA}i +[ ({@´H OYl}hUkј(\Qlv l5=ME"/Gujua94i0XjF'OPmGJZY;B 0U X8Vo'Rx?oG{>a2? . -8Lg`{)kj=% hXhefzvjFLc}M03j ~W@ $Z1FLSsjp0JtݦQPa٤y:/g9đK)bN9]q-1~aJ)K@PgHJd 8FAU<>Ta%6c3TWLr8! rYoa=,pi8ӗZPm@:]Uﻮ(*4ㅋƐ؇[ޕL˭|hXESAd@ dAQ#Df`[7AgW"3M5u8˱W)HRU/ab|7M3@H?_sӲG/寋'nu ay&4mIK$y]%+xh/bj5ܛLo]ݗGe"MN,Z!<|ZIY"N G1S.c9@N8:r.K@Gxx>Ǿ?Ʀ{DYAD 4;8>]տ嗆##h(>!nBW[S]!Tjg_SPȶ MNWkX ⒵] mA` Aвd<S΢A0^atPtw1[D?:fϦ)7FaKZǠũMΣs(*%72brRO'"5Rb6+XA󥉬F Tm^xQwٔ*mS#T (y ȍ/Y?&p'`'5u{CZ4=KQ565+aȞ̝uX<1J/ʴi%@949$l*|㴻p@Xgc7!O~ zȡU>L:%frj*^ ̶˴ c"1`l?a<~A6kӗ\<^R h ,h_)w:4@ǩS/_^^ |>y:&OۚCW1M]ߖX Ӵv=Qzu?DJ*0s b, ^N뿻 8X6HD{YCW<^LSCY+!D@j<yXmj^^~o\q]TmΌ_.X +m8J'U=f_)@= |Aڒ2!X.3-EHM @bi've:9ޙ p~&!0FCf?|)U@'?J504'5ot*=3ؼGz*]d XKi09& .,Ԯ (7/?%7Ǿys7k'ٴw|_ p r' F{K8Uϟ_wZ Ia IDAT@XAx<m@xM*w 4KL}iHۼK0x"C3 ksD@!˶hglyES:G˗m^NpTVYr7 ͤK+:nɣoK1 ivaEmKWmr*%y}{@֢@K~_3~afD`T'͍}6יWBα}ȼ vh>@9dЯ/rӢ`+cB_Q)qx Gѽ vVC\joJ)AUZ+c'b7&w|LҰfhE_b[)kq»'Hwg dڬd#u  mLCpGLc(]2veh3R`hжӶǃnTЧm2{ vQVf@l'T0/=u~>:_h*zޯ|sYQm)Iu?P~jהP %o!''KW}xXJE,eb$(1kEڳ LbF$0IQf@Nq`;eU4Df{Bm㩷ݩ`9U$0 6nCnM[وT {ڳ*j_DjV䈯Ƹ\-R,RsJ~˩ @SR9AQ\bh:6cۉP|: T@Scp K.2K3+G+*aQ;c }ocʩ5ۣPc^$ W k(KQc.,y@#iSPPfV̩f n+SRm ^)`lV$qҭa(7Ac$j8&vDIIil3xRJ;ZnF^괈kUҺDب>,a=R[SK Xp@;euFߘ9Sv1mKA/\y nM5k4KqJ3 D=ؑ6_֠[]&?'5S`tǬ*8/ /CH*e MYbO6)qIE8^uhw|„ U*3M`i VLj!d*!s/ P&DaI ͆"ԝ1dۚ~ZOӹ9m,}I^[~9G ~nr_eT0ں {*cZWyN:"2:§TJ`]9V2ƿ!k@Wd&vOo3T%D1hmض Р a $ƾ`m?VItgmĄVFڕdZaxtDJIUZ0AJN2lKͺ Oddf5fSkه>EF6섒VJW<8)3d$ f&ff3'N3 hTH-徾 $S!ŢYB]K'}My6'1hh{ޛ)h !ԬgP2r:GjI^"LBKo[B)]4͕7Cv[Gm'24{I{#KҀ!<[)"ےPv5R~U'fTqJAy P=_E]S+Um@Wo\`ų +4kwۀL|+A;`mQƿ)-_{ܷ?3P;MU0*#D6VbY1Ԡ*\ɼeRP jI>VL< kX9cy|xz#G~z*b/vS2f4+,R:+kv` K]fRP]E 솨o >!5KB(;1ܐǧ)Xm>.{IyL=P&1ҿ kFG=eVR+4h6_on6`A|L9Rۦ` 4%)OJ8 QϛQЭض@$Pŀ(u mۦP.DD%+ c_/7Jg!nUl -KXu`oX*@pcc0 7u{QJ\k!LI|).BUK+e^\Ɲ$t߷!WKWH:RSjE{9XT:7H%+BAd&0Sa-m5\΍'}k6}AaU9fB,:ak-"Rp [>u:4/v&ee,/s: t7QQ[]f$* ko0,\ueF-=?M+ OY~t]*"w @Qk LlzhIk,?T,\KX:A^nk".b-բ2=ql26}M=|# c7RżQv\+UNh.p ZJX(9H39C}xnͅwXee2WT,T9?EaHf4{Mv+=`/XFQ~K jPo|]fo,BZ0WGTҴY>e:_'_' > G!L LhdF,s.WT2r\rfU*^g0-JeiKrIO A\Tc_zQ|/)ڗl mRQ}LYsadπ{XV&cΥH'`=i;I1ߌK+I2t^s Sɥg>FШtd03:c]l "/ S9`-獰8s"H$UqfPq5f% 9]š5^/+V ~D |% @RCeծ^ HZ:*9\dУZqwv@[B6Wavx7@9.&/gCĬPzm ۀ:A HwspzE0nK:,wƐ R̊mI l(C#|GlmRV/@TOhx8 #e QԵJ)V'ah{XϿS,;ŅN GoR>?uѳ{e6h@v;nGg=sNZZ 1JZI˸LDh 3 DWR;|` cΌWA!d>SSޯSr_/+ߟhhԜWxM܌A S-KGZTŕS5}aXCe1 Ճb(aP862/deZ%Ke%ٛZ()a s^8%ەi?&K~g]YO}Eg؃kJy5kjT/4X=m127JCX7n7ag>)ˬ.dy,ݪJsȼb3˗kRT6} ഒ 7IvVB%ƞJr WrS 2=wz{ۇfDp#NS!72.zzӕZ:"9L>PHYgg箏†dF)%@_%AMŠt v#=If2k3]*UhYMB0o˖OmM`P+E csJ7"&GB ɻӚ5m;՞>O}85'*8{Aeip~Fx:8 v`d+/]36#U;߁}yWWH/O[\F_D:W"5=ҕA]~'O}Sq%kR}/YWq I KDr_L 2Re&ґPWrA4ZMJU]ݟI԰Ѥ?K,d-2fcl. k? ՠ2d$هg 7KL61u2z*,a^2a>7F;-jҜئX?q9 W˟W}}sHh#H1,+]}d*M?í&d/(߃jgxٽrn/9"u} (~fb`6c!Rs'~2 O}+%C$^t3>U?-é>iuuFHwUw:ed@DUZ&eX7 Xv-1l1揯VkEмޙuEh =bjdxQR(~066g`K8y`^2xRk8m<S== ^%+u>L=81t k:_~qA}v L@,'(c y[૑{sשs?_ڏ|DixmP׌+VwHp䲜# {*w.ЛAW+.EM%RgG-q%3Ji+<{rۿ%]-~ػ@8b]J)hY/_4P;[s&uddnn_}ije$2b[K1И+f*"M3=i5e[,W;( d< A#^vc!]Z*vWkl[}<.WNO2:4?PFa"a)' }}XiGodđP~c J9L SOtGѶ v|bs ڞ by)$L>1Frs{c0,uyWt7u^YWD3{3*n'w:<>` \d>^jJ^^Y<~>Cu<_ @G8Uy zn*z~уa#)=nJJĄN h.Px) ]sO a!|e^#o6:VQGJ!e,/KgC%nk~uk!jϔ0p\ #$sϗ9Fa^wK3n%<Ԝ3G!TU?^q\ N_L9kP?D%?ʔ{syi+tYސ_+3>a o$j2n|K%c>ڋzqXȖHnMU'ZTX j#*n #vP%!nxsfV^31vHl4<_рѾJQ53E ">hik}gFj#.BYRԼ[ߺyc<},BGU|~ (T@kUK1fl|-ט hyOcKld $ 2 $HD0xJޓU}<7KtvcDD<+Y9zU&+b'/U&HO ޽KL_@s,q!|*&d0Ssx=>~t@J}^V0*8G2#kע0_R@Z|S697F+%7>^uQi}Ra6o-P*x.N,:+ IDATTl$ah]xU}cg(!|@_.2XX.yP^R}f0)yj?^{+99KJ,W/VzԿe|n7ܿn/oq4Safz꽙lg9we~-OS;uN8K{w P%ǒSx M&_i-&Ȩ H%=]`7ʰ#_!~2N'xT |' zNMM*T@%a uj[<=\n1hJE .,*IA|<:tuRsG {SfjƝL#ďq1$c~ItTvD`GԊ4'HK5af_{\x/Aր2T%!)S0BJ E*;Zx'~m=?u6 M?@n8F']и0uh'SjːV#iF2Ҁh X{-[99{[pO^(sVs׮0:Xj9Y5/@4311٦bےALEs|zBۥey>~^z>ϐse7X V=c6 f^z<ϐl. :_QSa\Zk~[+@ƓehGMpo!wO32_RWGV.Mo $!GΔD ]te 0 O+0̗ |t^8mn} x?n( 1 wb,2Y*F߾B^^ͷ袕aONf%͔hL_/Z -G,ْU^=8k{ƴLy~d<7r_V>~~||v&7LR*)8$UV߮UW*šMa=@@?kY*vOç('gu<J"7}KOO!9#GxD"3U#.`xuYЩ &}_TNt f][wsc| oWrfG_| ..<u4T:~:xK~n{Dzb=6R7xDPUY~C1b6fh*V*{"2V J t0%؃iu+!*wGnS-G_BKx71[¶ŷ%tb<lA`COJr q a2WjC,9q_@19v2uQHMH%j`iP|̦!t`z^6#ɘL_c# !Kbf^klL~^95@3#lBɽT3_ϗO&h4nR)^?/ޫ""VKe+ Ɉo)|5͕ vgx+ lEzRmi4$ @0c)E?U]S+Q?pϏGo(}?nėBSP LH…A^ qy_YsP7s;of_Aus \2Om =`p~&U>Ia}/ I"6&,1 oR{i{27ƬIG@զbh*3epge\ Ĺ>J5=7Vg{S6'NQyChjW\q;bҢk'̘UwnyxtBf&6y|SO^B|Ҕ~}G{4#&Sۥnzn;cMlYH6JױxU߲aCsvw=Q3u rGgɮ[6r)n´V=fY:β";>ʤ>%L!l{ _^ekaL\)/l",^VŘ)9LsUn`nm3mxQ̙L9I<]W'@;Z >HHa^`zfms?0 mftRm.]ʔ&ݜ):T)3Eή>$T~`H(Ip5!ʪ   01Q!kYzT$[hag&E/n*]WPX.Ok4찝UP9W(mj?vٿc?u BWzf?pB왇*Zr$b`FML-v5^a"(9Y]l^&K9Kuf;n ^ƋxC2p.KD ,&U=Q}8(2iGwGd`p1M@iM;ǣK }:q^D4/(/G ~@K|@.=C s ގtm%@\RT632`| |?6"Jkwgs"AcgdUyS7yʺ)+Qz@sT^vanU}B0\$<*/H{K+f$e<7'wPby> 9F\F yFVq D"on1랁G% d;'Q^$|2^uKۍo.wϪEDBI >se m^Gݟ;q^,<>sKϗ~>x~9ޟz&|e鯺IY'@ߛjhW_A',Ua rCnܿv\zOk K3 SȮ^QV=pަ'c<(BO+h(ML7hh!lƚٳ\|ҿ>3MWr<&ǕQ#Nʧ U0kR'+[c=U_Qۣ/}^kg{Y{C7LDzߺ_u`BPJL@G!F ^i%3~{]^"KĖH3QQ|y/M=X"djcoh#!2ˈNTD'p#pY S!ayYe29a :PAe?]q䁶|ce@Gw+'  =ֶ_o1>G$ureHH3FjO (Bb.jXA-0O^_(ϓIfMA2p[Z9]a#w}RJsO%l6x廵0tK4ߥ)<=bcIi#SuYl?}@> jX,45=C7ȑC#Ai _'yr,%Kem^Dyz"F7ͩ>a&f9 O8zu|JYEvi2l!Bagc%гxۦy뱟ǡx'2~_g?ϧLsF.\܌PT-{ƳycU/Pt`E i͜[,m4ȧE/ุ 謕:Y#k1]Hco#Hl*5h^f=@r/-plhwI4)jp(ԅtbțj? 3BY  rjMF"tjvpwesK綇'|qשmZdbkEJ"L6v;n~}}}__Frh3ZJ?]00(mO0l"@<(ҳ(xuyhӦȸC:+y g4>Qc SȊg._U^I8u lrJ-Fhc h'Ѯ_h\nW/_yp2Mx 2Uka5Pwv3)Ȗ%IE79h!UFJ`2\8*%x_p[?`0X!CB:r%s`4I"HIfx?LT[Lf#Gf~:H@pjf (Dnlp~r{yB 5泂6Q)GT}*cv‡jJsBd(4%{ e-3/  q3<Q.u(/t÷#XV4P:Zhe+H!VZ6YrWiO$ r5C8}np!31)y<yzv].yx=6\=9+h?,UZ ΐo80Ե31l*e̖.U7([+ߺAer@ lV!H@ ьFa=:xWAg>u>5[Z@qeg[(ȶ ,#X& nVf@f@qrC1ʙKN?~m}fqMOR~=|!஀Su DY.r,x?__v A!c=[.gkF{%z, x_#_:7z/nc%fDho)'tucrrFSl>5ϷqtPx/ |"qT E"BB2j3K2飰ohI.Zd'~UKMRb\ɕ*6}䥛b*Gg$W8 ޙ?Ucm⾆aOY1b4|xe]f¦AeݲY tY 89";qL6sL_+J3:zE(kitXq\_=[nm ?7`KxME7!!x2ֻ }{P)a4}MTA!Q7c&aھ^gzQ=<üȻXn|ǍCCN \׶'c^6~zGVSϭƼbL-#K1 u52^UR} O3m7|8:_w펻 Ƙ33#ںԒri?#ut ݶxx^5j W,2`Ywb‹ɬfQ(oܴͅ7프L bjr&Lna .NȊDcӶm@t={N=M{"9}-HpA?!fgsgnԀ># 2? Q(*E~j/M|+&:Ny3mMIqiCבF#x <A|XF(AM0[H -XO5TL]:* ,>gX9-BP1)WP=q6=_ᑷ(-O+-yQ*Vkr?aVJ?_TN؏e~y}տ {;w;nHHAuCz}h[-@/TȦYC35 $?:vb:*3`||>_ G<~z||yv{<^S=qF\5R2hxLv%g ӓ`|mR)ը>soIL k3aȫbZ*Rm η8)a"i{Q{MtgAhB{quTT 9] @yB.tYŧDX=I#" {G2^s=c!2 c~Q!+' S\\m&,i+ka8QJcbA'uֈ F{OU4%v@r5ڍݸatMAuedE(fǖt#=bb8.ή;iqBeQ{&i2cָj)%@Ad1z@?70P0wsK9Xeߋ淔._toI>? S2GTgڵ_˧лLG\s| q O4mHfoŲh =ryѯ$XYDq۝;߾frJeQ[6M3KvkaG䏏/^X6˿FV*ޫVSr<#Gd>Y^gEg'(c_Uh IDATЗ#=`L_R.%2#)I">+%ԴRFc2HmnbAK}~tVd 0 s` Šf;dXObn,}yc 'U6Ml}WmeEnC05dM0xl,7zxyt3hZ2LضUHȶB$9dBa5366|!U(a6pgiQɛB;ؓBC~8ChZ@c%+L@\c1h$c{ Y}BIISEģygTb`H)k=/D vxǴ"*J]\vUjSU &ğ3tw<hzLuv_0B홛„!-0p91`ԙ{MWRM7&Q:]n_|ۗw:+•{MRqʆMEشR&i;SP Ju`WNC_j߿x>~_+3-ze|/t߿%;7^ pw"gxZ4h Jm l\SQ3֭KA.-JntS_<x~)o|1=:_>cԟ׾:UĈ=Y/EN;6@"} )MfMk=RXd`ʅ@`i1үEٿ$ݎ~| VH<Wk0jZ:_ziO- P\=@I05jѿƤdM,Yy4*I]iN\ ~0EUwFo\ ~ -%KKWBY>r >z} <N?m`lQvK=wۣOҫxQ+)KMnDct&*ʙ0Xu?__߮v;"\dZ=Ʀ&Trk%$| + ۫ky6+N hlt`+A2FFiZCݸ^k峕r6{ dX $%0 -Xehx(CNQ4hb/"z%"=Gĸ:g,M;@o.嘰TlFf( NiR;$lы&]8'&Ln`j8NG 'QCT"q͔I 3\ nOeEbūre ,U@ViӬ NdM"27PZ|W?F+_bA9,:ZX&~˶$Ƹ+~F(x#YPGr:,ۼbLsw丱Ӂ8udϤ`q$SENe0M̸Ѥ"Ռ\' [ϗy>? ϝ ھ'FƋ*յFtc:WVH-ZNa%5WF!@KI2|6ntu9'GYX}7̇BTuөdSϗvۙkI@ٿ%@ rfFL˩(›5h lMjA2e[T[{5dq6\I] :Jse ╀t)zſNB8d_}m#c4Z:M"XoSl6w1f^KcnXB?<7rDɩk+[{MXXEZg["]3=l&)1kx6qaZ*q$tS+C<]nqgˍj>e3\x$x , 1^b"dNzAXX#KޣΜZQ_b[#Wx*w3W}9ҫʍ֨jl3r` [!a1\kwtn$!w`_*vJĢRA׹NNAHڗVWKh7S1|c񍼼nw9n9'C+"m3 ENw EڙD"b薝\54O,y:3&'FO/  ʈ7`=҃[QrRk[/ʘFDvү+iHګ+Ff5AI!uc> 2Q.W,+;/q dv'lkRlNm{)=TCwyra\&%˟c흹zS^xKw}/*IT{tcI2i*j(2mQaAWB)͗* ֓eiz&+W|,PZ}GlLB$-^)ׄоڅ%?P0-ܥcGQc#{.sNm a;**>99EFHzXy N'QՌէkqyhі]lۨ? $z[<di5]Jr ˳E P(նeߢc*p<fzO-KwT+w.~)/ ."{oڛE8Hi|# U4υFd)|$o=1Fù*b>h .4czP&Wp3|up<)x>7Z7̋!DZ McCd:1SN11Vxe3ot"sdZu;cbD|i.oi}=}rx{S꣡ţKۘt?p HZ~gH '~`ڭ\]IdWkV,@B\#;)+j}e|m/ϗ2iG` (}Pπ %@>Z.+Su'H^BV#)AG\!92_qzO77J/Mj?/:k~E||N=KLA:Xod$ % Ǽ%_ lO UU|&f)t*YuS194'@ta!8,FBbF{7a6TރIb7 U0z>B :-+"j rDUYid,ĒIrD%@g ` f3uoQOrfW𻲈FW@A3Qˆ$y"v"^Dy, wݻX7Pb-Ȣ3C,J$J&z@+ O9/ HQ1'K@=N;D7{y:'= OߗK_|efg\)e0A>54$MUfIs{VnsɁzdCDࢷb T7ou^j|eW^Mdγ*@vۺ RWg鶝3F!%ےu]@5 d$`1 : O">$3cpUDܖDGnpS7p+Ks,LUsu>9f 8G r1 㬟?Rsߏ8ɦUaݑ,>@XpQ^rLh2u 鷵>36{cxK|)i5)erޭW14CMX|dB} W`CKtEdH >F/.[\b --fL`TD h]0d1*&vf<{/j)xp`;acd+N U2hZPDC`V2xFYBt^ĖȴfזICy3J8?qr% zo{lH,z淦گNUtJ+]|2p5hW!FtTTPt>7mԕ+^$8pLr㳪$r4sEE|_#&dJ$*z詀HolawH(0.2C1Fx *rު4yG ;jm@4+pm0cnR 1. 9qC\ԲBo>DgZ$R۟w=1[ʋlY"|gTш9qUAV'MhE.a^Ke,s \o #ppyV&gԉ#Z 7T<[?$䠨[JJsۍ 5T/Y}Lb3˹7VfޟP`ݏ tTDvn;]<߿?c~z>^zhYu\`tWAhZ;/'_"%[uQɁ,SMLΩ袕@$ċh1{2 %FĎjAI\xFM[ Ҡ{ll Y̢(d V_`(b5d#@"yAx_{,"ȂJJsLj,.XO\{=EA/H@dܽNR*Ϛ{?qL֗lJ[O>hX&c o___Ϸox 1 d" )/ruU$:5j! bK!& B>u hլG M\WmO>=X I͓k{&J/۵3#tޞ+?қ>Nuol 6W˄YZ#=!gdTu jӍ{%;e:|}*>Tu_77ԭ pIÕzcY\s3¼|x>_gkM5_3]lFikPCjBdxW?K>-p\RV\^]7"7;ޗv!.Djԉ)f%Rvm[ @d*]kH#hLQe&kzWݽZZ !("+ |(Pc {MO9\%x! /a^mK?ٚE.OPr̾|~uk]\K`vdx|rڭ$0p)unzp[> ֞[(s<IJ1RS~u5;9 GǼqw%NͷǮ멷B_ /Jzx@Hȣs۶>ucS^)l9H.!#d07N<Trl .@qP݅KW[S (kkS7N4s|&rkz[@vv$)r*^KJI董WKoQPqeoCx$+ݸUe.Xeo*714ؒ-(3P0(Sg;kr( IDAT, L#K 3zko(^{xFe#4z{mv}G W0 ?"uחVY[/iP11<74N}(ޒ I)7M/Iwcs,?.?n~nxj{L%aeNHH‰\kk mC\?S=2U<~~z_ OvKmS5̆6ʡ,#MSӄ|zYTcb!T7gU# 9ɭ\h_JF陨e1)Lt7 jcV!%s#wNzDP)Iy kw=D=nJ ^#`Apw0Ϩ#NbzΦٔjH5TVFv7I8<VrMcf: )niKni ~\h[(Naγ])9Ϛ}UN2ccg׀ @gg$ 2MZUy1܃lޝr2dp DiǞ)zdCC X(b黎/`J9q@"HrPPei,4Gbqc^F_*b sE튩IV̤}zR7'ϖ<_9?)ђGgitez?W>R 8G;z$zSl; .aKjK) qr I-9dEN㇢Ll ̛i1CM( v43 rGyn[khyss!=gQ8}AbYv>=N}ۡ^$c,ءu(#_έK BcDt=C pwֱV=ݔfAگZIHϔr egWpNUCt")C ܫ׀vF;k Acҭg0MIEKreE" KdtRuM34҄z$"8u*T| g<&`êŽ r5zR'+F ц}J6p1BґʇH-1.;vbt177ș2kTy\KăXRP7 :3̲ˠ^71cOSߧ.jlۻ[ݯK?@3:-#3$? #>G^;rMJ7Ge9qjQNR *}cXk@^f_T&-&Y^ QC||"^տC~NǍow.:x-&$XoT3 GqZ, +~Ҙ W:ii.wDw7S{cy|=brwc3 a-|AT%MN3XZ>1)Fgg_~+ʒhϕi.cx>߅NJ&R.LqHUbk b$Tu8<a%@6+(eĨ֔5SL@3˞0|Fن+7RK,~ԖN8'"KD>ȁ@((Rc0UlohxE{v8M8k!:^/g Y} +~o4k4Dr1*}vD#gnϿݢ^F!#JxɈY`eٞdEV)OЕ/QJɄiMۀ,w{o |6>|:*#λXBD]`Fq𫑯3=ke~x>x#? H."4cXOu[u#L9N}=voXO'?-&q5%%9ptc-z"oz8nq 3X;#9/Fe3 4U}mWZр" ʋclz +֯cTYd45JaWF-f]P1T=3wo(HJF3pWJ]WėAfbi(pJ.B3Rq7y ᑙa-lAoRpۧ=H/%}Qk)NƨׇY2 :D/6ZXtUBG }b@H'}p'l >%v8F/sg. scܿlW@`׹ѱ{e޳kMv,Yġ9I¼~Y k~' yFf{<̔>0"tqDMEt U1p(BJ/u?qq^pO4 b(X>(N D#qcj+}zQKߌW"#jH[60 {ES ^"Gstk̬=$=VBCMW`Lmd4s0=XHm?ڎQH5&Qn"ݏ*dVDBrB;|I q\$5|H !l>7:ڠ`N<՞N (Lf(to̾* c# n ܠbQ# DEqMba/\$>>I}j4J= $PPk&l&rsz_oP17T/1Ox*p-J| lbEb_KYLyڨ堤KxաkU1֯*=|1īEo9LہRb]}:}b#WlXMJ7%8|Qe<֌8T=xeAeOy¿i#@Vc_*`ިOX V?MÊ2nF@41Ž~S|=}}7 oϭmDrj6NqcՌD[~oq 5@XkVߧhp05bRg/{1$b} E3BHwunhV$W!8]"f6SMa*q Aω,%,a`Y~*(GA& ;q]so,=@gqT\"HlôHEIL>w~=u|uf`RT]2/q&0Wx>Uw.T䪬8(Ev<)AaVLD#ywKx0dƿ ,5<ZQqcl ( P~616k.=xxoLgsv39?Q'^z!P VF0Mˤf]K#D vDpZ$"8_,.sk%ۜJ/k#QOƀNco]`+ȟ!S(W{KUŭzĩЕv(?CI{,!K{:nqvG0w{9?$ϧ3P \1O8.*ψ?B"tW""eA 9wӄ57Xw?r0k2XpߞS2wDxH–fbVb8)XkkgPR]"A P4T:KrdW JȤ.:Z%C+#-gːm2iwZ@)Ew0*S#ܪno#ֱoeGV4~+xΖEu0 KHZyfc%Ӟ&jϾJ[ K8~>Fp-SfU f\GPH]ġ.. cc*]SwpG &Vyh`37Cyx |2d#CbX|'Mh~32SVJmʪO;O{1^M?5g|OoM5p 3B5z7W~@dq ZiLeE՘ d` /!* 1Y-18Vox8cX >:||E%Wm͕E37 WMR?Y[lVAFDy^mE%uoƘ|9`=3O `2 0/e`=Osc9_ljPkgש(43oLO67"N)nߵN%Rs¨ hF E|k5 v($,&AWbn>d9;W^r`l-B{Y[-$GqqhOޢzRPRfpM 1MW̡V]Hh҂j(= fYqg IDATt6E]cKO?jJ3e@v}DNU Ir?1+ vڕ*yi˥1/.?`Rm`J-x_~I1s p@H'BߐTWjf/7J%dhV|Ǎ0HSp̀aTP\ _7e8 y忥9㗊}QY R&.\Xc괁ߣ<-ŋއ#7ڽ/pͿX $ʬ$w}St''GU,F؜8Ux|#x%!! Jܵ3Q@:)_5v>x?ϟ3>^?~~ϟJÉ@Y7];hHEC!(y 59|qlWp] l̫CPPyznKy#`=T_  HH~[fنMs*ЗXLTI>>???>|~~zpFpGTv׈63-ÏD[Y:Dۃ_*Uy>Oqy絣'ZLejLܪcgaB0 51Ogg`0lu8lK.Qd {|aYHx#dboJpc^EǧԦ wP{c}`ˍhWHV6l,bdV=ĺMy->0_@$ܛPh 2O9&"Tol-X>Cn*F4a7mO[OyitMe5L(_{l8%z xK'j嗟/_O =0ZCj{*.fu\>@׭o.rANOUeޱX;r'?A.TY9$F. >}WvL7蘂Kjfq?|,*گ~>]>~^Ϝ߃Zzz=e#ߜ( 7$C%ǥ; !>N @w/[r0QTXb؉ϝA:߿;\*8|1!%cpVl=o?ĵh|t;exKw֊|-Fלv@ȵRɡ Gz;^F3$-*ÎxgF]UT_[>a?=[ũ( eAs."?ֱn?{ǒUC|c+jSy|X)5aeq%:B̪"3ynNe+SĄhYv=LeMt9pd֡OWҏGA@<±ip!aSfSYڛx'k)I6 (E\ ,`!,χ%.ɝ8956E.)/ɻDwK14BX j3aKet4޼sf&<d2n-j!A(#rXdU5y*Iȵ&ٕ Ɩ 3{fZ ђdIg\6kfva<|GmA7q&-j/B~# 1lgQ~,AĈ9G e cn| }O胀^0RiU羕WOfkZC>OiGRF)rux`,47>>mC[mB,#f.CaQV7!ΰ*)vye6Øy9ߣy栄z7QcgP`n"56x> .D@;ȗk~'zOod: /ڟ–m);%kc%\ФT F-,$yf6"2fI" aQX3/Ynf݁]Bd/Ì3&r4Δ [1{DEXx^drm)j MՄ`E4 @@aT̋Z d? &@UިAU-knه*Γ k įAcƋds}یwl^Չ|^gEdFE#IMd>^'`<|qi2긁2JE]dN#Q&a/mp[5~-O}LA0L=:p(7-M~nFԨ[==Zq q+zlpW{ $:58d-^ 2O ketC5GI^FZpO6@:qd""f'>???|~~ol|o[lJ 3ca!@5-KVfn/J2U6 ],0~8Seaѽ o&DPFj4x͌r~6cl8 2VIo1+OYmhPD|GeLrT;WsB cʚ "iȔt*iBNQE=HoL-o\\?' L|jd>VL"]|ovP3\]6S("j*${(ǑAm͚Aɵĕ祁V'pG4.+.¿_%fws `sPm. `v׎)?ٮ0Ewhpb3x~HZm&^-#8q`uPc.Db"0$q.[#Ƽ ,OfsP "`zzM:n|"_ŕatAy~(v,l$xb"6Fv@Ws +/ *~Cռ=~??.y|}=_Q|>sT={e5ց=30s\ǤG!t3 wA"{ȷiըm *g=^x:NoZPO]M\,41ޢ&=[>xsk]]*}Ju˘<&mV$]LȟWs,k eU8%›EbAR`îIm:B!쭝Ķu=hH3IS|^R#\1|qz0z+GFocDL6 RD2z㗶0m kfazsf~//sl=o. w >օ; C0 ˄?}$PsXZC޼K&%^{2)|g׍;xދ69,-O-d,akpH Lkj5};LA\ `s<|z=~~$YKSX,5F9]>t0U~]u Z eS#0W2F*s7b͔,VrB?s3IZ@"E c|l\ ?ʐk3mwHWg$DM9R2jzw:a6K,CSmM/T{]g Q:(ȱ6E?r%ᔢy 5߹6W!AN~kd}~ߞivmc !LT x"!>kcq>>~#%;YwL ZdjIDTM2 qh )M[q8:yWz )0`\ _~ #<q?FmKfFhUNXbAWeױ7,3̔h1M*68=ݬYNζeyHv)e Y5'V˕|ZY&\D1>6aUۭjV#*\1\t{z҇sg[hxW26b"%AALL3m$  @RgTRGDPyYI}a?Yrj*h35;ScP˖pЛK]M&-( [{Ъ?ӻ~Zr|._Ui7qE" m575kUxQ2=9!?[xF+$lX^Z7ڈԔ-F 넸*_(H0./O3{pϏ_|FҌgLmvoh1Hx5 @Syieun Ow]S7~T*W&A!#r\kanfa=394~[3Ժ6 Z̋ fb3RҮY%D%t`UPsJvr6tA `_;0{Z0~+PC`lF_G$k ~kǹ^NJ?=DA\p_I\|^Y<~ #bdi"WRkA ݽ=h1P 4WwTK90*}$4(r~ HXȔ5M}~~'!$j!127}2&WRfPsLܮJjܘNVQԚ_0%^TuIG$eq3.@Nj+7W9jxfsUܧӂ&CqK3r. *gtUt-@#jܜ~!12B4UJ4Nrnh4fɲ_TC @vB(KjzmQƳ!-qPpk݇~rݞG[XLe߬ᅦǢ 4u25G(Vf9y,]}E6 i=*>RU%$S v幌Er3|)w>nn|n_2.gULu2ЦoڵXw @ԩ5*53omv3{}f{p~=kGнoF]s눗+92Y+68xGbiJu S4vŘ1Sxfܢ_͜m?\^k3}e9#.ҐZPN<yտxPߨY k|_" 4y.׶W#t |N@ @I;P#U]63I:hؼ*,.,^wtjguX/bbJ_聿V[Bp`u{V:Kz ~QP3;z{vF(|C I:ݶ]mm~gHZƢu_tw|nPL"u-}S!' h;KMHL@Kcĺ/\zJTGR}~>~?Iy=U#*"`rDSSmiA.W,vZㅎ-J\KWitէ POUxiޮQE%mQǥҶ[[Q 2W([|& |yCY,yhNw -0 DX! ySR= Xq⇡ZB6Wq̸^-dJ2*Ͻ{ gkK]c8nشltTGyq*y>^qJQR Eݎ¨@UvnɆ@ IDATq;nq܎l nqs63U8: )x. CEDčq=K|V0NɏvggЕWGH;!q 4CUz\qW aȣ԰D)b!4nErرy&MUCDͰ?u? ͏7?Wj[8q2]X zgOWah@pZuMk?[T.~*^83<"&UvL|μ(RP{A`}b,>5.gYﴸk/ɔIAp/[Ҏ=MXO_Ojx4\go͕:~>V#-L]oܓѪRCLd &$ 7cBeMV 5<Ց\KH_sjJjAlhD¬arFjZ/q\ڏs;t?L[k#2x o~o{T^꯵)}mH֛wQݪ^Ciz^pgmXĄU\ˊS" :F%o(ҙ OtOb Mwk(WV#<$Zfjğp3!FB0Y2 EӔ4,^u p,,VU^+Tv_z<ğr97S,D O{!lLa<ʵf<(fk1%b8d91THjWD]|tл .ij*Š)l:xn_^&hQx/EqǍow;hv 6!<9'dczIȱtBK^, !͏Wwx]~|=~^|>?vb@2$qfX!b\58Mi\N$e{@ZeЫQ}|>?u^귖hrZYjW#WǑDd$DKFyO2lfĒM%#kߪ mv0y,- -msA(rI& `V#"&4mLm+$v;¯P̵}D#]>~x7cFxu'`YM& =n cp1 ƌƠ( XT{=_U#fK,UH @L.ψ@I}99-Qv=8R㗸Oaq͙ȣ["ʼK9PC6X͍0.ʨ͙6D%/x)q1U@d`&^??U|}=~#@s?ΗӶ6Lme8*.Il-Rbb@̺5lo?g#+(k۩t*oMjGԳ ܉/k5BuϏ?>?XG r8ZF^(h5 >?9(>PPU%:Tlpӻ*]o]T #WHu Jﱡ-y=F VFH$ ቍRj(sd-g_Jl*ucPݕpL/z+*EAĵX3R o`4-ZTTG$kqjD$WߡJ-&Ct@pcཞ9[I=YNBĮ1SW*wYXML-!IYLgR, Ծ9.ŭ*omF9YgkQxmfx "ۼ!Y7/T^&ܴI9/0jS24r ʥŘY]hBqүЫv"Bwq-,:E?Ѻt_eF-HZDZO3D  ._ctjo hR.=Ȗ ~>חc=_?q>=LSJ*ҿvI4.;)c26F-exlrz%GgC"0rMJ{36>7iJ"A62&u^ PqRzle^qyN/`: RF]bdzw i"d@Hշ9h9Yx2 OFVț;KmmrY|^EǹgDzv,a*)yo&%EՖ!SOv=Xn!0?*4|Y)0]#$szTk~kt+ OJ*GOV24=tY.P'UMJJΒssܱ { l}7oF`=gQ!`QPF'.0* 0\C4ypT<2X+J)<8+Y<㑔Gb m+ `}W_Y+ YYQ3C1%tC#o?]#x| 狐i фc~'6$s:k ipy^- 4 4Ƚ W><lFG nU.-6?*0qqc qQ%ݴO'ͼ2켐H 9mHğ}qh?K-o^j/+|).@ .* ceC`?9_x @.;~t$8p24FSPk5[v24Gn`9]0HPS_%iʆ-Jϰ6Kf `&sIjĆR-齺6_OV Jks?aP4['08R~a A;(f/Kee6༃z HL xC09xtQu8BVF`  1(yF !tJL \1WOY >y{گD8kp ɮ[NdZ.7b ڬ;П76(?6X7YL+pZ{ >R)-GN DVtJl3*Ltt,SCt*F/֞yGB+ mu$(o5Xg\W;CD lHUPed 0$:1oצG2|џn0{ز8Nl#Qp T0 :E ّPT(t-kЂRK''@k?ǵe7(xEKurb#aRU#QRvZLk*&(Al!UxGGE݌$"/_ V (/X<ts^nhtQӜ,vkMzB%3.n+5Ca%1ڕj@:R oxXfgQ mϝz'jL8ާzY+7JW{\@#4ҵ䷡c^c&Q[23xS )]w2eUlxҖ;:r/տN;>r puuV(ZNMHWA@t0BB;7bzܧ*ʰ'M4(x՚J6HYCX`]DAdi-,xv FlZ t L?F3uř*5DP PKCaҩ*kI+Gme((X{p}.pbe[Grew.ʢ'Ą oGD) Xxx8նi1i|cx3,f3DL^uxX9e^ko7"+ɝR6 > 7V0ZX-וji3 KhW8w5SԖ_ku#B"4(Xku-DO΋zb.|IiG6ˬVaCwA6Y H!հXh*%zWrqljƑzQ3ꋐ:@̳ad,aZ.GDԍ/8ƻy`^9DT5B Vqhő;OjMQak^&3F)[e MJG%I'5=oހ%!eUr/8`Qӗ!t0Kx /eg2W>6m?._6ˆ9To(Ų` Bb_zAIx#1T,-T=ANǍ[Iʀ<Zα@7p )y'̴D>%1}*WB*}A$Zͮ"ҼWXVf p'ĵpXbxvK(z ~U*SxN6`x%E^S^ IDAT:⓶h^`QGR[gW!kNhZyCW<ڌ`ubѐsoQTտʓnk6H+t*u6<| &C@_|euM64@Cgݾꩶٿ6'{xͷ9z2\-'0r|oqoX<$g&gD4EրHWRؒfN`(6kGDw#(q(ӭh)֟ ҵS˨?cw2KHI"|+8FOP.@ƈ6/? HO`K}+V\&S1I(zmѭ{[n?$db0iEPlHZ`/o _^EA݃S·$iYux֌Ǹ0I1H *2VfVrPy U1pϱam>Zcӓz^N@,Z0'b.&;Piv[O^MqN7]vVT:l^Jcp;.,ڨ(k/Ȟ "Zgsk"_p9yyd-5%D\+A@vTM*?B]ӑ Z4F)LM$5=[ܙXT?!/Is\VS_Pīt_j2Kr^!lV{FOW:􈠟*zjKکbimx22jTi*l(0 Aع;-hۦrC0%8 fPh-e?YXëa" d~/_DwCN"!zdp*64߄u)VV_D Vt#Τk/c:c@i;* Ar"Gv$E|oyquf(!_YZ,F灜ѱYx24q@4rK -Ǒ60u87fT^"_w$z{p>q^|NHؑX,ܔEPUո׳d;a&%8@YK(V/Z pYakgA8)ʒSVB܄L\t7aD"cR̘(a ڞ$ }\_8h~I֥Sj z~r 6cQ2fDw]r`}{Ösޯ푽;G:R_j6"LI>W'NqMz=d$OPWqK0*ee +jQOΪo6V PD! bN<-@/F.Tf2k**N"LyD [Zg{pXDAУ+72ƽP`uyo(ζ#0EcɊ?8/DzڝX)i6YAkM-N**Uڪ{Saք'lãCF0]^)eͲg7|e[}sWӔ6@*}bũԪ[nbf${Ƃ  -13nOSx+;T_` {aIZHМ.`!sC=s/|k9&<:vEJ1 ܧE.ie_{ki-[Dz9?p_"x'ɲ$ RdVהi05\mCXAeWbq⿒^~뿟￟ߟz||=|n׍tpO!bv1[&'7'f]W3 ,yP㺮:Q1YR_ћ%_qZgHzWR WIԷpʤLMAOUedݼOOd *.u )!vL8ZٳLm3Lȑl/U~{R~G))zhğ_|n)1cAE@oT{0$K>xa'P9DfNDҹ-_]# ʧɆh9]=KPFWkǂcvn[cNJ*~FuSĽ]j|˂&`@)m 㐳fn_@.@hho F8wQaF0:>^bqr㹴FaEa޴QLu<*Ss $+\gSªXJF4z%M`,m~3B0+259[ ua5wqL8Cǹ_hK,<3LsƚVB sai>Ls;i7|n6`9tl'uCǃpD6{g1K 9xx Fw\$ рV)@LDj\t+|.ŧƵ+"fZ{ -cUr%KXȌD R .$%rByɊ\hէ>C~wϡu/e|TaL(K~An/Ԭ`x( .;,A8u>{dj|<_|?]zSϗ&,kDZOM%'5L`4$ j0+c^;RC#&G~M1[D 䃫[hxK` ~N /6K rW]ocd;>TI(󱙒*GI0 m[1L/4^5j!ո:>j4ߚCZTH ݒp>gXH%$'AD;o*1RB_xip Ls/M[Tzi |.ͦhP}p7pJFzVf"}v~SPUU7sT%cd5/Navstv{NwdV@'gZ y>2c#&MrdF^\t"r! %s;:9imff\*o{Lb$ہAW7(]h__|Yc3ʁ ? Cb Z?<8 5Jm^<șl9ݒn`D c8^cc.Y´Eb*\Oݶ xS>SgQyQ {m'ly<j`|N3zW 8%~<^hSŞD\cl?=cV -gY':Ȑy [r]}mKe o@JBHABɅWg."ݎv:ǑY )EtI"@|Ƶ5=}$._#1[jw??EjCժ%AWJ`ʾfR9kͲpj_/H"GL;S˜7{FV"5]br6.ͅM 備BiٰoMmd|u %PP3js|I:9ro)6(),czlzy»揤qv}MY^Ae0/VAc%)p mcj=Z?<#}v7f&wc nm^Ȃ! {)^Cj 觳?ݟҖ% Pg)p9}_y߿?߿>?2k[MKZNAW6PEDLqj~J+Wadoɻ!XQ& {nIk pqh%0$ 9ؒZ`JIMB)mDZ?7Sd9|!Sx%Zz$ Ü#>ֺEqu;pfLK?N3ojZjQ&X't2 (R&nˀg-3@KX1= &L5'1=`ȊSFupj\цE dn-ѩq1} x<-\ԒC+X SUm%aq]kSElEb<]'T3¼ 7q{8}yë\89]|4Ugc`0T@܉m6{(a)~9sN!a]r`i*9 6DR[0 RpZ2z:e5ϟ Tv"`Z&SE]u)bG`$y<"wL&mٜjP,w6 N]1#j!ILCH~έMn2yGZ[z"e7C´I{@jY\e Aݑw }Xu6E\3m̽gwa_FEBq&*sSuF?m}Wʉ#_DhXvNe=o_G{ $[^?aσ`BCcøxx0W۾٦{kM0|!K#9clsOMw13)}~~~??Ͽ߿\u߆͞gKa,*PBǘ$jdI@m:IOd Vhl J$qB%R^Pv=lȠs$KE696QBm&M#T^j1Qt՟i2:Cx)ݕ=dXzy<Λ)=kRj@mejZ䈴zE0ӓ?OaSϵ2 N\_b+쪘6ccǵ=^W1eOY2$b>T:/ǟ?x۸}aFε\UҚxD Yī^)Ly]GŠZgV])lrYif`Ks) $*w:;Ɉv"8{5;XRt#rs8^5$7FV-JN{ZEM?. ^$,8Hځ(}/L[W8KLF7 EH>ȡo7u"'4Qr=-IyĮyin>+B˜08Eb7_@Mס܊5ۤ;Vu???? LO5aN6DE$] Qm80+UDZ¸I/ڏ|"%(>F CPJc}fELς3%;XMnp'3a hpyNQY󭜆/TɨZN NZ=ؙ2t0/U/0i vs "p/I#K~WD_,:a/b`J# kMGS>5ƙ7ڤ]f WD)qr1j 6ġqMSxg7鷜\jP{<~Z%k[ O|跡e#ȇ>qȏi~x?>x!Cvw$拄 "({˪clB9?̿&?Y ec5>?u~>}=뺮ywKY:<_*D|6W`.9. +w9>S֜pC~nXVW(o*nݟbO9|<w7?֎aDtoTbz9c Ȗ1K캜:Mp5u~||>;~ޯDy_iΔgQ2Ã5dpcuP`^#^iJp6*iCZژ"8|4ߘE[g֢\ EE؇mf,˔Z۞ @ɥ(h d$+Ics wza ȓ4}b1MZ;-hG-\~WoU)y}:Z޾/6Ҍ}\c nJBf=a?x-:86n+u5Noy͊KKҜ4"9qI[ b!@O}>Ͽ`` E *v#Ӏ,iV׎1i_F$"stsd|kG g94?Ǐuf D3#L!BH8ws8#7Tr0 EsU9_AVPU,5.>I&cqtNfRqtd(9-_O]n똬TCv}U@AgIY滑VyOVa)*(DluDe;pG,iE0JttDHǼ%l|-H9c@̈2tW RB묿 )Axm|~DlhDQ.$&XڡX+ SigyL Fo'dp^_ n g5N(20 I"^KeEG'Oy\_e^?zwmϯ::?a$%g2[&h+5/jxAQAVAEO C{Sᖏ ydNlMdKZS|Ym52F lPaSt iπ{X,'ޚ2Sa1;V:S- >6_uf^a|} KjຈP5Q#  O3+^kh T`-+3Kk|tRų>AX-jӦ|Lp|,KP=l`K~<}/<NҤftS/ cm`fX*J}g6!P㧀_o#FUu b3JP)K =lڇsLPVm J3u3DG:ǜ2nT2 CuE"b$Z@D s# .K7U Sal 7FDɧfly8f֊w[헄Rwߺ gO TlAT-<'PR&DN\oolI_av?O߯_XB`P^_`g"x->RhL%˭ yEy???{ۦiu]sεdAۖ>DH!R^jh"ˈ [ӡTJW 4R^_AH@qn5w2T h}ӼڡLtWh1bKPjTd|WWܯT&L3zܟ~O'=Ǘmiv5CgF,rp0@߱A[e kqDDIzX_,]I5u\s݀ے-9Wd[qKC9lx,ln}O6x<q<@,gjp>D:u+|ΗSZWRo[ %{AUB0i:`6KK[UϲzL{ Jֲբ#eҴJ`%sGXVpQqΡP?"PE Vv)Dw=BcBPJu7tƛ u'MFM<辭 Q-ʩ&.whI^,Ǜ+g8fsNGAUd [d# `BrJK^bڣA“{K[p*bh݋6=k\8}^???^~>yu9;oԘjITaI1PK#)/K֪j۲i{&#P͗dZ@Z5^Hrd:LUKG o%ͿLt^W1ަK}͜.ʲ>loZh}R pMJ$aC׌^KVoTz/ ^",mb$|"O0E~)|O%"  .fFqy{#J1k+ĕa.~j2qߏEx۶ɾGqx<?~{oFE7c|X„g~nnEed霃)1Ei?npZ*[=A;& ~/N)h\l={%RT NP-P:(F=<~1f*Zd߶cǾ;lIdN"\n\i:!"sK"Ũ,{(0'*"CҜ4Ƽ!Ll2|dex=@a D6{4_ń.U^hTLu͏SOCbzj_"')}jk6<.^J E÷S?痠 ݉kU$qPz8է+UOEa e[7h627+2K@PtY*O5W,{//v禔&hsc>m{dN滓Z` [sz#viX>#HVEf$H~Fbx(Lu,ߗk~~^~_uO$Eh+#UH'|l_ νr&9d=tږλ$ʚ.4fٶIBX#Fz75O`Lr0%jIFW(@dx|L S0JgTa{t k- *1 4UzłX5зi^Ǒ5y?9 h=>WUo[ԿhTΖ\"k//|>DZ?8؏c?zǾ5#X}$yZok#qCLsy׸A4 )fjR0[b&Á%᪢t{ l'Z7%:϶.I"5;j"[B3czݬDJUȱV 3bE6);% v)Z]D~|Q{Ƥ1I1ME{;f+#i žN)"kg &԰bl.ؐ7M$M%oΩoNʚ`qlQLfGj(QvZ}SrVKZ W0L( vˡHm5E!(Ruib Zː7-L pΊ;ΌE.Ճ睳w=;9аD%B jK)nma:ڜb"ehT&^T:ڻm*ݐ?[x%\k) d<:bƂă&N;{aeٰ3dX/o4O[1^׸sޟ~kS[] ʐȄdBem(a2JFY7R!tVTwOZ&HN XyI/4 |(в }߿9_x>X^w4—מC; d&])39+K!:8L@w|t\lmJ0VLHrZ⢿C|IҥkùVxUlOhJ$7 't|*V夂ua= }Ju|w>DZ?8?mc?g{<86g_S6is~ym,5KI27ȉZUͽ9GQuT7tY5${R1\)wiAvȌQ~ 8HlV%)I0.țLmkR%B-I7K2NQ%aSߡ?n=Vf;jk/W ,*1@o#j@I,p&3ųglss`~1Ű УY,)ƴ)Ȅ1D*3 tz5ҧۧ n-&Ni~sM_RbQb-\uh}_RXg_"lz 7!̢¸R|sYՀ?"@WsCl Cl nfvLˑQ"BfW@:/K۞Q+굙W\{}~Η}X=>9缮L0 jE%-9=V|q0Hk ,P?sh@aEv[Rm#Ӊ@\Ҡeַ aK,B\^41<_'6í4 K.Htjg̢=UZMRRi%FkpO1@Yϗu`.]"( :e)lT6o hZ uWi%rkbʞ0MSlg| P!1:{.. \[qU_cu-y,ߥ^PdcSPijc X## e܈jҘ:ў STRg.gt\d%a3͝t<=z;LjA~Bo˚'EMfQ΢5D24Z,–صuVJB6R6{B_K$Tefmtaa^VYCri#]m춹i#b۷=Gyٸ{۱ɱo.m؎c+嗱dfI4ǸPLuR$XN)?Fd~1'KeFPT -_Jٶv l&.`NnIZ~K1Mce:\ま;yG5Z|Tݔr>_r:rOc >}wٷo!co}wLӴ h4 ixn;so;.PJˍ/$݇,~HfĄ#Ȟ4;X8 VFYa{A&ű)=4U@Lio_[R0!>rZ\`n=Åz3AUv:x4䈢ːBKV]!.Q%e:9$#QKBZh/;m؋N $Ӿ&[iգPcބ`lic٩2HUٲnO]#*>_Pj= $PN(C8{sbbcA549Qy9`w+l c|uLɔ+3./Gd5Bcr~UܕK#<= mQi瞎*Xy?H5W0VKԶ.ͷ/6H'9xR~~KȼvS+9 v1yFB(".H$8\_p$ #b=nW\z0zz-:=שM? ; 0r *A2BP!\*fʸ#,˨~[3J䆚l,ڶF朠\rEʘZ9b 9 Ns/ZF2s=@Q8J |T@QsX"l=]I< 9fSOu*;`r16cFn-PMvf)2>A$ʔ^)6t9NE4ojj2Bq9*` ."Rkf&9㻦Ğ WEez5U̥_pMDLHӍ>I1pi oDBCKoBNTj:904$fKZPfⶣ[7czК?7$[*5'Eu^}n16ɐ\C0N]QP 56vhL'eP~vW*/Lt/|?|=JiտK}xacݑꑩߗ &}mERj26"y3x<'ef^!B߬||?Juz>r3Hӳ>hG/wW^mR8ģ|D(pPdh]^!V0͉A,^ZǗ>u+4nT(Qӊq<8ӱ^{a#%[XAfqXyvs:v 2rM\PO6XCx+M1Ďϴ*|esRˢpȌ@Ke)y\B׈ЁܬKV|J2uC`,f"\qVȐUݎm m8￿ԺeL}t]AF4oL9Je*h,% *Os6"Wi̤)R_2ub<.'"1&ԛS6W{\Nި cmzygyHkWBDk5]~% j6- jAd-|5RW )i=CD+xq-x2bﰶ93Hm.^QӤ;EJ47ݷEZWH*|fh@p ys~I6OJp|, s+8n\CQd(tH$9WK-⡪6gYǮ@pWƻ>h %̐+Zr#mAm2R2f}3nS3Dm$(ln<Z,= wLm AOt-?mBu dR3*49_~b' b69j xvŋM 5ܓqd(-EW.`b]DVR0ܯr+Vˍ**Rŝʴ|Oxfa)d|"VU'Qc_𫨶$/H=>Wd&n>Ij }~D(SeZ;(LaA<` qNXx>ǟ?sqcPE!x:Wl|yQ*Y"Zv/(,'s,ks8DA i'nCJ}!YxOcv;jS<\5{sփ\ P?Rǵ0dʟpPCX2GąRXRðMZJLE&Gן?|]q@:w4}^%>,8 O9n+َS7fRuF,qeurV9=E>J~j38"uD#R`.$0XH]@s CЕh{.  s欧QοU*}i 9aS )|8׭,ēEHU :2pA-SHbFN__{oح(I6͆uPQ Mm sXP4_:0Pdp cD'΄GxBAo0)Hx9mHq}~ͩzߟ~|X?oStlL3pJx'#gEZ=V@- N{xp7{/jT1Kd`ܖs)dH]Y&a^.orl.3oLlY4r޷U޹xA'MTǻnCj \4r?Ǥ[6gDhZLt"m2A$1]Em,s6Y^V }b3s*\p%x|ϿϟysYwZ=Nѩ?{I $ b,ould b:ci.*ic 9$[ i:QRlPel]ͩZHF^{-6@1AHIb ӡKKd.*X_"$U#smə 6Н Wn"X< A`sO jK88c10˧Z^F,Z u_`#ٍϲ5*19t&W) X:LqTa_Od[ܔ ;A~ym~?|>yZ59nu΍t#% HХ跦Jї˞µ]XҸ> {yUgg/p~@.M2: IDAT΋ X/[{7MxNwq4u!Mܤ|a(;HFtwF8tPU3$O\0B"2ѹs5pvEqrizL#-`Y}jn u,mF5 K0= ߋ쓑^A*D)DvAוˠǛ֍9@WlǾRiZ̮^ 䒈Ⱥw:o\׸/;"6f݄T6$fXa=9Y-T'|"J'=nP= ϗ~Ak3a:U-Z;i}_ZL7r\J(df.Ng-H}$p]{tTgs2lIK,jc}N ƿЙȠg;6w5Ĭ Lm sJԱZ|Wd|9y zDdrdlnf}xtB,F^ -c)Iy-͏^O PHL氀"pq7S*(Ͽ߿f޷ysgx1쉸<~Κgι~H4~aNIcOT@Mk@AyJ4'cjWm▔ikG/b޸)xR Tw far?OevG=nNu}}Vpp97xRc˺&OjVYPD+Rk`=GTb8"~<_驿nB[߲?h!Q6!TqS1fy|rxm5&yCרd#Inϟ liTD ahZ(n67VL;cq[ikU8sւdb#zlJѢp$\& 1W j@qpI;^4i ԲWf&@2`;JK2D6P\dJ*xEųs5Gߥ|u[ ] t亄8- Y6ʆC1|B"DFa0]|xP}+B b*A,_ a%0ɤh-='{E%- VH|@0ZQEU{USh2t0jłߌEi bTH :e.҉*2 FFjdVur2HfbQ_7/]S /}l 5[ ue2M` J`fڱaI0Jqk(RIzfly=j^y?y缬\0m*%1*SMEbNăßNJJ ZBPN&N0S4@=G*Լ(<"V eB&9V򼔁V(z>b9@(D\)fo!b9a@JUvUXF˪Q^H:$ Jd&`w(>Ҩ<> 74k,EBJ|$9jufSg|#xg;<#ƪ92p0FEk[_pҊDLtBj-Sʚ%66W&F &$>հ+|LkO$yy@xטwЫ9w,i5p6k;4\eTսHmNmoY3h<(%=uAqshcVؚFf̞qB.: +/Oϙ&T᥿M=}iX@&8#1e Ж`2y5TIkIa#؉3~sG_@Ƭ@7^9HGSWW :˳eyw|зH?9mFF Pceś2曩\Jw7J =3.(iKcx<c=xxy<SSM\6zWוxB;nb8L~Jш̋Eb @`Tsݴ玲ްBG5C5ĄW fꢁN \4=TE v|Ec򘾻*kV%,pωhİ,>Pwft֤8`y0УhYwyż*Z[2M˿lߵzR12 DYAniu`+6khwr=x(s6JQ~хOR%Z-Y# *{UvI>* mlc;SC mewP.˘#qȖ&Gu&1Fva>,m^P_e24JMWt/?.u ٫G-¦9B  ȯ%A@MطZV&0Ĭ'*%\R[4?:ݹ?㰡[нAa W'$pb'TG+1*gHn9GV"w3&o6 |fe0f ,#W.)nYx˹+1՛4&Q I^,uV0gX㕫4?yqHswWOK4Ra}ʾeq=3˸o+ǰu yqn7:^Eɟ eѺq] ==]xNBwDz/i\JxzhP6#Ĩ(/Ƀv0nPF1rrI'&8rw% Kd{d~TR ǂg&|4z=P"s.\nLfo$oVvu F~ꅻC*{oxpj ]%nE::_Xo;saТ)@_61ɝDKJ=aGGiUr@nGTfbri2#\9+b]2/#1Z ")Qsvo]+Jj~ċmGjL+G!Ť9$* oRa-yj*sAU$եCX5>mߏ)!ce"#P!զuN9kU3FOq64@8C[)%դ$g&e=Pe(hSCC8Tpe7XXxݔrl-%?*t-]]8GoN'zO`(u`!D דU܈ vEW[cܕb˱[FQYV+ͭkC *ߕ yýl'6qFX }jNZ2J zN?K$jiugA?5e7ɓN~5SeK{C| Bb[,2a7*K15ٝ=:UQ\wȝ-#>ӐMQ%3Bd#Z݊;H&X yjSNvC8#$𣑑,vTŧ@'@,;3sB&lv+y }wOdzc⥤("iHHuBYx=cIuFxQ(v(\P_`]a_ yJoz.{0WxU!^<\5he;0{ iXB-h*B&dJf)9`_rh(X #A!dz"zjV?tsr(X`xzl=,"+240;=E+A[54B7f㗋 12l/OH[ՋזnտF{CФs O9cJǁy>~ |]<BC7A!*! P315-پT}madd~~~;,Tϩ 2G5Ł 2FADDALN Q#~n1"H3g|fh^e@U;E%15y,)) m9]t}e^T=I`JS'*):5?s2S2STE(I>6tJ6`IMe2A{ ~jTz;\3Wr 5#/m( YOH$@Lbo1-`L j7ަ@+>ol76/Ւvp`71YȪfkCQ*[fZ) :# .2Qdm'CLq1 "Zd~*0X Hِp{ȋ{/Y6O|g]cJDZ1\K:B#'F*&Z쿐\ |?_ϿTϿ^?_~f 6" 63sDȅ l槣dƆd@yӡ~[?:7OY֙i-b/FڀJ  dzN-kr'Z=\A2U1A0Q@5C@1X!xIe#IYwdC)EL;0 C"Y5nmrN[Qp{*) Υѐ6+)*nÏVd^\VLٻXG"RD3,K>8CH6 1nQsmy:[t:6ۏLUcPk:rΩ<+#CROV^4]QѨ#OC䷴_R~[ZbZH8 L&cE3ধa[kH%v5:Y=#/Zhx_I1s}^|Of1?|z,^B[7[jF $F$"H GK(*yĦ`B  P4GڼHк_1F C-v]ƆW9\4[HAKϰ`u ?!^0i-4e8;uΊL !V&#(TT+ dg||ɴJ 5~O[O a#%LLiPXȄUN6i#H?@ܿT.QțCkn%BDS~FZ#fmsjXfk-bbXR#|l4וtWLWm&Kʎ g]pNW We\*NGO98m#^g[5!#A1)o|98GP3,eexZTD鎖#עx#S[xj @n-1QK!tFkOu63FEuwUUE~kCM@gAPP^E񯕘S,u}HrtW„_g H^?^6a4"36cIWSt4?1g@^@_SċA!bwJ0Na'ss:Lx%f{3 sꁯ`"ޯ~__~>}^o7f[?L!K$Cw]M,m!kѭlw!5OBBﺿUp6:)4Ɩ6ү;.?g>dS] !JeBJ.f$ߪ`B5 pISf菡)*7I@ S#4G|A^tL52 I1:99v4N_*ޗR#g!^h }M|elgN(z8FNY:PMEI6M0K0jY<\ =gڑۥL" @:?y=0>`lϔPi#-@,<6؀ 7ql̩K mBA$!v_+MZ =%C2Gn5%QS%nXF7Kk4θK$XSK F}jfFs+v +{%Ě+DuV־SS@nǘl_% ܘ h/2K?++MYM[Xg%0V&3pp7v8ι:hjRvu!̚{Qк[ԖsN_X9F-<9*#mK|H?JP@Ři-k<:[dJj"*Z9齍C|%Y3ȴ|F1opfgo(;-Gл3j )ctZp~KR#U %DږD!_Ɋ%k=sJ\-(,]'ǵ`-[[K"f_uNw}oyC}FNFT Fu}5|GC> oYO{=mjf]w4t(da>19/ddW o,S9|wQ}ՅzQ w[V{pv tw-^9oGKG٢'UY}G'(]Nl 3EhB!BM/ ;rj(/hn#Lax_yMc(22 RSduP֯¥Y~RZҌ"n4~Fn.X&7U̙H:i?W{?ukwSm` ߛ~>7n`Gz)w#oGЪ"\eC$X٘ /I)9_uUD>a0BEn~",n-xm++ c?-Jx (6b'u ^vIĹz&D)J3ڻuW1׀ [SAZ{SۯOG_.*9e .Ls4z-v[5y1n!EP{@q8=[(o\*:o_k s_FU kMHE_є}w o1%hY= zE3\jP ".1jXEi+{^ 㽻֓'A|f90!2&%̸ Ui`WS}?]O5XQk˽@mLfN3R wP>[Dh8NߊpmA{w+~a?ΥR8Y8S[GbSȶ-^y 6Z6ޚUk8#"zp|c{#<hE(BI+K jT*0as` 5EXwVm` T"[gߖqWY$3O2e4DkfR΄bx ?i/IENDB`DustRacing2D-2.0.5/data/images/cross.png000066400000000000000000000010371360473665400200030ustar00rootroot00000000000000PNG  IHDR@@iqsRGBbKGD pHYs  tIME!gtEXtCommentCreated with GIMPWzIDATx1n0 E?zޢ Y3w֋eNAP2Iۀ{%vs_ 8A2̀;{$<$@B3g%x=(%x "xN7TWQBxf& iY$g,,[G :IXVhn v%־ HSfۏDݑFIlJ̀(f$|5eG%b[>RF 瓓N%|;+_p\/pLI|v4BȀnKx͐Gr;7"gXU |6P !7IP?#j?"^ PH0hIENDB`DustRacing2D-2.0.5/data/images/cursor.png000066400000000000000000000061711360473665400201730ustar00rootroot00000000000000PNG  IHDR@lsBIT|d pHYsPPtEXtSoftwarewww.inkscape.org< IDATx\}TTe=3# ~Ah܌bu3;ff溺q d;evڒu?]=ERifj麮 CJh~<ǽW޹!3wsoyystf~ WLe潾 .HfJc8L\l'Pc8@Dda<דGdB_  0HŷP+/D4 o*C/3 n IP+YHǏWRSSsN>^cf%4$$$lU%ap\.xn׉N]MhdJt8gLBD QW)tf|2*5`ȑ7lؐ+R5a޼ys}[~`α7\mU {`ԨQ=gpF@F"WpF-LM1ȔRb Q_}NS>Bi `%B%(O[vhOhIuwpberB3]ϟ'VghV:\teeeсGM"C @O 0nnhh':R*C6!n"/--݁0Req: P0zo=7Tg͚+pS'F& >|eQjO v]DdEEEf;.po5nihh8 @ 4q!P 88xzIIvej0zaeE ySϽ2tzMPPzz‡zH Nc?݆ke˖9"  2f[r:ݺ-G&ӭ@L)!Z7^@}EH/vEEE2 '`̘1 W\#Pae5A @ O.^Mop XXX8%&&f=OD @s 7VVVPWq3fs)+B"Ѩ|@HHǎ e2ߧ P0vW^y `~BZ z駟~|ԩ1t vA;v'::C{~ޢѧN ZE~ޤlP Ap G:ȑ#2\*CO IIIO,_\ QʠZ.2e*{4u7C]AΝ;+ËD9@0!d-l6w8*CTOm}zjO7:|fT`>ɋW zRz$iɒ% &OZч þgϞȏD4;s@Yy@luuu%ۺjHobph)2DvŎϯ?w^/n?~|Ʋe0o+[z:_z饴57@7ZB;qСe"j9@ᵵ6??R[GDIu/ X,;!|@D_O4hМl"SCJB@GL0ɥKI29@9++뱉'Y^V7  n)W(Q[[k;!&H[Iz8ҩSZhȐ!n)6foP{Ư/kuaŊL&e/=HI5xH ccc{3gçOy#J233?WSShDŋ iEY|'U^^-,,YW\Pss.H'Ddt\<55577~HOFpnnm1117띀LYPP{Et:KMi- m(ab 3ݻw|\gQvĉV\5p'e Q-+:i3K3O)AϜ9s,qqu:Y.Z(SSRR3O*fVfv~m6ۉ䗊"k<%b F\pᣏ>R9 =p2\WYYSd2'eH5XVe~%)v'MދpFFFK^ xp .븧455*sGGOfoHdh*b߾}G;k S&Ps5*=5Cj ( XO/c|*z ^v6]̥Ҳ Þ~j {9/!1;֭oRllxK;D=5T:ڗ"| @f `\MMMw0_v|w]DM e0녁W>|xȑ#Ьx zbl3gNN}$h  Q `̬oz| &vV6̗;h,zpO{긋CZnb _?v&'IENDB`DustRacing2D-2.0.5/data/images/cursor2.png000066400000000000000000000003371360473665400202530ustar00rootroot00000000000000PNG  IHDR szzsRGB pHYs  tIME  tEXtCommentCreated with GIMPWLIDATXֱ Q02bb'(%ʆ 7&4D9 #_=^8>ODIENDB`DustRacing2D-2.0.5/data/images/dustRacing2DBanner.png000066400000000000000000000226671360473665400223050ustar00rootroot00000000000000PNG  IHDRHMsBIT|d pHYs l=tEXtSoftwarewww.inkscape.org< IDATxyt\y͌F%y;ƤeqYlL$@[ ISrZ$大@Ҕ&$$M m(!i(.aɒ-Y/3o,ٖٟ;g5o~iD"HJH$DR} H$D*D"A H$D*D"A H$D*D"A H$D*D"A H$TkNDn)B7 \<,aHu2b( NJyLoߡsQTO~mtMӪ#ɄV_vhף(rD-[["TNrЖ,!ab2TUEQFyf~HghP5kp P嘆zxGm͚5s=L&TUnm@)LO?L|O$?楗^R-&L&ժ[}k_cٲeLc7 U_*44^#Au:QUi: _JUT̆ dn5ߗN' /@GZ,V1&Q,_"lZt>9X+Т"Sz*3}h7o2CCh?!lقv`-)l6۔h2 ݍ088/KkX,lٲ믿.e&̞={jֱuEj݄a|>n 7۷#^~Q 3]w1oc$5mwt/GfG}J]pu[J6IF4~oZl;f2m@3z8N͛hq#'ہ|y|>l62>seӕn12P~]{`;cJi0o^e`>tޏ}{7ݔ˙ yjrX*/Nv kG6}?Ek 1kLf2DQnv[|XV%'`dd]v1XSY*fl6_|1t:7ժx<V-c޼yL&VT@j(ׇkyx<fQoʛx+&ӎܹVV @{;Y3uWa&}v[[ RRt;߿h{; ,jfG?UU;ZOO{p¬| =7={ 1GveFW#P"> i`&hmL:p=`WEGCC.J1d| B|A~100@2,yV4QRT e&NÌs7NkR)d՟{<'SFcB !|tph۫"}h={ HL[Oڧ>]kT=== 8|0ht\,lQ,CCC>|ug'zkv񯱂 p!(5bn^%oE,w0@g!_;#a`|||k65[!ki*+zwCkkchh]/??Aj,TeKtww366Vptww3888P=`mY=12r2<['&JM<'HW^~*rrkG3<lCL˗/ra6ggoRD؉r'r igc61͵gz4Zil;,44%LG?LxFf4Ͱ@t,e"/n$"h"CA^ՊddcZ5M?0@j|ɨ*mVaq\kEZa<,KF{^͆bʲeWʾyeV5hu7}ZF$P22j*l6[M'e!`EvlS0-ULGO,Bs>_+*F=dLGFAF[ZN8TU%gtuG%cБ$9Bzjis;?S;ٿ?jgө쳱~^Ud:)ѧ:BxsN:EA韒ql=zkmsx'k'[ hϟO8TPUիWrio`U~:`8׿HecV(` 6t:q: I`8N.2^/v}xD" ݻcoJV֯_{2 !p8466[T-X7t:q8^}" }{F[CoJ(~5v9jm巗_*)BI$; 9᪵0{.>LBpЀ;a;!0q~vrj&($~sX)47rTNCC (%婆zrmqgt:MҊf'D"cLȓ d" ҂嚢X,|>_Et:7op3(p4á8S粒WT>~ؘf fܺёW^Y`g{QV+uuuvk-N(e{{rwO|;3@ pҼպ9^7ޛPL&^~^6ݬ\8q?>p"(E=&n܃֔Lb%vHrYt=`Nʞǎ;7,BpW\QkIpijj"5F cl6OUߏ1?ԑ}:`YˍwCB+Y(bpvjrJ?~W^yzkמ,׏VN8jtV<-e\DNx\kIlL&v;N$ߎBA-} }}N'{/|Pcq41e6gS}OE aVEZa+-[Avj/pbѯdeTJ>SpC+󾞞&*s>RɾSmZ)ZlcjoK/E\wݑl;,n)g'px4j_Ye455< Gyfd H<(s|&@o/}> E{qhk+&̆ pyZf+Dߏw9?t(cnG%A ,=PY'={qF/+e?׬,n27ع%D{㍲?C۵ QބK<(ؤ@ShIhC 6m*dn' #:fītS ox$*< ,`͚5,XjF:[>Ik]XkW4 cGWbn7ɺ>/4`oa2yH:+4\x_ZUG磱S__/XOTf fN.|Aٓ]dʨq/ .+X&m+V`6X,Y%  )O#G)i#<K|e74v&`v?Õ A* n׋bttRO}BBsN:D$Q r%ÍW FPhEIf98|-K/o:Kӽx1N@z"PǓz({ ,Ddt>?A|AvQVk0L&+8XE 8i8'tLÈ׋gxbqFitue} ~:3vu~9">p0&c @,FOb2l\./^O<=eJFbDQc< o}6/_q@H$Bcc#>mmY)S"!uB /ǩ-@H`s5tל{<ڵ$kiqRdRF@K}}}Qfe'6C, R$TXO; wO4-h|o&O< ;˗K/% D""@ P.!9n 0l6n7K,'$;I&!c'Aя,ݹ{^PE̒ wҕ&ٮykpQmݖ/7l…=w\yYIH`!@Uռ5n|yq}Tv&!j`bAߡp4.[65b` I`R$<9,AS#KgqO>vZ/9j=:{QfJҌHQO1r'G ,\rV^߬_ϧzCř~`+KFx^EA۾leGF;)V;%4L$K9ENzhfWPUuk&&3 R[jVEuGaFصkk-ƴ_EEʾyUT !+ bqh mc[{;~C( -^\ 9[pΖ-%160n(W9D f9M7g>ݑDq c+S*sV(Fj!_/EX/[F8:(@M,3L{o0HS&N~=CC?|V` Fwɒ\ {aEg'Ni[a \P8Ě5h&]7W8###np8 `;вhtV #K޹sf W\}K/%088HVYl;Ҙar+!n7+{/M38}#t,Il)d S!1wL /IӆFFZ$QUbߺB`bb}}xK\@~яX,MhW4Us:O dEHQ&I]GH0J_12 AJ+@Xm{VLxx<Yx1K.Emj*~gi  R)&/\XEH"RLUjZ-\B2gMΎ.'!_.yh"VXYgK*ӜH`>t({ c L&IL\vYR} @jp8)v|ZdH8] +ʀj'E#1N :l HFLT*E*"~}Ş+[R%4-; @QϗR8B"H\#XbMuueEQ֭+9*ɔ| sf#c2a6> J*w|ŋK.k6N?R٭g$}7؃P?L 28X6f3#>+{Y+1lڔ}o٣3/֯gϪU}>0^7[+憽vv֮]7Lcc#pF|>_^KX,|393jΉ:T\.\r 7tPH$Bccc;dZ1BX,e¸ǃbl6OQpJlunZI~+lϯqz*Lb!aCYLUU p?e 73W_o^H]]ͣ)t֮]ˏ~#:;;9ph*nBfA(%HƍYbvbΝ Vٌfl6s;}eCʞ(IDAT(٩l:L&Ӕr:B!Z[[ihhnO;Z[[O~BWWc||R%}ة[o 줯x<^&"B>$Rx$f |h$8LQ*?::hoogttr|bٌ#u8<؁{7gB`q8X, q?1Ç BFZZLjؿ]]ݻ'6-oyQ=~ttt044Tp&E!MMxsVG[jli3mZw7* `wt{nr7%!VA9lFGGں) .Qa6cZ@KK `Zq9NaF֭[GWWUk(UUZx< P3m}0x<,X(Dy@ @CChΊ*szB!p'n֭[,X6`X]Y %AۇC|&xM&~ !0y. kWnXߙ)UB㈡!D"Q}u&>oJG]ݍс[ j% aZ,D`>ti166F2dbQWW:oX ىߏR`Y,r==((##3 %'uy,.NL)-\. $J:Wf.%@Ys$#!52R9q2BcׇRuEE,~ ^7  [48ccc-LQUłfn5NIUW #w:8NROyffbJ&B'AO](LX,(דniD1Ɗ{O#rR)!Qb*ǃjR|bUQTUtrHӌ@&y<llq d}l|z?|{<+>i&&&%LOJߨX|Us]ѭ7K=L?H# k-KIfL&SSZ/+ _Wt}@'{OrKUaO};Ϋߏbx}R S^0HRB9&EQVsD"H$AFH$D2 D"H$sH$D2 D"H$sH$D2 D"H$sH$D2y4+SIENDB`DustRacing2D-2.0.5/data/images/editor.qrc000066400000000000000000000003271360473665400201420ustar00rootroot00000000000000 cursor.png cursor2.png clear.png about.png cross.png DustRacing2D-2.0.5/data/images/finish.png000066400000000000000000000020771360473665400201370ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATxסnQ@ѷ GE(,^Tc[[*6=!Jo2z<^^8cw9|re|5{2~w1w-˲jO L L L yj,˸\.+]3f5V t:5p_cv]"_H[-4>5_)1POIIENDB`DustRacing2D-2.0.5/data/images/finishPreview.png000066400000000000000000000033311360473665400214730ustar00rootroot00000000000000PNG  IHDR\rfsRGBbKGD pHYsu85tIME 3I/"YIDATxkioUWtfb$0 ?/{9!!$tŅeR!ݷ}?[U$Y;*"eUf5ί;~ozNO~:޽ǏSE=zgϞe?ϟ?Ǐ~(b\F>o޼˗/|!2>ӧOŋ<}4vd?ʫʫʟoƳ4u.הw3:vV7^w4@@@@@@@@@             w[._*zvuW]m4MbH]I(*V*p4i۶s1Tbe&IFQeV28$iF5Xmf>g<ӧO9::J4LV.Md28ǹJ4zu-iNOOsppb,K`жmfYsxxLuݙ܉moj9srr`RVzڶbt:E2SuĭPFʻbq3IYil?Tn^Kt]bcXeEQ,˛ߥ \^=m;UwEq$kzȏv+w:@@@@@@@@@0 Oҏ)"EQ|;o.,z$I۶Y.f+,Se.hUWz~!,/rζ3;끩*~&nX߶mUy UU*0_2 RUUY%m,L\\\,8u]wfNwbPefvvvloog}}N\gYsxx$d2ζ3gUUecc#^Sn06Zbb>#c!+|Efxiex^hb:"|loJ1y I[nZNH|@v0cÀ|$Ƅd@t:y7 [&Mqol>=vM^IENDB`DustRacing2D-2.0.5/data/images/grandstand.png000066400000000000000000010656361360473665400210170ustar00rootroot00000000000000PNG  IHDRx pHYs ) )/"tIME  IDATxydGudf ]]=եy`+}gyak/p`yH HByr8'b?"ΔU "{ٕY'"o!||R0>})cz]1QfO5"~ʪj""I_Zlfsux=uto9V{RJc?S\VF`n}hFJ8Bn WY7 =[oξ;#AcH4>}Ͱ]`AUDdAUEdXaZxIU ""&"&"$x`8p0"0'Dd k ߜ~<UuW$U'"_WE1 }Fbp{ƽS7Lz~"rVE?UR[px}MMP_-mr>k^HUN 7_Uս"XO|ÿ T)}~j] TuBDP 92uջȹy@ Ў?N:{RMѬ=#D$S"r9` )>U:utVދ ޏ{:}U}o%aS%7{Lzb0i|61&c9X'8f2fHyXUz֍3>Qsa~o^<^x뎾43~F ؔc }D *!``@IOz {UC"ѩ|"Wz p%`Uu+:E ޖSը c 6 })C?Wj7S9s8DbDDXyFΛ9r}@UY7,}ceߗ _h0PߪRk!IDTl z%&M0,^Q36w^? 2S8ƙ[ǻ_EuS̯,cZp1"(},G"sCʳLT0IfR#"at,ΑsDU_֍37<WH23>e`+\g] 0v4CCM_?%4c~x\lQ6G["2 p/p:qS7Lk΍ )z pJr8 s'ZU_;F@(#]UEAEȼϕS}e~v==ϩT7\=k#- ( 8xBǻ ҙCu"9Ugog6pzU1%*0Ok+Sj+{x%xC+ ޳E426==y {ܾ,t;rS=,iӔ}VFՆ~xq>Nl]p370%@bl"B-(b^H P} o^|֍31/IU/x8wP Q ~ʁk4+Cn\6XkRT b}RMS82 94u?! }3 Mt"ƽ҈?~h9F\\Wxe'B<]dh+ ZEE#Ab+"{ >g̥9w͏w ?do(`b#>s{:zjc_/V'yeKnc+zn(e(̩Xa8MTyDQMg褜\yo?E&ǯ_ʚޗ?8 .~y=k{襞~--=#+bܶϟ|$Y;rb3ַ4zi "2Mt i&trA/#9 <>k:nXޛ۽HWfN)9o.}*/]tܹ=\SX0r"& CRsFN11=0n@Yq^ny}cڎIy[܃3~y&)Jv H[@I wOxy/>c_A=BEDH2Xu'Jg~@u_6?nֹì6xΚӝ3`B`P(wG{$I3Qgŋ4^~&;]'Þ&Vդ2>{'h|s}}1O߼ˍo\G^뼾oA%iՆ J3Lyx\ӊ$PUsH0)#lYfݺ6W7KHO[j}_6etvi_qm9y`NԛȼNKEv(H{Y(;7\rn>adA8/V +iwXicgbSc`;0XAPŴGy잏]2)Ye eH $0Y3AmRĈ$i֗OH=ڽEZ%L|A{,#qcC|+ɌjTk[}w4sر6ᥗOL+1dEOECaX!q9i֥YFg ors;㮠iɻ?ez]\q) r}Qˁu#aEX- 2 *VDtmחtѱvvͶ{|WC:{[p|مM]dBwmż9 'ןǥ;*)`I?%kO[hos&/m[ 2kfTLX( ŘiGX;n_8CN]Fk,C~I2$hb1~:>z-تO8ͯ\:t}RRpž 9Gepy[Y`=;6B'ظ4nj~A MЈ`7ͺm<\mz%؟g9]KiG~1{`#.q`.'MGcuIS] pO2lʗ^jn'X "ܓg?O6Cr9 U=V'p~KH'Fd <<=}+)i"162>y$\ÒũĨ;)F$GO?"7)w~'=KꋾezF?be_kRQjX=!&p|?لz/A>x~+ssyfL\Qgjc p_Tϝ{,dG'~y۹̵t3]?\ȢHY6Sat0NG13>Gp',%U4d)㲧{}?4X<֎&\{gm]2OGދ%#wWWu n@\I">N﷐Rm}-@_ċ3 [F?N'ic*Hs¶V""&WF~h_N|t$?,>p\9_]X EԃK1qG8\wx[ M6!:Dj|fDöW 9i~V>/VǾ <]N[}s9³׮(sռfjQBt}wzܮu &@゚o~itH^ɞIPNF/b XIq >_C4: s9^: s }G9ISoiƨPW49Ҿy9}f ;ԗtF3ʧT^|k.Oh9Qyȶ UIq`?:Ú]ygN XgKAl-3ؿ M @3\Dx>6?I=U\Ctt{ <>_'|S>\c~-vռwr}NJ :Zžo8=yGAY l w?ɾŜh02aT}\E3I _N,i>/JɉEzj!7EO36$k&K};b߀K_[6Ώ7off!t+H&&cNFHzEކ5֐?| ὀjxW#lj?y-7&DJ{8K;qg\Eoq]8Nm}r޶ =%SO%K%p?3<ӬZ IRpcM+@ 6s7o: *SoEg.QGxU]v ^jC/~cރ9Ƙ {><$ wvÛ&~}*Sԯ&-߽uaYT8aM>x ~Iel㬆Ec{gz6{\cLj7fy\ kG}V*5x^8\&ؼ{B5R!57r+sB[~<?`ރH~]˖-EГ{8:*%A3MSLi׼W׿U4W!;.p%;G- &3@|ifn8~y~#Њ!x$c#k6Kcck@RĆЋ$h[J9cӂAAF؎Mds] ]i 8 #GmZOh ~*(E3HZ<}t m/HsԹ@kQd.:w py ֡=~0}F7tV Ib$n3exˆ;wmob0GTcL'Jj1 ycJRkr-\w1*FJĦ };'g'ᾭ (~[F#+JFuT8p<_>w>m ;74$>E$D043d]Ė{ ]N)1p4st@VV}<]ˉswӾYs 8[ICkfI5E1Zww}1HqTUP"Gz|6/r<< SL]@Ez'Aݸl5ÿǩS܇9ٜ>c Ibڝx֔_(zʯ@Vq*UNa* Exܗ>;g( "r''3?&=rt5C0; tz6W;4ѼLsC}fa;1 njkHV/  %$$I_Y^ϻ gE/b݅/,3%v/jC㖖ԋYlːc睠6^08ΜdÅF{xY9>+ՠޭ{\x>ylxu7~#zA(Wc Rk xKI r#<|</~\zIv | )?6@Hj( (铟Bň-+}sxQ/;WV!ݺ!4bluADVʽ`ߩ+*%#+˫BH sg<¯@L"Lԓ̳`೜ti/A, e A}{>z7#1ܹ#g ு%7_Ngrƶ[F/A(򵯳0ȗAbMGMm7g@$;ySV5Wɨ]OG3E\Q/ W|o1ヌEΆ¿x3E (KĦeh_xn88]ܳ9;!*]l]y1OKZ&mEU +YTLeoy O?$ۤZ)ET"yRm IDAT+JR;t>֦+j&<~[{EhuRnm{6i"{9]y 8Α*kAL9h!vi_2C[ZW]5|WTXՎϣ("[lhHd $&lBҖ|4v)\ cXqwL>!?L CDsOVBVגN玅o[Ts5RtBHe)['^8?4D M1>~0(viZ߭a9`KhH2-ƹ bR=HkRzE|9=zt DGq DpQsXm%\$ wn#6VeF.|CHrQ9_ɌhH: a@DڅZ|G/Ul!MHSK8'6oM w):r~F%Ii ; Jf/N6V4܇旘6'{Hג^08*C{q-Z;Ts\$E4^Em5NP$՘'W#Y7ҔKT^R*17Kh'aChd_U0 w(.k>#m-"–𝱵 HwM+A*D2C؄[*~sY^7EѣbDˌ~4JWa*46!m!Ů0Iv a0qta۔=BTT/bLL?#gxoiEY8ᙢll=@$Y>_cK)s N ?*PKSff6z˯+&ވUZǾ59>瑛Muw hVQ1#>B$]BD6J6pࡒ%r[>,D[,9Ooi$wPq41JT%($yl-f@30p酘Lɴ|./oWhZ w~ԡZk+iƌIT$P-4ޏMFi^?*Yq齖WþQUlblB$8Z:w?(MNăő__9I5lWxP,TJ![I[gu?UbQazȽ%S|_ LlCTa1Q;X4&)Yl[QoKcֶ929mޠ =b츈 JON Z_ĤؤKs&)cb{1QT}qm~$zxFJ'(AIL P=] ѣG1P-wl%RU\e  XEgd DOͣwߏBf^`SaMuh̰iQKHV]ǹ~=[j eYY[*H˖:[kxdQ/ + {Í-a}/cGFvVEeh5S!Im<+!I"j޿T^IY<ZZQV DuV3=-hCE^{IP\m|HO&0!ł$wRE,+jC!fMhH#0/t0eE1^c%_(T39tڗQ!9&fC]=!"%&^< K_,}CIU*)&f[z0vl8cs t/K) VяջnH)VRĤs?'4K*)N6ārE'XKnML~ŃCb6NWvt{̱l_M{:T?"kA(lT'Ei:Bd ssG_W3|ja#4Qܢ _B< #l?PM lܴΎm ėir2G'c&# zFlVl-_bHkơx>4=MGkWOJM4zqX1 䮏9YY*HL,cЖU^={m0P׸UFjU6Ս̲{ E3r:ED|9}1"nyv:M{OU0QHEJ1X (%$Ig*$I,|tuVD],𡾋'#t6Kغ65ǎMhq 47@^k;;Qm)zJޔۚ4AlvP$F3^Lև& )N\ X--\,kq@%fW!yjuxd:v1I ͜ʷ-<<7ԢW\*g]lO/1^EjnŲ\* Wp؉1,U(%$di+dY TW*Uc] D{-їݠ#WTlM<lVIѦ/~Atݸ'F Us,<{9{ Ubߧ렾 MkGs( >*ŢeH]"6Vl<˒ZAs[oYձvrbY&qZc;Ŝ_aC,ZU}'ZuRo_ݔ@y"ouXqP#Yd#Ϧ#+%D(a%G+$4n9 s edIFƈM͠ۆ䳢+~S](B8L\0!N$8k Fnl+K ("7vq{^+8s. YsR^DaݎU>ƥ{e lÅmw-`צMQ 玨*.X>@532<{7ԩ-؞C?J+5Ϩ-el?XA Q e͝hP\olLN !m*v3+PMX2;哟i,b"z-OK1~YK.gHL-:DTuϡ(-~ >"n;7_q.xN]y^Ar,=>.vn=| Ρb֓ $vk@c%SxY={0A&@'$yy괬!5{غk;cS`}Gjst@u!ƬБ1@|;תk. S~ o*N2Yp*ӀiGO+ݒ2TWy"hVkz˽֍6Wg׽l*A TZkKKZ]JM}S-Ԛ={Ng$ʤ#\=.<>V$AevؗoHbZ!CF#_ʪlx$e[*|IGH 6u,VD5(t#H_ߐugXӸb=E8 U/I#ۮ j'CƺYGX(Z3Z-6SdJ `1NR3]hGr֌DU-wif24qy*ԕRiXanݹDY?\6lx9Iz~m RM{R 0~AJeWܓ,w rs+kK.Q_WT[_ㆉH(*1vn6.oB=pl؊z\¼,@ } y>Y]kN [7} ~(}kV ^݆2f$[c㹇V/|2RKBY%na"i=Rd̳i _ٳ/94 p߱qUceQix^ W:ic[T>ƣjxJ ű?XΗ8DF_sI⨼Hjm>r $*.y&[ڥ}څw TG<琦hdY_ -pxIvZR1'4KjE mR6x?P*Á갠a}*:?w3M.k?=y\EZErS&epuυ*( x _4@ r+{ۖ{iURf~;~dӺj1|Qp&UX[lBܺ`Ms$|Q+eo*e8>G%2>,ƣOus4?}Uo|{O=m9-3IHt~ܺ}7$0 h{G.kQi'qyQ6OL0s`wg Yb?Ns><jsmC_k| %ա)  m[9}CP9׈UDk1fAӹa9;wƹljurOͫS i5qf<q͚Pԋj﷝yɯ ÏNK \i+5yUPJ"!ȼGPt:\t\(?ɖPܔ#je1M SӹhD@}hWN!gǫECÁTe!BmȚzUF}<.v*fhy$=_, ;P028*.: RA*A᭓M6 [@DbB@u׽WxV2s7~+JO=06]YFdb-a@x۪S;߁9Y'zuӂ;e˙[pVꀻaz);0W:zÉ{ͤd2fBx JɐXɬ?{o^Uks ]M5Yty38! IH_L(PP?( ZhIJZ2 8G]ɣd[Õts>,ݣ؂)ys5^]T `|d(S".-2+R{V7/f }TqU((  ;k8[nd;/Cc? <@I>-eO5<,hkh(z鹜$Cj@Jgha)OX+.TP=˚[ @p=vODV9_uEQV}N,ڒmï}6%4 X!Q|.=˩ IʟK'ੀ=@gƔELkƂ eLRa.*tI4-ҐR4\- ?m@MMMh~hUlf;Hk*S%򣜊CX9K9*P+7?@O9\u9Ck|S\,@[ 3B%BOLǡi艉(X)\sb_)UwEAT` GGiIt<>351aj+Wd>s֗mq2־|q@gP㠊}p9g5mm*/]8R/KBif[!Dea<,+xxplfD NDQSl?}n~TRHx7}#MEGTc]B(DXd__~@9$jS"&Mhb(DO<1M,ϤX7EԦ9m RR!D&Tpݕ|a4΅C?LBLG7ۧƠf(QO3,{ K}!`@y6ߤ3~l|ǁ3_g1QP0u|ͅk-oN R?(ԛ0-8=4AnC %~3K.PSA $x  r~A {>A>wGZ֍{ѵ{_j3hepKu7f>n RL|.5RÀE|BXoX>XA%3˖@r/_g徟J 0Xd(~f( VZLی*F_J3ʳ8f2wYk}bݍ $_Gx8h0<.+EYp3N p` 2eQVeְ6#ZPg L[''y{Z,뇋후O@tބ}ס|[۷c|5?SWJ Y)T:M'br0g :h+JJ,W)ƪ @^b1 Uו<<7Wx~@yR@q~{[ r]Hy/bd!Ze!`<XXC R_< A.)&j[2A6%3Mek7?_ɍ (oRŹl>緫-@H84p=J7$0syc&W&X(t.l({ɀ5$!{Q}A( J?=$pn(5[~e/Ja%Q62ٴA&ܼ:4xq4w8k kJh9OhJ!*] hѹ- e*@{-Ц%V6$OX T14|YX+"q|iBײ%7]{}UOAjj"2C˷.BCC#FFvC2TIe"*/UU xm]-`U^?k)TC]_0:GTZR#Y<%'ϯh]o ߘ?h|YD-Ī"i~p,_2s/ą@oe,^j&ջtR B-046,_A" $KWvr0xuh|4Bfn W}aAׯ[,:}.Ks#BK׼B|?2 `6/zHԚ໋26} 8|pFMWk7%Տu y}oxX-10)(邵' pꕸ(T2-9I,!*oXo~7/qot=&!+,Day!<,s>kEESV#XJd\nqqh=QtQ$ʫ钓Hrf |͝x,ZR?iRϤ˲ӱw~qӟ]Ir4@k:o7T7Q@ h\`d~ +lFı)Zo \Pxߕڔ|s1{[eQCK2{K]aG0xuhO_W6]ZԢ$5e1j|}[I]ʤA 4:ؓl63; Re$L<ŐRSbj'7o擮{Z|߲-ߒVUN6bv\5XXvefS.]-j1>sS0]yq:aya<7&JO[Ecƒ}Yd%ʴJVT`]Jd)U ]n1и-ɘ5~Y_@8S jQ9֡Hq)RӥvjVv6@yxP{|zLߦC_uXPm;VT"֔1]pUg>ќN2(t%`14Vo_ A`V}~pP̯S/YvbϞ8dƏڱ+ _ ЖԞԦU;Z#6 B}zpmwo_=7_~7 Mp(-!mώaM(:P*O\2Wf56.YncQi|pUX j\)UP .l5cl֯DZ@1ԣj JBQxryoN̳ ͨKR(%ZKsF;&6idNWjǏ2+;tHBPyUqnۅ% 3# sh g1 pDО60&\[klx,-R?JF> JuNfR !-/"^fRͧc¹  `UQ`:Es8LqzD9;aj Q,WcI,S3X dTڛhX:ܔؚN4Zo1lgyg/3о H+KxS(րYJh*e @5c Ƀ-cr2+ㅧV\ݲQHWu%TN" snփp5e, BA2 T|(D5 w8 uLA]Q =6PG`'o掯Ew@@__OZ!Hԍ&:ff7#Č7tV/F9 |Q`7+굦}~)o4;"BB è\`22nP}K0}J8@6ғ1CY l[Ea[p,:.y={ 7(N+ 0([JjАBk(ICL s@Ӊ@ל_| ހu>*К ~ '%nz2U5+bK9H[v ,yUD(DOs;3qP鋢;*HV+J&e X8x902R*WmT6_~OkiohFmDpN.i 6>勪d'43y:Y6E <4,_΂;`__OUdׁZ{$!a3`MW-E%` cY"gwkjs@:rZ1f&Amj$`I ,_ej𺵵|m-^wz=8:\#BMn'i/5-}Q^+"IHnI-w6JmQ'ɡ׮8"%|v IDAT0gYV$bmZkVLTpՏxS.y* 3AKiN?b! Y~?Ǹ`]~/rk)1},bwwF l\ !P3>Ó9RtYwo6$j$] ^ /ss Xޱ,Vh pZ/qxuۻ@g.L6 ˪Qߒ[_ӎ&šTHO1Lowd7;SaXM$cH6P_d׵;G\û~򚀊?Vk@_qșȲ{xb2hp,Z(kήCWc,npzw1bf(= su#Ǖ:t05EN6뎈Ta">[ Y=~U ~#KK%V"x͆FX\ MAܜt8N (-W6%_엒"f Xs85k;[R*+CpJޞNi_ߖ(njM=5N:.,m~Vqaa?Z91^~}*G}K9#l<3y'PQpz7sCkGq*jQa>o8?ImJteGl;jژMBsH@Q~ I9;ΏQ]sgCʞP. {&V|;`1[E?D, #aPԥh)ٛu@` ~#;tMŝ>tݼUa% jܪ} I [UŹ)aiZB'CX;.Y MwHSuTRFHnI}?RP eCmšQq8J?Qo]l ]9@ D4+贛ƻn@W)O1K$<C9ǥ~8kiUs$.$Z,mlg.[Jpц,mmd-<ŬZFGqck~z'…:; @,z?lC83uI޷RZ2F\1<|:MQ~=BrKA#w . ?ĔȎ ,%3ķeg;2lK 4[LnI-7K8Z xbNTï[RJmJX ƉѽСE 6ySR@2[8 " U %!is}mЛ{b'XuBk&%Ag (6/OO.㑥?_{ẁi`GaoJ麯N[MX XѺ࿞Ic0c[᪵ XkQTxAΥ ^w:;߼ VH7wuQh ~ HnI]_OURęl]2d)":bW,UH2{*vb5=Yb>Bl)R5_K>u[ځeX/pF$$( ؞j8$_{O0aa^V( |h@10;ݹϾ8ڜ__Vj@$lh!^?p_rK*~N*֙(Դ}a!Po:7扳b.x)lʆNzEF"@ƥsw1Olj!Ig8VT P䖔q@G 0 3}=]xKT,jX, /x Al}-:[86L_=.#wѻU蝘zu4}-ZeMä[X@mR븋HN2#ݽ}vFB%&__t=e)J[-4ZYi]TU-Ug% Z\ ff|woZ@g,qmB@CHYaVۿk3}3Iu6Kr:ֈzyZ <%9"_/*յ@e(|Z+zn$WIq^~fTa`?e~W_]frKg}9V ң::~ݭ0B1j_ԦRS7@w 8ܒ'PGC^x",xUbg)OtNDqHDgp-`b ĝE6SĮ9IP+0dP0NE3?I7laS C3Exv*F_Ol]fX׮VspE= 2AdK\dGoI7Ij$'~Íd}Vu$'r0uI 'd%m}_pC W+{Itmj <#l/?FdДE|(v\RZ_>H@&`"0Vi&YlE S_?ј65ȳ{:~c>ع?PSK!ףJ]Du2 *~̴´  EoLȷ+ȏOa*Ya@tp 61A[o ?>w?LaJVB Ŝ=b0Ho9sB9enkfM*;;ukCs 轳„ oBzZ\ pVx:* 娷tK_\*8h:x O$HF~Ƈ{NbJ8dȓzi)e]6'% FoGOuF>cr'ݽ[l4;_Xdۺ{njbѢ3!*Bѻo=3 Жn𑾞U:^fMwovary}FR+9lObaq{2_1ңs1B @Ezq4ۘ@ ~^fu n'pX78Na׾%t:Ij$-y'IaXE&Q<3)RdxR'%Pp +wUq fT%y ){V@ͻkO>Ph0}=܅*gzv9-|T)^3 zyE)]$&`݉s>;uzx~`l78r2$c()/L/zD5 &[RT1X(Aw>ycҸxjkX-)~Hq,.< (ѱb%J26D1dBٕqf3Ad==OkvյJtsH /9,'ۏstܹF.UTF ?8(.g@)bh%(,B}.Y^`nY"82̃ 8Gp%G]]{:08 ؕA{a fKoҼ(/̴ RH00?Yw|C f Th- +1}sxI^3ޏB,}q$F8ec5if"K9e7Ð'E[zNQRjPNmbbT_:9U 0u@5<ҡ+V-8x:re*4zg\ǍaƢ8` v2FG|{Gȳ30:W0d"HQȎip( r5Hd-֘ Uߩb+Àf; ‚VGL|;p@*g\Ưqa$Nz,la^)yܗa@+fg6 y({EcgȳXɺ7?&/66c&FD PUAKeTRsV/;0Tr.M_?*E9d_ťRɠ8U|(txmq1kcN2]D9sxӒ MX{Vxfgp1g> c'y1 :镌簙;=T g?9ϗ"B5{Ƒg-ּ!{,@ߩf*?|ΚځlsAOz GB;;Ӗe9ų7sXsBB!2k/I ,Հpevߓ{ꏳ tE|N=l z.\2[.xH!y~AP$>!"DN|:dW:f+Rt,zz^)3o wHve`X9O^y@~xA2}|aO d鐟9`聝#9af6+8JLH90?B8p9/L8QH04 H{R sݗύ~5.Gelg2`{9ϕ͏?O!kbϛu^HTG!Maj>听" iMB[(tf߂$p+R~<6orѕ jPU׈]wK ;3[oWj4o25&5~ߎYbV >3t v4ԏ14Tw+\w@ЇҾ <~?[~ Yf=:7 _ܗ^f(U4Į#Gsu&~T5bˣ{*Ψr$?/zo"!f3wVYeG``]`?_.Jg#FR(W>ȗ*y]3AEp(YXYCXԦHmJکMI'NjӧZ{Nf^-`+h7 ,REw !ߏi7eFU> DH)"WV׃u sJn њ,^0s5q_><ϙAvg=oO+G|}or00G~d(ي1ᦦ[L\ҵ/U:pZo:?b&$  'ڃr'6%-1fQ9NDՏ[_\yQXg-J1ߜ}? "j?6"\:wrOoz-y%M]ب\_ly7|q_L<7xAT&Iar0= Ex}=,&ONJ%G;;+P0LD;mCChj<S2{ڌ_lg\ks[fT^} Ӭ}@͟gHMmJF3s- ffjx߿ )D8}vo92_~νD;|9bN"cz"P?`Bj}jܽ;;-U6 65|䴆o`] "LnIMk/ā aZ-Ӕp&slPYbf^ND`kasTQUɡ O%;W7qV񕶟3Y|juTiiCw|%vRYֽؿC}%DKs>&?Vh?\[a -׻Fۨ cӫ \aՍaIL޳*__? xN6f~[RkL䓩dQ֤hcBr_W}p/ՍjD5קFT3s D?őLHʃGN/:ZI h.}08i=qk6GJz^a(5ZR#zſM 5;-Z$"vQ#K-8qԶv[~?$kx*=9̵3YG[M[ QǂXq !k+^fG5.yRcdo=u  S++QF?ύvŜYa(5o&~ÎE{yHnI m,B{ϫN_u'Z[:L~ɻÁM*g0D.QQiR-i;f{>F9#_7/ME .yI #QmmSuz雵N7i~yE'~N<^GDt>UpL7(y*i<͐Py X=xbO1Kף:怈0tȸ.޴As2"a)h $e!y>w- Dd:WtVL:0D4'Y0`(Q\K]WgGzcHJ(hNظum8\O 448*"A"1FMƓN;۹d#i`ZcBW$VN!G;/~m,q3<{5\u@U]Jw^uSU5Ӻ7mfu(f8j~R[Q"c!b s>䎽;^6Ym5yKB@" So4VC33hЪ h,pl ш#Ω?[ґ3.Q?DAV{Kyٲ,HU5_VWGu@*EcMB >xB *5!e!O0I d`mȤ;DXӖgȰ\CpDC# IDATZY --_~ZZ^xs NmQ@/?-SQWx3_bN6Ąu}`΍U·m>&@'a lĚlb@6in9"]JC 1)J\Inul`D皙͞NDnzP/(G ?SOke)Y0r<" obSh4-Ո*\O '4 g O3&G10x" B~&/G2f:sv~{>3,#Qe0+0 6vh!.=^&%dMq~p! `PGfD+Z7A$Lraյ@-5/:q@`遴HI͛?wg ×;DFq#U~ JPX,? udxhh].Cm Pvy6tx&\b4DԈv:e\ruJQY8z~Îz+ GA#~dZz.*P.X%ks7w߻ G(k|٧ (ȎBy.Ȥ]rRr2vydj.nm-#XK1!W-U>vYc\'ALضόpF2M ןxp!WnJ_j8o{~oL.S@cPpv :NO r`7 87 π8$ȣ{{ W_pG.SFwz$^@њ&bnТIq+kL GfHxH? /}j E&P?-\d`!c"XBKX`GI@86y֢ӀEk@:s,^>ƅ@kXិܽy\Gu/=UvϾhFHy ^؀ %$ 𲐐&/#; !HbcȒF23Ҍf龷[G2^~@>֭={ԅ+pw;s ι v"IF>{o? Z\15;֚!J,DgfI t9$2B 7ZnUQK` 2 SA=@AzOB^<`˿ghJT 2?j ́P[ٹM\D/J ʔ|k_ 'frŀk+d{.`c#A A`H&\}i ]4j?E"}[aAܧm vcP{3P38]7$ֱ1XcHRuϰP7 I]6wⲝІ hI Q*tMtoz76 c[w? 3{s3 sl!elQH2>6dZfPϭѯĶ vnBGx@VhB"׾? }F19Fک8g@t N=b$ A֛l*rqGa?NSVO֍GVÈ"iLx HX1WwLޚLkP7Ɨv=q?SKϓXM~I#bwkT%#?]e0k H&,/`h~ +;OV" fPw;ԞC "hXF`W DH`t*|e keEvv?R4 <ʙċ!}^CIt3xQuDK9`_D1#0w~_ߝsli h#JFZx|<^wQ׌Zne=i^52<^q3}a =K3-EeysY7<+ ^YkZk,ƚR=9{mP R&轇m~1Y7L-iܼg n>ܖxޥkVA$>J0DE\Hh::EFWzܿW_y|S5n6[W3<6cFP֊q6\ykp"K Y"`EK9q Nw=9"tyB,L{ D&cG0y Zyn[?,E8$Wpjp %Yk#z&pTIT,%ULyYRj fs)i W4i3I}@cC 9~0t$v )  D*Vxm{f "XB mvc`P 5^  .AS m=#?=PK`ܿ}O~&O_ҵhiE,~!^uKα1a_" Q?ܛJ?zU+mr:_fZXR"Ea(V2 ?^IZ9*eG@+SëV \+sh)$E?9#-}:n:N) .Brs*0v,*)t=r:@7;Vlg\feab%N'køh#u/qfW^h "?^vCʎczyXC7gqn?Z9p͘n^cR1"FXyR>Vǃcuhͨ/&Ri@$o>t'' #1Ƞ,K@h;*)D>5{mV5'fp=ihʍ#a820 Y0=qY-yH$!dR{l qhLm#ǐ:Ÿ m^\.( 8=%4g?u_ S" AJaQJm, pf7`礚609#i{:+ykSpB( Դ51aa6ǧzV[cx۰nj #"ĀXdZd] ?fS@mk3mw?Bm@FPL:1>s:eas# æ5X2!G @ LPȪ=8=r>:5 li CSbz|3?iAH d uҔ %сhK9df/x M&kypTmB ),zy]X_[T_^ ͎7>KFIQ}M}/Gu3уN:@GCjZD}DSkbՔ,^;Uk7M$h;q>:h䋧t,s}kеfO" T`YP9{6$v|xS?y?(9; mjJ8~` o|).ԗ2c$ڇѶ##Hujqv<^6lS?'̝l9b~]N>־uFC/ͻ<|6D8yd/nGP-Q* @If$012k>k|W_8Hjh_ǻ5`cڷs sGTp3:^l$z=='\N "e oR"D$RnR 0ȵ[b 3nLαj GV`i@\ Ʀ@^ d!P9pRqxo.S3@@PEW ^0 l(P%su/sԸ|ZXS 6&&G aoM@/0i۶b#{o/iXЏ=0廨,EY9 Iok ?Ҥg@@TGKP*U,.U#SIŁ7_뗢^. (U˰|NB')f{Py[HZ@[LaM.XbnN\"t_Bj us$!:@LM9V2V@HSNԱ)0r-=qC>fފťit<ΖCCX>4%O)/@/Fuy`C)>ML3c0رk@ ֍|Sό3]I95a[G03da ~U@2܃5t-D{[ASyXED$pfl#gQBl.8,HF"e~/x ^f Aݫ >UiZ%>3®,a3Ə ǧq-*MCep XEK>_^;p9!=3C cAb–=~pv51Pj݃1 R X} fʧ }~K* !t=y|o2l6NLX1qpCD6FcĥF AVǽ܄^dFe3OBǖ˱x^;N$j{_ppEg o;\_8KDd[blxF{d1xIKײ0z}}ly$7 V2PH} ܅㣻i{ZO35A@e{~v6:98v<2<}kT츩XȐ# |_– )"vh%g@IbrdAiTٮu?&N@*PEuhi̶z$`>dpNj#*>J7 |sa:q 0!%k7Ir(] 3R0>V_^0{zll_w{k R7q ܼpW`DB 4) 0Hz' w!9i(9v+['Pl7 +J),-,4cRyĘ\CO]YcU[ѷK^ҩ%S) e@0@<| #;T^fEDeB~ ,/6 YJ@|O!K"#x:: IH|eaY]@ |W< C@*N IDATHTi:6:.,-.A3 ua͋ zia)Dw~S@G HdڀH$Jܐs+O Y&2V-.%Fl /~VˠM92E8 dZ?FۖKl3DDA`'Q( ½tlQƖpg|SJ# ! Ⱥk߁djsӓ-Rҁ׼TޮgYOBJw5^Q0bo>a hX0@ehhT 2,-+#~<(%,ƤU=N@1|ƏBZ/0]d#b?DIl:A6#e3$ii"gٚl/OgpZْCX"pRBNH;4!z9c fg% ;sB9==ؾch0 >g*N1ܺ6M)كV/<3SH`Sf53jš׾OiPρ<r#X U*pWTA~i ԭ6/# OL_r"H I$F'gA+_Bi~s@f@$K?IտXB<.3Ƣ14s˅Rp]&e0V?80{:;oJ 9ĎI 1|%7. t:Tn_{7ڇ/$՘5ƾC,~cP}70{ =[h؝w8ڦ".*JURIUzHvhH u]$WsH* QxjrjH5_ %eDs.p 0\A cX 48uͬĬ]^:{.X8= Ui-ѭ6{-%4hjWu^2:rJlj-K$&mv}[t~;)ii-=ȩi҂p6"runV|z;Y߁o|%VhܻPID@0mT;݉zL&L, !UI#ݬ-/}><V2F鈁 ]zn2YІqmyx !*E(@H iwL0Iab#Ao$>%%aa p;]Mח0{@^73Awku}ʋ]+@q}v|c'oVD`0 2%I΂Mskeg20>˳phb9jE h=Z}@Qkߒ w6$ V"Ÿr@c $C7>A$n\pw^ לCl8dC"vaT;;֣cu&~d?qr w1v9}jkO ec ǧrG0VcvTMݏ`a~9.1}3̠$E["H,j]"=b899S(Daߤ8Kg+Z'[NV qzH10^^= bѠ0SO\e!x**T@ )xl5LTHG$":Bn e%z=`s$ 9RI(kR G%ql BVtQ%]/]c|p,Yw@ŠRxjKt(dqH5Zصac":![`h:qZq= qE S'Ƭ\qX˂8Rm_J382KU -v|F̩Ҧ?qS`0r\"hąD۠MP rTz&% Wje>JyaP9A ! 3iPclCSʗl ~za.$_0H=9ys[>51;7/Xp+nLVh!wC$`٨L^Trc+)RuV<*.# ǎ,R"UصUi1PGҙ:ZXK|u-ȲK$D") UBB$mx0! H"j*] c_r'9gУȑ% iƈ 6jYDS0XZafr <_"G" 4ͼ;RŢ0V " sT p7Ul8j 0yPM,D{1ӓ6Z [ΦD<;' 6KeTDQT X^XO@B JsvK[-3Qrj~YU/'ݻ)]boAM8_5AL޵Ue]ǀϲ`՝!p\f m IGj&a#xPAܒqM:#òÍ eҊJIRVH# #G:q*5I=/q@RE03 `zw n'Sk#ZnG QQAIu, Ž; @hM Ω|N:*v|TT5J6NMg1D=PDB* c%QMkcVwz\`h?DUړ34:1x3Oh?vI7j@kȨakbsxZ;?y솉MaS22+3FWW^0K`Ro5Q `2N \$E_PL:m.*0=+!b9vZ"MBE0z4[H5j!*΢)C E0Ġ7ZmZt=EZrr 6M5㇊`C4[A $)@#-on:":O72HeQpƨ(8^i N a<8a߅9 Q8SDjMWׯC@823ztR@4]h8̊_OuSZ2bW_~!Ht,N}U?hm R|MQw0xmwLIpT[KMΙ:/)>%nqm(k憀XˀX? [. vJt  xuu]r gFe.@JI< Bw)PN&@[*Pk%}Sx0 HDUPp)W+i)ʎ7W(TmyF799N0緊ʪ@6fZqNOJ- G8JHQ6L c`_ǭR&8Rڵq Q(7b(k(i`wW{%V;&b1u^pqtTx߿Ccbjɺ% >o_hW_qt%,@EGA,닼I`YkXw7b!+π0ntA @opC)bflؾ Yxn6 ieWC?}U*dÝƆk=k~6sȴVMW0okkCWgܦ+H?Mc_Vs]ɬV;=&O Tiy{˙hL؂}8Y4ŧu-hOg0sBdVE$[|Q,/hwRoYeZ; hN nLĚHup3Rg֨Gk>uTNKl|kˡg+s+\R@)n48z_XHl {E"04iG4p U}\AXfւ*JHE-o>w!KI)1-AR <\Qi)**ElFaȅjeQ; Z0 '9+{u| ?/sChT:yXc03~;Zr6Ѿf=}8`im#tsAum>ʖ5%oƖ+m߈8`_}c\*mY6(\ lDߐ`^57~DBt6\-zkQTP&w"M)R0m\qƹV^ k&Co@T>>1PѨi4v8W$̈ $4vq=,)@zzȸVXi9ۊEi"Š)EwؘFM˾Tހw"BJecx6?!4Ђ^ɠ(c)1:pJJ|xlݱ[)_{,t 6 Ьe6Ѭ ژ H1m!b+ ;7[wl;۸>s ں(Y6+AaBz\b v=0D--`aTXOamsܮ{ah;ϱ8eBԯAڙ2+?CZ@G>bd:`P|9k> n`fw <[٬^`*9*(N494RPar9bܾzLXlDJ9Mho-XEuDr0khq&ssqqd z,N붬CWoɊw G#%juz5 @ۙ1=n)l [;P7o^x84ЊW+yqSt@$݃==Uȑ8CЖE7vb$B@w3z.k>H(UZI  W%#j9gi ؆5n/yQܯܮ}Qӆ֫qj../j4k{|:~pZѝ`f|)2 X4 *g Gv]?f~]UN ilCa0 1]f7#X g\DwQ0|^qp)=Z<~]=;!>;^qO.JbE-ۇ=X]}}F.sXlהAF=ڡHi[)vѽ)}#׌΀ʭq9uԝ⾆k_wQjսsa|]ՉK6!mJ)_m IDATlx @r\V({s2!yHt"]ǁ^ab@.43V'qđ}'bcݤ؝3cZl܌ˇAӢb6`ALhW_ -\"5j7;.n۹< l>|!Ө NT1a51U Н3Yʗ!27(3 4th:(dzؿuǶ_$V,MgRщas퍡 roFڸ)E/x̾k~E2Ç"8qMт3ESzCdd+2Elv\φQv[՟FPJݙm>w+ GDe"%0hc>!&- p_1&D3P57̯nz|h l`(vB"ā֦`> h-U!i,_<$_QqO̟Ӓ6Y ?u {RʘȔA)dRR\i;w-sd%/#wk[QfzdtlsߜRQ%1wQ.]d /1 ^ULV9R\6.w"MS`Ȥ&AuA#φ6߀oȮ'\8G }n˶xsxO14y*|GE-GUq4p `  }=~s``@@}r]!JhVIT!̿ 1<{[pP#6Gl2XqA}Lls9Ql5,A-ۇ" <Z!^$TG/i/x:ΏGrtu~gP"t!]b/| ""C̼sd0~~[W7%, `,U΃c>;?/nT"XcmYڔymDjF'jF H^2}߶N7݀G߄M7bdo~TqĦXf9`/5:/<~<.(ж=ʔR /zEH>\ pFTArw^oȮO6",%/lOk1u]n Xgt@r\9/IoWYS{U)z%d! GFv]EszӊT}xaLv7PA5)O~F@zy8 ܋ުpc8'9q1hãe]>aRT`Ls6NLЦ9a "A=6En_.*U*VG3'}bm_:4z[G!r/i܃18_!S/j CS~S%>ʚ~\ۢd̟E""VN5[kqA!87n-Jb_()/|e0 ~FceуW5ХJYQ8">i?VvF8vRXtS,b ¹HQotΓsu=Iy"2 oCӮt&66߈Gۮ=5^f<؟4WMc OsnGl Hƥ}`mBC`]QIJbbBy`&?8K=ݕ;wu7'{o LjkV$7Ey"8F?z~[vlW2.^khFEj<劧/}5iD"Ji{ehC:H4P>;ZfM @Vdk SSwϘ?E[Zzz<܋q>[(· ZסT Zї(<g'~uc.I eE%hhw6R@3Dec]Oí@Y|x|糘[R'`̌?dYp}A f` $ 18u% 0= 'vˍф)N/uHRWD-͘gv^[&y#G[&bvPA!F{WjEnA-  9F˗x00H¥?q1 jV'n`U/=Esu㍋fˎa=;_G&+?bG Y Oyq}Zyky{Sܠ/t]EY'| 2fV23_z3_|Q@=ck:A"L.whHw dݒ@M}oXi68'ݹ.`(n#BP@_Fd*R9g3a 9o:cfjg+)| ca\)|jeWOh|!%,)93 l&\5> =y ǏRVhiLZ a Rz'ٕ m>+pSQyK^:V8J)\|̐IkRÈli:8ضu@^/u+k O ";/xamYFuwlިޖN5}B |E t6Ǟ6K׼1Z19 {02{oU^5 j@A%aTQE>יQ:22MaM,$I]u{y{yRy_! f>/ɩcq"\ԑ'?qVj^ii)\E!ȵGW}s8_O JLY='9?5p3 ?? ^۶u,D;[=Z>h_z޶.ֽxBDzN34/\/wY|YPC#dB9IF+.x+J*kؾ0[ בp\/q36>yi2j64J޹;wE_-Rc`+y6$t4(.wq! . x!h%+t՞ŐWo޶J#PjJp<%ẞRع+U4O'˛dUAdɰu]=)u@tq`'MLunl:@ahxHXd;uA˪#xy}Jʯn Eph0BLjTNG~4wwںϫ"EWswH}׾p(.PRA˘|7@+ΐ#e󼪻R->K|bR_֝}t[/ˠKdƎyv(?Q^(Az(W+ΏcȘ#HYQd -סi->܍ m`ێdČ1P=͸?Xqʩx.A{k[Zf8jc~364;qsa6yEs\ןzFuNe,ض ˲`&Lӄ6144~T:T?w̟:f?o{ OGS׵S3cdpQؙ18(>r^PuA&Gɂиe[zǽu~2(6SH2SHx CG`! l,P f]V,F#cU?G*0:eƣSn7k9ѽcP/%'q 0nQt{`wozε%a\V2TTy7y h<\+0Txe W"&ɜ[B>ϥW ຽa7'RgCqdQxUb%Qt2ڎn>j?2,3Z-/]-͊Nnh҅ײ] W,ȕ B\1]h-A k09?X/ϟq̣7P6ZyI~9A%~os~t/㴖R\sV#ZkU>Ҩ*3RɰL<4m /CE`X ۲`YӞ2p]ˑr\ybn/O 42i:dJ1p2i#>܂AB*iHLF*BƲr];'˔,b˾_xEkB|(p)ĂR[/}5 FW k:. L Ҳ BTB4̜,uED:3 tHH[@4jW9 <w2)]GpPXZaP%\X0Hiey(ǥސ[8ZU/TD Zd@*%uz0ay} 2#" U NQV pc8KJ3uX%ȝEmMl{F?9%aD[>ۛ4=̘;6x㉁Xڏ E59c0?j4obu]=FKH{F(tђN ^i[yPIđmo`qh/Ceɫ+_'6υXKB]f@=*{W{QXky^z>MY~ jeը,%82a, 'x{İ@$c8ia;={g b߾bd0%1 pÊ32 HW‘5 Gz]N frBs9b#eFDH5El! /,-->BNe!\dȂPxE\2Z !OBҶĬ&ug5yAn͝! nky%Y7_p2sϮK@f sh/j8 'F tD @Q%gIe˜.gOtxAሯ;`Cy&J'僽3*qщeha;~";P3qq> Zhcr$=-< e7㝉Z)kmoqAj;eiಎݹ1&~ADk*0[\c2,CKh rZ.= jK,5 #PߗR' f',j KB0$HHUFvw1W_> Ÿty-*b,,TQ9=iBұ{edJ&=^F/h*me9! /qT޽ɠ~rk DH \ښЇ]%k0Mbdo_:C!9ղex٭)ΝbinرZؘ8N!1ŋK9ӟ! ǰl~HpX _=?!$(y'J1\}J* Ąf ?ʘ;W5cŢZF̂A% aR("ix3.T˙g :a(֞V% իڱx~]k1 Q],zNѐg6 ;❉ E9FƋ{\F0.w& Bf^ЋbO (Vט_cݚ&,_!V&p(Xz@Y}9Je@ pъlLM>0azr3Zߖ|'[7Γxq]x|.?ڧ?g-& 2ptR9솩.d,9QBG%4xrANY yҨ) +5h)E`bI17Cn3aַOf N"blf 1d+eO*FD8 ]ӄ|e1T2D!U+tGfgqo|S=&u MP ah[掮❉bnăg$n@:zxgb 3՞+-YYG84\tRqVb:Tn?fF3t3㝉 n  IDAT6ϷX8Ek.;z2ćyUp2pr}\ۂV d`CeD(jF $qf^UăR=o|<һA^Rǟ;rn}f=_2^܊4ђ>&QqLaE lRy%R0;plQ0̌l3Jt…'ଥu%qA,\ #Tw8up({Mgb6[㝉+ EmVj@eTК%%|RV^KqZ\Μz]6*¼$*,-Ctӗ7T+43_ILRuRC&pnG PK=ר;"J鹾Oh-%e 0\f,?A{랣}9TR5f"4 ga  *;_cK]6h({+X?dضh3ʻai>tǿH0;CNz]=?e7>Ҕ_m65T~5`&Ҽ,`86է,4 Qnۙym3 6>7|pB]=b4IlK 4ћN,7Ragd,K٘7baD>w&wt 86^]Ѣ P=㝉~hUg2}ZzvDXޣiz!0㝉?+3~hY'\lwoޓX\{ E' aq)hޭcqK!G#7!jh]f)?4b+^w]B<B&NTo<.$@LEuBT#bш!P5P^Ñ^dA*ǒTR\oX {à^-!aɇ'=TKj PR:=݂ƫ-njP^̚Pˀ TCDtM3端>s9% zY 񩄎սD?P (U/,(ݖBTph6iV0m$}oi+CΩ4,$9fέHճ3>e"\KR(#Ɋ:+N2iԹHKw&rbߊPg jͫkbLAV Jp4I3?~Λ93<1 ߵ݉? l|@.!i`g@`hm;z&Q%k|e8Cz*IW3q'HR})<| 1VD +kmc"ܶV}E[{w-C"zJ\rB9>|pԥԺw//b$[ ˝9Y򊐘L{]7/k]P+3i7v  D\j fŻzliy{?SCLjAH"N +\=b6Xݽ*U}$c~^ 1J]^s|-l.sVq""ޙSa-6{{-pKO0{|{]1GtIJ֟]-^RF:t:i72$w%}Ř/܌tqb:s xgBxڿs7cϳ& %IT1fxWb#W|TT\yNM^~)!3|E=I"f3-к}qWEkZ@DgM;#݃sgoJ1M-J\0+fb;# d8楕 W< ?l,}/Y0ܐgʽ-G w8WX V IJutI󃂿m[8k+bd}3eگsչD!Jp&" {zg;aqwt*ukVED!<5fKe(lOeM A05I#|GW.h,pEqqp"zmߎ׵F2@r}̷!8WA닋s(Z@t&$N-oϷ',olZ~NѶ5psx6E7Z1wHu¨<|!.СGtΏ `x*|ir1= 0|Y)7\L&Sa借i_EFn/{.{@Rmm[R& \GWSR BTJ&e0gAfg؋Eu0<;# `GD'r`cJ!ww~x""Y,~_"\w1bZH `ؑ'gw5dMX`U+fWj,]%pqCax|L߅[xX*W& !!Lf/q>gZ{OFBȻ)[Gm\P7d@qߘaҙϸ}Z̑00~uDDѕGC-,b <ŌsC(Mvl>3/8gx)? )jP\H*5<8GgpƫmmKg1G`ɩ?@X0RCMtaG>|Ӈ&+EgYOOJ1WDo9r278/f[YL驹:̼[5(Nlj>l; ޘ9, @ g⑹}@х?-T,?k3NTxbzfWzSF%i}h,Jbc02npiUWtR=G,M) Cw5:w$#3b #pksHs[a…`zaqnyc|W̪vZ-f9TBiB)ρE8J٢p߁[nʧ; [FPO͝`3u733#Ca<;qj9vIf3BuS,_(c0^9!cQe}N ^r32Vz>IPÕ {Gbz^*0s9%Vp sEpga ̥@;8o?tBuG<`TN!;Ocޕͷ0D`nfkaIQydٜ}y ۰D08; e0{߾5gK aǫsx[P"0*ri32sz.'/3O$_"usVKo{ 4b@p0&@zxZf$, սsA}9,Ifk9٬ )ɆcGV8p\NP_ ;twjY5O«&z|Sl@v6i@0f(,6<6gXl 1  qC-fpɁ^9a(̐@h9 ؿ߆Pc_wsLt%~x4s$o&o#|D0THtž+b7#FG#C?b\>83%녱Ws IO: TH{Ar>.Sjٹ']j|ce} 7$ö}s;ËgE*C/N3ӳ?-B 6 Qy>w K){'<1G2?VpH!{@E/`+DbjO`UּywW mk LV\??znB3okSV }] n@}3Ƿ͠l:{g{]'9B_e37;q b3i3Ha޲---|0DY'@DܳPxKH.hcvna7yrSg (Ak$?+ۘ@y=@Fԡxg"=ӯï\xJZs@>Qf*57PӴ'hEjb m%RH;Z$831EÞ0u ( @j+/Mb{4$@l}s{ay4cFfVKbY̱X,P| o^ؿPv"dfID*xdP]=#3}w,fǔJ_LdEAT)Rj =yY??ȗAyH2sa{:zy%ihJ  G y'f^_qo#x,~[vI%%TRDsN0~ x<2;$'>zd̼^gLWjkv >eqm7~xiض 4aYVa&lXz]j\mt~a^A4/N)6S&YT*48NۦvTQrTJb1P*aN]jY:VQCCrfi)JR$RIxtn wq>poYև,b6m{ m6m, Vn6S郳l^>W}͔4)3˲> Rem|*92Ka^zRÆR>!{@18Eh Rc_SjI C$QO)}|k\dkD(y#"܂ x,23+"ф=ޅ/^B(5RS7b<_`ZX' _KwvFfn_7!%m11$hs20(`fA1x+ &ki:$Z<ȎDF& u\!p!%i-x$MfVKK*+Rɏ+5 PTdRWJyx{`qҫ=e:y8[Rc8)#׊ !&ͣy"ʾ @ C0$`B4C  x~`7>ps[玊k:iRjId2Τ-7~4۶KlYYD2\mD ؗ:sZfʔz6NLy,|>Mca"+TL᳎ayw(5x# <J :v öFWLl0MӖ˴4Mi"3e:)Ӿ'v竺Q#98X@Y^o#Zg<6_[՘JdYCeBhiy&XD$KyB&]$"iX;o_~V,WKN@¤}gfGWIď\/ߨRcz_ָz5=(R}O򆃼l^bR1UBr~K E1P쳁 0V&=p^FxZw&nMvITU}C(5\`O)YR:"jP NdBҁ4O){7S %gP[=CJLYxJQyQ9']!~>f?Z2D)oo%Vxybs5@䦘4\Hp5^IP)Ճ'C (N@mu $4׺H0 .҅20$ F ]eIz.8̼<{]{5ѽߑQk  &oX Mx iyʿe @P(l!&hʁqS$?d;zsS17xq{gql&R Ӳ6=+1e}|RG^||<ē8b̔7T*E>ȵ? 2 \SM8 }݋G5DT1(UZyhrÆQr+J 'Rٹ!%4޲ReQ)R6cbZ :> -Ǔ<IcDt0ޙv2>l<r)YT*unn5;Q2h ok(3#rR kܾ*-\Fb\5A!p1ÈC3KDyjx ՟8G[jQjRʡ Sj6<^׾8^]&f]##`r{J ?nbQl?Am'U3P3(OPHh 0Jƒ5b!)҈:ٴvf~L(+[[`C̫~'N2~e\Uнg<:`hc 췱PJz`,J8~ANYT(EBVjRZPuХK,D,0^bwtl7{]B"Ӥ3Xe8Y*&|YG0^ݟ -tQeKJD=pX 'LiɌQ&W!j"f}0ֹ瑩p0zoL;$Ϣ715^ spZ7T\Cs(@zvo"F# yD t˯E.3mM6=Mr*(H cKx|% ZUX@)} f%{㝉Z O<V\K}J[0MSMl,lE[/kW.ثro IDATIDdrf^1ѵrC9]6A~"eK֤H2Zn>k y35 v`H094\5xL``ҥ T*4SfR( wk$"ZR#b@3gb61,"`S d4LYh  !H*~5*]Z($|P L8<**WpRÆCR>MLFob} #IYj )jb0k>.GQW–CrH >g/#& gyX jtd1S E?3:qws&.a^+<>~ӎV*pZc9+"cag1Ga1 g,,AJ W (& + @H(; н~fOfT(3$3\f |GN@o iO3"e8X#i)>'^(JoB~TLN3]mK?dˬ_q*N#;t0f)\K!hѱ U%p=Mrb|-4vMo# ѡb2ɲho8g~,z||#rk "eI#Xb_GOjp m9 63,(sdY`e5}!|mC n2&Oc$q\fPlSDk?iyw`҆HJ/li]Y^hrЗ#> zfydesZWJ-9qN Y6 - `K[#Q |aA'Pb"9ʑ#;HІR{ڀlh!> `9Ɍ2\($zu !lؚw9ҥԥ55}jV!cݤ@o#UH_^)@ck;#"̑DѫZ'HcԋC/XvŞ|S).> aL &X̺}Š+ MpWȝ;IΚ-Hْ`%Gp589'(C̀4*v* @{} CWl=BQv~M?w&;{ 5\b{^W\di ."躮qlX zl{Ǝ-uΞg/ŰW)ʍ[/?t@Y!,k"dA4!bY,*]ީuggp7߫c?[JfernDE4)F\i[co:۫JJo Da$-@7pݟKx73e==q '8J6a*dS()oƖÙ<"uGpyNn@yL; ZMB#ލ}ϧ>,NyGCSsOaKtd{ޜs-ㅽ66AyPL| F`y=M@8*ozc "5#ڤ\9lS #vf\צ26lOaV0eT 8G;Vl\! }|26 XI aEnW ]X/tR-ٟt D'*"K)q#4"ϱw{! o:՞l5>wOxCW;dF$Po/*GJ}םtBQ`pڳ Ξ-*a,pÙɞ}ȅ(]t`` mXZ ɔwr\D̺F ݱ8IQ4AmWz%GNxr냐;_<+dH1QlR6e~Q>5c3$SImX0̋`$aTa5R!C,A(JJˠw sփMS'A # ޻}Xc^"dO _ ";b8 2Q@?lt%(Dy5 LY&#Pc?|aR0vs<WЁ-2cMpi6D"<%XhAS43P~ NsA Bs}R!* y_JP4n}j(Ok*It}Yzr-&Dbb\ 82V%u͑ R{vQ0}+HDO/!){.B)IiW0"- J+24 kYA:AFԓOaBBX^fD('k H3MV!~^!}ux2Co Cmؿ702`"+0*br7AT#&]<1  $8dap)wb# ]LR3H(xĪ)אCEßߋS(B48 ȯsWK-; 檊Q ,9{Re 0+j` 'C+烔@;ʅ[ྺ}6yqЬ? Zdf/ ?BVR{/ixՃxvX xt8 N Cm}QO &o~N m [2^OAu(B5H1oK<)Q")r|aWaa=J:Xb k2&({7[ݸhvjiF e_*'/}hVdQHr4 jcCi~}(!'s;&/V,BBx7rn$bI[@mX<0# n mPCpZoG50@/ B$ AW ,|=pz۷•mga\T<~60ޭSegVKVAƠWx4O(H{Wd |. 7,:?4̮:~{o*IYdْecl 0tB7O'Ke `BM'0`6GIYT9{>^ɒIzTs{w]kO>U\;YYۥ^9C3yIDH @2ʖچF] +4cDSQN )[$!07G_ĿxD#0T勻G7C6G'=P=/Ȏ@~@#@Zz,$h(Y>.h?Y& |kOOmi2-vӄ,cl?TǾcqaj",JQ6ȤM&֠"Ac`! cţ }A.=;##'#9R^Ls >įӯ p`*7`a#k{E1E<:S>f(WOA7vO:U0t gGsP0#H},UL44H5'bϓǰv뚒4pp#YЇ=Py[%";L~c# 4}|}+q Os'`?ʲ hApP@Rߊ_#hS@eh""X joh52=W׿PRyQXK8Gv,;$3C@R0?57YYgoAkYZd$ĊRnϑ .Y0 A|ʸSg$A&ö \vaYis&aQ[I\CzA+.< PsIs9D܆cQJ`c&[q(TG\\)U[GE^,HDڒ| C 49C ©ŋoz/Ng@@wa|&G=זp X0A:ԷTf} D_hU͛Q۸ĆN sy DIOs84>JJtJT&I½?؏-ox)j.@߆Zh@)4+t$$j1 [b"6h7)@ ısk_xCqFGHg! e$w9݈@oR(,`(Esuq <vY~Zn!g*ZX߂,۷E]k7`/窭EQch1j=䟷9!o5kHan8ϹZkCkV@0[`]+РmXbB[Vn 6hR$#k!z29"vy`AD899߾cpM [9--Ȩ˅TQ?$HNXB$oY#{:up9--AlJuB@J?~MB!kV9d[/ʱBW@[ ;!H'VuC$Θ4~V>2=àvgSˁʆRF jsW%gk;G:YcH4%mL ,40yt|~\k#k6 K@\3#Fߴ}B7N<:A~_8t8pœӗc86XJ(} )KAHb#!ɢԓm/F4 F{n_#Y(%Y@hh K07'4J5D/EЍFV`l 3!+xI_gP *79RIat :7pD׾: /΀ >Rdt K<(dzՑ~-Ӓ󧶜Z ¶oYWrG(0$k $W?yq-^/ʎr8*/\GϕQy͵@ ŭ3Бex#"DHb-aYV=Kf(M#{9CHC"ܶ qbaטq$P ʎ'r!2?Bz`V-eBe|DC#,jn> | ; [a&$K_k6b(O;?/sG2 =˟l 4Gsr8vʋxc3hmE1AȾ630wn~/"{с1 wA}Wȳ{Y!F֌r!ۑ['̀ T453d-g!,e %jXR@6o!;h\$k< /hx&fY -g$mt#_r)&PѢ#f"0tbM5?I:}]$☡u_@""#@, q$wP  knC ^(Fyn"4% ́_km>Rƍ0,QJ5XN3ˑ~> mDzWQ!Se rd@Ь!0^d|ト_w5߀{coZlP\+e0&y 7Eol붍B,|!jC%31x[_).TDĶ@t)C MByOhtLwb D^Z ,QZg:K$dL%} @!l;D֏9ŋ}8|߽;"k'/έ ҥ!fPn]z @Z{^j~~U^P\DS'(! fDB7Q5Ye>wǧW/Ҧ8mHIܻqB$)EI-Js'} .-EQB%4AVçFD2-LΘhP`F$Nbwcs6Xz˪K#]P3)EPox18kY8I!͝3HWKjrem*Ջz0Ko u-tƂAQ>yqBEdd**LZ!\iHL&N~`=U@=H{ [O!NֵcᩙU^MXg/$N88~bB^KA=$$qX%A!X;H Cb@#ǩ{nVrBU1TZ-@)a T4|~ +WW]ʕ@yY(vҬ5['w8V`! (6E:0׆ V#+pO~IcQ?F>2diACH'Q^' `d#OQ42 m*gY|43X G{%CTY)EVKNt;+ aFU;s[ʷYacԖΑf}etEcјo"H;n$[oe` IDATl>v'.zѕXls{  wIXeΡu4ۃ$YۙgN&"ʆQ;H䀴"y")?j`$H(B$"' vA$!%# IB@"PqL PM"϶JH!E C+m#C ʰhajg$5Q3fdVˤ%̰{s/x@β3:?)E1S·@Cض4B riLφ)E, >ۨP6_P8Xvqh뉐-M2D)]a, 8VCCT1Ys8{ 1 8&͝cGZ>Ȩ1ud֙Mڭ3QqĦQ[pLLФ-f}\Y/|`ke3Y"|eEQ= 6=y{Eq.5UtY bn9u_oud `k " f[*ŭ ivyk FI@kej3 F@: |̸9õwlbd jAqs!HG` YY;F:=5J{~lR1Q3G!Eu Llx[DPg4;j5?&b|ġxkW^fi0 [Sm4 `aL!Z͓P*n C ΐ* UQ",};` 0H$( HbJ,Q%8BG 8piG!`ر5C6F҃%fE֜d )&1_þ<QZ <6Y+Lt 4%,]˙DVgL8 ! Q1"* _sv--6 Bw@sVPBJ3ELՑ.TsVS,9m* g?~O{7pn}@IXH[xon)6㸒M;p;ywjUk5BO#P8yrG0Ȧ!%H"%[I#,{gfG`OO]zI\cV\c \=VIǐ=aʎH?I `1}bD/X$"DHi'M@Pv}Y6_; GZ==GB0_LYLEw>Keo5ks@EҾDX~Y/ ܰޮVmJ8žqi!YlDkYpGx?} ,?Ӕ;DVL/I|v Qs ̀\lr"E) `(F90aH2CL0 bQ8fn LPVQ `= 6:#'\vEZ`nrGro$ IzTZPL= e2MTD %qb|'#cIZAZERAuj$oPӟ`?KoF5vW0Qqk@@;`}4(w>*bKL}hi3#܇Qy_vX hZ AuT+5TU7izzxfZGYɓKFL  9VϽA[@R!{5HˍFaǨVVj 4" N@tDNJ)MMu8Ү*q3=vNmnjywm6iS$dxX]vqdӈz͈r?&?[M^?o~6k{PPL= k^4t.|bP>~<# {(lVm?; Ժػ*]Cʲr]aGpx:S+_W٨ȥ)D. @" .";6i&an9$W XQl(w*EmFآq!M!kq):6>_PdPF.Sᵑ犂~DZϔ o>,G>ѽQUЈ~OމR;T"H"**>(TMZM39Gq鱴wbK,"3 b6 #9")OL{_TdUm7ei0C3Aͅ r3X>S[&T+Hf|Fc"\FhiQȤjNv+VfMPk! tYX2{^0/!LtyHG-Tgڙu\@J*w|=*'H[9:>k?bꩥ WpѼu n^+`eEeO?-N,Bayn<3uP2.g^VN[myA6(]NWi=h%ɶZ$j )֎܁||bƏ@9pG #CPo¿wh4|ᵧa*7*u8(@߂^ۢBf#sEV : 5LEF5 .=`f- \[Kέ8Ia*rmwfOkZaŚ :<ZЩnw:N*ddt-VSm?.;vq[e3Qfryg"}[Pyk/ڈp$_izZmHӆ LUqEtʰx岮_1q`8tqKA#X|}(,9tdΰϬ;HD494N*z'К;## Dݤ3Ew=u+qf}G %.j=fѷ!}t ɚ5x\'$^9j1ѰNljdsaWrcͦȥ \#RM A\)t339l6 Fbԛ宻ل+y~ʀS/=0^9gfuah,} J3Jy`hm0\saS¦-ljY539 sfPI6CPM I(,>X)e/.jme(.p>ζ;KVm+{p-2h) NH~.Aⵎ1♙mם y *k@E;=R>tl˘uS)~3XuU*Z p/"NMosv"ټッ;(us W\Ȁ5!ͅËtd ;Re5xmsJHah$q( DDƹFf aJUY,iFKQs_(dIi'[e%ș'E#7lj$7-iiNs)w?3 ҢWN7gZ z~RBiBs!`DH lq<#P”zT w χshtsAtdÌ~MoPl:-iB@'ZKL`ik(X0x&@ f B )ffʞyr$HEA)eR92F+3sm]m+`p__;LsR1<̔E'@״@E2Т__BC)#"s P.uɁx(pBh}ް.y9aO$jH*[w13(%a5YRsZ4i,_$ A ZZky,mQs)q `QZw Xv}j#==ERT[j$ HmwE]ut"j+7.%\~gPV,]rDoa*R /E߂z<ֺ(׋ec{Ox>+EZ:m+u囇M-M>20p̥<BD KB`@!eZ:,D|OjA-\Y@l*.8_fy#d(jY1r"g)POИ_K#pSo^&uG>s>+u ' [_|ׅǎM{n>O;zwsMcQf9[F,TdIE7; 4zJBu[7 K[eCЖ5@-/8Pof"3FN22DT,FLN?ϷRZh(MLA;0l@g|fg4F`s U8-Ϭh~=v0zR1rZ6DQȐI827&S:K"`Kn#׮_0OlFd#>N @,egTt A HV'>:AGk1*ĪIG1FM%+HH v~5  ;Vh_'(3-ąZ47ufQ0]ZJ@*g\K9xT:A&"P2-Xr{~@Lp u $jƢEbrDiB;TDP8}HA{EmCXQY1ZHKAv¢|m&@IYn IDATBz vff?`a"iPNO]f+l\[?Xc.dA۸]O$}GD[]^~OeM;9z),|Ļg|f rrTX ޞ`|DXf4r5ó]B9)`%AMh‹TA} :;^ߩ=X~Ep"F)D@;IRH3z6 -V ? 2祎eՖazF5/m=3`~.OJ}d3s(anB`nH-Q0 LLm!jt}`K5&@QPtOX/mw۵gt?إOuQ5ЮsXb'7p`Ep(hk4G3;S%%t5ƳDvtw膵vmhbW4JWUس77ocv)k#gWm׹DdϮ\<7U7h3F$?dL oYPO`۹c&CmvZ;ChP)m|4Ljd9#U9LCieԠV$USRM⏂2Һ@W!j,52=no<~f0ʹK(+犬PC K{qڔ+emAT1Vu0e+B .l0̛>?gV#00Y G@޵S&zsga- 8Npp9,Z0OJ~J { |.OC&t -{!tNq˭n}Uw_`n ρzWUeh2+[m#2 EY)e>,gd+h)NM'44ff9^74Ç_)#ow`[ ֿ( {[/-kd0"iznwGY~za=i.ba06l}v:b߮X~?*%ZMX^ԍ*pPc 16K>ܥq[ ~k7wpBm]fT%fn|W{hݰYY};6lu;wIT*JN?r)ZЪ-/؄,eZ'?Ӯ*VmEj%EVS==4[~4lw|׳u@GzA6&eCp"z3pc`q^4П|+"4tE: T_}{ը0P&ʃ{]v׮gGؔ߱TAG V?MD_ڰ{|]{?2roZ}h\Aay]_,Ƽa =HaҹiweAs{p{=K׼7`TΖ Tf5֘xݟ{{;{3fْ%)FFN`i<&^q@O3akmFXof\{E;u ? 4Ck$"_] -YC[۳?MdiJMdy|fx8xH>3;Fwnhn]7gog(d u; R)d@J{ubfdQPd0oe˖lk[( G5ײD<""G\#hZl|H0z{lhQ4CcKqpbšRAu]<jP.* D^DD^q˭g-lR}iͯ-ǐsZ_ 83_=sGd-?{^#[3zMOx0PkB`4*;mD[yb-ZW#uX("/kM$""<e:ygXzV{^6R..uzVʀB}:>(շCatt!~_Z->-W_y\j2jH,ACsÞ{BXH2g`Eѧ=?Ԝ:w\&`89>9Vjۋ^~;mUyk]oíe?|_ QVYDښGj?~Zv[*%c:`뒘$p@U>xހCCSPjZOAISjFyYvD@o޳rlٿȑ~@$ g,szU]LJ_^|IITȴ̄srL_<ү*7MrU|Zg:RޕtϦYGοBhtv9n1B2^in&R[V4(>F^sA0Y~Ţrh4Vy"v "~v k֯=+]4~f(=s󃫴ƍ2"+ܲc`(gGa; 0sI;:bEH;g20a~(R.&lr}G,g,`6,Q%COokߞٸ=_{M7LmfЀ äkt*Vm])6^?߲>uu-(BnB)/]`ǚ cbA ((EN8ji{e_Ѩj{Ep̀{4i?A<]Nk{wDq|5X>mW/;rtͦF]{0~?]h[W!E=Q7j@ȲFZ)v"0Q6/#3TO'VjwϳQ|C A{ 躱Ƀ6W'NƵkeƢaSjTXҌ7՗~ bf@~%QR(Y"HdѾذd#4k)tV†lgzrMkĪ8~իԼBB%&ۮDnD%6ic VYܞ>khi6(U \TLi);{Zbˠ2B$$b!!BD[>{9/qPqp)T"3#nALi!e3TxEl 9sk #KEE0##HIi} t.Q+ _1K]ǎX& ບms\?B7.a7fExdҮjV HKW8xIpDJT KDZBX4;l>pSM[F%~Kq5+ʑ&ө/.?ARh,8+A@6,3\Kf -.4ׅ ȕ2JeU859aO<1~?~NYn,=?nxDIH9[.իfqՕ^4ˋB9.|}7j2lIjƝR `. TEUMC;/?v9"1 yRPGa߁cؽ k=W?p3@8窯ħݶ5X!-FOrاĿ_f5?\hi;%?}(2T`@Y\@N+#\$0> pjEךcxetcO!ŷ(R'-jAkGSXB]kjxla Č/74вB(`AB逎pd9@oOD`4C6SsM[.RBɥ~£0 'PU`lAS34t0*i6͌b(2bP\_t}h_t9! } h2E >Z&(3\L<WYF`ٰؐb#-ȹqwDȢ o)Ʀ zYevnY1ےk `p I0;a>d$.۷'gp7RQشq@i6,ٚ5QI6Vk#8*DhÐ@X@t%i_ᛄXFf R"g~J|kԴ53K0?JM /~_ϸ㹵Ȳ~4 ,gT/b=/_}UXDŠ%F2xf0oF!{ Z7uz?ONQXG!Z]=kQC"9gf;e셊i =iz@ͬ>)eZn]\Ņk*sHcPֶTtbFOEàXbGeq8M$5f10N,3ZSH7&bC|z4Qi{-H )0 EU8X[4z?[CwVϯD̒ i\sS9b`8b\qs"‚焧 |䄷}|Nz[W,~Mu}{{*C%6δ} j6NpdA^CU; B༞ZXY\y߀R'=p߱Ě^=nG~L55>cZʲ݋  WKG9iQ,Lr\La~~}@ќz},o=a936-AS4l/p>2 k. ) u59wuUϽ͌nYFN\ % g&XXX ,v^v@ 5!TqlǶfեh{i-~]3wn9{sLJ2~|( S:`# zg rz\h7<뗆C Tt_I b v8 Xr m"'' oSWt9`/4aODNkIxzlE_wx}@4*Zxn0KyoMGyS_Kmj5.++bMGhhxeeU &=DaOWzbeCϫM?ߓ$ Dҹ2\)lXZO$TeT.!.Wv? hi̓Va*šZW]?ːsլ P&\XWdr 1P˖miZU4n;oS׎dt* 3_;p_<]@SKi~ +$^: P@%2g;DP'觗+gO33A$Vcai].^M88Ů#)ny-kLk#.QGUuoޞQEgq̷t-ėtTm.qc8FU9O#LrYkK!~?̣A]v3 *Cm=΅|W.ȿ/౩uZw-찄f:bQKOxO Ylyb>1BGݽo<,ʀkj-0’k,OXV^Z(bX V.3Tr @v~ !7r;,,f⿺i wRn+.j^^ _n#+A,Fi`u't!Qf;- :-w4+053ye K1|*L8ot96T`Fu:hCieNXW]Cc^!Wf~Z 4MWHv Pc/h9 )1Gb>x>mQӝB(輂3k>RWל+ګTD`2!tli6]€3^A"A3FoVsJ"7-7Zϼ6pI~ g\ "e[BDA'S͞0jBKVTpKA2}*P>H6Jc}w5Xِ⥘xPЌ\ўF[$A`r}%ߐmCD'#xGQ{aY]1~5GOu=\: v8K*w5E˞9 h 8m3JoâѦO]рh :k0l"M5]xi H̊Rh=߆Bs @t>gZ-̕n \2VUqGe.RcMG%^^7/I4:ztHuYP惈vkVlTuKEpjZbr7J\vJЈ֤9FHRW'b[ooPUۣ AZ,Vof6zՕTͦ.ҴJ WRhD{hObۿxY )x&QK㻭$i]u?yi#+7w/m.kGC/W1ݽhOFfؚLYh0vYB($FhP?x}wo2sY K3[oSϗuʊ{R|<=kGQ,>yR84ÒqqC)DGPhQ[7ǶmzEY?6pj{Njw4TohJ8{u)(Td3t4M=r$rNw|xkߦv>>J@b![׷Lv;hgR׈ߣ='y RG*%{:-K֌MhmI Ԇ5U8yi%*QG&̊Qb8msp$j8"!4f'I]>ՄT7.+h -kƠ,97~clsG.Ww,/5[* }3Z>S"o87J>+5rdz;x@wߦskBu<I$<x7NVeqUZ'جȾiHћ9VڗnfNwo<1XO0@k<べt/ Hlst+a3hOl{I_Me g09ȟT'=vyoS%Cz%xS64KajhK@Ic`.EFݽe@D`]`]Ic6+H( ô-fy`ܡUXBvbjF[?{(/E-H5?6z]B:) a -C*vfX~h +: }$&RO, M]j1 E"AP9*=q ?fטx.O4`k|G&f~mZ+]$-BZuh=#{[=)VThӜ;Csv|<9xnxfc`"/6GZQU8q"z"sgo˾2z˅'}cyX]#M]"0yStr@3/6X@'DL){NhOYND_H#AYFcq.$Po|co6q=ch" *ӀpG{bЎat̉Y 6D;hO'} .jčN ;BpUHոvx(cX&(Y mt-?V"/@`A%<^ʀ- h [Pw6u=E\  ofi Y&5FJ?^2s_wo\1c(u|Ka{1ݽo+ga7SΔv#L1E qӌ`';f-b 't1l[K@&ȁڙ N体0 zʜNis'ڔˀŃK!X։esg1U2AK_OyHRx?P.o 0VrsP0$:Wu(vr4>:`Ym59Ĩ7@0`o 0ʄ'6d)!oU a6A"|wƷ[; ڂN\ѱHx Vh'3wш-̱:lu9x Gl9 퉍RDZ]p_4b/$s9>x3^ҥƒМm0


ljSۿ.,_~L+FydC *P|׾\s @m-hlN1,hd`r>h(/ly3'z\pD(}DDnz|YA|Jsw=/H,qVhhhc5>Xyo h28IFTQ] KEd?(3/ FrO1$ mٴNEb0 {dl^;`jiqrm  .`BPY]`GatXD͓(0uw.D@8o9ம64z0[uܛ6,| 5=С ~9 0˥F :o k<3С'} D^?j |Jԋ>V5~b[,((\Y?-wљpA&E'[s}3\@f k_=||8<۷hg1#ɜ93 Â&9RE?DnŸ\mM$̓Źoq)H`)̶@"ұz>[|Xcn ;G燎q@V/7 |x^<y!EY.; LUE>NDqA ^9܃Yز oo(c?wp>cEq,j#ޖr E3yAcE `ҋY`\ f!t}hQ$?z꽁t Ci;e;ޝJ/6h@b>t˕A%lݛX'40XiͷEX gw{(Ԇ2QŮ`Rdr "ոD'1NC6u#t sLЁ{٥X?C?3 xsrS0ڇr@Ќ/,w,SnҌC<3\f_~%yx|zs5 , )0\י{;>@X43a @&?7PY5!{`$Ykօ1n]3Ъ7٩YK)0syb@0'0_҅>G)OĔx3ȧЖ_{e8Brd7 D p&C/;&2__z_=uX]]&EQ/ϲ6>{q>X(q@|@+R&JLDD 2I>ݻ,$OliWnyd?;,OPu"@!"v1G,mɖKT$_Iv6lqço\ [QO51 e˶ o3S?:?dlc8@$bQsFEkGkaf:)<_2abRZ#7l[Nl355ܩA@LC{;2ib&,R|hKw2bsR>('Bʜ_$.0bWdgTg؈Bйs':u{]3ǿ8?9j(B-  (ɧٙ.\`r X%Gc|[y=/` ߋmV0s% $,樆GuXC2O,p!J]+kgH1s@7>:8xspٲ-W4ŽLqvT]~hm겈ΗΗo7-2Cz3f;NV̌jwzM9=(3G'8|~tOgC7=cΗ>3`C}̸r%SW7h-6Ϲ$LJ+ܴd+>m-8Q|yJAp=3|=ɜ LSx]]Wjةu:[ZOfܹZZk#eGH1(5__ٝ| ˗? :Z'H'8'?uⵙ̣??rN]h˖mӿ: GXqzHz'Z?6QЌ?u3\2s`;t'< 09Z+jz_zi}[a)Z'HQ@< =a[mA%R¶%f>h""z:;:Ӽ0률w,qmI,qԲDNo=ߜqWQMM_KW*5ZZ˼ihvx։%9\?|;O l[JݻE+}#P Xqb|̏{a6uQYML""3O8HD&翆!MxzFo^nix0ɺ oS tFѱnv,n^ ScQ|ҺC8DD纶zYNۢwRm[=![l 7;&3;ԡ6LmZb"k |HiO]ܳ4^#ܓBV1zAD8֜pMtY]g#DIDž C|WVƒͶl[X'­x?]|#]S@U\&ˌ!k,Hd5Qzv0˨jm->pY\&2XCb- U!uAi R*MNf%TL77XϿ&ovcmV"zVfnG#K T2YF& cDHi$dC{Co0ɬ{++;;F,X[WhcZ'CN~#3_S[&_ֳdwHOB*FI+= rmƃ380SkT ijj Ҹ | ٚ`ka /=DD?p'cJ ᚦv ef7'+x3\WLA41O2K5HAx,s~У6^Pb=fiI.yABpP91뉉|V"p'T!ʪ9x/>f~b9tY]X,9/"K37C" =%(sY/,Q8 ,޶jO`' bA 04$.x f^f!hOC ToSW-%Ne\dd v0&3ۗf༕U8U;?X(Bp`9@H XA'E{n >ߜ#:3M3yl3#i9 yxBt5XR)$3O+!HAHs ?L?0(>L;ɕ$UfJ3r cݽq\f((+lR*ƨR%&Fhs}BDp?}i$ [ާQxKWbuG "̌6c>ULْ$Q994qbw.]:fƳ ,r>M?ؘ=G߰q4׆ fL2oP lI&"< BD{b}s9ftG>j_s/jXVs KM7x3X`nO{ JTϾ$# oLڲz&;~7Dl1?Umj'*͗9ỲB eqEf-{<7ò@!~jpN:qD[ɟd,%΁Iة4$lWqJQ0с ۏ8Jh!"4U!2!u~BRX^.Vil|lGwoXWڵ4h=tdt?mus浮`r Q.1;D &a`Pз+ \_s\ruc(&(pJ s p㘃c !4о)5XDa@08͒ X 4dp3?}x ]ŧjF@5 r . ZM*8`"2k$N`uG BŅ9_ W L$Iv9&)ְIRcfbwo|Wۉޝtu.#C(HˬaN$AiRf !Iu*<3@@ȃpz5#Laۻ{)CMDMz<QW]$&}F1W>#[$=9s/fLC8*'GEogۯJTK&#JC1C91Ne?_6!jnyR*?^˖.EՅ1˚ɋmrRܴRۢ=1 Dtoѧf)/oPG~4YI[by[FⳂ V Sc8#.u]vu; H5p )W7ĉ4#+'*tX~Q)f<ڗAlC*A 7p)KP1lgNyz)%$!! !TfIP?dg܁n=.8IY]fAݸ7zO썤rJs2홸W3}"-Lhƾ+Z"heY($Ee1 $&$jGF\]ŏ~ץCjޏ\ݞ` OfbYR` pZX fH*k ".7F'<"$LT\CijbIrVvJyϊQWW&\m=fKʧzIf~?v }.R$fklZx3*bP3~?0,AC^jꈻښ?:<\<53ʱOnxzPF#L-WA x0Af]oo`[Va= +Jc$!,dHR^z7*2WʭںVp{EIȸW% k%/'"Wd(_x}'2[JL!,}~4; Lo3ـ,Ͻm7<> ^,z\@JXԯa oNr?>r1Vty! /1p'V#NZ^[vts$* %Im=dB?P?LaY|.2-G>|r`nߧm?۳ 尧(b[ZJxF>U$p`H{\QEk뱦Q +ٹg f"cҞuYzWAʝ'aX+_|9UrLbLsZ3;2aǠ#^kX'/FH ,`D !@xj} +/c +oǯ@'& 'L Ny,<{$'g2 (EAu8kUk ?#*q! e_z3ҥ@`eG.=lPr+V RHÚ;3D?JѴqNc &wq׋icY(1{f0@oh٧.f͓-kl aD>QΛMfMd pŻy1uMFoϓG=+"j!m@,i%- 5"ʊ6{x@Kg@if p}/ VMLbr #h{f'wX"pxiN})%2Jhs\wuu;tNn fm>/$zp~u $qMgV*i v8DVfl>}&q035AW a 3C8|=mim| P%hT9sd'2=ٟi}8R1$3Ңҵ$Iv%qߎ$l\ f`62Lt+QcwML&!](;v<.Պ:|' Nw`~WPE|\f[zlS8:`KC J!x1xhW Nz8Kd]de5{>Pu4sH?<fby󹎹aP7 { B~c=]kٰ 9}_a{TeR rޯU jlA W~fNp0Im@%Q$ j(&YQ6FM݀"]2?GZAy%`6`K" g O$mٌ!-k^ U-knEu!6Gm濖R,a<ǜJ `<];/XiCl~/^E!DX,1LI40<>LX+iE5 s=H 3kˮؒ_4b'ˌ{#KVu]yIĆ:rxGbCFĊ;h^*ȋ\z6' 臺1s c`s9/^N7ŏ {x@I?!(Am :8!kBk&(Oǒ1H \e1x)h~q7-߅u_ B@b0AOzOm^_q{ő )?,2\ ?ڏ^ v( t$iGD"16W; y5@za"dn=MLo  H-.4l/BX4 Nq=Ӏ  {;sua58n* o4/Dr} !Ob:#xw㕌lAdvBՂe `z_p^DA_b@8op=Uרml3JXJ3iH@E^ XǑ߁tn8C4Fꏁ=gApx\@v®v"ZH\<8;A|N^f H|a?/(yk @[)R`?}Tօӆw#5T>Iח5mbI&_z9-1,ۗ=︰fχ_ ;dt^C h5BT6f@ 8;iգWê\oں)<6spO|[qd% %!{9 0+eTK (M=p>h cL6 -de@K4Y8;Y?YnT8nCm=gp"9S~|K^)li 1’^Q^Y1$ `<3S^v:k"f"ھRD;M"30$OB[!/~ >dry+֝ •yˤSa81Krׯݶty?G6.BC"ͳ0 x18#1yiG_4 o I=t3vx@hE'#ܵ 6  !oqe?K_OF"+Kw=$ِwA\/̚Ƞxd'06ҁ{3XM3p5\ ĒVC vufTクž/[RӔ<˫A`x PEгDi'2\\~!dւ~U 5Ou=um6+j2]`-TTUWe/2RLg /Zki,E׼ 55*2'tSׯ&@tN& fZϸ `/[TH,n$הbǦ\%f5)YC)_f?I77ۮC22A6" 0+ޒ %2HJA 9oxjobYR۶QX9c٥$\Sn 3L?3|CJ L*?Dzұ z*TÐdv3 *2.P:~/硻1Q|Wv*O[Sª' vϑS Üh؟eT=41 aTt6V12 M 7x1H;K.y'B+ Dr@L$!R 8OyS®pa!l|ǧMV!U Gy;TI3gap?OR®3 8RܿS;Ưk&4a*"cPfUb,Wd"POhM5е?|~*(5GנRncDBa/07oXCZ#Oy ?y=quXZ2aF'TTtXrԜ{<7RXx>~vr4p>T3 HHҀ`bqO/W@99 猁>L"rva )P]?V]PE͜2-Q|_}nXx~⮼|9߶} Jr fBHP͌<{ūV_fc|&*2Ȟ ~H#hyF=Lr?7AYWӟiިZR2޿%Dr.B̰tޜ]hXRumœdƟyӁVДD& *]M'qR S V?@BB Ʉ/B7ATՀ7s"!Y%AX]tD18p o@}rX.YX!)ĘHmhU+jRjtZ4gA!P7yGG(f^,%{gkEI!*2A`vѬAĩa5qGEcpbLl95$SzB4fl݂a -!L,'}@eڨVcFy͛! eVT]h$*D$ *)̃SȺ2e{Ă_-{MaޠBq^f|PM rU z})3jT`0CwṔ-̇$i~_an? ԣnJgfŜH"K :^{7@GۯEqh4 r}1<&.w=T^N/PnNҹ,trmP}ZKM *x" ! % ,1,:%'ٸs hSnB15Y",򷟀ki.,>O]% ֭(v.咹% 5 7.zn?{<"{{E,e@vG@5 lEܵ͂HiC * @"ʼ[>GO8 MBR > 5 B g<7vdT$Hʱ7 [k?P! a>i\^*a"Byp%փJٺZfOv~5V#Itz AS V3j9ti= `9EU*!(1g Bo3/0Y*~xSoo (F_ `MTzȈRm~>+xں;2>YJB 3f5C-Q`& Qm2swNMyc [OA!̈́G^w62ecS?ITR8fDՓ|Ebb < chp&dZ3L;Q* rltQƊ(' ~L[ZE ]֭q%B Rb 2ey5@ŹBHBAp͌/}T !5X 0b+K3sssdh?e(5e-e[g+;p(O X2!204@; TQ $]$!1!JRRys~,h?zh^h{S@e~Q[H?d .hvsMVB6"=` PLxhDTO@ uNAP< KDQ2C-Pihk-A)};k^ 8.@F0?,̏  E5\lq Mڥ LR.) 7 8& @6Ů5&$J@ F $Zcs.WZЀ{>C۹؄cվ=8ޑn5O)Hbd:d AmERz8 ,N ,7p](Ssg7? U@bv礼1{b$ i7zp!(AeV5dXDP(>NYiz,K7=vZE>Fy`'/}{a PЕ=2}Zld0_ ag.7>! ףXRM2 ;v"-X/|Y[i]X^/2WB۱ g7 93@hD%)^K"%:-@ KKFC8zPAXCP *U<'&'LR (y,rH}(pNjAmOhLL5@¼lǃ, d`, Io :+3G> ꢹ"P9!WUs Z3`K?N`#:k{=u8NV ǭ9{ m8{/F6m檡]+{`)OLPGBt )!@S>r R TKaiޔvv1Rr=|I#) #rXE\@ւgE3D2-p{!;:- -$MkiTL' 8q,@ >h*P*I,ߊfȎΥ?{[ 'F`flQB*P[8_(P,OŒwYdHHYġ}KѕK9@no\&2X{!dTԂ`Og`.k6q#l]Ck *TP7Јb΁^XgŌGV@4 ifkĔ6؋) 0CX|(2}&lI,ۚ -:: TrfHAݕy&3~4j^@@p`nHZO[dF,83f>V1zAkSM,8_V##Z#qt[yJJҦO.w*,Ϣ[kv#$@Wwք,< 5lD"yYLM-)oϗЮDSHp hf;֎eW07K%X3es6(A΋1͟ڷL 3V^)UQE2{9c 9X58 HFb_?94;sc6U>޽JB;e2^΋a`}Y,py9eCY|kp@0;]?;@fF5?(0CqlNv} !@@i|93!l|Q^2 RRǼ%DU uP,5u2-K?@U lF$g"1Ot=ykQд "k)]{,Pю vv  y=~6S^EK2g synx9}ز.RH`cNE\ KTPz7zB@͙ρ5,,'qȄMQb$*c\xgBWwug9 =g v*(X642іp?/"B}(I@sLt!_= < *G4*6.0~Fx{i˕D`ae@%da\18Ƥg 6E#߽AuYZnu{#Shnj|#"W.4#O9vOwrʍa%/Q|*g1ss=mkO("^zh=̞_Lu]\߀Żhg`ד l-| b~nmߥrޟI ^jM8DN1b`eϹYZbNO:@YZkbGR@4!IJa8+RA0h~V3T.ewVuۓOZL{̌8aDZ#Bc'8V4DrlC$9NAmtQʭa35d0'l4yLԐNS8q@*ʼwq̅lކ^@SN95 Ul8{<%}Dsގhhzִd/ycK+o66ө7 BA!=Ⱦ/|0\o.Z̭iIl.b gZ wy-AlvszV H S8 !aj;%RX`c@6EifJ3e+)Xs5g='mr\'.! * \Z @nqjtqϮb38VETKHNFk ^{>ٽ} Piga ִ6j~_My"xͻt1DFJ`,6bه c'l]l[ XQ&YF$"{+[9қw  yOAKAk r޴316x:_p`Mg{2؋9c =P/ b5eM);FvioUJM(nܔNBu! dvQ \dӋ]_#VUĦX<~eVyA?b^J ŕi3PL  haQ*]U-zpS1k7 Qu|*ksō,FkDq(ֈ-#`~4JӯwBJ &s-|dKC;1]silݼC(NpsZ'h(.JmTmφ#J4XhĉBq5gmZ 5oEGv}c0`ac(#:4ނP"SmOEC=xx KD^L֞v4\ڜB)/"3!|()(B@XՄfLSX0 g_~$S=U@: EcEdFԏkl1 2@h:0a9d ʕ61a`hn5dPX'9PƠTŻt//2ۧK/(#1N•O+d%j3ں{1ٕnd=B$f͙Hl\*PjnI>s0Չ¼.#DXV%ӻXa/\}u,醵EQxɮy0jo oD; v/.y)i.<@lV`)r5%v`$ZlX!NL x: tBh>Ƒ1~T "@k6ufhX19[g`] kho ~>󡘑$arQ2޿,`֫_}B]Jn3$o=@|݌5j v!_vxK>x0fSΥf*LZtc뒦nFWmEy <1׏@`CM+Z3!4Dehk%H-)k.&[U MhAHC`WMW@'"8@)GEmqAXt" T  al2ŭ\ gA:S-A" _g~L.l>X0 -lˍ|*YVK:g*3s+e'2LIՇ.Li1&Olg~h12{Y :jhʔS1 (7B%*FENn,E83ӳNI4q5 Hӯ-qo+-6It!m0qpI ʲzEǜhd̀JCB'UC`֊ɴb$u>X0Dg9bVLN{`شB[`Ehk.!Den0 ' YF?QR 2{]m۳Rcl|?- dp %2`C{72.D 0Bo7vbKUgIfr@ |/!0 o β/tPbP,Q"/Die,lr Yʖ Cм1G s$J_|$Fm-{N"2lB k~m,a)wXUep4= J#)+-+jhe75Ty.4毻Q5rǔ9gtc?)BXc59&x^pfG^@ $~4X' 2bmz;K/9EW@Aΐk nyFuuM_hϽS$X{2Q  w\'A蟽~?"Q8e N[-Zȁ ZU7ڃ{BP^CS@kצkL2k*" qFeNKNԒ`|WODX/,3g`SY>$׼?g  v"^-srI*1v(SqsK,PJwx,W߿@_μA4~f_YzJ7 4~ ΀`j봴sc^ZnhUC^b}g|ӯOSwa6QSCm]2B-"2xrɆz/pRfn(+,9,V1oVA#@l{Z]8 BX(40m=ѶoΉ~a=| X=i1B%LC:g:@pE&>0G#>'Ihe&&adr.YIFȁIxHdS&e60<yRoOf_Xw}x)dO& Xi[MaSz^DG{NgC 3&pcfPx\k*5_/֋aDZi"G];Bpoύ%hr,_+9p"G?9֝ IDAT?+eBߝ(Ǚ:Z+Jc2h}_Etg`AR(Sl#.yN3klfKZL~ȋu5331[>_)ϔSw^`gu2n7U޷uo=(bl` I8bi*;ԋ4dugeb6kYDPD.ǵ}B@X$h]M9}:ז ~sUi'݃.|%1r?+;ۋ~nڷvLPNENu}/3*V@ƺ5FO-_s 6N>{9?2u+6# z3'KMp{@ײּ"ZJPɺYltss9XDKk`ߧb={_f%aBfc"g|l,{m?\̴XBt?j`exY z2qȣD#Rz$B&k )ܞW@s~>SGn}NÚO_X,ĝ[pZ¨9dQ#L8l7p.pĞE*TQ EBCJ 2  A{&f$!Π6Fw7|=0cq"zms=S _RaEwϸ0 VM-yPx(S~l;VMPJo!-0x8S\׼A;Te= UKy@.%C OesF7qrמ?FީC2}wh^Ͻ @6(@ZRPË#B:} 󁙙D >0nm_g~8g\PBm9=-;ޟ&C gSjZ;Z dv;.%BywL݊^oGO7k~|fbt:buskCO~!)3^r۷"WֺњkІ3hYhYt˽}䜻x~jnv][& )eTJ')g w5k$FbJqJ/m2͒څX1ul?\'w|;nLԲc]W:sE\t af/̘}}eؓÖR@4SQPe;͸Cq N>,X+|󁤊Xň*8ADj5IQTA-{z+>dV{knly۲ǶO<:v(ΘVLx5l>}Jr#j I3=4?~ J,ELHdRRN/3B㬗x.t tYJS8a6J|_x;VyftC 5s@/bWw>ɽ8yikmu )LQ\3ƣm= VT23W&/3"2~0vںAO/?$%Ӄ8NÛf+F>P{UcTzȁ HAJ = 7 'O܃ ;o{tym)"IbH XMj?ğ fܡN6P%᣼Bg]u-֝: ⵖl ؽg^R#gCZ WR$:: OO04X2 n Ia6crLjiz18'rcX LM(2&q G(U<gNj= <' ~m]"*}cwhQ\rQAAq$B]|To^،ׯ ':BpЬw䊖sV# e'n_Nw^Bb=XOCYh= NBih=$9g*J]`ώ.}4' zQ4${k=WI<2 k$'K5G:gJ!w!\f1;PD:~)q 1Ʈ!%9g_ba 5qta/3r _pd`}k?O?Zs39@ye~usiYg:NR5&lju3N=BwAo,'BDI>Ɂ0aywFGPi$>!{`G(F;Q&YjWTŌ_&$BR~)_l336FOԭP7~/Kz^* !ȴ餬S vxg@X|)3+E_֎2.rSwнN>~OvwSzn>νY gF6qˆXY%PB4֟} zT7Sr=gי=#4\yUq3j J$BT'Uq8| 6o⎇N7:V.8Q~>I U OC)N Y ǓhɴZޝkJfzYoK߷]lG*>b`ft_}y;JC^fI'+\W ZCq9Lu[KXSı#UÀjZq n*J^S$n}9xt D Pj =e=8 ,, >3+$o`VOfG?}!&$,pq|yw]m%K*t>YF'op ?į~`s5kSEX sWX (qզN@ tͣ 4*J/LO`Ɩ޼tn2KI4b@ifh"v]~߭E|M 9%:8T:QˊùxOMcg}YL )/v8!h!*ҳ1y#O.o㏖r^u ~@g'6b$2UZ"k!yʕ( ްNUH^qĸ/Η#IQ+H*xQmPWQ48^$0/<۷!'y.@`1_^x[__qxQmQ*SDfI!ƶl)Gh+9 n5mep`&{*$K wጞ8atxy(E_O>[s UAѢiI |CXxWZlݪŸ*kFgĕ[m(PUMϠ~ts}YX۳1olh^с_݅lhJoI'xstobY 9tjҋb-ZتAoħ1>j&BWA`5^!T`-d\C9t[u4ּoCMo}D ҆_$86CM43_7}E 5ZWyF0P-A[Q`Ebߜʪ+`&8T v6jNIr i҆\J[l{EpnAq`bĚ; w> aHp칰Gh.؎M#&<Hu%V)"ZX׭mz28}%kMtD/t2kvb4^~^zzk x=dHعZi^߶( ڟ(h*N.*°ljǙc(ChҬ95s6LlXЮn "+^sf'g˺ibL9*HYWzB{g5ٹ\0kh* RPsuOV)Ua 2UhJc c'suM$[4ccwuYȯ>>8ZYz/= a2 D ,6(B H[~KAYXkh꣄4S&([w8RS׉krBmSˊN `[LB)"EfX_XE D+713(H( \{a?‚ͥs5^U>uRΎ&#T)gfn՛iXC]!}XQxyi7HK\&8D]~SHN{^Vk64ӆ˸#Xl0h*YkgUnn:#s%逋LjC%5{,:Q )Y4=qTN8XG~|cVEѣ04700q z j:C5!rA+iLܿ$+zpflwV ޻_v]FDVYeUk\pg01}0093}fAxyEAE7 Mgr@{4+2I=6#Z>35 xy\ԫa ֮f\77r׶6׶vi-`[-j bhW>:,Ȅnlc'1 V9MO~m88}c:J_Q~q}хɸ)b@Z$ `o8TLOо5mG')fli@)"3t=4.j_pts#m'n{_8Bɚ ȋFN,fG;V1q4|U\+bHZPYkM8Fyd-΀ xt\WG{nQxTۢt2Ə}U:Suv"2un:ZW? #+[VyW;qMc3B i78Rƶ J3I(*J*13k|gAGk*:7S'nQ5ӯ_ދbY(P@[eZjb||ǤKkNj9c. s~j U;>1]{nMVE]8֐fb& &-PTi O3wL*S<8=mMm؞GwAoㄷ]V+_ٌx>S!IPţɝu7WnLX0/ IDATv#+|/?sJEo^y\^HG@ c'm{kͫeK 7vwkύgKE+9n&@?ctKl/0j^L5Mcohxk9?kS%йkX[OT#1 Ý.܅ bꝝFˢ&Rhg&KA*Ha#mzq* |{8"Du ifd)3R l:*s1P~wl##SjB` `-U|$a]qPEZeMRsqHpWW!6ގ'THNPR:&Eoc{0soUoRZZۀ165IbmMHHHB $0 @!9l̀m 1x߄,#KZ{յs[U-KX=tkFY.sVTaYwLETНb(&̯Еk~]B `T(iKKB~5Oz6? "hU[X#`c;D".B5 6,87 &͟=/ao@%D`r [v?Wɀ`u:SɁ#i*z)NA h={[|x``{fy߿ɕj `Æ]lk .k(Gv ~`{?X~&TKt뚪|w ?bnPLrd=!a یRvU]~ܠ\?8KF4WU_0 Df j5܇>#kL""ݿcq"l|6)s04gB\?8fsc uuRDkzFXG)"\&S'ڼe,(}"wt9 g_ &,zx#_tUkAHgqk"H7>\p~ؼyo$RDd d0&<,%+,la3*GU4f#mj#m~s38ݧ|7u[< p( lͥAYu'H2ڸ>V(<1 }N 0xJƹϩ[R5,h6?|LQC(37yPa x6+1>7a۴+;&V|u*@>?v)lgu6^F{590{@Hn󧭓/GT ~EU.Q:5$ܦ{w <\:0Яsk[p*c{/~]0ͬ*\#~|`{?/T͛z0h Iz |;v5;҆{ۼLX ?ooJ)`v :GU_'Nc>|/ZEhK2l,)z?z` 5olm Iҽm8ң,|4)^9GQr0ڌ~S-u!OB2S}d{;&N/T-T>M-RoqHereH|m3WjJD)KUFUU9fQ!l6A;N4oLGů Q_y)pU& Zҥ۰ES,锏vs TGO7w ^B8ʦqɾ6 hƥ^攮{B78KI4ډt|3pi{֞U(b!m(^}ܻJm hEcf,vW>-|kF?$ٓ4K |yuW+ $FGicdgp+;i])gH' 9S B`֊mbVIåm.`B" !αB& }'i:n94k]gG'N#~-XU=_Di0Іag(<ь'mD?=L]]簍3 R36oߝ:vHpЫκ"a?gy$/KbxIz4N2nk ]+g7 mǟH8Eoڽn"b`L?΂h znʎk>ҡ6 O !At,e;Ϥ*06<С9&!UTuI@;s1:[s:%4@o-vMy-dȖ6%NXDwNC`O=(`(|<&_)~[YDdE{Tw.NWٺ6q=?=L0?>6qe[EW j}Hvڜ+OmO ߆nCWvBε# @ŝQ  AJk_rE\DUn_>6CýXd*:N7޻i*X`[V;68&˙>MǓC6m: "κcm%Q0jAX8h{ 8w"96mpC59&RզSvD{McUu/M7Zqezf\N~"YovA~@tuJbL擙PαhS}b;uO'dwnk㑬n_ r/$Թ9"qw{3jw-{ctJ֑6pZ\@DkT l鏌/q5trα3=i&Y>iޯߟ@{+4?= `좽I${fGQzڼ-jJYNv p7"v3$6t/ºl"BaǏNBTי-e8ef}x<Ǟv3#@:N}x1{h蹎,9;&ߞ Ň6'^m~lO>f,U(Hj5t1wkh֑/`"HZ]}xq5vo0 f$^$͙SD .ްon9E lo''"oS\g-,2{kaŨ|A6޿J@xHmÿ @ }E?̇kp{YLlFTu"JNߖfomzz}MfAu{:v'z-׷w}Eħ";;Ft~}ٺY&~4ŋv+j.!WΒ_3V`&Ivw,vv7Qh([6cm] P]78 QஙoMI:~_ .[|P4(`P:.d!s݈|v4٨,rZ\gv9#BepPݸX8EDQ%S1'O رcժ.`άTllOA:k<~J'>6gRl;G҈wYZDfjul=rlONGBáC&i,_/+??Y;'࣌_z{߶p_e)a}` хOM 3?p2~ P8`(jYDfJ6"PG ˽NkvؾB_ſcN[/=skm:ّa""%SeFUOq w[ wIeNfwSD RYsOGB2eK"/HAlj$Xq`""%,; Sc[S)Us<6g]~FY1\("36мݹíUQ=6P~qV^1 "[qL݃غ:>p;/Mv[%Ofkt:um׬-ޏ~~kUK'oTKhn HKa6 PNIIj8 T\?ٕ+?ޏMܘ}U1CU/"Rb>wi$991q~zUqV N+c01)NvSg71mp|+T~1ޏshӟIU yvyTOGi܉_L4S*O78-#"""(CȠb1+FƧ![SLJk2MS9//b߬tnޏbNwy?>n"re?Q>D*5 Jsaё:RcshRz$XGzcP+F)$5 .^(OQ( ?" _\?x  P.Z:^.qFyYwx?;9͚Mv_ޏ8wbN4aNU=&OV'Zǽ% wx6muKz><QnZT@ѧ?m"r0m*VQrnb)ևgI'sUb8uB(-vDD'kmeAJJ42`*ܿc9MwEJRt^<|.-ǿfOjOH+_"B!2U-vQʉB8]DMsyNl[qP(UjtX3d@fਂ-5:ʓt)8e9rsm,&V_WȽOx?O0_jT>_>SS3!HS9|8Ӈs'HG/%c m19H@@ؖψUΉ!jtG螮dJƈs{ x+}}(z?ޏ?ùޏ/~=+f e:]7UUSFpy!yCUK=EópexL6g`jdH+V%cG 7O?nAqワR-d`]{o9kh$f2Y,ɞsSd@E_" ӥr_:#uMAN҈-ׂ5Jp{͋.{,6| >w3`$'ܭQ]X]iޏJ(Hvoi9m2>x]}dç #Uy 0v]r*Uԑ5mpCᦩ+w_ Z8V}m7{7רsL&)2*Ϊ&q&D t]ӌL9ꢕ"'LvEx!qJ5)8O\ 2QJ w [8 8 N?}ߨoMsݾQOY4-[}5E[ii.{?~N'g☬x+ɲgpt2^r/GCX%QDJweI_(Hω;w C|yunlRKIroKGg'‘U()KuS\8KXɲZF53˖ļ ;,-&c  16oo9@33qXӺ;k;>97Vy{F{ߥ&"u:✔*j&diBTLT,kz#3Gj=&EvT NG BCzyED +I1oV;-yi!۪Gތ;fe)6MQNGyZ%%40SDSINZ_^gyY1wN;cw>&UuY{`_b&C"ryCO864YK1߱ '?!wA_n{H? 6,X4¤" $`HneYP%/<_}y*Ȭ UY/O :wBқ_{~ӵ>nP\..Rg{eLvhIVHC^4xƲ?;"5)`5EF8u-#Eb@0&f"~`mGW^^|WρLU)۾x)QnӦ?x TsQOXuϫz;;?z{L&Q.f`y喇3z;YhsK:cm8tr(bD1:qR'e%`|Y_}cy}U2=ՍQ*Ţp+qNٺj-+g[ [tBۘH (}'ƉKUlwMjGu|gLSE5zM0];SDb6_uTbQLUM:nY\Sl$']Bz]>U 'Xdt Oc7T>X;G_\u1u+'YS3ɼb94}Ɖim$z: VغUˊD6 QrK!]68&6r=70|˒TU8񅚧☮DprП\Uyl]TwܴOL40/\3,D}Η2Ql,?B׈J'}$˱yba]:6XOM;^I {-\Q >cf IDATO C#Ƒ7vq]!5B>,2'`jqbG ef(WlX{)fsѤ.iq֊){/ֹ#4/7KkУ zhA]9zSXb[ezb3swWcjZt*W:|rPp5-VׅPOSv.):iU%ƟT]{0cYr^^߼z>𰑡#1$l*;Ȯ=x UH4jl&}nk._džUK0%tOca~پwm/,*xզyL:g+"CS L03ln\O dk{2L! m&e`6!cs$"-dtF e ՏֲSH "F Øu>^CϽ1FfmB5ޅUz:]=[ӏDyhOPU֯(malxgt?r<)@A|nBA'Pd9ji5:"0]t:fo JaۚOPש'XcPK#;gm[%l ae!eX*I;tPC?ŗ \$ 4rЁG=v+8W0$cGNR";jiJ~tb5&t]^F亚 ?&bI!21xI]"8fw~XޏԫslOZդZһzn Qeꨙ0QfŚ% Mu[ǹqSK{D1l7ѬJ(gXy8gc}J+7U+ꓚ$_x7=R::ƸQ`MѦ 'U%.+HH48  Wy(ړ mUMX)CC^Bމ*"F2zhIY3TW@ p*GJ.74Gy妯q.!mcHWKw]ڹ@b%[)LD47m}[`%H -s d ѐ WO`d2-Ail,bxj'&{q='dy)/oEyɏPphQ2mq٢ :2t=XyL-ymGjc+S^8Ai`wQ?;2fϏˉ;pՖJgI1TJ)Z!6G.e]RЕ hҭ^އ5c-}l3ϵN}Kc>s=ԜCkgi̚V5F ^ 6Rȑ_h w^qz{:<:[&J @s~xV)%5X o S_RmAjy(Z=`?hhgIeM.#s ?΀R`~ xiSȯFwQʵ:Gh=JmN߼92ZB+QQ /O.˻_K )MDV|t<5/*q5f>R'3Ir>AN6;̇U{ڰT α`Y9+Ȟ|}lqkws8$5m#t]nC" d˚yc$|_no$AnSE1}c|9WQLuTR]_%kwQߤȣI xRG$'997sOJzzvn,>E?qGjD $'9%K=J 5 jx+Su g*N ƀ!`"XVC873o!}W=$ xqNNıOq^q:--60ɿ 0y+in,nr M*(;ʜqfVC5MJG3o;eqަ>: QK7Iq I^̒CwS|k/y: E@Q3S r{SVAuomES*}]D_߸;,;siT1ơqA n F{1}޽6m[Pqi482xgWm\G f6"jU0yx/ x5Ͳ`cA x}7HG4L\R&[ߤ04z#ᚍB(zK}lNM \N}%xذu}yUnhƢR?Dͥe.Ǯ^FEWSX-#F"w~yQZ/y=xx&$x秾?qnv͎}N\{r*{=E]߁z%c#/L%ϠqCI4-:<4(ŢD0' >ש*> 5>o˝\ Yu*sAa<-X<<fNOA?tnM+S#UG<#7c!kqf?MX3Fج|Rq]V9ss$iu.U*S~t'cUGPP}4JP%LGٍA M;%T @T:Vb.JC: |VȊb))  ~{'y/cI翑G*~}:Ԩ2A]Kl̆.;H̱[Ec{G4? W]FªmZ*Q-߿~NZ' Vւ aǰtG5&n{9>or(IFiq$;%6&9sKRɓ7_&[.hm֩׿9}GkküW$V=op/:\mBFV=?Q ԧj<3T*DzX uhV*M;L:ϳ0 5vR6{?|m:Ϫ 0V}yՓ{,W sx7aIq@8`i#_ZTlqw=hnk.㍫/cYOJLIO ycD6-(f ' dI1q]fikk.3b['z O%~!I$!I7-^SB0xLlYwD.lG/6*6d(MsU#e>V 0@Fxb#N["2ʋ|-QzIDj$Fu"Gs?c&SgQ+ DK\̈́*[?D 4/Uŧc4w Eᆏ|yvOmEf*6tmZM$+pmMB_[+BH<88RY OU93K!;CyoH l0 ]U&Dz=z=Z $:|Q`ݺl3HEБC2RǛ]+t=c]_Ha<? b.fk[?ZhIADp aΣ\UttƳeMǺx)o'ёo[r {^F>/D9f>EzkcHfUf?>)Z>LsRMCEV*I5c#DYl0͊W9ASK٭Ov~Y$ISG(a| EZ (Dτ[QWG!sm,{!pIC")OTBP*3 Ţ4 *U 7\,Leǥ)mFo!nPl)/Jo(nL'lcgL3🬀0m~7~;tiG6((?ME^-V=IX^^CGff-H=B- u -JX7Eg,O}r_3 %k]2W. g<~c\W!ܿ8$J܆1 >xGbohD+8J#YmLbٹ $e1ۆ`6W"c5ƒ*7y7"* pρ^Gj5XyY덍2˻&=p3]Kgr&/jX| cAH'9JoM}4lg;6bJ5+a}x'T1/DpuťZ \SMVVJO}zU̔O_C1%p<8m& uz˫îVNّLY -T h.549ƖbCsH88^t.λFD#q+"Y񝵖%yUT&L+:آ0)-uO`;u{ 6 ; B@?V5"!5Xfj 7>P" d q$ ܶY$ߪ :{l۹]&;àyِ_Q"𤋮}%*b"L] WڗA=iג:`1ɱ wC4JA#U͂Ϫ3i4~a.QS!#GerԷ2YJK@Շ|fuklń##Ɖ閇!rϭ`%"Zx[(U4w+GnQ-IVWc E{Ą["ci(sݒ &m sPT@ i{g0OOɧoYS)M8-a,3\ء)>7'&RL[960V3U7B|Nw->Ij PBzk;Ze;(>3 @-8bQcX _ q,ĩ&Qms;#Ay!`n*3.- ZK=!O<5R+TyV5Wk5O7|eu#&]q|M/tp+gcL*'r"pbG9K9hVYT4Ȃb l$|;>_6cS$A*q ѶLGpl?1EF`\dCٷOMykSGh}Z# `۰ l(ѐ|8#9tEF83;oMDaԣAjUj?+CiZe(\{ :3XvFNK^(by;? 6ܼ@4KV{iBإפƎNfP E3𧄇ESHZɀ /$;"ťOa9$FM{fG ӟtC8  2`Ӕ &c\0 5 Y`zSY@oϮ lNhN=ǎ szĒ|S?D j\u`W(v45/3ali++*3@u /n)KB_c¤~Q"az?o,uӷo H)1GN<23khxj!>ȯ\$%/@>MIȗf!M q)q(}f^6a^XShsM,BX(&OZ B׬Hغ01w,Ys>Z3P{A (f%i{kQn(9 Ue݆}}'HW/}e/}>HbH?J%l(`Eni,ǤY7T[qԄA#Fy˞K\bMri-1H;V!C4RiIzJ43ImKlS}bXE08b[_U@Xn>2RGY&H78PXU`hr qѦ-"E J& *JTw`/XWKRgEq&Ѓɀ`315!o2xl=G=@s>X]{kjI iutS6ȶsεO Ky,D %/p#-}۠d Q@WU*J5XIF{N #QTd~ǒJI 78|φ?Өgi9ID.iٵI]Ok/H/ͯIvk儎qӊA E LS;}J#$*"]]<> ,u*'@Y!yZҾiD©Z\=#7+>R l QM=^1C il T)>;r =gV{).C" P,sZP De_Uc(SiO 쇑|JE@_VJtF yQlڦ=T+ywĵЛ.B/GE͌J6L;1 mg9bp7~vh8<7EBx^obGu0FPLpwDe؜ӫtN_h D{ܨ6*Lo Z!NPBX (Jk 6p|$TPSW5N#(\a5HSr [mo]қzDbħ勵[EDL O4*|Y IDATmBR5-2D]a~vh7ܓ8Vg F',]QI #i%%#nyG)GagGB`)" Mi,ULr)2BZ[4ݻ\N;g))fy~i|}5ՕIk.9̟[MO">;5mmy*XQHq[ْ;8-;2!ֆsZ}c LWىt鈑d:b! ;JVkJR_̞L wt@G ;IiQ2g!40M%nN53Cw: EdiZMv64PFjµS.aD-\ʰnZ94,"YSs?I ms!8e8LWx Ft(Ŧi,!b4 kM$-іj]xLWJa骵P蚷H0lTm5ۯ?L j8xbetp06- v4d!2Ho9<>HI6,Blf^@QImȡbMę+~يF41+1ne(/ kL,lVG; E/ FnM(2#H"YmC`OfgV(iTy4KzP,\F;Slu-i)K1IsS*с!WiF115J֤h5eTYKldrl y 0R|VGaM2BzQ$d7\ A=dHI^gJ`b*VKhl%8c0Zv16ňGC{e^Ç5B}k(ʗ B\ӳr5EK~ 0J8Z-K;3?MoK%%&fw)Ƶn\  zIB1RB7H?I[jz-xS,įYq]׽o{gA 0 A"^-Zͱe5ljCF)JX/qy,KI?I<;!e˽HdيlKX0`Asn\|fs9޿l8L~bv hn"S4h42+ `ѻNL]c3PC|HTgj75 o7ހ҃CrJ~"^uU|ba.Yq{Oc{7a. bA,ٲfl!lgNfBR6a"a&s71<`5BY!D>!QRcך'see@PV!*EJ"+&ew`YI gfCɮbf4#aYeRBms@ O)ҔIFBOb\Ƙę k!HU SS V Qɴh?f1;5SVQ[!t*Cxlz_Ӽ8l1_Dkj#@: ,RXTB- c>N=EJjkAdR;BQ _`uE: 5Y $ $Hq6= 2L 7vt{R E8RhRܚgu"k,0]YWVfa!I~ѝlǣߛiHuIB`X+ ;cC Jc,w IL|,pE!3 [D.p,;eB%8Y?rH/6V=%ya~3VE\g"J.RCIǎ /G=+T2,|f=`h[-I26!ckT eŪcSS0i0cxb(>{'{<BPJ0Ud9Qde8X(?p)jG 8$:oBI٣\C '4/^o2Ydi-;eep=3QsTīy999ZoPUEa}pddr8 >0vՕN-aPH8b^9̙WPPxu1X2L&NZ%WZ ' ahqX%6]AR'M̧6\5BXT ? ~臂S||yD 3UJP*.~Pq(2|Tǝl+Pj2#hrX+ +)= ?׌P'!lhEcQ!T\AX-C2=YoS]`v+H.44 Z4CG|_ C$u #ï,A-UаmbB?c#NMB[/$1Fn7+A0c'0;'+}!u?AB\x<Ma.QW"8~yQ=7 )RjG VmH'G=1yIS9(-ׅ0<B'B<;bM]^55e*REˌu4Dn*(Jcشuqڍ`;M\~aH4,V"D<9bqV' z*TZ>5/gh0% r9ʯ݀tGy-=_4 b۴?E`T([㎎*&@MGy7Mp#+~\Gb|HPQxqW?xfKL<:(j(+RQq^"2\#gn IW>6VUִR R˺m2ʎg*CcFa2ue'$eNMR<9)ӄ%U%r'Œ# QF1Df$3^647R3r Fsck (JF(Tʱ hP&[ֽu&u "JeƧ'uy\A4ϳE6|Cc\*.P3S;KV 7yւO8&uUSw'ud#dzc`eQu~9PJeg`L2@gC?۫\=$)e)*8xXz P/Y ` V. XC4/tߚx2~njj(Q'*R@|n44)5"OA870@D'7Iy_Twdz.rasׅJuriX3\׻?2 q^[ý'ty ,#^>}W#:LMiWGپJ{"13$+JtiMTIlaԳ)3,8,^c?텆`DP9iiJ`tcwɌ[[WһHmݻ7G^5_cTͭR‹'BWC$ 8y.̱ʜ.HH/E1X/t=v{gd]ͩ)B/9 Xiۿ]q #M[>zY)z2^U341^=_SIJ趢R14/V²SRK {2D- @8!{]v]w~ekX9RDS[ ,巴,~@p$^es[G=48roSĠN*-FgRW{KWM/tM"R@3#Е&ټV /+Jk/ c?X ]v=ҳ,HEC8.LZT6iQ4'\+:g26&=~=1HqusPV%*F5Ef5kSu":PiO R)mCJ8?Ӊg31tQ`QRT>8Bf;U 3)~?Q1`KyjG}x  ff); ۖoí)م:}4t!Y.j9Ks >~y/HL6~>LDv׿|⋻/>{2ʩ$44!I-1]-dJ33_(Z)BCs*EcxI"3{{b7epx}6mW [EbwFМ890A <::x\,L(RAvdPhbf, 9P1#u$~HH@.TC%uxݶH0-YcZpλC ;a蘼4p50';Azxl~sBoomy<+|֯[a0ȹ#XP}ڲ8nȊ/FuX< VՊq#"-pmŨhϕy~0ecmzחs ~mܚ!HR :^(ʟ) 6δP/'+\`57&aQ>>q<= 93cF8&| w1]qC.3^#,aO#(aSSNHa17}ϯ蚛 2,P, 8 )-= IDATC]]FHy",?{2x^0Ǘ0aqi3!aeˑAʴ%m5߭$o}&fQe4K2"W.LC*♅YX13}uֻ,vC>ohgn6#涌 qzVsbz }33)^qy-rY>S8ǚ[|]{s,? RO} t+ `5LY ̥HŸꟵpP@TiY]w{[KϾkXo`aF6eMKXg Ѡʁ5lHZ_+ۊyAX@7W0.$X[ 9H"07m}os{F+$ jlc xV466UWS $ 4nxԔĞs9؁rSҐD,$ y=;s0{6cg=8vtze,!c9  c:2Q)bHe)A2`ϊuV%*&_Dsq)ט6m;7YoUzx[Z`ʁ|h=ezRELK[mM߮˾)f&F:W`$.3S(O?fRNw{ok :^Qj[-HftKX]wH',kc!jV烐Jsknl71YwUTRA0݃AyT4 Z[$fZSAT&FgzF[W-6s"z(a}8`6AUP+C?Rk2 ]#%o3Z[L  E|ӯzUxcguhlN[@kpUI,C\ ̚M[`J'(#AD_`?޴n'FvR$&G?ۑd`x&&EpRNCI(5@lE- ]:fF*W+ ~0EIqE25늍xh# .}C=>lr|H RzPYb 悯&WUEQs ֤` *~i L, I &4SPvm̥;~ӵMF"H-2C\w׉} hH_H_Ƹ(4-߲c'$&R^<=)uD/HR[f\ <2K7&ɤSPJQR$Ǽ٢| #ތC\(9~tџ'c]_lz Ei"i=y2!kފQHfb@FkdH((%b"p0|pʘUNrO=%!$:Cie{ŐT$(HR6`3"@LUQ)Ü83]?̏O?٭=K#݀h&''Q+]|`"PVS|ɡ D`?2c/l< RNE0ik!1π̅<3}`SJ0:PʅR%(537n]4= cH55Hzz : VLä,ňM|]X:_2?y6g@юfB%9C5Q2sg,KD d|쏱^I}⢅S,c!-3GF˺,7zH<28hcy4NpkИJ5dЖ1vtv{ֳͰ@F}`+X}J7|7M i8*Ĉoſs>,uW[/4LUݏ{8=W?#6mSmTl  VJ+Ss"ޕOZ\+sW9҄xߏX#Sex^-8FyC g9XX -@Dž@`]?i7{ KB2m?]T!JPwy#_IA4.%\#JyL!{[MLQ,8/d2JYH["%B vIӃ9Eϰw ``=O r55qMu q @! ,=W"3bC-cɂl X^okcrwnZGJmy%ϬKXZk2+ l.CQ\upE=L0;q#e4̮sbO3m!}ŨpӮ6^mZF"<2R:mb-hkp*lXtJsc'(wT$ɩ"I f%z(Vl~K[|$]N9^;il\JX ]u;=*,l3.6 ;ESih*h]Rs.ZvUuݶ|:;ذ -cA!34j/oXPR.`U ^:es^*kl 1Bbz!4(%cCO=Ve`c$k|$?' ЖO;}WkmלGs\M6WokGcH<+uL5_^( 'v4vN?'$x _Y+\K {j"֪I潄| 1~^7}}mX /#]v02!16#Q(IVVէӞƦ&t6UeIԛu;-v4kL†kʴ︇=d4d:qɖըˤ*XAW@CmҚ_bߞ{ P#37u4 My|ъṦSe2,,[`= Nb`Ynl78A ΜAI?yeo%*&o皮o11{"KQ [HܖNDI65@&\l~DP#ϑ ARPe 4[;|Ov)c2]vBn,窮z\WǪ(r4ەoYOoEU~)KB)q˘CRD͞hckݺlc4$2nϪPR"l(8YFpP=e5`EmtA#C2$/WãoyOt) u!+]2t =s^oi5[[qkpiژFQ*P: tx@':m YccW7@ϳ B r}=SpCe vepmLR|1*WFL8ӗ7!-D-[SKPqbT  YbeJICF`k -V)(uF˒1W@lDtjN!E2{$co|hQtj`iqfBPr=][7X+}i|궍tjM^kmS5dj&)$!b_vIm\dy+ [1EN\~f'Z`L,{bR֐J*WH`lmA(5ݙ$]kC\S$zmlX9\ǟ\xP"D+g %۶`QjT'% 7 CDt}'4LW ҡ:\o8o8pq~vvxm OiZ76i x'ޞ_$F4f3Z€ȧ 8R'v=u:(u(jp"f՗ $Fx@_#6 Kp~;|ã8Iϯu,r-mӚ3IlmŕgFoG=\E fg{&\pew'|P8_PQÓM$ڄyPzn}%o>8c'*N%ۄ膠ƙ:'\ƚ{pFݙ-Bl8LC@1,&siݱi]d𛳅Q"NА.-B$x6|SV!Ы77;w 2VF)".zA' ( `A\2fA1ݚp (Avg.7}`w;fc4mLH^FqmWթ ҥ3*tiW@%2B)$]@ɑ=7 TFQ>4OD`a5I|kg8,3nL0[IDIW3܎R^[غy`po\3=Z O zGvgNer/xqg100vm {xT樛*0 o(I' s3\0 (ꞙẒ0fG;-;k]9fN.1G=ã6I1$`>id/b؀ 037zd$xKv8`ݗ垞ʷ X+ܡd8XJ~oK)f?ٜaB_Mۺؤ=#9[duB))mzG0Ӱ `m-Hn#Y#Xh.765.ypxG[xT ۤG̗(ĠKB*_эlF{\>E8;ߴ7%Y =6Ak&ڒj:I"|c;Oy2&)~MM(zv[#.攮-V\{n `B}GfZ'3w3 jv% (/+ٝF tA[?pR-Y+2J\@٩C;}pxA%Wy@5"(2By4:H3``ŶTH+rىY'ѷew}, 9>vXWcãÑ0f.;s\^G MD٤.# >mfR?ľ =zf V*+G$3̓ã{&~_&'xueR  *n}ߖju^(x}6?wġcPen:Ќ--HdVZ*5U?yq0W MF ãWvdGٷmuz^(rO~ A^[gPpKոlӸ0Lz)3F\f neqQI[pP|,6\ .,T$If]I>?㽽x.)u-$Oo:܎-cJ M8[[PٕLSkAc:W|+APB>#? a__aE_ >{u#nm72X`&{nG^x ⼦"6@M8S|cȳ$KH]cwOZњpT&:}t08ٝ "A9?fIesٔ;$,x?6eޢh$  IDATӒ͠o著*V c[ ZR` US%( 3xW֯^7ܖZF@|]G|ogz_kZ`\H* G $u"ɒ.fXݷS8k y֟aK,{Hܘ)7Ե ,K007PO(zJ@J/z33?18$X؜i'AV՞=(x]cPFm y=K5'lߒm] 0fesJ$+<28<:G82 =UaBo?o kn ɔ#>eI$AXF6N1A(Q\pbo-gK0bLiwd@+:"ʘ}<ݙ+jyBnI N_t ;s/d<{q)5`~1r>ܞۑFdjDV}/G m"$Vd<|DݙMo$]MXK|=TãޟۑD'`PuRRV C{Mevy^ݙY\׺uhT*ߑmѣ>ۑYP2 E-9]*Q'qBDٜi}^} ˗> M u_AЉ) @}#\Yo),df?m͟Tj._ ãyO=DDV39__H8dJQ9C hS7wQ ,[{yᥐ?VTeN-}s{02b g\NڲL26`|>@hU]ãe5H69+aG<@vmNl/[L]դC0W_fIQGw>z1χcu\l$.=KrjUKX*'O+:ՀhMwf/FҢƱ:'{La55Gl=e|3""yĒb ? n"YIP&Sv@2 -_%+sӉ%"_//'\5 Ι6Sc+0K1|S @,ŋ~:>tjI$[7(sY'!/8"k:㨬]O ɵ(B,7yfOR^H XRC5ྗ 7M1~U]-Y &`;jcLj_~BK/{v\l$ n˱NF!Jye~>a3$Q/a0YdXSRWp'-{m,7tK`Fr/WVyAEo 7$.Z–Jr kj0,5&?]JR"DZCI6\ɹJ6\Bfs P5~e8 Nnk \,cb<‚_&C3I\O򉄛9~{ͻHX@d[Or KERKw6tR)-7XGHI>"8riM:h ] ₤$DVj8p 'm{2:^{deJj4-_]O? `%"-U d?~{{ 0g3f.뢍} ?PK`1X)k%ཉ/#.IxE#+5CH.aSHVrϭLjt0Tuk5tj}K iIJ]x䤙ݤHr?^;uv9$Mobf@Tqeu8xcV'ߟyI%|M|!^}>kG$%h:Wo-t&<é_ٔ>ɮKVT.B%j{]a\uNbIQv( *W.E(z~gew>; o)a/X,3kx3+)yRK"Ef;}bZB c2ar\s"LL`)|'zJmPȅ)dshh| ׭&K`5L 1EΪx,8W``xY^bW{W{[WhAK =,Ze!yJHf~ Ɉ 56I;̕Ϭ%0rQ! /f0 YWpYQÙ8!}M/EE ߯HZ^IA0 2bT}jT(+KWnhYHB]Esgܔ/5ћvCmq4FՅRA.Z=L"?e 6͹p21]DD?-EqWgw<9iTc\CW=r> r;bdۑFX3Jҫ:~9筪NsP$@DΘd01b^ha.cxXH$$$$4 zrT] g7UWό0kJ=UIyo<9$7"+vynƻw>|q<xaNF6io qtO{?:AC? cxU!{΢ `{._: }'9~fm,~- a?'WkH>ZJط׭R~w;~ŘPI"RWӯh/߻}$*@~hH7-!:F#k0?9|ӹypTDFhȷ-P,%hb$0_10_NyӈUJ%s8ؖhxgr 0F,\=5Q8;߷z N~_.@ϩ?k̍$IN\ p];?l:a Z+w޾۟x.u|.?@vx~B'sc}#"2LD5T{\y}ڟ>= 7;ʧMpt~p$0f~wec6X,"#FhԯanCp!X1ydwX~~,kJ,g{krWD |~͚-BUN E:+֋m򿳬!|`0 `h;uu/=ֿ\f4U3 L/=e_7)gL~"zpl^*Ⱥt 57=azAA%</ZxuRsٓͅn+˼ֈȚDcFDHсV{_?c5\i] |sE脨8O^jWK" "@iW=wf&;7n 7`p3y~Vٻˀ]i+<3 ;k3 ;iͰp~[wDZ17ߛ(@۽#YB?N"-㥝j@]kR" ̍w37~sW 8GD%*-ۚ|VKADpn'0F[)Jm\(6TAȓߏ Dtؖ:W晷078sk6{]-"'sv{!`G][hc8wmZUhFS-T+%V02چ uH-"r=68ʕyTfantDÍ3+w(ܼ)ˉ.JjYJ:`VTO CN_Zk1v`ŨrI e!F3f!My{\S2p"ۓ o${L9htn|ᵷzO񬝶)wm=@x ~G__yI@3}='2wi}VםLe[6Vh%6UDiu7?MT<O>S!,ӆ JhR)GOWȅD.9uoJ+d JNѽ3F##Fcs=9򮍵Ed07~ćK +W~3#2у7+tbw!y&gEpL?E*V"Vv@(@`qa=I8ֈpl߽ehL Q%,_seoo6.fn<||fS N=?ʓJv -)CQ*3D,>+P@)i3%J@ d}A`c2v !%@5c[ 4cL)//. bˢ:$61n "CCܳ %X< a` i)]|O|.bì0e ӪBy @`Yh2Ԃm͎6)'(l=OoT4ߜDk`2ʷaP/VPԚS4ܚ@b$H|ƶ''6gC*m miw8P~FMDU (@OvMm)v3,/+dWd歗9&S "C}(-Y˥2DJD V31ŸyW/.͎mokosy̍e27ƙg.o 4ylPD(= zyCrlYh3j5zT7(% X)ӳśko~L8{}U FU1VgDOf}{{ [8"LԹ7`2~t0CtΚ Tt>屎Lv^1B v1"-;^@kދ>"ZطZKY~+@(mnO&_爴~=}sӖsEpiZt'`ȃ)H"!'GGZ +X6TP ݼW$3Q@@ @D&5*6n$'i˟mh3|.ƋC+ #b),Ja^1ޟi@g N'c[?rRٛ"ywc 8ok d1;@Aj  'e#lFa+*r?i51<3ჳMcӖWCB"p7[$g24o?U5qk|nXRUx3V,Gj2x@i>HAh=:Ԙ.=vx(:ϟd$z(ڶιr֏5T6zOՠ[8iDbjPQUrWG\0 {,C%! BPPP5pmxW`5 be?3%XP H(%"PeAHpL?eDp/O:%X̂D|aMDiPm40-_cw[XJHn8/x(" R0 ( iE D*A-@֦Vb GhO8%vEoDk @N02\鲀Xg"Rhy7œ'PadJp߾  bՀzI>m1FG#P8_ %-Z 1mQ^>M1Z֚_Eڏ_kv`.0r[gܻc-IXsrh+ 恠I:H 3t[=Mq< IDATKp$;B}gq+?"{N3楍a b@/zF00Ѷ~4ƁEhtZEaJX2d0Uuh39d@/LR l~5?>s Vf@&PO\~>k]؈xm#bXq:32}@pPy" v[Xg?ZrU~m:\8ѱYĊP: t¶EpmG"4cv_'"a"EU\Uƅ4izR [XsL}Ed}1w|uMt0ѱK1\ cǞ>*O5ono_Sz͞ 7o܌纷y/"P]QU-?XK@R4:);$¤HR w{!zh(bP B݄ eDA`;fw#enVyg-q1")HR|0a1zWtPJWO @Ӑ ;<$ k)u".$2D{taHC Xu+kxхkB1VRg)h 4&0ڙ=CbN;M7}2'AԆG?xmB9RvhVgrXD3vC3O zڶU@~ L8g-MgI_p`E$DthQv (p>gcɍCxA<묕NC(R!"u|3kL Dw#QHfd]<+=Eۧb<|$LK*IυMxŅ˰lq- ({"%+wmD>wi;0?ԯ,@oh? aO_LulkC= 'K vJ :s6}2SdB|MλaFR=O-Tྃ!>~:=wSy:,flJ@ *`LQ n!*o8)lnHkFީC- ȴM˸6&[J}z %e/Jl0 *(3cRTe F6tT jhEB+ġ0>6FE0L]ώs.^yp U_zEDAC,ݾ5AsOxdjx/G1Ìкk5;z#;;S9T2#5/\UfR`Dҹ^FM J,l{K^hw#c2vئq~뚈q+o {:~KirGtY)yp28fG:YGP@P7BrQ{'vwbX,(lKޏS^5? !QH-_]߽ڍvֹ Z&ds>@|{0h)mmenOܮ}aT`! Yq@vs7 fӖaigy'][*/B' #6 ?sΞ)qn,=<:)V gAkS$^ġmH \͘+(؂ 8GB\XwުDKWO]5$OHz%2 hX O#  eWdPޫ]I4'M01I$C좛p8XM[сfΖ2j4 ,>SsJ`d$n!#:L1c6YP탉֝]L4-AVՇ|zDg瞶mф3_cdSC|N ?|oXO5߾s;Hl37k>9@adkmVQ {E=HX>g֪x+XA `Q2~Q[GX:Wbp8@H"#Xfu T'tnKǹhM[^ g~ 6+왍kE&Ft $\bmȣ_4QZSI,V[8ąp]˗5;y.Wl4[0|oCm`;J O`vfMt:=N ;hmŘI//"ێ'S l!3b7~0ψ0.Bq +mcw,`rߠ{?l9 4rŅ0΃$VpxێFP2tᶇ&‹6:/4,k8 L@,i0 Y<0bv&v?6|h|GI1KnoB1Ɨ:E'3;b_b\'qz`l\&S aŐS6nвycNA8Tus*!.*c?cܙUTEXD!7eSbEza,$NNpޛ+밧/F|_lК߁W;`럁`ra/M)o uz$4 <)l o)oDu ƎL=Z9A+zI@ը;!n`s_ iѤ{/:y8[Rf-O̎XBA5?< V_S Tkq啚4Y M C`r?.EkơbSJ w@D8㥐̀nyjXQ?s3-R9л}R(•W=_ Ti8D~21W-'[C+)^8.yb-@z OF@g7>0ѵoJ`[|nS D15@{I΀،:GtGp% G n2y sp`F40Ջ # ЙBc1I8 L #S+V0*9 D) oNg`գ]6/Ǵ}v&+6,?W]x/.>s;ZVc@ .i/h7A̒Kx!:AL9@D„W ^(`o~IY@A\<Ѻuw/$XXhH\kIZKVe L$6lnG AH=I4at.0e Hf? kq0C!ւ!eua @t1AhJĭF%o\WXb2HAzoU$X {$({w~P PC#|AR3Ă4!^ȶμ! HlQR]Œl$K^)pz〟 E焈0yp7n+me 7)$k0mSP8 ;^28# +fGV}nuֺt U`}E5$laT+gϏG&xl?0F ~V.wqPZ\%LhB<{E ّ 3"Ğ|蜧aŪQX.#?chu o?WD XឩT~5}cJ)pGuf$uwl@ Y_bkR 98%K */OڄO}Txݳ~w.@ΟLC8!HX6ahINp 1n=Zx/ * 혐'ixp:ld-Eā@8B`03D$50l|)%R#{"NBn*n_,lAh^BҷSa-K2-3aο46Jb?&94HRr}vӤ?MF#plKӌ_Zܜz{q9/- ZpG)HYnf#HUO܀gy XZK5!pq.B46kqv1@`\̐U/RP^+t:a.xXIN} nZp$/Eۘ@-.G!|yX& [rh]2g?JRY_I;ّ Oqla-`-!ITFa _$_o;9iI˂B&n)'UzD Ȁ⁐BA:^J ؇uQkQiə>@!rEwAԟj aO15Xz08I 6RqF?Aq ;P7Jq{Jr]<NPCi\T B8v*Aq\`SЯ}^L f" l:y9B<"@Lhvq`2jW lŽquw/Ե zO$C}UH!f;7>*(B i30ؘNY~yNv"`S56 qxljWqwdx *|" D D5U 4XǦ @쬐*uH^Pydc)'i0=57) :F&dFdbN&4>ofx|CO~\\3`8%wm]wmE<(JR9%]_ 00 3~7%`nddA(yWd %f c[:X&njL!tE0){R,Likr νχMMG]^yO=T* 6w! SU=DT0PGH&Vt"%@A$3,ȧKhZ{ᅀM 1I~X:[fT* p~FP A؊Ib(#?{S.A2 E9c1?G jy]ԟu6nr_CM.kZFc珶/X*)yqn[nU_g_z1j\^DqHVb9$R"VDI0T=խ_?tK,afx~ P ~<_&NW8 О ȞB%E*D>TD`4;[W{_{2` H $`rbqkT{`pq:(OrwI K?),Vr?(Ӧ9D#ȁ%0dI,Ѐ?xDMb Me%,{Q?mbAiW&K=RUcMve?OI)iSa&\__("Ȁ>y")'NJyڱ13y<F7f|tGђqRB,?UG(ue_AWq RnXlxi WX QА,1N/׎ W(%Vb McZ *=iIa]:U7h=a%0"Zai#Mt?%D% V l) H>C1&NPeZKG%1ؑAz Q*PeD@(kۇ75qzL^PMARP`#{t܏𥆐KyD dÛs~m'g5/%-*P*`Ps?guO.:KF\O=9@@ⰃNw/|#${=JoIRaIs>E`]TD蠊PZȢ6 /^b@h(U]tTF+h3\KhV9XN`pl8!T*kI>;'r$ُbō( "\T,:w=pƩ442&3)&\{Vab&^21Fa'49D 3eIwڵKmb 4ޖA8!PTهVc}i+'ގHcj` !*A* TPAO \iPA2[9a:7+4ʨF58O@ (' {? oWQ$NK h T@Z+j=t˒V6+.&`aݖX%P8@"  QVcPDTG@.['A.WZ9#Rb^1 EIE`!:~@ \_CVv͉((rBk۠}pqvW$)Yq ZT6 P=vI<K/!;uT+DhrݴrcEJc: 溈/(ɯO$Yy10D:H0f>HtԗosEH G ?l)0:lߤ%o7amTv'lbJ8؉/oYtE ;pWkB?B* WAiޅ8 CRL1fGg_S,@2aB)VP^NDA5#awo ZėvEC^`-pV11w0 Ii*mhݖ7ͭ|t " 8@{I>hZ)R@з z OڿttIO@%2RLQvf@W?^H9#RMA IDATGBص? ]T < "xyJvcP< rh ̍ݓ0Q7ţ˻RR׽a'+0PH, v%_w?)T$ J=$ I!s\004n2ۧ]5{ΩS_L "06A=lox.B2ʫ?)nQ+B_qݚOM4tlz;ß\HS8MT^(R! ^虛>ʤuU:_bCT$t}@1L+$ (ocfG@@=#q9,9,u$ R[XfM0μb$O%iU=GNKGMtre< m}G};wyq ܳ X(d$hs&hb!-Ͷ|[K@f_X A@{5 ) V1݅icI^Jp4!0$ !qrXuR&`1mM4H y̼*(ȀqX ٥æoR'1e,$ wc`#*pA/f < ;D.T nj U*ۥGqKm/mdp⌝7ݾX`6@ AT@d5ڕ~ k-okQ'{eY< F0ZC(ʹ2q: <ę9&¦J@aOcmyϻdDi*vD1,֖ܚP\e}H//10`M: 孾g%N±{^Һ.Y&~,L1;yP~}V7R9wGےe+\N3y>HT0̅"4v:Xz/ԮkE&\j(%W^lcŀwT% Y:G)z' X`J)4 A)/,0VPБ|Qm"M'dX;"ֲd V-.&__y$ɓ%|0CK<0f7B9ǸsY߫pGT & xP j3UR Lea(@OHߍ[6ࠆւ(bC^R"(ňS +߯bGC޿ajc_{bZ:,,r 'd"gEs [0A@:ίdR4 @ $*Y uyϻ$Fdzb^C1?뵌an7٣&hqCЀX7U [ӝ9Z87Lq=t$1=1Xt5Qli4!rȵAg(T1lZ@dmI~':ƫ:t,}¤)S@v= si,5x=F1Mُ5πB)xe"QLd@2P?ە.Tby J듾;w'Ɔ #g@¾v@!(zpyRiʯT)FK.)LePUC\ͬE>i1"?) H6(@S _Rml}0~z<`5_G3꠿.qX_Li+J@"wo"N=,ՓqdPie1irB!.Ik Xtm_>N' +qa92$IVؚ浃إ'>e-$I9bw-NGtCJk˅(J(1vinTЋZ"6'$3* C>WzZrP8?<\ ,r_E##NXhK 9&kȑι7 (^c"r`U[;l@8sVi wBi;GY!9WY_L(.&J @~N^U~f*sU%"y,Kv_X,kwȗ -a@bCwMe2eybg:vf=ON-g:P6n}tݑk 4*L\~c߾CK&u\l QJq"*IK"nS)`pBȃ%#NQJw>l|tm$a }X *י&yFc9&!ijONjS13/ue`^_hB9`Nj=%sUpi{ K +"$AV)z"XDۼ!Q_g J[lMtzQ,ʍN h%Oso S&p°ֺ*o"ٙ\/LQ |ӑ+ CY?[ T(T$Rg/%E5`$ gv,ceY@X gpV+N 38A3D`#-AB K5:30;Nvyr̲xzV!.Ϙel&Kpg#HJ#qd}lKdKB?7:bK'BYy]kĩӕQƱYaY4+;U nxH"~Z/;1" ֝XV -xۏhX޴z׶$Xʑa cwiq @ ) g5ĩ!=Uy\Gu6w>cK6pL0l@@KH#$, _ |813@ 6&N Wٲ==.w:?ۣX>JO?ݣugs(ϒڈXtk@ h>S KJ}% P~u[{z" PȤO҂‚V/R N=Pۘe$Uݫ[ez ٕ_S54J* (.C`CB:jÀ}]Z;k3DNX]j\w=bY:p#^1dCQ[tԲ1g2)%6ɚ 3'Nw@]g?̟_Bct"{-SS<9$ ҾsD H 0n{+ڡEpXBP  ׾]+\x~ڹv`] lY&)!r"`H]$P) 5v"4<`atGmy#+8P#PtWs= Ly`7زTͅ&`)*"{)h^ i k k[޻ ܷɘnaS/KXHdZ!swA?T@6 ;-xNZ2=c'EA`p*m[;>瓫]MS{"LmniɊek-"+k2t3G /`gH4rI}R`XԑmfCЧl3HѻXm-ň}hh7133lD$Z`:ND Hiۤ %ӀTvݶ1]9[_i-`[~`ZjC@rA5K JW r+\o rEz-ـ`nd*u.P dRd.Hi<ZgT rpeē-޽WTJ7-F Hg-3+BjU#fff"IP1 3D"}mu^;k54~y897dO=@ tꚯԇ >W,J*x3$ִrlcGZ`ga`r\~Pl"L`³2Dl֜`@"8YQ-p̴/$*ufUx&]T814 ,bH,SVUP)x .HUf Z[M[ORG:;JdCM+A}2ξgm}/i TvE-R*ayN\PZB= o&i]EevQ~Q*4P _ TLHw@_߽?p&:H؂7khwue !R*}-DDE(ÒS Ml%FH۪Iƺ T3zǦD0R2)E-O@)hA.iP۶Vor ˇ]xUA -le78ccqEFو[Xl\ Q_k}ep.d)@.9  X'4ez;@R_d @#Ґse㮊_LKyumO/<[毈>J2PST=3̬ b|7z fKUP$JB]#b;(%t~qMS*[BXE8͝%˿:T+ڗ>3eaI\Gt>~*"|/-r@|C,25 ~BƬaԺ:̚ D:f$лx(^4 |'s5 @/>ZZEvv~xɃMdvKDȄK+_X𤊔~۪zp<uүDDʠw=>Xxgi@FGV$HO诠:>YR d9291kHGM_ʋ>|'HٌcGTb8P,Tb?+u;jU |{QdJ"ۃyFwE]SQ,V^{ugɉs"#l(b>y_sp[rLV9WnQ~t +·"V20 RJH[en3%0>يsL"ڬ^s¾ ݚgf:c>˖Gs.#Ϗ"zh a"pXxΠ;ᬰaݢ}~(͢Uȃi9>,UET%PDaGC{ƞ_s_^Nv0dĊyfrظq=lF/h_ʇQzS!ksw>'e[ ĺS݅kԷ6̀V9D^+X2MBvԐ\uK?XIQVEГRJ#+&M]1Tn]17L7!YAckTE9f>E-7 Y)$l( btQd 2 U #fc,@ K՞tPbׯUw gH ij8@f'r?Ӻ޾F0l.U9@q%̡Q<\/lgbEPbx;UAMؼa|¿͙av Y8E`MCT[QB< 6ǒ3caiz`Ts!t|O]6}a.jDq;.Ɠ?#m<_#]Т22,;d(`͆c j^+yHDw ޞG2!nC#c{sԦĖ6auN `XM>(z<5#?QյT[k#P2`tWnzV(9O!,_$ z7NUǠļ>U IDATq4>dn)g^\iS ( QҸ) Mp… IY.A`y]e20,/y:[݌=|]2V|(q>I?w&0:Ǘ p03] PT%d:{t`lHK2R(A%c7mݺ.AQo ÔO]cW|L"9=%, 4I˦e4$ :ePMX]Diڃ'aUZJMXE"9w/8j1Ev̍2l*X6mU)JŰIzl,gGgI!D)يhx{ f/xхpUy?~|6*! 9e4a1if }] Gɇlb ڹ"*).o\ 6Pgs29)ω=4%/c6Qp ^ PRN2dt ʌB Pq^ǝ:U$EtEcW5G 5ߒ* E[,c4ءv~[O2U c"6_F/;}}@R*+R6SOc 1ke:GmqeAMeY8a]>ˁ8_BQ*Ž<cϏbpВnWy)hBO$.CkB =H"<?pRŽ7MaU}(=,z2d~'Eׇgy4|9f! ;!K{z/ ԟ7x_EJ]/KYBؔek+H+J)ytdj\ʈ n^,RBUM ||vzb!70DtJxQWm˨̮m+rR ?@Ue$ A0)ir)+TS`?MLz(9p31/NWm(SnbC5}0B >boVA96+~,ןqwo}+8 _wПVZeledl*"(c- 1<̙jr@gfa"Y Fn ߪ/}tzNG@Yb"qk>xLfv8/5/ٿTJ_q|,kJ̓$ XBy(9W,&(,km\V %,E *[.!35ΟCH"ҁRQӱPj@m..%d~s-$W#9>Hupj<\Y"+ qP_p`[SxvN%S:cy\gewbXݳ U\+[꒾ie6ds>D7u0uƾ 'nad(twc%9eRbChPdl¥'j *QW3e==3_?zچ'ܨ3 ꥿c܅9הLTPR+faDapETEĹgή dH)rR 03Rm=X_5]s_jڃ~X]3B4RP FJL`&FPѕ y(J 'P(p<O;vj^n/zg^Ϩcə1Bq rp @rsngx/G=UT an(ko݌vZ|xU4 mسnUUtݹ=@)JyP5* )Ȓkqq-E + #/BlAP5R! N(%b wMjV |xXS6b8˚,n'I+t5 (RF|,ذx`XZѳQ<\&J1Ru@¸By.œڀ:a-̨IPj~1WA1`jXڌWš:A ! L (!Y2'E`U;#gZ -8vB,Hp@^w<3bbBkCezRGN#&꣰m q=q07W?_Oxaw~a8SyH.h6Y%0LRJ\48EH[A, 6ql6]x_jŸ1CM'~-BM] 2Yz7ybŎtkS#~NAJpR +zW߀لuϤeAzUjA8cd,† d0BAX@XDPBT c'f.(<Bb[*=(P젻BP IYOa(*kc@&EXHa7e]K*-hӵ쟞ۺ Da}S&BaUoeXSiaLY@:=M@qw!sBkᬽ,=T e*Du^Wp`b0zZ;CZ(&u>}ȰC,R#y-vlvڂ3ˠT{ڻ韟 u{3LJiA?ϗc>:9:xN1Wt5ظV8 #P6c|+m0KK%BAT?ҋgGa3eFJQ0"CIHOǏ-P*PrJ(Q,9Z9J( K~ۛW3e1ZO\;.;PVakXibTG@CYgdV:p%Sr.l"g@TSHR`WWG+UMf1b4t_opN_8/}o*J^Cly\(X.Vz?CO zʼnT}@* o([4X`fnh>Ra 6q- TZذ 5iV5$]V,+m-8 @*{]Fe)[vH2>#]l`TD*`@udQU5mؙWMQ`?̒TӇZJEg_KEn'Hz_n8-ިo8@ʩflE5]߰ח|`nOɝ (<5'Ռ}fҦҟY] =. (IDt!'&I\+.N)\}z.\S.'*%"_Zpى8+KP}iZ j@K]vq9i" e[R`(05D' E ksUv.SC0}E"sa LhH-@ZP6)v][%[FV>:3idlYYSrqwNBWЅ'wtHDCMbci$6 72Ũctƪ,U26趔aTEp_&caAW5a;[IbW5{WI pYY-JLR6EQqرp~kO5:%풱^IPByAnr.ր."dmā,k%۞^?Lp]}1Gcm%[p 緌n|}-͸Rߔg6jb lSg//ZS6܀hIy {/^]K7]"ZosW@1WKԢ>%"4վ/|]8B5'KBK_XK:]p×kSj0׶5*dSHOGH,G* mCOk,S7e#7"AdR;RD3zjMqp7Ј~Lץ pZ'격H9V2`U" ) כ]`o:&M ~IXߓUs{yul#^N?DUZ-vFJ= `}dfXDhpQ6l> /AC7߉Me۸.LBSNK0 f^ \a Gפ,oS2=TOJJ G{3؇g?Gr&@KBW0mͻ:"iS뱾'5P klNoW6c_fn]/kC#c9!.V=~7,s?zgJ4MxA)Ax)-z5aKN=ח8k'q]KےؤHJnފ@o@~NXz3V"eΐDQeU#' mt` )Aʠ 0`WK݃Q&= 9!NO,NdB c_.9uB<#&MX_^4Z`&ɨ3Ϋdy:.PoWtHkW+epP^Bw7=ǀ^@"mil>v R}{=>Hg,| (yf^] t3 mAd 685d bPJJĪ Dw=:|_JxMk#t [S3RB \@Q]y˥=xuwjdbI~,dykғєڌ }Y.tװn (+tOP4aku /'̧$eftS9dhdp~-}`6In osko_ЩYQ:sԷ/>%7?ihd83ƀNӎ,a$srD${`:%x%GT#^܋u V5 |n7MM(z ڭhdޢ&{`ukA %O?\Qr x@-vԤ-HS-]q9X>oXvu|i [M50ؔ%bC56W_yXݙ'C33hCRZT 713F_jRki`-gt6pMxhIPZ?[ oxܑeHB//ӕr?'"-XĤLS@(.Zݓs̗x@R`E@s/f7K:|K"J\) ,`+M%蘑o #j8}oU&Њ ?̗+}%Qh)אƕ'c TQcTc3FnlG yOB%dLڰ x?Ϝo0wy]=8)Y]z9ơ?!LL1m MoyST{ﴳ?R]#sZ#ju }3xrvǶ1 7`V45M3,I:MD ?X0ho2ȼ%w]~=rl*ue伇EȤ36Q&MHldS)ۂm 47!4MݧX95!hӁ3IT%B]pwo3]1V͹Mt?6[{ Guq` Z/pαnmx09%ϟ|=I?r uOc{lt,IgZ_5Qlw kK3;JPޅ-zِLLTJ>Q]=0{?b +͹8&o@ht)Eg)R#-Ƥ1U&L1C#cs))XrU_n|$S+ Pba &$IqW /Yb{MJDҨR뻬4TTo5s8T9u m:0o}>?iCf' GL ω$j< AN~s?vHt_7?]@v ~Aj|*)c"d$N/c͟ZZ)_s΅D?FDn8t$E٪|>==?!-ڃQG@n8? _ݳ2= ]@J- RHCq~J312 u68z-9)SΉ)Hq3mhdl/-0Ʊ`泓Z]?E(G7 ^Z kp/[A;4I`@1MC#c-*,TAto 3 *dcdh6d[s|aƣ PQ{2]C#c" ӫ>9AJ$o,%h|c*fX+dKRf/0}\^HkԪ+.I'P*䅃-7羗YRtIMK$f~thdllpd;^WʀjrE-77G7 ~X^< EfZ-[01qxww$ <70Q1FnpK~sHR-LqPa&^[aq2C~jIe\`Jb3+(G lR ,+8c'I&n( +lvDevWb.N, /$ ,5eI00Q qaq[A> m(`8!C pbdlW6V?(!sy < PH 9R ҴVvc>>bBqB.rט0I@Un`IRjDQ 毖a=kRcBtg9;L!iQfN#܁FzZ"kK%ЬTן> PG^/"Jɳ]_| s=UI3h`~~ qe^RfN H l)[e$k$JKG FdIu%v˓ Uw/R #Gz?я{I%%,HIX@Z9:⋽};@QeE<Kn? H@vrYErқţ+3o ;1%?3CLH4`ǣ+xD:/KPum"H"MWf? ]|˸g$B䩄o/|k_ !y=X2saasGD%M{mFui˩,wYJ~?SH<~d$ح-ѕwIXwD*Z`:I(E,zvO re\̝+%LIΤX'vaF0.{hc~L^mbg(ݵ׸skTں ٟ_Ʉ @w?~0sR_^KhKOi3$c`#Pj:)ҰPEY܄ ?\fa$kSKy+:r%^Uk,^'3X`3q\+| |%|cz ٶ/>0ۼx& Q;}׾5QU L< ] oXHsc' q,|f]ygLqP'p OJz?h|7xddm_)N +iXU0!A{S#Qദ/WIsrM%n!yp{.!Će+|Ɩ%"UNj`܋+3Sw,A)^p$  g%f}ko]^-PFgIWKTI3Um>Ujy?0hDDDRf*W l,*>Yye1uO@▢( oYV>)V| yeR 2ք-?e:lY|̋C# w"3D Mb{tNZ[܄q7/q@p3JK+:s|3N?n2|}+vz4z@ZڂV?nYM3̻"ص-($*ID[Yp(T2 _BS>`gtD˨a(]Adyiܫߏc۶uŚpGyeU y!/C+`s@"corƫC擱!KKZ+Xf@.)$]*Q?IjWa~ܲB33?d|SmDEDBaEC&)JߠzὩ:EѯXy޽yWG7pE5GØK``{ >O"mY]ut|zk ﮮT;iZN$"lVF=ϭ}UK ЕL{6_?m[o]_#O0 ",1N߰g//#fn ffeda#ػZf%bs߃p+ IEf̼k6?oV@| ~& VxocԼNRm>R)uJ|=obm]U*['G9]GDW,7}Um;>\V`>k,G!v<4Vg:?9-"lU<%p["82M=N D5BCFr7k?_spvTt\ɕpa@i`3' <142VLrȍ|ftvpWWuߋ<>A<=pZvl!"?3l&" l08ƐT<(79B ۈpC“s_jn>rsIvUKiiDH)W*>TPJOUwb166?@Rjoڧlb{pi_dBWXJ+S6v;@J Z۪m[kX@3r_߳=a J Fp,1t7@fC8}r_'D{7Nf$P2CѬD4Ny?ٹs3?^*"c-~!M@~sx93&.fR h-dL@C`Vf~{=ҀලoA~s. ytleߵn< ^TJf^ޝE}Z{ҐKHY#п%"7?!Myo?| oBwj$>\a56k{:L2 \b#`_5@&&"D aiJߑ"Eff3>!!R9en 7LO恆kt1sB٪c8h9}|RNxTrK\*%8EgaqqENJ*^q<V*.qJ*uŅJr,5 g٥lRv̅yCKMMVtv* yW2^114-qg!@`+0 `zhd,Z_hl|g\I!LJ)&?"{؜3k ]"D'3󩊑 b:m'i1 9@ q:]el)|NˀRLH (It9eZGCm4%MD ,o`U1lf!%f2sLGIw?W3R)4:zl},6{lRK)Ȗȗ*%n3;]qwQG7 fht+BҲ %b7kau%dQ=/P0Kb$[uQ_ Kv0 p[FYR̻~WSt-zr-R:pJ%b1-y_Ws3DsZ]v;'w?:qqvW跪jgԭy$;)8DLbK .\p 2]\.^Cv## q;c;ؖd[duknZ=a]5眖1svZZ֪m5Zl69qMsϟ%zM}1D0fZBAŜŀ>w©/0 Dgz|7y,0扅 &~1ƵsXY2fm_<9^}o/l:C5<_~m2]kp:XYf%9G<1{={~}v]p\Ji†ύ_.\Tg,V'덙3ܠֳ 1K\q"V޼fmxa Kpmbjkq`$`$?⋏/ZEG + ,)as6H ArA-zC<扯ͷZlt4扛 f^|I[LL0`~ 2!5T}'ۘ[6P0 l`~l[?! `XGBy` pQi%dDEi4oH%_ 4Oܴm_DD_ N2 &F&3IUBGgr?$flKp89A d0I ҂V 3J2f[&g 9:&ȍ[ۚrTKl83Uy,(!ZSsƇrVtK#$$2JVK'Yoner|Ǣ҆.U~h-|l93Q5l'_>&J90=04==lj$lyۉnj`pUWn.7j  &](dZZm#3_$T JPE{y0:3QOͦO?! X r\$t%Gwoe`pK/##ǘz~1p1g7q}n'nv)3_FD{RמeJ}5\eH1%3e%C?1!H gPd*˔ra+vk+|߶m+[eFch|@ DZڵJ36 H00I0+"ȹ0RHY$jD_hb f<_%lyb<~o2f.1\Mf=ׂ1`lX0f0K.mI}cwM40\NT^_K~`=80AH֬!i, w2yOl쁟+0oG`m7Gkk޲` ڮع,1Y2#su"Rw5#Q-k*~ Upޟ kÿR\@*K1:uItd- }Zc`hks !%C3>± mm_̨&M55Wt`a !T`ՙcH3[&/Ƒ~E\?ǙeQ9%plóKA(-) 5Ė .pՎճt0$ R>ǘEol|'RBtzGnOD/`k3ȗ2+ < ]7Pp.7iɔ @ k$=J"h))uU2rem-=׼<]v 5Zn6;ZXke,;z:SY\fΥngqeL{qAh282H"eR$YIFԚ"EGfL+9,CC?h=/S7m{>w!Gim8i Ԁ\hJyW7~&bFW (ͺ)3y-c`9Gw0Ƕ2x {.ۃ`Mȳ5 T뉛3ѻ`\%6ե̠M6G\J,͜f42vhf^: 0HF 4[MS'"OM~(s~覆ZΣ  i#gML~BmMMLfR._!(nȹle(@]2W@ $)=zx'>xvȍ[7}֞n2 .=%@dLOOg21w;v {s@a+wJHO>o[) > >RI}9kW{Zm 6&C'E1N.&ښ0vEW i%T,IL IDAThP!LGwʳ@=01I$ j橓k]nƸa` dy]m$[t hbX3J0$)1H!ewnȱ|- ǡoj_i/3 d1knyŦ~AU1>\9qdoGRAy>C~F=-$/N=ﶿ4dy.5ԙ-ND8Χ`_o{:v:WnP]usNG3qšuW04ivᅆrtF:n)L6ةFc6ھf4匽;+6(.(SU5=$ L5~7OD>: ͺ s{^ ێhDp9ABp|l$0%' =oGRK#+dxJ$ (\>3&80 M9ؤ-^]}_oZrY*T0n>p1^hnnkmb5PB &H P"oDN/iyhKR,53F3e436cmk]]0D- Aee~,J`Bzk^IqXNo3-d_iI9Bj4řG{rC?u7'lрrc`{L$!HINql4s7 aO! -E"YyR[y iP]ER=QN/OW % hy Q<-=AߏWRyߞ?BW10őHfm?63~&ٰgCVAxvښ״5c)3h0Xx=XVG|zQgרVF3"$gx9\sXw9nGZC18?ӳxp孞D@쮛Kϵ SmN"rѠwܯD/Yl wsPa {Y?z1649c(R4Z@FZ_3 aSO{/2=]U|[eN44dD`0Rʑoۧr)pSS1>pi! ± w=r?WAHU}"@v8L#_lA/y@}k0dUjNsZLmfrYk}k,AT]>܃?9&ȉ`.dE8pd/b V ߉>G4y)F#%d,oFyW˙H@D EvcEP5q$Qټ$ %`H2˘ a١[( xPH|7 }x[_jyCd3 ]Xf#OsdgўxZ}餾mͭ๣H1#hOOc!L0 ޶X;{xn$fgPx2>u6kiy!fI$楴Mc5w@O@\u" ݏc3 ba)#Nc%"s׎pt.G#3vɪdZ3gZ|voyV)l6*jn JZ3kVI``5VC!?-G  ."0H psP^/}lGCrTnGř4`|>@5#Jʁj ߜha)s#**faM֍`EtI "SVSg6Mj#wWoJΏ>tԂFGT9x-K@Wqq:,k)OՆAa?"JDTiHЁN<(}T=i/yy,$xAdOƩs3&Bo ѯ\9 R`}uW_A3m! $& `q@`8 mpf1Ck6lܵ G^n#oR3ЉAn-^C~0[Cz7*#PȤt6/@GyŁE#/ b>zO"M[x>B53 mFKE~ G^u@z3m,v %HƆV@k=@WSGN-b;n"*\Y3C*WpgOF !sgMHXe&DC \?ںibQ]2}'́Ѿ#H9N7r\)( J/-bJ=0b +D &IϞĪO1j#MWBG:׿9+䶩p:[_|l94N&ދ CpLYlkl\"u2cAe2H d~ӿ{>n.np폿c8 ѓ]+wmod*N^z6?~' ?kLE?EŜA  GBU/PQRCxPk^"h[ g[W__A$ G%6v T/W}?/~)d\G5{>0 ءQ(Z2 4Ck v\v*u{D#dZ|~/s \juFz B'kx@\]Ʒ(M; 3L= ~ЙoW)AxK) P57'Ik p\Fc1\r-7J}RQ-sm{;y$(6dc΍M`.5ګ~PߴRgY;>y>s:>"()$ NgAJ`SR2?[>0Ti ԳkԢ)$An@FM si)d}e7B]oЗaҬ*۾ h"Q!@_ euB``r!|cXvέAlЁJ:XsLChk]*6K9AJnB"+}E RB̌b(w6v9`7lQD#9ƀ1.M` D1л߆lfj{ #:HgD 0$L8uT9cK2ۓ6Xk?򾟄TPX O*h&ǠD'6@R!|棷a-86~T+PF{*S_灤֓c @}=6PY ]&<B¯7m(RF2a 71־;ػgO Cɝ/;rnt3p;w:y[Ai+/k6nR }* (D&tu00lp15g3oz"osa AUh%ú.nTFv\ b 1@80x՛߁ 7>KDj#HVm`*d>{DUgJr j@mW#Y;52TJWLt=;Uύ {4ÊT-=xL?o :Kїi'^(4h?e^ژh_Yl=AK (U~.L?j5%BF?/F L!ׁj跾66:HF7䩋V}(MUU;48RZXI 44R1B@ ='?IGyY&Sb[#mg$.kd5~|#(M]H㞳{2Iy+obT[k 1v$<mFW?0rT@y6X m?"B_%ip/GX5'l?~ Zށm_";6a`቉qWBv9r"˭@P3P_~.1p;g\~- gQ-|VO^2!|[/ëWYY"~Gm sOlFDz.Ko-7v|WKa{V`G}~pM v J?\vBD%QQ> 8á\ !4?ak9fr lE@rۊAXPkl,& bϽCY3@Jx*ci>ŁL'!z>(%O+}*>!j*֣juZ{w;W >۠ďBTcz=<;Ϟ &ͫc j TSw}HGG.PN%#'Է5pg_瞈@yv=zy o2G{+a8Ja\7sW_`'IJxN=wZ>| `9|eBH)! k$ft$bzyQB>8_ka,h)>\k"&[JrΌ{[M@I(0GF$](N@'+?()ބ[)`3 K9cC pD *T N)^.! ,w?K7wGA€PA )Iay_!~3$WJ{I.ݲSY~ ٳ06,Er>yCol7}+_JPqFA)lok8Fv~},j]oဉ(qE\d5l"%袌ldLHug Q)"b3Ȓ(El3._=V] 6jqуʑHsaIA 4¤nD*p5OrZM Zt9W"ωF; KkQJv4.#ryjz1r}Z&Da]_@}#!i*Й;v<K!/{Z=$D}n Av쇰eȕʊxȑ#ظq#1e=t{1% 9CAܑЛF17$~=(2("d KՇEz#,9^lpfřEKG_ugkHnT/`ך K iiA0\ ?/Q٠t= $Q7@NzaN= X6v쬽lz95Tn=lX`/3<>K GIَ dx@BOs\IB}K=Ƀy[f}st!sֵS%}_20 lD+ hP~cz9ti;WW6?W5Xq9BB0kilB*~=8S(jzK!&K1Yҹ),-+9cH?wDnJ9x@a0Rb,q+D- C3JJ~_EA[#کuEd<\B O=̲guc[ N?-z.30Z}p(xulhB݀P o; 0{fw~꟡dhەb6Ղ+@|bike#|.h_)ӃpyQA䍋J~t0a$~4;,//CeDdH֫0k%raБX n3(&Er|0V#W}I86ÕYFHS6&pmVɮuTC8vE "*X8BQ HcVe\F 2!y G_2QƁ;3TcbօgD~: u=l6o)6q/_#mt UPmqjGqQ+ CE P$ J)TR,r*:D:Oӫ3GǑ$U(e?!!ozR2-,Rr\ǂ# E6c'H DZx+J ]iH%ͭ/@":t 27<$@{wAdY42Jj0)R?_[5xG+iӐRvyyn٦{D:de":iaE Bo$=BVCWrc2R6e`uN*FF`?<$A* w)wJ*_X.8=.hTOq[2'j(e,aY]̞E6 n+$u!0?3 Rb@nXF Y+ k Na=P%&|W4\bms8g^k3` KDq N.j v'ۧ\S: 07=W.MR {->ՙie#g@Z4>UR0 IDAT8&%B~7EBn[ D%}o R5C'o+% _M$eDUEBD [coƒ G6hىCW#/0碍ʺzu[-!F gqdjw@(R3U8Ͻ,rH؟yK~.1 s3, ÄٮxV$20q{A}(NwRL B%Y2 3[;@E[g(-$A\% &retнN@Ž! Hؔ!eH:=(:3>F~1\jΕ RGcB-eA BX2,8pƍO^qqM\kJJbm;Q܊8w\~YgP"Wp\X !UR\'모6*= i1 `e:=Svoo:Ā |s笹tDRy' =Ԡ+; S;`R NF#c0hPu!% A6!BT0}|ПD" Wޥǵ6WZt2r~+*blnQ\̍/]9B)22| os1'&ET׼ ڀ+XB>Aubj0Ik6zږtr}p\~f5L0m+IvVg9so W71M)a(JZ݊IR*mNy0T4Jѽ^"rs|jM!?@z5ӄ*dUk0&JT3q%CZDdl SNb a"΀5]G;[" N$6V J jPN$R>s[1!Vj0tG,> g ^Vt;;w t}v4na\EVKcu 6 UZ۟KM'`mT5< kƹS d?|+9sA6u-5BCT * '`i~I՝*Nt`(w )Tk ҽYQ2˫ZV2@@z Dqǝ7%{F2Er gF@ia pjaa)PX FFwINt'ul--?ˮ25HԠ8E?O0vNn# n!l3*Zoa 8!DwrލyJc͸Bׯ} Bjܥ,DUa<^Bwkvk ͆d]垞6CGAqEINe~B?ܖF#nMo `i~9"! }Ĺk)8vΥظu;@hr8:eT(BGJ6!Bj60`{H%Q}\WR*lں j՚8/ ԶcX:pi .6$pc\_m!sD NgzJ :Ǧm@ , {0G؍pDgM\ A= u=⯳s'?bH /1v*;v,-+l{ 0%wQ]h+ \;!~SN*8S,] V SǎaE[ z5Yt+ǺulvѸ_@( tDBDTM^Q _.?4/8-,..j_Vbz0;*lgUb%?PCJ¿ADRh7h7B,c1#/l_kGʂ$NTыJ|Ǐ ԑ1{8\@ X F FCX}^+=_+Ł/b*԰eCM̠[! +9)4Ja' wBb:# ~Ӈ̲S=Xkc8:" m$gT.}0Yw` [PG;Fm;JkD+!Ö92w& hC-0>>^-ݵ΃]N}53DΰF1Wwb|˦0G͸<cS|dKUKkc`*]y'sM@ $(17 $zJ=D9IZR:ᄡoQ̪;:m"kFƃª `2ΝЎg@ork:Al朗E4 oL vmAH3?7cakONyvH'sP1ŘgH1a)V 2* L 0TPz{'{Q~GKa։+"7IϫT*b]=2ǪK4P)2(9 eȿ,=/ [KK,EnlF s ?9ui(N@aTu$\3']s3h"ݥKԢvRSX}34g`a: H6L/v=.tj{/*O=mj<7&~LV*¸q(z=3 \ W \!*41y]^TR뀀+C`_ 0z5 7YaׂN%>3ϳqtgf5ڞaki Ԇ(a.߬ݸM1F10sM9p#Ie]seۛ$Gk5)>̙cKrHxus7NVW 9s.?:u0$ȭoXǓn:cǎTD݋}G;s75X~#6lX#\渋ZL 7:~.<_:#Q)T:Q `*kh_+ 4l^y<m oDV%P}A_r0PjGG4h`kQEqg|TkH07!2I60:A7H%wƐ GEс\ᢑW$-7o 6 2۵Q}a ӌ432m5OKc*}p,'ӎ/ 8Pɘ"I.r NqThuHIGڂX; % '(`-+ Ϲ9:{DHoɁjS>u`@P`pɦpHXkF;" H `HTDV9vk\ GV!ٴ. R["$O̜#5bǕ;Rpmmr;fy Åfqqqsnڅ9\3 *app.]G N@ eY)Ze8 rm.n6lnG8 2w81o;Pu$ܙSTjC(rE]X6.WDj=A4q<;驣ns\ `x0{&rDǥ2井2*%Ԯ{6Kh$ypjۮǁgbbBYsA @ vn8 \By1`ht3K`V\kt殙 Q-OoEw:>%N|lW)SlzhA3\Z=>7qFǯ|/v޶mvNwPrj P\U%~ďvoGG DYVQߞvk@G-;asJw 坓0l@ݐV AɊ|=8R{ 9@}p'cg-2#rm 0fhmucre]l(#Ev8/RMfL C`sr"JC`iyĎB/ToYcX-}]=j_ovxR0wm.G ckaWGaG [m(ad9E~lD,@ފ,k<'cKt}S"=r HlT!_ 6SaD,NaiY gWj :qknAhQB [s`wFkdAvo:"rSyȈDuR hWz|duk}k5צs]A,:ƕ;3kעHJ_K`609a`@&QNW9ڔCҊN^[/!rhv{=vDYڂ?M Z DK^F!8h lųCCCCκ6^?]Hs) 6ʴFf(.U ٻ.1,([05@x)H&}5ԕMp (pF7aqz Ɩ{pKgM (&Rh{1~Z%Y'_~WS kŸ n9PaW[;D%^C6h`M0,ٍ7ѽ0^DcwTv] ٫c!Tjlo`*R z\ׅ3 V?}}F#&5Ebcc'=*2 Pe*i\ju̷xYݴs0yZJ%j0)~Z݂voBR=O0Hɀ%\[Car]¶[l6!C3mĆG K޽vևMx-Q;=@A.r=i{nRMP/$: h2GX qyPAp +ls|Ӻ.daqCEfawAlhS`/l~ ӧ}Almt4(Hp_370WnӜhBux޵{`L lRu(1,X/MzC_qC=xxph4PCKFfҝaўs 6.M"kqJ̔K#?ݰezoleh_𺒐-8"4bWe{\`u;!}Hט@$`\U(V*,_~JkXʇ \:rB>(@# puibHh0І>&QZ*pi/44~2ƥ02|`ُ?{7 * tca+^5=z62P9%a̮2f<{χ9 WU'3\s>;v+N_N*%Ț=d# Z0}dԾ++yʌEU41u/dhRB!Ï sp VL x似|.j/2?n*}ORXl N!``CL2 DBH#$y^oxߗvJy n9@)+"x__&h,HwN y:fPᐍpFQQ"%%26{ =‘+d} +]KM1`BnU_eMYߠPګleY鬰ss Dkq akz <#a?=G/xctyxvs^wVfDxQ~s+sŁ\ںh-PeZW\ŷ?'_b{yV">K/hipv`6ʋ+ FL\Sq;qf}R^"ʁhw[RG'Ie"IOe$ƾ}p'D>_n1K]*lj.?ok. IDATjnTaH$p""BK N`alf7.Юh2=Lmg3T4@Oeٷ<jLmWmK>s aaCM}i*)ἀGsHyE)L-1L8v>Xҕk_wƹ._/h{Csۍեa銊HdžSg-ˡDM[-އDj~xڿɴ# c*ƽ|s ~d Uss;yX! s2hE(VU4mdFIA23BXS'wgӼ u~ &y- x現Kp(4@XBQ0 F/'uPo)sMq00ZǠ9cH:ql_{.CZo4_hm厧ցad}Cg|Z`GG{/D+Tfy}YG;h |![RR}>ێP [K 6Ch7uv42vLh{Lf|E~FwI"@{f0 gźK4)>FY䕆U^}ea \)BvFp%vƳ`7y"3"db LOIŖz iG[T7CF;chhudYYϽo̬uf(+`Z ŽfˬAP~3+۷O \@RК5Mb bhƋ:Wd|KAP5κs!G$PyJhL, Yj-@oabM#I;6Ad$\ߝSWC@ 2Z{UR'F\d-!hf4.4(ZkBDdUE{3n'W ^9Ovք0H dyr)(9Α 6. v "K $ǵ[؏%T|qST+J&"H T nTԴ[7KV.ƥ, 5nl72r ξp cˍiUlt֒|s}H /@kZ۰m3ж [8,{]%|yϚq X6%a@;6lEL+5M01>=LE"9?L=m}x?y!bhgNzpg{Nv"9dݭ ]_ CPJgP8vܘE P>n0'G.[[gzu4dF`nC{R24F\8XBӝ Kzl,^}߃CǷ?2%`gL hIj1ʐ50=kw+HJqS|Jt3&q f}BZBah= Q8ד]|Ix ZWJ`&$DTSA{X5ui(@uqo;YTRm77ʧ0HFlX$DKfI"qPHK=f-hI#dT7‘ZYeI֞,R;;LtRR  ,D[ Q{x?JV8BG{ ֞GOuKMnjDQȄ¤8CmC {Eq,s_bJt,PPPwtH2DD , ay}1'q?VUqD E~*KPj0]zɀ7 P6ۧ_o3+fn/8F3IZP_re`@@ҠI(d%ʀPyHlG9JDi`~ (#x@*7_ D;c"2,ebI 0 ʑ "r~GWώWC rRNj_TXdb}Cȭ/S}<'#*6Z[G9 8 (X$|(Vy%/jk 5en~c=>\JE WR^BZx|ѾxRcI.`y`3v}D9.[QKVE<-:yk*r uJk59gC.XZTG""j S`X34,tkG>kqb.V͡"b5& iFY:Q$}|P`Y|\~Ov봁W6?IbUk˱V1_^"v<8LlYk_IW8;*B%$ܠ ln ;וMZ\ ?n0FV˿h6 e{}8N/Vy):g4hxm$4TCl cSs3~nl΁4Pkl@$lJ>,.,Ed+뗰rsNp"qTv%]=;Oono! E_†9B-&tįp{؎ ݬ^5ea8!bR>qwD7{Fѣ;wO^2E4g_S+o\S2?ee-״{^Bv uCchJpGRlDр av>!" ޢ+6a B9r 篩kNCYBaTJi0>QT_r\2 @/)1H8u f}E;cE=uMmVX`ח" )ZϨrd4P$04F5ChgݬʏOvJP"Z[_(PL*7:KG;c׈[Y})i5l ܄/ ݳKe:>AMVID6Go=Eǂ%|5k6ѲJ+ A[i ~_mjWw8˗Wr&y:&!OF*5^U%ƞf12gu%hsVk?vf)x홍h+3VA4N0yrRRF@ݕ`(n AbJG|$CD^ճOW#Wmgg"zS2RLr-YaRV4q2l9e H"B8*2yW@`U`ʁ5  y%":@*>pv%r:o?H;"ZUchNRIZ;nDC H9AA>!"^%"WAmѦjR8=+N-M![Y6TceK)$6":-(&MDcqHAP# Q@uJn-;z~""ׄ8ƾƤzCaSkoXӗGU8ce9J,h dh8jG2(c"hg7H2_ Ar@>yHD>d(6]bԖQ!m%`0F=NMhPEJ󢝱/wtʠ+ 'qׅ ,G=5קWu8^ğTyc+B '/XN Hj3N Wd>#!vE;c/ŶGO biƼ"kVFoăR ~ >%_TZu8CT˗ f?Lk=^F֊~QqxP *T5n𞎮{'cA; m^2n+F`H_ "r-rMh! d88HD]֥d[7. "|oYaw[RkFCC!.Ow!66 T 8 zZG"*{8O# Y?olg4z<fU24 uS_]=Uwv/Ѳ$_)Ν+學4kojꫵ2alłTIQY80 ,'yX;`uk*%M}*mz)CՉQTvI?. GG:X?+J+gHmM(!6" (sQ;q E.05 yQNӕ ;/_Ƞ9-%22Ev#M}=;t=cSF3L{߽X'd1}.elK&(  W:z0O!5e= 6tD^{zzG*r<D;cY:ݕf5xM]rRi5R<OJDճ+ON3b(<d3 +w-G'_RWRPLI"R M`(R`(gt5*R6)XLw:ny'6 @$]뽟1^~";zn"R۪[)nB[_{4R "V9+TQ2!ϋȍ]=>a#:,Ҙb"Z[,Z|[BxE*$)[\ǃh)њBF ]=>sN}|E/NS '%pQI3X2DT >֞Gc> Z}R`4%e)EP8H)FE*4!!>$"wf` z@ 0_ 74!z-嬮-wjrzXI P( e"O~鞀x`Fxcۣ?*-Idck 'Ф-{Hl2Z>T}3eOvƾӽnimE؂ .CZg4=axgl@ϊ`]3nl PLDEd4*OF->=zAARs%#HP&%CAFeUg3"!@S%K~( 0GX(YC} IDAT (p4apK@G,-f QZir h"| n_ دEx.f*hTtL' vtokKKFs=>o~n"2գy@}@ mu)=)6`O%ZLQq1( g<("g~{sJxzFFx$m('ϓ&e W,pP B_]L׊ywp88zjQ@k~G-pmz,Ыq9Txp.J 2H|q>hh EEQ \"fNِ}tǡ{+;šN S|ND76Q;?hO?"į?<#h.?wtj2 ܮ$FI,:lgي݅=@ G='mԂ{ܧ GWIXCA5 )B։,UX\8DAh/'EOe1xjzIݕup# Dds@'FD"ȅX G3ޕc']% X  F =0< _ge4͡Оļ30 4~IZs5^X<fω9jKTCbxUP?<*'{]kY=6~BވD A#@=(bϸON2keõ8'E >ױ,"]U0݌fj[ - 3o& jp< z֮Aᖱ2ffE ?8-aJFuʏ B@P]@=< {eU H=S_'*hDx[siid3h,8f=SX{X@ъN>ȫkvyE 1͡[I c\ |!"eHP7X@̉qF!B|ӛ8$h0gsv{/ե^> =wf \k_ $ <3xb%y o܀E`/ዂ6H!,\Itw>~Z./2/ ݠ̢KHQ`Y\&͎sh\>٤`zh4VB@?P~ȥ |DClKmˋ>Sצt@n '@:ΑEc(,9-/K> qEX<@ ;6TH[ܪ8_N|@r( ! Xxp,^?'Ϙ_ZH {.Z]O_2 ~ԀwNw_s 4X~Twb͂ iLl/>x}ڷg2wKN&l{_?uހ8)H4Ъ@ -EGvwn'RjAroc/=fຼp7ܿtר3^¼A*]?b͌/x`{bp#0~t6.*D!n_SO+}3̋;w~%2yQ{3u>׳7xۓ?@shyMZũ2wa_ tu=r`>Q_*L8i]m):_.>Ķ{B@X&2;/t9;NonDln^ü1oi9>_4D}ihn1Lw1gbN݅_O ASivMC~oo2A-z;:V V^GD "REDnȗ;-7&Uus~0%1*sJf>dgrcaUl/!"ROD󮛽W>`_q!T2>ٹ&r7XI Fy mWX01s\c"ciٳU#꾭`֣`Hu~ƶe_ES^k=*"cE /o`G)GpL>,g2o3rG81ǁdeK^ M[[{n^5I(LsMG-FKLCITTPCe_(cۣ&KD,"yז(vp?pQH!dY !KiTl"]Sd|=㸾D!t TPgLC2 aÀR K'SrGtԆtZA %M=EdFoygأD7_ 8%M>wq^w7&0ݷ'\fلC}wzIӄ,#prVe膖}"=V!G@PdS)KH0m>KD,(<Ϧԣ3'?} @9;_yp=Dn`j'-MB޳`{ڝ7nUmu1]i=A~ecac pHD~mi!C9!K7 46-)sG' Պ\ND=]0Q66%+ƤIGHwmD E`@]” FH2cHbDt_36{"4TeR HLRF5O2@@3(KII;CD팥}j:}"3DDt5f1my' ӝݽ%|78w .^YDF@P P1& F$9Ѹljk;z{@Ot42rV"ʂ=}Wx?}=\~Z->64,($d/JHU"rnGW~移{[2"Z[1a#!Z4ljpVә& tAO@Ș4/ـ天03cZT,Y}3y$O3'ޗHSJxBjÞ7jD=XzR)uP6g`;qdQ|zmF޴$##p+}%S|Ekfc"W5=~G"r&#ʣVVYI le7V08mEDTioʣ7jC$ADҮ MRl!`ܷ{\FLue.: Ua=D %0]m@ȀI,!b6(r nϹCD;z))_KTxVlD$!4eMg c6^:f#ܽQZpj4T$g>yB" A$3*%1 ' d L~ <Ԗ Shp w6 4ce*_1ޓSoòhRN2ЎEPSa@ >0Ӏ!bAdl06H͎n{.uokSq15X\m~L,G_34 L8JR\8beTbŽ%Mpo3>Ő":3]Mͥ ihj =Mp k =^2=qJ{1ִ:!Jv )"(R4!V0RIe2 nv~7iJdRzfْ֮90Ό4D̷&lƾ!`f*'X\u24ה@a2󤮯  t2$LMhy b}]ϣk|4i_+R׷9"S6c߀frgʞXr& meX^ 0ײTRTC1?vFD_OkysadX$C˻Jh,ǰo0ٽ }kTaes)H W? Iٹ1L$Ըۺ9';.# f4@d~ZYh}ĒCpn)gãysPRף$lL;5ak} b|={]=47f~ %L 91H SK;$|L,/!zf2Jcct2Pu+F1 PLy#A92(KksS虩V~Ŧ+Y8XHJ(asgTyN;52D{)R_@1Yۋ7"bN3>*Ҁ3HN9NR*?>Y#oU~̢o 3KH>{dt6=L#Fc#3FuIOJ&&j4ft/sv R.Ai>DɴrSaĨ5Vg3ʏ@Bv ;zډBP&癃b9eJD)|{)s֜)@)Foqv{<"# [ qQڠeGѵu_mkAsÿ67P=\N`2~ _;Pß=AMT@a3 wI|"2L@E/6?PP!1UjX?^M8=ɍ/8+f2?_Q0n Gnyd {w0X IDATY_wFi}$ ,B4u4N3∇w<ҫ?8դu?UNNMńȂӁHIry~V.,k7=jn#?Fvׁf,i`*SOB,bܾ3&?J /5.COWFX@h1iPl#C# 1ۨapd6'U L52K:+\Q "_Pxѩ &# غ #+Mo;fO,5c`SA-Z%D@4{1L61s OH_q03dL81Ot8˄>s@ V;BF&cՑ'nA-*u/>n![ & qgJtHƞUۘC0eDA4\-wrlZogx`S'2KbS\z~Wn}/jeHEY2៾7ʍlA+g47<JPBbi(RdBQN2 PY8CORz1~q>E Y@+ҬGR"ˀ7x||ߪT tԙ 0\ދOS\GOMA<#֏iw 5ÑVcxS wk6r<hwo}q:icCz;erhAZ16{!L_{@Yз?IL6M ȤP=?`"3owC0fYtC#s&~3=5*S)uaQ]_)>u.1#KI ^P TQ@kǶ.C~ |lʯe 掀 @'H?d4kLԕ{OɝjȰQA#Aa6V?>)fqɖnqdt Y Y,.Ah\1ޅ .SD'/CXZr.'i 4uuEDI&?ЦW9fk2W?dOONs`|} g3%A]!02ޱԳV ΰD0$Ip*  R`vh+8V|C(\@nރ M2Ίk(aVwtLqL i DD ܿgs.َJW$G JQ]mY7i 謉ɕkQ ww^H:E/_I,_=E#6l~ͯĉ0=]f?zM497B @DI\x(uU=vt0F(xtk"g].{>'g3̧:[UQZh0*kփU-#<=K%,L;o H BwƗv}<y:`.k<}1ͅI;'F!{Vt'w0U]{6oDl::P ܃8I=q{@# hm)\yÕVZO^ UKP]5d=| @`ɦX"3hO7 zD #1P*IsAJt"(b3m;ܭ<~u,1K ;S溳.'qDO }@&8i ܕ( Z'OeFAtN0k H}5@짟,KhkkQp @K^rTҽLoӻu'] h 榹v)Yh|A %|{qhj2av|:412e֐yQCx۵/%aXyZBpf@zݍPݻ[@׶]OR^ΰLiB{n5k8%t^f: ;D@ڏ>q~UW`da g{*( IxS:1GXT%{WM;R} 3 LC$T݄/5)Qg݂YcOAF䣃0v"3Ȩ\"< \a t$]WB-Q;: =~_C_hs(.#_c!FXwj |ke\?r٨Osf23D">xx{?(Vߌ,Ie"Kk;з%.q9L>=K4/dJڌI+(JÅ4p :\LfA(6MJGϽy/" UuAY |Aàہ1 O0"U7]UM3?DYp2CO>=| qDMСA Pb6$SſH\L~\XR QY2KvHh|r, Mc9wZ\-Q"@A:&MC@Z'{ v2smI#z.$Gn( itsD,o?s?BBnx>Uo]QBcުpK_t(!0 }6 e*!.⛟jS;cÕ;:sj e?u츨,nY9@Ns^ { \q)8K 8Z<FWTw|N%j` Z֓gmq<>C(;_Ϻ*Dq@hYE=XP^Q70O"^2{9w}7eM+=Sn0W&"$! Вp?k_vGiZ *:@/BD`5Ϡ0:RԃO"K@E> QBL_@I K =aD݃PV²66fR " D&B7af94!pȓ@|0Uc1 Dd(0"@$C-kB85&V@vK)뜰#!"F`8"&k4t Rf=[tfXg}OˆraxŠdrvygן;@wwn+"4q|r RȔUMLNAFUddiؠǦ T6$Q>=+ VnD2IxDY rms bӧN. dMhue5r/P t@Lٯa0luJ3v73f]O/:rz$@-OކzmKZ*X2ޥ|מmRv|hDDgݽHC'*c 4MۇnO٬N>b ܒ^ eg _j&(p3htpj0) (}_F/a0`f:qm)ytλB4=j_S@Xs3τe ˟y5U;i/>fԉFG15>|n8AB߅zf3>l86n; DP#YC׶ ڨ_v9 #EB Fe 'l=nihC|6^A%dPayH7: ٽ/'ss=ӍC5O9snZd~HLXJC 3ȬqfHfZ@i3Ϊgu(.( i@+}M.%$"HhC1zD<ߊY_SAIu9#+^ecی/4CH Lkc_5>I)!+ks2Ȋ:05IcM@~Ht-_84oGj$Z lS.=@ zmq1V>ђ@icBθ\q0/n1#~3$'^R@^ {: b+RJGl,Q)W^_Ed ¾·N ԁuyQ VJ Hɫ>u=-^HM !~:00c{#0=y7?Ѝaov;BD8ydNK?^PKQ b{pTqP4d4&l u5~rUeTxq ı}LRؿۏ_6&=JqaGd[=,MPDCEaebJh'tsj@ 4v[iV;JsA*$)j zr^(D~'q R>P2h`$1cAڎʂ oV)4'ưihu.Y`dYτO=ƪa3{v6 @ߺ^H7Vca4G2vݮ_#Br|4((3@ ,[333(:DBDQK2 ?M5f'[ %5TOՑT)?˞o6'g&Jlr3xeQLz3DF^-$"y@H -0&L]CjDy}HX`H7f6;"T',l4olVp 1?oӍݳJ:N+dÄ=ϳq[D(W&ʌ;.oV XT8v)>f)l/Se}af Y@:ڲU"S̈9IU8fOS1:]3Ҹ<5^}'m IZ6Q蘈`/U =#`)(FlKr&V .\vыȝHwHvmǖ?0T㗾z]# e"=8-C{nK21lLZPQ`t@7h6泙c+R %|Ϝ0ߥC N{{ e պ\uOvcJk֮N3I.+O?=5CǼC1`p$' e)83 gRد˞sT`h6e1 *Vqt'N $QB DT.J)QTQVj Fm^\y\EE^bh8DG[K=jDr7oQ5C CtrJi!Aa#E1ns$xƕ:1:Q~XGcHOgљ|TBڅRYmw<43@`&8#_I (KE4 rW55>a;P'sQTWgAjq8߭^Sn0gN!'A,ᒨ(DkԱQ)r U]9k(RԱ7HB;2ȧAhµޛN{Fؖ3: gP+Rʕ*Jq 7o kjggR^5={=ߞi~.m2 f8Wga+ZX')m;鐂.W:+~]W4B; 6hQ+_re/ !~+PXa^K>KVsyyda'ufbF[NRl| Q1#6R¹(Э,cZɌD#,*8+[ ,Ze|emj|AsVȘ i8~wځ-79Ch~dޅWO^h$h.u+-ӥ<\MDkvis\4{śL6{e!xtz?bzH:(SQ/т%? !N۴%2h/Y,bQJߒ\(lw?t76MO2.|Xpߗu.v-u97 =v2!TL68(g v"(f.s/`DŽ;@v;ߚLihcR$D'5M;U)q0N/hw.AblPy_(˟,-@ ~qś)gH,rmF8C696 ={RB`@+Nˌ==,M QiD\Q`=sFIaԾ%,/YZ7zi@D¶!/XqHS#@L8G̍ܜ0g"%Ec' Io rNkstEh:3!Iđ2f1wwƶCgWz3UշU|V K]O%oa勥2:TZrvDaq*U:΅)eVδl rU m#[Tj8 '}]?mu$X}_Q)9wY'@AJ;pVF)B#5Ŷ[[lǾmei>_vnZk {X(Tc`:7k{A`%;=> #uQ]h:؉"׳4܏LPq6ƨ/Ze~N4߯,|/s{s #̚.z-LNߵFz-81">@ AEsxO.})h;ۢ\gՔr#d{W(૗Aؒ0"t30ED+BkEg!`j@Cg9kC!D+Gyyଙr-3#Ru J%ضfmaް6 )$hf 6ܱ>Q} t#=(S-߀7Y~F]VAa;Q9y|u fsjb`|[_i$F3UHqf,ߟsZ6 44&{=e,V/bZ/Jr| =0È{;i??ޠs Ө:=xQA^q0N6mW9Z<@3o-#D o3BN_*Wv9qó[ h S^di93ضFmA4Ui02 困Z|R .Zl]fBPwN˒|`{9,!jںVdہ9S:ẘeڢp l"Bmu cզ`ASEBG]sx2QR&x6!f`RYc"3VA>p|ϐڎ1*=0\-흗ܤ\e3}Rlj!2)2ĖU:J[kTϔL#J)|s׍ܝX Ȇv>|P J쀨ty Ht[4xtqMh`pE/k,4kv̌fT$fZ0Lk͙6 Ek E K_Z }BزLӧPm*c G͑j.Dȣ X#$R Z.+@ {hb(r#眏?ܻ2%@9;,D|铳Dڄ澹r"Y`)m&fRP%Z$MIWn[Xu.`lz&P$PFsn!Gg7?tE9;;sKc`<󡞡(Rhg2T.? H0l&j7POfw_h +֎`!Oim`~"4*?^e T^)2`oXbXa%Z&:k"9Zu422ypDrȖBeݨCX't|]d+4AKh ZdTc~?[ηn$I!לy/,5lZH@3TBl+wc'a׌] WZfai?2 ؠȲpYa,E;‹q?jKh[n6& #'6Fܭj!tR6Ҧ8,L7$N2{aoRwj4[5+ 69333gcB:ptN0Cy *k5Lqdҳeskm#mE+֌la>w=h Ț"KV"eJM, (2d"n˩zڜek \P}^Z7 ~Ϯ >W躖*r@Ȭ0P3c ;0I{V {nPHV,rl$Sab#kҗq{$"_6Ft|a!~Ύ5wO=[W I)&S HZ[TE@WO m?d2)blIH98+uL9nu[(ŝp-RXy;rt-@ e󎂹ngU,b{\r~OMZgLUcT 5 ߻"Pf]? ȵU7 "jqa6ZR@"2|:{8v@P:y\BU6•kV>4~jPad[3K04c5 T- ntK=nZ# sSpA×=MoyGӸz쿍M&F~msX6X)رD (Fb!uw I硕 U"q #9&ȖWpG_+KOL87̃RF__Ώ\w~LcNyzz^d^\áHŒJ7chr -ySkm2tբX@WCsPB>/S"f7ރ*ܹ:@;.2&,]?sѬQ5r 2@iiѶ<ˆWop69rV.{f17A \t/ e˃<7--,P_ 'ds˂E=dshzNCkrQey|VňQ 񞁥q9i8s+= \%kex{Q3ٲݽvkM0i Ck`ݘRh kñ=>8udz=1~kۻDfe*ST<،hHS_S)Rm-UUڦ 9}q9]%Ago{s~_X9Kp"k>MOk@*`6S%Y)$-Xx랇["Mh7| YFz^e gO,+9f:A7ygy3yZAlٹ+#W >}h9)?-;w}p9ݒSDlem eH)9$9((#"dAc zٕ뇠9 WuT֖N F+;$Kh\kPL6c۰\+],PXݾ>[hu66l8shlX J*ͽ,Ѓ U=5( *t ؝giD.Ȝ3iJu*ف>,yw[wN|dFw#6|`t߁.Bs6i"svBMs. M@k``Jԡ$xADH7oc:n ־c\QS_FAhb[N,08܍ي'LYR)A-^ 00|p˟YsmaJ1$#O?u̸nXp\?V7oy1%{ 18=x >IH \ {@^i @.V#5,; - Y'vӗ6M'ou{ħf'馛#ks;ʶJ oK돾 eie-b7K}0mӌQxu[1XđHI$m"M$ $I If2&q^(5q7kfXww9@׮/ͣq}ޟc@Τ >qR7y{v?|\emer5l{XGYR s9W,?!(/|YV Nxa8ypN)iR\80̳:п|%.WO~1B7_NR`UЫLw\ɝ(.H  6>g[d0{YH)u˔!9/qΰY[^+w^-j ~ !1c`sAlM*t3+8w$ܡ$2fI}l]9iiN0y=OC-oذYީ ʕ\pKطjʩs5}v,8F~j5hwl`^ 7|/ gذ^D`S߭u3dJcoƧ:2aœ8L YVEK/Spߞh@%HiD,!Mx1{PjOC븞n9DȃwOilN@AHU+z3A6f ʋ7Cռ@42Hm}-/DBUh= gy(5OC)(5 Y>:{$WG o>s>.s,3 )6yL&`xw<"/W_ OqNCN\0wش峝c\J`F)hzQ!rM3*Y >u9+$qKO2:ДozKXq9>vZ"h(A,FEzi6aG@2NdAD<(lpAu}&@8F6m>z=s/XSBA)]p Ȕկ~8)%&2!}2 IDAT4kHPLA G9 %c3.^Glm1"ҾoȦ 3{O xM?yM\ FÚerFl>?˶`81Ĺ2܁a20ijUڀ3\8V 5 cկ3(`EÏNwoZѭ;5:U?7u+u㑷600HH~}ӫ17q [Nmݸ=KORap%m  SHY HuY s]wc#%W|dfˆo5w  J1\#2Y|viL%z5#;9hVĻ"4ވݎw~7Q,V3浞f177Sԃˉ|8}}}^?Tj@PjJCy3W-AY+,)1&fGnJۆVq׶yӳG$No "QW,J]Pp2?fVf5hݺ ׸`E N!b6tu+tw6BKh,|_Q&s ڹ4}j3I"/5TQ'⌕Y}Q;ޏ I͊đj*kg{AXIޝ|ᓧ ʕ$pJeͷ,ʔJ5`Z)Ǐ;I˫()b T D|5W,s@RgH{ YFa뮿 l}}Z(x2uWWM;R'þ*xE.zS7@&-לު7 OPr[Wk[49:TI]|םfi=HD/@i.C*mXEx.GP˪im_o>3z\| aWtsu<%zJV̦kĉbt6OPez%ZdvnJ -D evbqZ3J۲o?UdX-2Z;اKdV+ܚw3K)_s;a6΀n<e/˙h1e C =]k@cOԵƿ&sbl\v$ 2ipuuYDA^c+VOsK|;ӀE'\iكH8k(whx+W؛v0;3i=kgrp6fpIؐj蒘p{gv8ik0&"ZN3PLW{UXU}guͲWoTv WfC3^}n^d'J:˻=K [ftJj.qK}6/!猁c(:.@KϹ%MTE%>U9/C%F2{FtqDŽÊZcJ˥'.HY0 i(Z;v}5y7nfHΎbS*E# "FCr&z@Z#%cX"5)*GJAWFwyZ%}x;ԛR#m\uV^ܟ=k^dvo\W:pΩ359.2"'I6}!HX,k_L?|I뺂?Ckt?z5򦵴dN*EhԠo {+L##wꋳ*EK>z<ִl8oE_9x[ #}GY{KS!Z?yTـmC;TY }m=#o7zi K|lLcp?֩$fvRٱ&N3"yL|S06)o1Gjf`\BoH& M@Ŀ8YJtN;yFhM͆;*J|11q;ck&r(f 6je@wtM{SQv ȯQ=ٱ"X,ج#8OejiH! OܵqȪnTRy)QG~Zә+#>Vx-h(?[NWmQ9Tz.9c:c<29;!6L|$r[~T[CYvX9{eȾ2A8yl:})ݝxFh{d&*QM޵H ~L½O[mƬXV.5|sӲ"+ش怩)Lhk!ʧԁ8WڑiYӴr p 6|X|WZ%<'{|L?2$aDz*0zJDw-;]{'qb_lil:kozFez-2WQ$lS'+& 5R ;|*)IVUr~W&c-guu\i9M'eTS'~1OUoaZ( ̪OWҧM\$S8ҙ,m1\q^7{Z^uJVhxGj9m Nim^uo6J]|ג1i7YO"fû^N&xQJA7(OYx:oLl_3\yagk͋uHt+_ Ey!YyhBtJ {"1?Y[\@i /Zշ\k_5wV)0Fd͡%-YHe_MiRw`!R)}J>˛<}|+Y1]>wВj4b1:Ƣ r[)/*Ui8erۆB&ߜuWwi>KYէٯ?R8F쿉y{Ma&{ۚxcUV:i&teLbeB TTS@5M _rŜ/?6ۿmzE;Qef -p VҔqbdV6i ȅ[Fu}[G#<}ֹҖٔ d}Cv*{8 f9cM'=D v;"͐jPi ?T:iw}6u8fCJO;.jgKs8>M5lڸ %T|x(VԫPՏ??d*aLupƮY6k4QUZ}}doY&c~_pyKii`5>~Ʌl)oC_YJ:HM0TmyF[ǀwmxE3׶`!c[w\NP{;yY6gIN},-L2UmC (? lWe$@!]".ɶ|i*nX,Ešb-Ui.{R@ XS`ܥ* t{LǨ|]9pr`1ў,a\rPTUඡoAǝ#,¨*7=;%G[fI9e,B3"MEs #sz@H3}#G>J?)ɫlaP?Pݣь3ʫʱoYX߁hD-99ocib*hժ/I Jqȕ"ϸq+ cv )X֞aEWLdP'Q*=^;"R-7*Kҡe><ӑT;"ܟ "]`rk@ oo]kW࿐뉔cD < |KUo646G'`V/ sۚx~KlE^E]p,0y; I 4%nPbIqHOgшXh6^tf-5g$)m"ي|]?c\RR^\:ZldWɆP[r7t8H>f y/GVQ1dHhHsmj۞R 1 niK| O~K6kFGeUV66Y:m4-3}x_7H>{cPyo!wwmWDrيFs⪔X$ඡr}طo{b omK3Jy]͎T$dݚ]=3;SGr8uO : 0Y!0Q?uء[N*)+:N+VX+mcƶncxXJ&*Zm*q0C^ۚW$9є? /l8l>=~~"䐕yxѮohDf >M͡<$uR )E?ۚFUJ`.N I@^ L9s3vm8ݳ%{뒐6JzqE?5ms 4>(:=̪I Fi"TyM(.%  P1Ink~πg'i4+ ՈS^]w /mC^C$7Snuko:?T:KwB5I~|%!L|5u.#65 'r/:#Xj;PǙ kџ7v⽴ |ډٮ_6t 袡4lvzC=΍7dDuAxј>'NT])RE)CwMr8ѶGA~Kt)motԹ04/!NLH [/ơdM5 2N1␫I8W?|.J163 pR(ڿf{E߇HچO&VDt!"?xE~|>gWZ:Vq@fcB$;<(_&3%{~~iP[Ed 8PHX֙{&$PjO Vඡ]'Rc';Ĵ㶬jJ=q" b%sʕVR> xgS7'<ҡ:ٝF;6ϷK6~+ &iB j TcEfV>j~ b(emKk s+9}~0SIl&N~O#E ?֬y4`Z<'O֨gwJߠa3Hνk#6iHy9jW4kUM2ynR@=̺xmƫ]K;# y)0]RczZYtc]bB_S9TȹE`EC0@)PK#\d"J,O,;```@& zR-)|`!-JWմ% %HΞich1@]}d,OwQip Jx.Eʝ|ӅkS=XB I&8kDf̾恔q^VUקNJvIn8m'ƴL{eB?j  x'HX_VZcvd\H[.OiU3'/8b#Kc ‰;GiP`'k⎥9ȷw+}^V5m:FEŒ\D4bSpvU kT$WH]Z~x1D4rOqj@.OJK߳"Hs#!I_h 9Oc~7hkho^u"h`m*qP E~I9GXL6񾷸Tw} =8o#rϓ `߾s[/>EݑܓRض/_ǁttρ `RO}WHR9u5NG#"ϗRw:ֻQH$,& Ge|-a812ղZ;.K!g1Y%P߿nxo[KDve(:cyCW#(%㐈lmO#_>̃e1F޽ѣ%K~o/ԕ$ 0<ӻzTR[r]z~5@:" /XXOPje V'~ I\L"H RTY5kǹ¿Ns8? ת)~V=={VkG|(֎hcJ-d7087~sQ/֎U_W[K7.u \&{ٲktiur&7Z{: Y0^˝ùڜN̞ou wRkXڿQ#1e>V?ܸ$L'o RYF\vխ]q:TՊ>'Fiد NxAR\.ET.?Ü GYץ"+!M64jKdx/aSDI`GxXUs[cヱnFw.v΍~秝1U?xl6t~͆7v5W=&"MS6 ~ J*S=ÔspgIV֯h!R@̴Hl4x.īdó(2LNUspPQ\gYwWX;)Fܨ$:7QkG2Wo(%ׯ*"UÓ-|*m͑dR8u ATTH <+WK[ /̵aU;N"<,xjTJ%L>BKU?mz9:;}sX;̹cˬrn=|25<:z0P/*?XF:/G&@78IlȲz;7usM̒lez7VU]puYIΌO9n^ϲek΍޹QvDfMqOCsVymj } }-Kr&#u2S"mg7@VhoX;&FTv$‡].efRgx0 ױ)ɜ6^v#'N]l3yn9;:qFe9\g@j2'}TɊ|H ͹$ |g_jz?T<@'DeZ Gh-&:㹭F^0Uq<""f^NETo?soVA9R/_wުsm!1 h,l@XKփ 7aQEmCC} u:}y0^q9K72YBQBxH#L p }K|6ҿVr3sts&Wdt@MA~ wxGz[2t{tuKFu42-[EUqոI]fOAE#8KLLx"8@3`>-";s['tvY:F_<sdӲk"rW8`{xZŁ-GYO\S_th~")3p&Vt7R5hQQ+_ FXc1뼲 x8 wnQw97bHG3OC8WDOiNSʢٚFՒ|"א 70>V}"/BT2)m8ιotn߹c֎FU?g7ȹ&UML*eQ%Lo؄*L57X"BQ"$ 1*'ӐlqM ~8E&ʝWT;ۆR7oɭ\ehI*UOd:Pk?/p1v|2_AroP )m/IHdy"ܺ!ٷ߽HyeRPS17[^!-:RnEs-aMO[ D fڇ'i)<1mG-g 1RS8N_encQ: G",`]}l[9k;_nNʹL|1;"mͿ^HedlUL1rRYh1}+ŸOۊDJ"Fjy8:E*牗jB{^%Uo@1R1TVc$E|5xFij֊-KI٫r0sG͟#p熇_ENf/pU{cǎ59DD&sk7ZZ_tj`u(jS"gUMEbcYq"PE|}##Rhmذ<ДkQ !Nj^:ZU#pV<*E&Gi*٫Ϳ'qD=yhds4}/hRj ܉r`oo_RQdE58c%ƏbQnog߈i/kYd`q΁u1*D9\yj*SO"$?5z]٫>O*_"fS3/)Eъ#rPUE?nngx{v.ښ v{|^xe l0=(yr=&z=#aQtqj*}ꝯ|dU JҞmN9\уIB[]t&B9M>9xsI⩴bɞ-oXqn8ȴߖnFvP)~`'ZN,6+9T#!V&w @yҪ:Cvkl l:})ga#A}njƱtE&YP|ueǘ5eW?ۯ8 ͟O0AFÓaqܞ^zA7FO3T}"g#uXCK8.tH6KvrD?37nt)/͋b垺 {VgldS7b-eI&8?1 s-gx2^vEXQ8V'1D`1MSN T4N]kMK\*"*UWHl.Y)(Fˑ;_tA `:^dhOxZ{Vxٹݬiê̈/ CUjzިBΓ "9kWw\MxDQ1%z#e$ZM^V戋PSG4o<%}ͯZyG!!z7N+xbCGdwm7")UP3'qkk7 Wc @gWpˇEN'9չWX78q+ -Qk玟wO< OHN` 'rIʪFpm p%\pz7Q< ;X.f̌OS?~=.ۢVWc%h١4%H687a< |??\1 2Trw?xA1>{@,~=bh?’#~Q,WƣW{8앬Q.o| !M`$\' T'>dw6ة1 ~e\ڋpch\'%%~oSRbG巾 }I=`Tn;{ո7+a7Eo0^bx80?û96LIt$8' ]+7c8n'xFr ?=u/!v"d2RF1ЩMzOdJ"xP.05QV#5P3zis!(mZ,9<?2s{O)~G)ʑE}G{9 ޏm"X 8S~ Z/w|?W{R|,Ap3"I\62>s'1>qp$ I ơcGn_N)&XP pa#R'r>r'LH2\y/u3#*;2}1vqz<_D -gv1=6'o?CJ|t8`OÝsg#“GʼϮ!?v005tX±"#kΠmm>U(U8R5%f[ɬ~=yaЪF]xX۞A o@Ų bGwq?h h[e|(<#24uX*c)?3L5'I2a#mK;^յ[=qq7jf{b" /%5Ј8 DV7'PUibs IDAT^C4Qtii.dkIG }*7}12"W=80ig-ris".LͲ*H_ɥeϾٓtw?M%K5ɫf0aݝ  v_zR3fcH9KN_ib'jG&ٷÄ%;>g^Qpǃ.A Gn0 q(;x+6E!:8܈[Q?n)G9V tb[#nil:U&`|jQz:&ks^=ZH:PLLijGdWu̯:zp>ؙ qNh<Ox۸囹cN/DlieəounXu:v FxtJ ($xolz5&$^v:?<,X*fۮ> sLM.Mhk7' dЦj=E[cd̨sd&<3ѬxQ8W;0WO3Z 9Fa.|P~g7>Q5An8^<2tQqrtz87]kǷXnw?Sm#NSzQ"? ߱yd[~Nȴd@YG5tt$= U__-&OnfHH۸]6X~T% L<1ā& [x,Jy2FVuRL8F*ZRBf5xxlUL qC!ηEmaS4aԄwr 'k 7m4E)JǦ( wд?@)#1z¡;?ĞʙTdyrmѴ'c߷Řo=<uRq^ `- N"D_cyc jE9jHl$"Ja3=;.n>ݚkjgc"h޴\rX $`G &4TL&eaf QEc6 =\Oqf j٘N2xg `'Gbjc`@[?ލ[{8ˮlY{sNwݙ !!$2$" ̧BPUE?pHMA d$NW'鱺^{8[ `~woM}zֳ52kWj83_8>:BXp(w667;y+.xƕZ@*izdHd t;aHC}Lr ҅W\qp֊%_8s?ugk(ѣ1.MlMԻ w_bdKkE g ؎Mhʇm6qw0Qe)%@R67`pc=~#{f.|WF51Dy&obo`~6F6B*ALA_>fVC:k7Cٗ޻>R[J`n4<893_x. /j6aX:>}enC+4]V GI" l˴9%X̌<]' P#bhunρL8zg( ܃lZSu3GEeJ_*}]gdkZyoXX>ʣnwb֬wݲ脰Q|RxN3 !w}cO$H)&KIHXkv8ac>|v99;'0<К3pہ-Zw筒1p F/4O !EaS>92%;AQ"J"$($2[?e_Vڥ6?!2P:7Z;Q F[#aTagߊ yTe{#0s_?Lݸ@8aXBBAkmy!%C\/nby}n`#FtaKC@ 3,D,<L=vb3 ^'8y^܇hOd,!4!|飷K`hsC4,#X2(&~nGP?z.|&!cr1TE =w!B?)Cac7>OdJ |p'w틗P" qgwz$`,);9$1|ͳPߴytE" 26eo9 \;_*`5/R@ѿ4@}Hf-OD3 f*:?_B玠gb"PބЀ0 {9`EAIg$@I߽."QIxUBcA"Xl-XQ?IVjWaG`2 Hj`OB̧bp[EDJW K!y/*D` !PH Ii*@UJT=F)XJ5سe_z@Z$@< /'joWws\A%k+sd^g!hYG><ϫOrN=ya>RFgnHPFF0 HAF@x+8qK =tF}O"8A CZ=rs ;]=. ?s^{,?n_M%hQ.H XG">t/.zKSLBw˜ .pl#ppBgwYF縄)A:ic >Ҁ6m3[q cJ80L:P5::EyR.X)tHfY#{OB͟h[,\2b o]w@* Ibodc h5\=Ls38rȽ(|ŵXh*4N(OITO !~Zy3 ƿ#"@6TM\^^'^,X)"0Z#|/g_"| |Uht"?0TV+â9? 3zNG]]W=moS/'r I#Ftt@O;4 6CA~E|\utC<  `bGڠHiӪτu ,!I*r_Ze)^>M 5T`n~)$B T@"zO {WHai h# d@9dKv32䌦sT@k)1f U ґ2c𛶹7}d E5>\;t;f"| @7 MZ RCCQ!XA#8qSyՇ>O^Z 2;7s`|E=|?HJkw@NU(Dh,58?JP_i!HjwwYv eƔ>gsvOK~@;ף9f&tG,sAB^?UuC6ʇQZZ~1)L@5M'DHYh0a"E=ʨCB"{߃ )J{ ӽRkdi%Vm4ּyHjk\>s!Db,- y6^ GpK7ނa?c^kbhx4nYeVjk` |Q)RVGOt0b>E ]@%OƝ_fu)ea$A!B=¡(A-cY!*p;ѐ~ϖI&p#JF𫖱~>{$ q?X'IHEc@i;f Zۿ5Z 'V FG! (r3d %lJpϕոOv}.W)O+;"q"D@"$:}82y[<Fgn]gXN;3(qVk[Ǐ]֠cyO3ye 禡*JcaE "5 |9vFW 9îkpيŹY2]8 0szs\yar?~vgʄ*S 4o|!k. V+NfA7ڠX110WuC$Ƭ ^pD'kUɇQ>ibJgj"G%JZHEmB*w)B>+H)7ԙ+mGdTQU WA$*ux؇\qL* -=z l yk)ktמ 9Y2I8+$%W?f?RE֠AI0 HAbApj/>"k9! Ix S(`Z㥹#.4CP%-yۣVAʎ52ηEOꓒ (@JU5=] ˜H\3'_:XI g&H6x;;(j]zMZHݵR뜤:/1z٢|"p dⱽa C0jNܳ _ۼ yB֢'pHN3f$ 2TҦ]t(`*J"yVR DVW̎W2J`N>Y+YyRG>r?DRnkLar^?I 8 gXFrNK\(sX L08`I}C`($a\J#@>ҩqL8>{xhHaE/D3G8O-5f(H)JTF^ _ /Rd¹A  sq~k'HK!qppl)~ڣ0+<  m1f2 /cayQ c ZP(|m aQ a|Sti|eYѥlO;tBRCT;'Z!"hcgmKROH%2LZ rRLdя\1f# Z*˗׷1xٴg֍Zu uJe=7 б` d {[H _q)JR< yA 7Zհ"{m:sE)\XA߹nY(Rb'j_/.K$ɤW ˌR "Ƶ IDATL`C}h u;s -$-bYktA?J,r -5cQ`{ ?I@kq>B01jМ+Am"zJHZgfE#xDTbHd{ďmG`UvH*XI1͊e!/Wqwrx5;cnϳߕs.wj.-C>=XOUn@璡2_W9`SJ:>yM Gs^t/R0Za9; _VX9̖_Z;/xFcG4)){+Oɲ;f.VV&C^8͍z H}D`>-\ܡGlG[ ˒.#10Q<<,n>WG>zl˗@<Q4M Lbܭ&cind"50 (i1fr 忂})y?@U0%?o;ɵqYÙG87_Vu$*]H xspy:l ~0Z \~='-_|FѰ0f{=J3TuqEL\{2F97I(j6e F6H6mFMq>c3V.HXȘ:c%Z; `B/~wRm5w^'k!`ņ qhٰg:ubEGg  =ppL$!^14EWPX^#41G  Ri*L\<HF0X$A!T.}{^^: %}`"/L9|Z6KiW@eq%:Ӥ+RI_? e=ж^){2:S@bhN3C iEmؕsYE@6bwŞ!hN2d-vZ^k `0ja0d%,S( ;3lؾ.F91uଭcl;miзf̹{aᅬUB\ BΕ Ý5dEgbYWDWJ4qRn'i} ^ ]>k(흩"e]/dŠLƿc`0~-JqO5l=kr{G!A)/{v;4`눍?VHMr V@<1u Z }p$"j7@,۲MruR =oqvqa.R3 W>9\vf $H. Z mYiz?(S~{ =Y઎~;#G] <TfVt pڔvxi&/G;"p;Z3.{zWYdΰ62#k1Z-F Z tՇ MBF+mh(m*uCx]]CPyKKFXUC) vݠR]Sj {ߍnb|&'_ͷOQ) "GN `{@mMp* .?D8v' 9H=CHJP:7 NQʔSN"V~ Ch`H$|Bz^4y54Xh{9 9zp.@E@ck1疷fWX2nLadgns75b:JuwG@ N_.`A")ݷ'Ěʑ!BHK|`aㆍ]hOc EP 5ghf )"f9ᡱΣrXbsEm?hyh9Ď+^MU@ Óǐ^b]2-qh06X"cẗոqB ߶ 2%ɋHz`$D"/8nBY[,N@ 4`4`4 J_i}k"^{턽Aۇ H  ’Ac`q~vXj1}2Af24%VnN6r-ߺ+eڜ>7 7wF7e`k/\cn BUIr-.d8Q>+61:@.FF=(JgdPgkdɦ7u{ o_8?~۱jgoy`2@sœ5 Lڢz=Nxu_ ,0hSLN@H-Dn)Ca^."f^l P]r `M[_D^FIVmn G4CdcԷv0YG0HsQwDhj@&-kU/ t}?׵td6g,~!"Os~S<&n6=H€YU2n>e4%Ķ]O[iz5 La;9ߐb"xG$$8_ێmU=JY,*)<'R Tn6HҮ;8W _=XX02 mR(ҷ}3z53}=M[bPH]{zFUPK"C`Oe~T2A!5xR[%S!a-u0 6Y/Avh[(I6R8(`"Ͷ)%hfqȦQIZ%aNpL%CNpLxg.dEVk(:k&Mr,JIh6@ {r*F!Aq>vNF@BC2lIG뜅TG~zV +쑼}õiV%ݹHi|~[.B9#n_.0rbf8u#" j){T6p@\veд-WG.Wd|3M%ZsE&sBAqCDU @G7-m( mOZˇ v`LfW(wH-jY;&Qhr1=WmҦ$qbZ4pbk^nީ8+ʙ[f&;z>g%\2r{g-&4P(ַÚwKh|i6hۘnCAa1i|)_X dͺ$zLַ%t9 Ra9$ PF6a#)5C@ cV[Y Yfфf{e(0򓂙yUS,QD!T`}l&tw27҃E$JyF")8Z.(8r F=0 `9\=h i gL~$ (T~!'‹f;M =m90]`1#myrVHjAֹd0rz҉ X>耈"R"^Zijjo "ĽTC A0Fb|:x7=ߥ1wRФK\v T cm;|m8Z#8iX0\KP \D^cyM+M[7KeB$"] !S_\tF궼xļj/msHF$?W Ƒ/O'mVZ9țms;>wSsyNT9)衘[к^/EkC\W6n5 CkOj3A AM !Lj-4H8wk w`pA! ܞ+*ƚN3#u@ӟpPKXq0(mb1e/BՂv@'5E&ifw{:gPB`+ߛ-R2|X?ZBkmxUy>2`Q*)1Yɪ=uEZvC,1p7cw~>o~w_5Jr8 rw/ VN l~ӧsffnjś`,VvL a pHGB`xo&4k1Zw] #eȷt~|g2!.;@$1f>ra*E!ɀbpvh4e ڄ>b/ 08pɤ5;|taۏ]z[4Y֯F!/y}].u[Q(07 (ڄޡ*_tzZ1/4"׫HFpAqATfxƿt\]E)N+mFR ?r&X{z1/' 2yM{_U*I X_nfϽ K>3mf.ϳS^x>6lC+kZr߻FN|,%Qn^]}8xp_zizY=R!cRY Ç1?E;e;n[155Y AJ6!h;g H>u%GV2ż{r|g]~:31Y)M7}YׇA!ޅ$6==,S)Fї9ᢧmÁRԘM09>p{;龝>fq –ӭŝo9UWw׫3DduF\zx\El=Nc7\1 *gx_>|<,[@K-@lY>)Buv`k؏ F8Rwv,a`DM2I$y#x歛?tc=T*f-&\ vTc̍Rc`i*CBm19Gp+d֚6}׵֠:'}Wozp"o7 ߊV(JK4qs*Y޴?͘|h&m=RH!2.J@ !Pt-AJ812A M$ B6PK8]xɋ^l)(GSIJB :ԠCf{{L~kY_ 7=m8wiNTk&e7~ߍ7f̋rM\t4T _)hqo(MF2"ˈZ`qQaF1nٸkF|l :o- uP<#>Rͷ\O^ ߉m og*)pw;r6 c{W5B@SP,2]C_qA9r{$D$w IDAT:k'.]U^YLT&Ķ2X֡+$ D" /t@B:+~'_Y #!Wb`X7orc#r,ȕhKIAJ0C̒(2=nǎnƆbqd7_ d7. IgY5He ؉{n{p oJ[*˲>Wms_v%h#p=NB`^:s0lmXU*- =!1sǫ8wP>hDQg!ضM):1u}|Tj!ϖ&tso]{=H@)y<.h 0k|qHphfoAȲ(!|zscTL', |Ɋs@WyP HZ4Apy6 '5.; z68w#y.&q㛅1aLEؽ$D=>ozD,ꇍ0P4 O'6_"S9 sUU~`* Q"E5X\D> ګYI c||;Wuj8%h5o=y~+S6sN(ac0KmZޚ\5 I,if j0-YP)ΑX$,4 js5v⑭28L0_l9U_"!370jݸQ(V J $388E"y"Do<UmP* /9ϰlSce%55U8mcC=Q=_y.U`7nă!Owݼ E\T_pԌ pvwR>H@"2`L ]Y1㫻--;;Ne96`$ԉ:>vLrFk"%hp~HA0Bc1|fA[ k&JJz8PffC|/}?y}xjo3' t%­k za ̍=@z0F '2U;xF1k lY'ʢwR^ߎM)^v.܏L3H0U%#WIW>#~G0Ο"˶ֱxشB5%/PG֌jJ5ыB X3ĂY~5<11)Zrqӣ?B1ɜ0S;o:{e؜B*\JP5)#uFz` PYXĐ> r״ 1==uOof^;viKuZ'08pdNcfAamkV@CBZ '|A),gw jۣ^\߽x(L~ -GϬ? $UDѾR$iX〨AfWІyObpܕf4讷 dc n/qDD? F߉3?/+P:Z+Q#}(œ++]Њa|ο.qp^'8` }w^6$ k ^?k/^?{\uZdʰSueZ5| YؼC7xAϬGBݚxb8suB#_-c5\1\cj ed4~|m'o |&@O g'o>#^%5ᄞuF/R^۳^\bsg.0O12@]KsoOO''$u~#c=q(Cs譧6҅O' `n$R JuƵڪSXI`+ߒ1Zx_Vrrfس-eY-SН>xV\cFQtnU[8G]du^@6[* JL 9-5AV(󜫒V6)M?]L\7y73o2VN9?8'Ibh0fc̼eNyj]mT =}sz*`;q f`ċ2J   f_C~YjzZnI>?pKo]M#ނ<)aff;v ט_ҿ1sp|Vu vaM^Q-ɤ+th:@:hs3YJx~pwn!"-umZs&x5[c+Ha?H 嫜,I)Ol+߹J]dٲdc0plАCDLdiLНd?2$BgIFEw q`v 6+U%V*T3WRYQ-KȮէW^=rA +YIyM㶴21d:H E~&Y]%ijY Eʺ$Z^B{/芬1\BWᤦ2|lu+ʽVT~h`s'0^M+K˶B@W6UjMU+E\Y# j'©,, APIRo(U9#ܡx|߅%+ v SLO3x#5\uV.YQ/I}8`' #kbql cكD@Wd]`e$ `jAԐZ tXƍ>q޿ 0!;$j ϮUbaWU'{!<0Q)="?ԭ BҥϿgw{,1>tE6%#mxRax6 2ETaڱj_D.tEn9ˈcs2Z5IWE3,#|&2/;O;9jkʕm yUX4@ɇtCPd"Uw03߱ܕ>=n0C{GJSx L W 3+h_TZ,[R4+ڑl$Z6/-P39nOQeutZ(DMD(LD`(wrS/?@W3s7V|Ze*Wx= k+ǧ-]^ddo3E5#)T"rG0V\YcPL=$>Hg|b \wA=,į^I@4UɈ(d&czhQ1]0k8 v73Ƶ@,9MX FXKjȪ~LҌ$S'" ݲ ++"t8p xb w/K.KdaUcV5W!@ʠ FƤ$ɤgz>".AnOt ;^,p>߶d< RMVt^E2D^G;4Y ?VJ'4j+~:>2 \e;tV5݃YlKтr%>E5>BOgBA}kP36-%ehP LLu\[f'p#CI]W^fY9Na1췊LTVXE,/C*+D02a&[5 $@ㆠ+pO>]&0 )rST}AD Y6?@rc tE~ TLi@tQ*ɝ5d{EǼLȢe&% P$ EJ)fdii %$Rd QkUHA#ytsg0^Q2 E wo0ڤ{&cz6Ȟ)ڲ˚xߊT) &ņ,"x(>iolkVS"O*2tpH/^> }HT7B mODj-dhwLHs ɊW&{ȱHg`=@7675fiz<AyvӦF$+EdG0<Ÿ 5ϰ= Ra xl'.=C]/>UHZUvk+z$h6wUܭhBĉ'~Ɂ$dT'뽌Nih+LDDd,F0Ə"t8m5OL]m%"D$"31s$xMKG vdmI8rPs\|1?_Fl8H]>{LBę큮ȷ;+6r* ŴGBEL$FL4L(_RK+QX_hHRhW"]GuZ`2Gڈ0KkSZřTz2ޔL(3UDTT7]d![x땩> tE@I_n4<0F/CߎJb&;zMvIg40Ux4ߜ wmE9-ihksrɚc ;Wj=hQ/ٯi& ` FΧYhZ[,U./( >c^o>D"Y䡤&0smo9QToq~ 7u1+ f3苅B0jc_ꇱ&3Sڣ@IOTifQ9€zYDw0k+m4P +>1t 4ίTx$3Y0 E7Vm#h('|iy^+iH@`8,"2H}*; F7F:kp@Wpv9NW.J<х8&oAڭ NH=S-12EՑ])#'OUm,>GC[zut"䋘ξZ`nS3,PxpZ3>/2^yR@Fm_ M,T̾Jch+L-e-@VNY;#U)KZHO0}kjxvn|5ʋV!MDžȞp@Y0rgxpptNZ; tE` #KiW@@w1Ocpxnt?z@\XcCQ-BkF77S y3L: w8BX4`RM'Tڧ~"ZKSցBdy`=xcoCt^wڶUR8jPS[XO4@b"^U/ɡc@ mm,fNg<@04+s)U3ޔpê =H"P7,ZcK@/Du脃>Oֿ!y޶A(Ooő̞jȢS k̦ M'Nw-GḌnQD)s·7tPtvtVW}"ԀfQuw=ZqpP6 9 &!<%;D=éq;;O:^EM ӜEVj*Co9N D|6@ҙDcuS^HRypk"p­ާ3 'p\.rJh<%[a"K1NX)nZ#!'I)",bgx"/-n~Hnmt?;35JIchBCp| VNt P]T K-q%>e_ЭhWiXԞ8SdLlpH%ܠ=e$JA|>PN׼^TAw.Տ"=& 0P|[X zEG(dZꈧ3 IDAT;b OsmQfD&{&HR 7O,""n_3-n2ND&M5',"KU8db:rc%H秖0'ScTR:s>0s^ ~S#YǺb:aפ! UQ3Q|C''y_F4&wunO_ 4d1GVD==}P{t,LAv3ӼX ﰦ"1b4s0KPNzm(3,''CD!A I~@_l~"/d웿y>n{NuGi͸=Q$~8*bj^q,H^.;~3 @¹j.>4֭.V k l6rYF"HENNX&瀛>'ajtnONjB[ol$sb9-2ُݘ8D/g+T7H$pC}"qUIۋY6=s|]~s3(S٩ Y/OXqLgU#1 YgۣE|AC/+&n075F8y]Q;Y~cI5OP{H R@J׊ܓ`VܶHy lT+0NsZW ou֣_ɁBIqs@I/G=slϧp| L3pؖ<2B_z`Lx@D)meaD$sCIg}=-{m.>zc/h`OMDQq[!8Q=}0QE- k/Tf7]{QpWOes7<9Gg!mB<‡`U{k/`Om=3(2>r@quh_W}V$山gǀ-s 8p}V> ݨ8)pSݱU/h: n0CKS2@X,}4zi9)yc?=n sDS̉KD}W.c<`|1B"X *EЇ^ y=nߛ{s6?'` *oE?}^1}^=Go8/(\]Qzk#m[Ctѓ(|.w03D`8?f{K=?!0'9>cMMwf24=4y6N{ә0'V s5kGF bro1͡c}@ۙ?g"UXsg_2̉)q QW sFfbi}4txI{h(4{86/];&|N[X}S)t4TT :dt˱`mRk%lEb.<:04/420--IsI9Db;W3_pLsn'/9vs8kzZZ653'.a?9>3'1oI$~۩q]uJ$})cz]1QfO5"~ʪj""I_Zlfsux=uto9V{RJc?S\VF`n}hFJ8Bn WY7 =[oξ;#AcH4>}Ͱ]`AUDdAUEdXaZxIU ""&"&"$x`8p0"0'Dd k ߜ~<UuW$U'"_WE1 }Fbp{ƽS7Lz~"rVE?UR[px}MMP_-mr>k^HUN 7_Uս"XO|ÿ T)}~j] TuBDP 92uջȹy@ Ў?N:{RMѬ=#D$S"r9` )>U:utVދ ޏ{:}U}o%aS%7{Lzb0i|61&c9X'8f2fHyXUz֍3>Qsa~o^<^x뎾43~F ؔc }D *!``@IOz {UC"ѩ|"Wz p%`Uu+:E ޖSը c 6 })C?Wj7S9s8DbDDXyFΛ9r}@UY7,}ceߗ _h0PߪRk!IDTl z%&M0,^Q36w^? 2S8ƙ[ǻ_EuS̯,cZp1"(},G"sCʳLT0IfR#"at,ΑsDU_֍37<WH23>e`+\g] 0v4CCM_?%4c~x\lQ6G["2 p/p:qS7Lk΍ )z pJr8 s'ZU_;F@(#]UEAEȼϕS}e~v==ϩT7\=k#- ( 8xBǻ ҙCu"9Ugog6pzU1%*0Ok+Sj+{x%xC+ ޳E426==y {ܾ,t;rS=,iӔ}VFՆ~xq>Nl]p370%@bl"B-(b^H P} o^|֍31/IU/x8wP Q ~ʁk4+Cn\6XkRT b}RMS82 94u?! }3 Mt"ƽ҈?~h9F\\Wxe'B<]dh+ ZEE#Ab+"{ >g̥9w͏w ?do(`b#>s{:zjc_/V'yeKnc+zn(e(̩Xa8MTyDQMg褜\yo?E&ǯ_ʚޗ?8 .~y=k{襞~--=#+bܶϟ|$Y;rb3ַ4zi "2Mt i&trA/#9 <>k:nXޛ۽HWfN)9o.}*/]tܹ=\SX0r"& CRsFN11=0n@Yq^ny}cڎIy[܃3~y&)Jv H[@I wOxy/>c_A=BEDH2Xu'Jg~@u_6?nֹì6xΚӝ3`B`P(wG{$I3Qgŋ4^~&;]'Þ&Vդ2>{'h|s}}1O߼ˍo\G^뼾oA%iՆ J3Lyx\ӊ$PUsH0)#lYfݺ6W7KHO[j}_6etvi_qm9y`NԛȼNKEv(H{Y(;7\rn>adA8/V +iwXicgbSc`;0XAPŴGy잏]2)Ye eH $0Y3AmRĈ$i֗OH=ڽEZ%L|A{,#qcC|+ɌjTk[}w4sر6ᥗOL+1dEOECaX!q9i֥YFg ors;㮠iɻ?ez]\q) r}Qˁu#aEX- 2 *VDtmחtѱvvͶ{|WC:{[p|مM]dBwmż9 'ןǥ;*)`I?%kO[hos&/m[ 2kfTLX( ŘiGX;n_8CN]Fk,C~I2$hb1~:>z-تO8ͯ\:t}RRpž 9Gepy[Y`=;6B'ظ4nj~A MЈ`7ͺm<\mz%؟g9]KiG~1{`#.q`.'MGcuIS] pO2lʗ^jn'X "ܓg?O6Cr9 U=V'p~KH'Fd <<=}+)i"162>y$\ÒũĨ;)F$GO?"7)w~'=KꋾezF?be_kRQjX=!&p|?لz/A>x~+ssyfL\Qgjc p_Tϝ{,dG'~y۹̵t3]?\ȢHY6Sat0NG13>Gp',%U4d)㲧{}?4X<֎&\{gm]2OGދ%#wWWu n@\I">N﷐Rm}-@_ċ3 [F?N'ic*Hs¶V""&WF~h_N|t$?,>p\9_]X EԃK1qG8\wx[ M6!:Dj|fDöW 9i~V>/VǾ <]N[}s9³׮(sռfjQBt}wzܮu &@゚o~itH^ɞIPNF/b XIq >_C4: s9^: s }G9ISoiƨPW49Ҿy9}f ;ԗtF3ʧT^|k.Oh9Qyȶ UIq`?:Ú]ygN XgKAl-3ؿ M @3\Dx>6?I=U\Ctt{ <>_'|S>\c~-vռwr}NJ :Zžo8=yGAY l w?ɾŜh02aT}\E3I _N,i>/JɉEzj!7EO36$k&K};b߀K_[6Ώ7off!t+H&&cNFHzEކ5֐?| ὀjxW#lj?y-7&DJ{8K;qg\Eoq]8Nm}r޶ =%SO%K%p?3<ӬZ IRpcM+@ 6s7o: *SoEg.QGxU]v ^jC/~cރ9Ƙ {><$ wvÛ&~}*Sԯ&-߽uaYT8aM>x ~Iel㬆Ec{gz6{\cLj7fy\ kG}V*5x^8\&ؼ{B5R!57r+sB[~<?`ރH~]˖-EГ{8:*%A3MSLi׼W׿U4W!;.p%;G- &3@|ifn8~y~#Њ!x$c#k6Kcck@RĆЋ$h[J9cӂAAF؎Mds] ]i 8 #GmZOh ~*(E3HZ<}t m/HsԹ@kQd.:w py ֡=~0}F7tV Ib$n3exˆ;wmob0GTcL'Jj1 ycJRkr-\w1*FJĦ };'g'ᾭ (~[F#+JFuT8p<_>w>m ;74$>E$D043d]Ė{ ]N)1p4st@VV}<]ˉswӾYs 8[ICkfI5E1Zww}1HqTUP"Gz|6/r<< SL]@Ez'Aݸl5ÿǩS܇9ٜ>c Ibڝx֔_(zʯ@Vq*UNa* Exܗ>;g( "r''3?&=rt5C0; tz6W;4ѼLsC}fa;1 njkHV/  %$$I_Y^ϻ gE/b݅/,3%v/jC㖖ԋYlːc睠6^08ΜdÅF{xY9>+ՠޭ{\x>ylxu7~#zA(Wc Rk xKI r#<|</~\zIv | )?6@Hj( (铟Bň-+}sxQ/;WV!ݺ!4bluADVʽ`ߩ+*%#+˫BH sg<¯@L"Lԓ̳`೜ti/A, e A}{>z7#1ܹ#g ு%7_Ngrƶ[F/A(򵯳0ȗAbMGMm7g@$;ySV5Wɨ]OG3E\Q/ W|o1ヌEΆ¿x3E (KĦeh_xn88]ܳ9;!*]l]y1OKZ&mEU +YTLeoy O?$ۤZ)ET"yRm IDAT+JR;t>֦+j&<~[{EhuRnm{6i"{9]y 8Α*kAL9h!vi_2C[ZW]5|WTXՎϣ("[lhHd $&lBҖ|4v)\ cXqwL>!?L CDsOVBVגN玅o[Ts5RtBHe)['^8?4D M1>~0(viZ߭a9`KhH2-ƹ bR=HkRzE|9=zt DGq DpQsXm%\$ wn#6VeF.|CHrQ9_ɌhH: a@DڅZ|G/Ul!MHSK8'6oM w):r~F%Ii ; Jf/N6V4܇旘6'{Hג^08*C{q-Z;Ts\$E4^Em5NP$՘'W#Y7ҔKT^R*17Kh'aChd_U0 w(.k>#m-"–𝱵 HwM+A*D2C؄[*~sY^7EѣbDˌ~4JWa*46!m!Ů0Iv a0qta۔=BTT/bLL?#gxoiEY8ᙢll=@$Y>_cK)s N ?*PKSff6z˯+&ވUZǾ59>瑛Muw hVQ1#>B$]BD6J6pࡒ%r[>,D[,9Ooi$wPq41JT%($yl-f@30p酘Lɴ|./oWhZ w~ԡZk+iƌIT$P-4ޏMFi^?*Yq齖WþQUlblB$8Z:w?(MNăő__9I5lWxP,TJ![I[gu?UbQazȽ%S|_ LlCTa1Q;X4&)Yl[QoKcֶ929mޠ =b츈 JON Z_ĤؤKs&)cb{1QT}qm~$zxFJ'(AIL P=] ѣG1P-wl%RU\e  XEgd DOͣwߏBf^`SaMuh̰iQKHV]ǹ~=[j eYY[*H˖:[kxdQ/ + {Í-a}/cGFvVEeh5S!Im<+!I"j޿T^IY<ZZQV DuV3=-hCE^{IP\m|HO&0!ł$wRE,+jC!fMhH#0/t0eE1^c%_(T39tڗQ!9&fC]=!"%&^< K_,}CIU*)&f[z0vl8cs t/K) VяջnH)VRĤs?'4K*)N6ārE'XKnML~ŃCb6NWvt{̱l_M{:T?"kA(lT'Ei:Bd ssG_W3|ja#4Qܢ _B< #l?PM lܴΎm ėir2G'c&# zFlVl-_bHkơx>4=MGkWOJM4zqX1 䮏9YY*HL,cЖU^={m0P׸UFjU6Ս̲{ E3r:ED|9}1"nyv:M{OU0QHEJ1X (%$Ig*$I,|tuVD],𡾋'#t6Kغ65ǎMhq 47@^k;;Qm)zJޔۚ4AlvP$F3^Lև& )N\ X--\,kq@%fW!yjuxd:v1I ͜ʷ-<<7ԢW\*g]lO/1^EjnŲ\* Wp؉1,U(%$di+dY TW*Uc] D{-їݠ#WTlM<lVIѦ/~Atݸ'F Us,<{9{ Ubߧ렾 MkGs( >*ŢeH]"6Vl<˒ZAs[oYձvrbY&qZc;Ŝ_aC,ZU}'ZuRo_ݔ@y"ouXqP#Yd#Ϧ#+%D(a%G+$4n9 s edIFƈM͠ۆ䳢+~S](B8L\0!N$8k Fnl+K ("7vq{^+8s. YsR^DaݎU>ƥ{e lÅmw-`צMQ 玨*.X>@532<{7ԩ-؞C?J+5Ϩ-el?XA Q e͝hP\olLN !m*v3+PMX2;哟i,b"z-OK1~YK.gHL-:DTuϡ(-~ >"n;7_q.xN]y^Ar,=>.vn=| Ρb֓ $vk@c%SxY={0A&@'$yy괬!5{غk;cS`}Gjst@u!ƬБ1@|;תk. S~ o*N2Yp*ӀiGO+ݒ2TWy"hVkz˽֍6Wg׽l*A TZkKKZ]JM}S-Ԛ={Ng$ʤ#\=.<>V$AevؗoHbZ!CF#_ʪlx$e[*|IGH 6u,VD5(t#H_ߐugXӸb=E8 U/I#ۮ j'CƺYGX(Z3Z-6SdJ `1NR3]hGr֌DU-wif24qy*ԕRiXanݹDY?\6lx9Iz~m RM{R 0~AJeWܓ,w rs+kK.Q_WT[_ㆉH(*1vn6.oB=pl؊z\¼,@ } y>Y]kN [7} ~(}kV ^݆2f$[c㹇V/|2RKBY%na"i=Rd̳i _ٳ/94 p߱qUceQix^ W:ic[T>ƣjxJ ű?XΗ8DF_sI⨼Hjm>r $*.y&[ڥ}څw TG<琦hdY_ -pxIvZR1'4KjE mR6x?P*Á갠a}*:?w3M.k?=y\EZErS&epuυ*( x _4@ r+{ۖ{iURf~;~dӺj1|Qp&UX[lBܺ`Ms$|Q+eo*e8>G%2>,ƣOus4?}Uo|{O=m9-3IHt~ܺ}7$0 h{G.kQi'qyQ6OL0s`wg Yb?Ns><jsmC_k| %ա)  m[9}CP9׈UDk1fAӹa9;wƹljurOͫS i5qf<q͚Pԋj﷝yɯ ÏNK \i+5yUPJ"!ȼGPt:\t\(?ɖPܔ#je1M SӹhD@}hWN!gǫECÁTe!BmȚzUF}<.v*fhy$=_, ;P028*.: RA*A᭓M6 [@DbB@u׽WxV2s7~+JO=06]YFdb-a@x۪S;߁9Y'zuӂ;e˙[pVꀻaz);0W:zÉ{ͤd2fBx JɐXɬ?{o^Uks ]M5Yty38! IH_L(PP?( ZhIJZ2 8G]ɣd[Õts>,ݣ؂)ys5^]T `|d(S".-2+R{V7/f }TqU((  ;k8[nd;/Cc? <@I>-eO5<,hkh(z鹜$Cj@Jgha)OX+.TP=˚[ @p=vODV9_uEQV}N,ڒmï}6%4 X!Q|.=˩ IʟK'ੀ=@gƔELkƂ eLRa.*tI4-ҐR4\- ?m@MMMh~hUlf;Hk*S%򣜊CX9K9*P+7?@O9\u9Ck|S\,@[ 3B%BOLǡi艉(X)\sb_)UwEAT` GGiIt<>351aj+Wd>s֗mq2־|q@gP㠊}p9g5mm*/]8R/KBif[!Dea<,+xxplfD NDQSl?}n~TRHx7}#MEGTc]B(DXd__~@9$jS"&Mhb(DO<1M,ϤX7EԦ9m RR!D&Tpݕ|a4΅C?LBLG7ۧƠf(QO3,{ K}!`@y6ߤ3~l|ǁ3_g1QP0u|ͅk-oN R?(ԛ0-8=4AnC %~3K.PSA $x  r~A {>A>wGZ֍{ѵ{_j3hepKu7f>n RL|.5RÀE|BXoX>XA%3˖@r/_g徟J 0Xd(~f( VZLی*F_J3ʳ8f2wYk}bݍ $_Gx8h0<.+EYp3N p` 2eQVeְ6#ZPg L[''y{Z,뇋후O@tބ}ס|[۷c|5?SWJ Y)T:M'br0g :h+JJ,W)ƪ @^b1 Uו<<7Wx~@yR@q~{[ r]Hy/bd!Ze!`<XXC R_< A.)&j[2A6%3Mek7?_ɍ (oRŹl>緫-@H84p=J7$0syc&W&X(t.l({ɀ5$!{Q}A( J?=$pn(5[~e/Ja%Q62ٴA&ܼ:4xq4w8k kJh9OhJ!*] hѹ- e*@{-Ц%V6$OX T14|YX+"q|iBײ%7]{}UOAjj"2C˷.BCC#FFvC2TIe"*/UU xm]-`U^?k)TC]_0:GTZR#Y<%'ϯh]o ߘ?h|YD-Ī"i~p,_2s/ą@oe,^j&ջtR B-046,_A" $KWvr0xuh|4Bfn W}aAׯ[,:}.Ks#BK׼B|?2 `6/zHԚ໋26} 8|pFMWk7%Տu y}oxX-10)(邵' pꕸ(T2-9I,!*oXo~7/qot=&!+,Day!<,s>kEESV#XJd\nqqh=QtQ$ʫ钓Hrf |͝x,ZR?iRϤ˲ӱw~qӟ]Ir4@k:o7T7Q@ h\`d~ +lFı)Zo \Pxߕڔ|s1{[eQCK2{K]aG0xuhO_W6]ZԢ$5e1j|}[I]ʤA 4:ؓl63; Re$L<ŐRSbj'7o擮{Z|߲-ߒVUN6bv\5XXvefS.]-j1>sS0]yq:aya<7&JO[Ecƒ}Yd%ʴJVT`]Jd)U ]n1и-ɘ5~Y_@8S jQ9֡Hq)RӥvjVv6@yxP{|zLߦC_uXPm;VT"֔1]pUg>ќN2(t%`14Vo_ A`V}~pP̯S/YvbϞ8dƏڱ+ _ ЖԞԦU;Z#6 B}zpmwo_=7_~7 Mp(-!mώaM(:P*O\2Wf56.YncQi|pUX j\)UP .l5cl֯DZ@1ԣj JBQxryoN̳ ͨKR(%ZKsF;&6idNWjǏ2+;tHBPyUqnۅ% 3# sh g1 pDО60&\[klx,-R?JF> JuNfR !-/"^fRͧc¹  `UQ`:Es8LqzD9;aj Q,WcI,S3X dTڛhX:ܔؚN4Zo1lgyg/3о H+KxS(րYJh*e @5c Ƀ-cr2+ㅧV\ݲQHWu%TN" snփp5e, BA2 T|(D5 w8 uLA]Q =6PG`'o掯Ew@@__OZ!Hԍ&:ff7#Č7tV/F9 |Q`7+굦}~)o4;"BB è\`22nP}K0}J8@6ғ1CY l[Ea[p,:.y={ 7(N+ 0([JjАBk(ICL s@Ӊ@ל_| ހu>*К ~ '%nz2U5+bK9H[v ,yUD(DOs;3qP鋢;*HV+J&e X8x902R*WmT6_~OkiohFmDpN.i 6>勪d'43y:Y6E <4,_΂;`__OUdׁZ{$!a3`MW-E%` cY"gwkjs@:rZ1f&Amj$`I ,_ej𺵵|m-^wz=8:\#BMn'i/5-}Q^+"IHnI-w6JmQ'ɡ׮8"%|v IDAT0gYV$bmZkVLTpՏxS.y* 3AKiN?b! Y~?Ǹ`]~/rk)1},bwwF l\ !P3>Ó9RtYwo6$j$] ^ /ss Xޱ,Vh pZ/qxuۻ@g.L6 ˪Qߒ[_ӎ&šTHO1Lowd7;SaXM$cH6P_d׵;G\û~򚀊?Vk@_qșȲ{xb2hp,Z(kήCWc,npzw1bf(= su#Ǖ:t05EN6뎈Ta">[ Y=~U ~#KK%V"x͆FX\ MAܜt8N (-W6%_엒"f Xs85k;[R*+CpJޞNi_ߖ(njM=5N:.,m~Vqaa?Z91^~}*G}K9#l<3y'PQpz7sCkGq*jQa>o8?ImJteGl;jژMBsH@Q~ I9;ΏQ]sgCʞP. {&V|;`1[E?D, #aPԥh)ٛu@` ~#;tMŝ>tݼUa% jܪ} I [UŹ)aiZB'CX;.Y MwHSuTRFHnI}?RP eCmšQq8J?Qo]l ]9@ D4+贛ƻn@W)O1K$<C9ǥ~8kiUs$.$Z,mlg.[Jpц,mmd-<ŬZFGqck~z'…:; @,z?lC83uI޷RZ2F\1<|:MQ~=BrKA#w . ?ĔȎ ,%3ķeg;2lK 4[LnI-7K8Z xbNTï[RJmJX ƉѽСE 6ySR@2[8 " U %!is}mЛ{b'XuBk&%Ag (6/OO.㑥?_{ẁi`GaoJ麯N[MX XѺ࿞Ic0c[᪵ XkQTxAΥ ^w:;߼ VH7wuQh ~ HnI]_OURęl]2d)":bW,UH2{*vb5=Yb>Bl)R5_K>u[ځeX/pF$$( ؞j8$_{O0aa^V( |h@10;ݹϾ8ڜ__Vj@$lh!^?p_rK*~N*֙(Դ}a!Po:7扳b.x)lʆNzEF"@ƥsw1Olj!Ig8VT P䖔q@G 0 3}=]xKT,jX, /x Al}-:[86L_=.#wѻU蝘zu4}-ZeMä[X@mR븋HN2#ݽ}vFB%&__t=e)J[-4ZYi]TU-Ug% Z\ ff|woZ@g,qmB@CHYaVۿk3}3Iu6Kr:ֈzyZ <%9"_/*յ@e(|Z+zn$WIq^~fTa`?e~W_]frKg}9V ң::~ݭ0B1j_ԦRS7@w 8ܒ'PGC^x",xUbg)OtNDqHDgp-`b ĝE6SĮ9IP+0dP0NE3?I7laS C3Exv*F_Ol]fX׮VspE= 2AdK\dGoI7Ij$'~Íd}Vu$'r0uI 'd%m}_pC W+{Itmj <#l/?FdДE|(v\RZ_>H@&`"0Vi&YlE S_?ј65ȳ{:~c>ع?PSK!ףJ]Du2 *~̴´  EoLȷ+ȏOa*Ya@tp 61A[o ?>w?LaJVB Ŝ=b0Ho9sB9enkfM*;;ukCs 轳„ oBzZ\ pVx:* 娷tK_\*8h:x O$HF~Ƈ{NbJ8dȓzi)e]6'% FoGOuF>cr'ݽ[l4;_Xdۺ{njbѢ3!*Bѻo=3 Жn𑾞U:^fMwovary}FR+9lObaq{2_1ңs1B @Ezq4ۘ@ ~^fu n'pX78Na׾%t:Ij$-y'IaXE&Q<3)RdxR'%Pp +wUq fT%y ){V@ͻkO>Ph0}=܅*gzv9-|T)^3 zyE)]$&`݉s>;uzx~`l78r2$c()/L/zD5 &[RT1X(Aw>ycҸxjkX-)~Hq,.< (ѱb%J26D1dBٕqf3Ad==OkvյJtsH /9,'ۏstܹF.UTF ?8(.g@)bh%(,B}.Y^`nY"82̃ 8Gp%G]]{:08 ؕA{a fKoҼ(/̴ RH00?Yw|C f Th- +1}sxI^3ޏB,}q$F8ec5if"K9e7Ð'E[zNQRjPNmbbT_:9U 0u@5<ҡ+V-8x:re*4zg\ǍaƢ8` v2FG|{Gȳ30:W0d"HQȎip( r5Hd-֘ Uߩb+Àf; ‚VGL|;p@*g\Ưqa$Nz,la^)yܗa@+fg6 y({EcgȳXɺ7?&/66c&FD PUAKeTRsV/;0Tr.M_?*E9d_ťRɠ8U|(txmq1kcN2]D9sxӒ MX{Vxfgp1g> c'y1 :镌簙;=T g?9ϗ"B5{Ƒg-ּ!{,@ߩf*?|ΚځlsAOz GB;;Ӗe9ų7sXsBB!2k/I ,Հpevߓ{ꏳ tE|N=l z.\2[.xH!y~AP$>!"DN|:dW:f+Rt,zz^)3o wHve`X9O^y@~xA2}|aO d鐟9`聝#9af6+8JLH90?B8p9/L8QH04 H{R sݗύ~5.Gelg2`{9ϕ͏?O!kbϛu^HTG!Maj>听" iMB[(tf߂$p+R~<6orѕ jPU׈]wK ;3[oWj4o25&5~ߎYbV >3t v4ԏ14Tw+\w@ЇҾ <~?[~ Yf=:7 _ܗ^f(U4Į#Gsu&~T5bˣ{*Ψr$?/zo"!f3wVYeG``]`?_.Jg#FR(W>ȗ*y]3AEp(YXYCXԦHmJکMI'NjӧZ{Nf^-`+h7 ,REw !ߏi7eFU> DH)"WV׃u sJn њ,^0s5q_><ϙAvg=oO+G|}or00G~d(ي1ᦦ[L\ҵ/U:pZo:?b&$  'ڃr'6%-1fQ9NDՏ[_\yQXg-J1ߜ}? "j?6"\:wrOoz-y%M]ب\_ly7|q_L<7xAT&Iar0= Ex}=,&ONJ%G;;+P0LD;mCChj<S2{ڌ_lg\ks[fT^} Ӭ}@͟gHMmJF3s- ffjx߿ )D8}vo92_~νD;|9bN"cz"P?`Bj}jܽ;;-U6 65|䴆o`] "LnIMk/ā aZ-Ӕp&slPYbf^ND`kasTQUɡ O%;W7qV񕶟3Y|juTiiCw|%vRYֽؿC}%DKs>&?Vh?\[a -׻Fۨ cӫ \aՍaIL޳*__? xN6f~[RkL䓩dQ֤hcBr_W}p/ՍjD5קFT3s D?őLHʃGN/:ZI h.}08i=qk6GJz^a(5ZR#zſM 5;-Z$"vQ#K-8qԶv[~?$kx*=9̵3YG[M[ QǂXq !k+^fG5.yRcdo=u  S++QF?ύvŜYa(5o&~ÎE{yHnI m,B{ϫN_u'Z[:L~ɻÁM*g0D.QQiR-i;f{>F9#_7/ME .yI #QmmSuz雵N7i~yE'~N<^GDt>UpL7(y*i<͐Py X=xbO1Kף:怈0tȸ.޴As2"a)h $e!y>w- Dd:WtVL:0D4'Y0`(Q\K]WgGzcHJ(hNظum8\O 448*"A"1FMƓN;۹d#i`ZcBW$VN!G;/~m,q3<{5\u@U]Jw^uSU5Ӻ7mfu(f8j~R[Q"c!b s>䎽;^6Ym5yKB@" So4VC33hЪ h,pl ш#Ω?[ґ3.Q?DAV{Kyٲ,HU5_VWGu@*EcMB >xB *5!e!O0I d`mȤ;DXӖgȰ\CpDC# IDATZY --_~ZZ^xs NmQ@/?-SQWx3_bN6Ąu}`΍U·m>&@'a lĚlb@6in9"]JC 1)J\Inul`D皙͞NDnzP/(G ?SOke)Y0r<" obSh4-Ո*\O '4 g O3&G10x" B~&/G2f:sv~{>3,#Qe0+0 6vh!.=^&%dMq~p! `PGfD+Z7A$Lraյ@-5/:q@`遴HI͛?wg ×;DFq#U~ JPX,? udxhh].Cm Pvy6tx&\b4DԈv:e\ruJQY8z~Îz+ GA#~dZz.*P.X%ks7w߻ G(k|٧ (ȎBy.Ȥ]rRr2vydj.nm-#XK1!W-U>vYc\'ALضόpF2M ןxp!WnJ_j8o{~oL.S@cPpv :NO r`7 87 π8$ȣ{{ W_pG.SFwz$^@њ&bnТIq+kL GfHxH? /}j E&P?-\d`!c"XBKX`GI@86y֢ӀEk@:s,^>ƅ@kXិܽy\Gu/=UvϾhFHy ^؀ %$ 𲐐&/#; !HbcȒF23Ҍf龷[G2^~@>֭={ԅ+pw;s ι v"IF>{o? Z\15;֚!J,DgfI t9$2B 7ZnUQK` 2 SA=@AzOB^<`˿ghJT 2?j ́P[ٹM\D/J ʔ|k_ 'frŀk+d{.`c#A A`H&\}i ]4j?E"}[aAܧm vcP{3P38]7$ֱ1XcHRuϰP7 I]6wⲝІ hI Q*tMtoz76 c[w? 3{s3 sl!elQH2>6dZfPϭѯĶ vnBGx@VhB"׾? }F19Fک8g@t N=b$ A֛l*rqGa?NSVO֍GVÈ"iLx HX1WwLޚLkP7Ɨv=q?SKϓXM~I#bwkT%#?]e0k H&,/`h~ +;OV" fPw;ԞC "hXF`W DH`t*|e keEvv?R4 <ʙċ!}^CIt3xQuDK9`_D1#0w~_ߝsli h#JFZx|<^wQ׌Zne=i^52<^q3}a =K3-EeysY7<+ ^YkZk,ƚR=9{mP R&轇m~1Y7L-iܼg n>ܖxޥkVA$>J0DE\Hh::EFWzܿW_y|S5n6[W3<6cFP֊q6\ykp"K Y"`EK9q Nw=9"tyB,L{ D&cG0y Zyn[?,E8$Wpjp %Yk#z&pTIT,%ULyYRj fs)i W4i3I}@cC 9~0t$v )  D*Vxm{f "XB mvc`P 5^  .AS m=#?=PK`ܿ}O~&O_ҵhiE,~!^uKα1a_" Q?ܛJ?zU+mr:_fZXR"Ea(V2 ?^IZ9*eG@+SëV \+sh)$E?9#-}:n:N) .Brs*0v,*)t=r:@7;Vlg\feab%N'køh#u/qfW^h "?^vCʎczyXC7gqn?Z9p͘n^cR1"FXyR>Vǃcuhͨ/&Ri@$o>t'' #1Ƞ,K@h;*)D>5{mV5'fp=ihʍ#a820 Y0=qY-yH$!dR{l qhLm#ǐ:Ÿ m^\.( 8=%4g?u_ S" AJaQJm, pf7`礚609#i{:+ykSpB( Դ51aa6ǧzV[cx۰nj #"ĀXdZd] ?fS@mk3mw?Bm@FPL:1>s:eas# æ5X2!G @ LPȪ=8=r>:5 li CSbz|3?iAH d uҔ %сhK9df/x M&kypTmB ),zy]X_[T_^ ͎7>KFIQ}M}/Gu3уN:@GCjZD}DSkbՔ,^;Uk7M$h;q>:h䋧t,s}kеfO" T`YP9{6$v|xS?y?(9; mjJ8~` o|).ԗ2c$ڇѶ##Hujqv<^6lS?'̝l9b~]N>־uFC/ͻ<|6D8yd/nGP-Q* @If$012k>k|W_8Hjh_ǻ5`cڷs sGTp3:^l$z=='\N "e oR"D$RnR 0ȵ[b 3nLαj GV`i@\ Ʀ@^ d!P9pRqxo.S3@@PEW ^0 l(P%su/sԸ|ZXS 6&&G aoM@/0i۶b#{o/iXЏ=0廨,EY9 Iok ?Ҥg@@TGKP*U,.U#SIŁ7_뗢^. (U˰|NB')f{Py[HZ@[LaM.XbnN\"t_Bj us$!:@LM9V2V@HSNԱ)0r-=qC>fފťit<ΖCCX>4%O)/@/Fuy`C)>ML3c0رk@ ֍|Sό3]I95a[G03da ~U@2܃5t-D{[ASyXED$pfl#gQBl.8,HF"e~/x ^f Aݫ >UiZ%>3®,a3Ə ǧq-*MCep XEK>_^;p9!=3C cAb–=~pv51Pj݃1 R X} fʧ }~K* !t=y|o2l6NLX1qpCD6FcĥF AVǽ܄^dFe3OBǖ˱x^;N$j{_ppEg o;\_8KDd[blxF{d1xIKײ0z}}ly$7 V2PH} ܅㣻i{ZO35A@e{~v6:98v<2<}kT츩XȐ# |_– )"vh%g@IbrdAiTٮu?&N@*PEuhi̶z$`>dpNj#*>J7 |sa:q 0!%k7Ir(] 3R0>V_^0{zll_w{k R7q ܼpW`DB 4) 0Hz' w!9i(9v+['Pl7 +J),-,4cRyĘ\CO]YcU[ѷK^ҩ%S) e@0@<| #;T^fEDeB~ ,/6 YJ@|O!K"#x:: IH|eaY]@ |W< C@*N IDATHTi:6:.,-.A3 ua͋ zia)Dw~S@G HdڀH$Jܐs+O Y&2V-.%Fl /~VˠM92E8 dZ?FۖKl3DDA`'Q( ½tlQƖpg|SJ# ! Ⱥk߁djsӓ-Rҁ׼TޮgYOBJw5^Q0bo>a hX0@ehhT 2,-+#~<(%,ƤU=N@1|ƏBZ/0]d#b?DIl:A6#e3$ii"gٚl/OgpZْCX"pRBNH;4!z9c fg% ;sB9==ؾch0 >g*N1ܺ6M)كV/<3SH`Sf53jš׾OiPρ<r#X U*pWTA~i ԭ6/# OL_r"H I$F'gA+_Bi~s@f@$K?IտXB<.3Ƣ14s˅Rp]&e0V?80{:;oJ 9ĎI 1|%7. t:Tn_{7ڇ/$՘5ƾC,~cP}70{ =[h؝w8ڦ".*JURIUzHvhH u]$WsH* QxjrjH5_ %eDs.p 0\A cX 48uͬĬ]^:{.X8= Ui-ѭ6{-%4hjWu^2:rJlj-K$&mv}[t~;)ii-=ȩi҂p6"runV|z;Y߁o|%VhܻPID@0mT;݉zL&L, !UI#ݬ-/}><V2F鈁 ]zn2YІqmyx !*E(@H iwL0Iab#Ao$>%%aa p;]Mח0{@^73Awku}ʋ]+@q}v|c'oVD`0 2%I΂Mskeg20>˳phb9jE h=Z}@Qkߒ w6$ V"Ÿr@c $C7>A$n\pw^ לCl8dC"vaT;;֣cu&~d?qr w1v9}jkO ec ǧrG0VcvTMݏ`a~9.1}3̠$E["H,j]"=b899S(Daߤ8Kg+Z'[NV qzH10^^= bѠ0SO\e!x**T@ )xl5LTHG$":Bn e%z=`s$ 9RI(kR G%ql BVtQ%]/]c|p,Yw@ŠRxjKt(dqH5Zصac":![`h:qZq= qE S'Ƭ\qX˂8Rm_J382KU -v|F̩Ҧ?qS`0r\"hąD۠MP rTz&% Wje>JyaP9A ! 3iPclCSʗl ~za.$_0H=9ys[>51;7/Xp+nLVh!wC$`٨L^Trc+)RuV<*.# ǎ,R"UصUi1PGҙ:ZXK|u-ȲK$D") UBB$mx0! H"j*] c_r'9gУȑ% iƈ 6jYDS0XZafr <_"G" 4ͼ;RŢ0V " sT p7Ul8j 0yPM,D{1ӓ6Z [ΦD<;' 6KeTDQT X^XO@B JsvK[-3Qrj~YU/'ݻ)]boAM8_5AL޵Ue]ǀϲ`՝!p\f m IGj&a#xPAܒqM:#òÍ eҊJIRVH# #G:q*5I=/q@RE03 `zw n'Sk#ZnG QQAIu, Ž; @hM Ω|N:*v|TT5J6NMg1D=PDB* c%QMkcVwz\`h?DUړ34:1x3Oh?vI7j@kȨakbsxZ;?y솉MaS22+3FWW^0K`Ro5Q `2N \$E_PL:m.*0=+!b9vZ"MBE0z4[H5j!*΢)C E0Ġ7ZmZt=EZrr 6M5㇊`C4[A $)@#-on:":O72HeQpƨ(8^i N a<8a߅9 Q8SDjMWׯC@823ztR@4]h8̊_OuSZ2bW_~!Ht,N}U?hm R|MQw0xmwLIpT[KMΙ:/)>%nqm(k憀XˀX? [. vJt  xuu]r gFe.@JI< Bw)PN&@[*Pk%}Sx0 HDUPp)W+i)ʎ7W(TmyF799N0緊ʪ@6fZqNOJ- G8JHQ6L c`_ǭR&8Rڵq Q(7b(k(i`wW{%V;&b1u^pqtTx߿Ccbjɺ% >o_hW_qt%,@EGA,닼I`YkXw7b!+π0ntA @opC)bflؾ Yxn6 ieWC?}U*dÝƆk=k~6sȴVMW0okkCWgܦ+H?Mc_Vs]ɬV;=&O Tiy{˙hL؂}8Y4ŧu-hOg0sBdVE$[|Q,/hwRoYeZ; hN nLĚHup3Rg֨Gk>uTNKl|kˡg+s+\R@)n48z_XHl {E"04iG4p U}\AXfւ*JHE-o>w!KI)1-AR <\Qi)**ElFaȅjeQ; Z0 '9+{u| ?/sChT:yXc03~;Zr6Ѿf=}8`im#tsAum>ʖ5%oƖ+m߈8`_}c\*mY6(\ lDߐ`^57~DBt6\-zkQTP&w"M)R0m\qƹV^ k&Co@T>>1PѨi4v8W$̈ $4vq=,)@zzȸVXi9ۊEi"Š)EwؘFM˾Tހw"BJecx6?!4Ђ^ɠ(c)1:pJJ|xlݱ[)_{,t 6 Ьe6Ѭ ژ H1m!b+ ;7[wl;۸>s ں(Y6+AaBz\b v=0D--`aTXOamsܮ{ah;ϱ8eBԯAڙ2+?CZ@G>bd:`P|9k> n`fw <[٬^`*9*(N494RPar9bܾzLXlDJ9Mho-XEuDr0khq&ssqqd z,N붬CWoɊw G#%juz5 @ۙ1=n)l [;P7o^x84ЊW+yqSt@$݃==Uȑ8CЖE7vb$B@w3z.k>H(UZI  W%#j9gi ؆5n/yQܯܮ}Qӆ֫qj../j4k{|:~pZѝ`f|)2 X4 *g Gv]?f~]UN ilCa0 1]f7#X g\DwQ0|^qp)=Z<~]=;!>;^qO.JbE-ۇ=X]}}F.sXlהAF=ڡHi[)vѽ)}#׌΀ʭq9uԝ⾆k_wQjսsa|]ՉK6!mJ)_m IDATlx @r\V({s2!yHt"]ǁ^ab@.43V'qđ}'bcݤ؝3cZl܌ˇAӢb6`ALhW_ -\"5j7;.n۹< l>|!Ө NT1a51U Н3Yʗ!27(3 4th:(dzؿuǶ_$V,MgRщas퍡 roFڸ)E/x̾k~E2Ç"8qMт3ESzCdd+2Elv\φQv[՟FPJݙm>w+ GDe"%0hc>!&- p_1&D3P57̯nz|h l`(vB"ā֦`> h-U!i,_<$_QqO̟Ӓ6Y ?u {RʘȔA)dRR\i;w-sd%/#wk[QfzdtlsߜRQ%1wQ.]d /1 ^ULV9R\6.w"MS`Ȥ&AuA#φ6߀oȮ'\8G }n˶xsxO14y*|GE-GUq4p `  }=~s``@@}r]!JhVIT!̿ 1<{[pP#6Gl2XqA}Lls9Ql5,A-ۇ" <Z!^$TG/i/x:ΏGrtu~gP"t!]b/| ""C̼sd0~~[W7%, `,U΃c>;?/nT"XcmYڔymDjF'jF H^2}߶N7݀G߄M7bdo~TqĦXf9`/5:/<~<.(ж=ʔR /zEH>\ pFTArw^oȮO6",%/lOk1u]n Xgt@r\9/IoWYS{U)z%d! GFv]EszӊT}xaLv7PA5)O~F@zy8 ܋ުpc8'9q1hãe]>aRT`Ls6NLЦ9a "A=6En_.*U*VG3'}bm_:4z[G!r/i܃18_!S/j CS~S%>ʚ~\ۢd̟E""VN5[kqA!87n-Jb_()/|e0 ~FceуW5ХJYQ8">i?VvF8vRXtS,b ¹HQotΓsu=Iy"2 oCӮt&66߈Gۮ=5^f<؟4WMc OsnGl Hƥ}`mBC`]QIJbbBy`&?8K=ݕ;wu7'{o LjkV$7Ey"8F?z~[vlW2.^khFEj<劧/}5iD"Ji{ehC:H4P>;ZfM @Vdk SSwϘ?E[Zzz<܋q>[(· ZסT Zї(<g'~uc.I eE%hhw6R@3Dec]Oí@Y|x|糘[R'`̌?dYp}A f` $ 18u% 0= 'vˍф)N/uHRWD-͘gv^[&y#G[&bvPA!F{WjEnA-  9F˗x00H¥?q1 jV'n`U/=Esu㍋fˎa=;_G&+?bG Y Oyq}Zyky{Sܠ/t]EY'| 2fV23_z3_|Q@=ck:A"L.whHw dݒ@M}oXi68'ݹ.`(n#BP@_Fd*R9g3a 9o:cfjg+)| ca\)|jeWOh|!%,)93 l&\5> =y ǏRVhiLZ a Rz'ٕ m>+pSQyK^:V8J)\|̐IkRÈli:8ضu@^/u+k O ";/xamYFuwlިޖN5}B |E t6Ǟ6K׼1Z19 {02{oU^5 j@A%aTQE>יQ:22MaM,$I]u{y{yRy_! f>/ɩcq"\ԑ'?qVj^ii)\E!ȵGW}s8_O JLY='9?5p3 ?? ^۶u,D;[=Z>h_z޶.ֽxBDzN34/\/wY|YPC#dB9IF+.x+J*kؾ0[ בp\/q36>yi2j64J޹;wE_-Rc`+y6$t4(.wq! . x!h%+t՞ŐWo޶J#PjJp<%ẞRع+U4O'˛dUAdɰu]=)u@tq`'MLunl:@ahxHXd;uA˪#xy}Jʯn Eph0BLjTNG~4wwںϫ"EWswH}׾p(.PRA˘|7@+ΐ#e󼪻R->K|bR_֝}t[/ˠKdƎyv(?Q^(Az(W+ΏcȘ#HYQd -סi->܍ m`ێdČ1P=͸?Xqʩx.A{k[Zf8jc~364;qsa6yEs\ןzFuNe,ض ˲`&Lӄ6144~T:T?w̟:f?o{ OGS׵S3cdpQؙ18(>r^PuA&Gɂиe[zǽu~2(6SH2SHx CG`! l,P f]V,F#cU?G*0:eƣSn7k9ѽcP/%'q 0nQt{`wozε%a\V2TTy7y h<\+0Txe W"&ɜ[B>ϥW ຽa7'RgCqdQxUb%Qt2ڎn>j?2,3Z-/]-͊Nnh҅ײ] W,ȕ B\1]h-A k09?X/ϟq̣7P6ZyI~9A%~os~t/㴖R\sV#ZkU>Ҩ*3RɰL<4m /CE`X ۲`YӞ2p]ˑr\ybn/O 42i:dJ1p2i#>܂AB*iHLF*BƲr];'˔,b˾_xEkB|(p)ĂR[/}5 FW k:. L Ҳ BTB4̜,uED:3 tHH[@4jW9 <w2)]GpPXZaP%\X0Hiey(ǥސ[8ZU/TD Zd@*%uz0ay} 2#" U NQV pc8KJ3uX%ȝEmMl{F?9%aD[>ۛ4=̘;6x㉁Xڏ E59c0?j4obu]=FKH{F(tђN ^i[yPIđmo`qh/Ceɫ+_'6υXKB]f@=*{W{QXky^z>MY~ jeը,%82a, 'x{İ@$c8ia;={g b߾bd0%1 pÊ32 HW‘5 Gz]N frBs9b#eFDH5El! /,-->BNe!\dȂPxE\2Z !OBҶĬ&ug5yAn͝! nky%Y7_p2sϮK@f sh/j8 'F tD @Q%gIe˜.gOtxAሯ;`Cy&J'僽3*qщeha;~";P3qq> Zhcr$=-< e7㝉Z)kmoqAj;eiಎݹ1&~ADk*0[\c2,CKh rZ.= jK,5 #PߗR' f',j KB0$HHUFvw1W_> Ÿty-*b,,TQ9=iBұ{edJ&=^F/h*me9! /qT޽ɠ~rk DH \ښЇ]%k0Mbdo_:C!9ղex٭)ΝbinرZؘ8N!1ŋK9ӟ! ǰl~HpX _=?!$(y'J1\}J* Ąf ?ʘ;W5cŢZF̂A% aR("ix3.T˙g :a(֞V% իڱx~]k1 Q],zNѐg6 ;❉ E9FƋ{\F0.w& Bf^ЋbO (Vט_cݚ&,_!V&p(Xz@Y}9Je@ pъlLM>0azr3Zߖ|'[7Γxq]x|.?ڧ?g-& 2ptR9솩.d,9QBG%4xrANY yҨ) +5h)E`bI17Cn3aַOf N"blf 1d+eO*FD8 ]ӄ|e1T2D!U+tGfgqo|S=&u MP ah[掮❉bnăg$n@:zxgb 3՞+-YYG84\tRqVb:Tn?fF3t3㝉 n  IDAT6ϷX8Ek.;z2ćyUp2pr}\ۂV d`CeD(jF $qf^UăR=o|<һA^Rǟ;rn}f=_2^܊4ђ>&QqLaE lRy%R0;plQ0̌l3Jt…'ଥu%qA,\ #Tw8up({Mgb6[㝉+ EmVj@eTК%%|RV^KqZ\Μz]6*¼$*,-Ctӗ7T+43_ILRuRC&pnG PK=ר;"J鹾Oh-%e 0\f,?A{랣}9TR5f"4 ga  *;_cK]6h({+X?dضh3ʻai>tǿH0;CNz]=?e7>Ҕ_m65T~5`&Ҽ,`86է,4 Qnۙym3 6>7|pB]=b4IlK 4ћN,7Ragd,K٘7baD>w&wt 86^]Ѣ P=㝉~hUg2}ZzvDXޣiz!0㝉?+3~hY'\lwoޓX\{ E' aq)hޭcqK!G#7!jh]f)?4b+^w]B<B&NTo<.$@LEuBT#bш!P5P^Ñ^dA*ǒTR\oX {à^-!aɇ'=TKj PR:=݂ƫ-njP^̚Pˀ TCDtM3端>s9% zY 񩄎սD?P (U/,(ݖBTph6iV0m$}oi+CΩ4,$9fέHճ3>e"\KR(#Ɋ:+N2iԹHKw&rbߊPg jͫkbLAV Jp4I3?~Λ93<1 ߵ݉? l|@.!i`g@`hm;z&Q%k|e8Cz*IW3q'HR})<| 1VD +kmc"ܶV}E[{w-C"zJ\rB9>|pԥԺw//b$[ ˝9Y򊐘L{]7/k]P+3i7v  D\j fŻzliy{?SCLjAH"N +\=b6Xݽ*U}$c~^ 1J]^s|-l.sVq""ޙSa-6{{-pKO0{|{]1GtIJ֟]-^RF:t:i72$w%}Ř/܌tqb:s xgBxڿs7cϳ& %IT1fxWb#W|TT\yNM^~)!3|E=I"f3-к}qWEkZ@DgM;#݃sgoJ1M-J\0+fb;# d8楕 W< ?l,}/Y0ܐgʽ-G w8WX V IJutI󃂿m[8k+bd}3eگsչD!Jp&" {zg;aqwt*ukVED!<5fKe(lOeM A05I#|GW.h,pEqqp"zmߎ׵F2@r}̷!8WA닋s(Z@t&$N-oϷ',olZ~NѶ5psx6E7Z1wHu¨<|!.СGtΏ `x*|ir1= 0|Y)7\L&Sa借i_EFn/{.{@Rmm[R& \GWSR BTJ&e0gAfg؋Eu0<;# `GD'r`cJ!ww~x""Y,~_"\w1bZH `ؑ'gw5dMX`U+fWj,]%pqCax|L߅[xX*W& !!Lf/q>gZ{OFBȻ)[Gm\P7d@qߘaҙϸ}Z̑00~uDDѕGC-,b <ŌsC(Mvl>3/8gx)? )jP\H*5<8GgpƫmmKg1G`ɩ?@X0RCMtaG>|Ӈ&+EgYOOJ1WDo9r278/f[YL驹:̼[5(Nlj>l; ޘ9, @ g⑹}@х?-T,?k3NTxbzfWzSF%i}h,Jbc02npiUWtR=G,M) Cw5:w$#3b #pksHs[a…`zaqnyc|W̪vZ-f9TBiB)ρE8J٢p߁[nʧ; [FPO͝`3u733#Ca<;qj9vIf3BuS,_(c0^9!cQe}N ^r32Vz>IPÕ {Gbz^*0s9%Vp sEpga ̥@;8o?tBuG<`TN!;Ocޕͷ0D`nfkaIQydٜ}y ۰D08; e0{߾5gK aǫsx[P"0*ri32sz.'/3O$_"usVKo{ 4b@p0&@zxZf$, սsA}9,Ifk9٬ )ɆcGV8p\NP_ ;twjY5O«&z|Sl@v6i@0f(,6<6gXl 1  qC-fpɁ^9a(̐@h9 ؿ߆Pc_wsLt%~x4s$o&o#|D0THtž+b7#FG#C?b\>83%녱Ws IO: TH{Ar>.Sjٹ']j|ce} 7$ö}s;ËgE*C/N3ӳ?-B 6 Qy>w K){'<1G2?VpH!{@E/`+DbjO`UּywW mk LV\??znB3okSV }] n@}3Ƿ͠l:{g{]'9B_e37;q b3i3Ha޲---|0DY'@DܳPxKH.hcvna7yrSg (Ak$?+ۘ@y=@Fԡxg"=ӯï\xJZs@>Qf*57PӴ'hEjb m%RH;Z$831EÞ0u ( @j+/Mb{4$@l}s{ay4cFfVKbY̱X,P| o^ؿPv"dfID*xdP]=#3}w,fǔJ_LdEAT)Rj =yY??ȗAyH2sa{:zy%ihJ  G y'f^_qo#x,~[vI%%TRDsN0~ x<2;$'>zd̼^gLWjkv >eqm7~xiض 4aYVa&lXz]j\mt~a^A4/N)6S&YT*48NۦvTQrTJb1P*aN]jY:VQCCrfi)JR$RIxtn wq>poYև,b6m{ m6m, Vn6S郳l^>W}͔4)3˲> Rem|*92Ka^zRÆR>!{@18Eh Rc_SjI C$QO)}|k\dkD(y#"܂ x,23+"ф=ޅ/^B(5RS7b<_`ZX' _KwvFfn_7!%m11$hs20(`fA1x+ &ki:$Z<ȎDF& u\!p!%i-x$MfVKK*+Rɏ+5 PTdRWJyx{`qҫ=e:y8[Rc8)#׊ !&ͣy"ʾ @ C0$`B4C  x~`7>ps[玊k:iRjId2Τ-7~4۶KlYYD2\mD ؗ:sZfʔz6NLy,|>Mca"+TL᳎ayw(5x# <J :v öFWLl0MӖ˴4Mi"3e:)Ӿ'v竺Q#98X@Y^o#Zg<6_[՘JdYCeBhiy&XD$KyB&]$"iX;o_~V,WKN@¤}gfGWIď\/ߨRcz_ָz5=(R}O򆃼l^bR1UBr~K E1P쳁 0V&=p^FxZw&nMvITU}C(5\`O)YR:"jP NdBҁ4O){7S %gP[=CJLYxJQyQ9']!~>f?Z2D)oo%Vxybs5@䦘4\Hp5^IP)Ճ'C (N@mu $4׺H0 .҅20$ F ]eIz.8̼<{]{5ѽߑQk  &oX Mx iyʿe @P(l!&hʁqS$?d;zsS17xq{gql&R Ӳ6=+1e}|RG^||<ē8b̔7T*E>ȵ? 2 \SM8 }݋G5DT1(UZyhrÆQr+J 'Rٹ!%4޲ReQ)R6cbZ :> -Ǔ<IcDt0ޙv2>l<r)YT*unn5;Q2h ok(3#rR kܾ*-\Fb\5A!p1ÈC3KDyjx ՟8G[jQjRʡ Sj6<^׾8^]&f]##`r{J ?nbQl?Am'U3P3(OPHh 0Jƒ5b!)҈:ٴvf~L(+[[`C̫~'N2~e\Uнg<:`hc 췱PJz`,J8~ANYT(EBVjRZPuХK,D,0^bwtl7{]B"Ӥ3Xe8Y*&|YG0^ݟ -tQeKJD=pX 'LiɌQ&W!j"f}0ֹ瑩p0zoL;$Ϣ715^ spZ7T\Cs(@zvo"F# yD t˯E.3mM6=Mr*(H cKx|% ZUX@)} f%{㝉Z O<V\K}J[0MSMl,lE[/kW.ثro IDATIDdrf^1ѵrC9]6A~"eK֤H2Zn>k y35 v`H094\5xL``ҥ T*4SfR( wk$"ZR#b@3gb61,"`S d4LYh  !H*~5*]Z($|P L8<**WpRÆCR>MLFob} #IYj )jb0k>.GQW–CrH >g/#& gyX jtd1S E?3:qws&.a^+<>~ӎV*pZc9+"cag1Ga1 g,,AJ W (& + @H(; н~fOfT(3$3\f |GN@o iO3"e8X#i)>'^(JoB~TLN3]mK?dˬ_q*N#;t0f)\K!hѱ U%p=Mrb|-4vMo# ѡb2ɲho8g~,z||#rk "eI#Xb_GOjp m9 63,(sdY`e5}!|mC n2&Oc$q\fPlSDk?iyw`҆HJ/li]Y^hrЗ#> zfydesZWJ-9qN Y6 - `K[#Q |aA'Pb"9ʑ#;HІR{ڀlh!> `9Ɍ2\($zu !lؚw9ҥԥ55}jV!cݤ@o#UH_^)@ck;#"̑DѫZ'HcԋC/XvŞ|S).> aL &X̺}Š+ MpWȝ;IΚ-Hْ`%Gp589'(C̀4*v* @{} CWl=BQv~M?w&;{ 5\b{^W\di ."躮qlX zl{Ǝ-uΞg/ŰW)ʍ[/?t@Y!,k"dA4!bY,*]ީuggp7߫c?[JfernDE4)F\i[co:۫JJo Da$-@7pݟKx73e==q '8J6a*dS()oƖÙ<"uGpyNn@yL; ZMB#ލ}ϧ>,NyGCSsOaKtd{ޜs-ㅽ66AyPL| F`y=M@8*ozc "5#ڤ\9lS #vf\צ26lOaV0eT 8G;Vl\! }|26 XI aEnW ]X/tR-ٟt D'*"K)q#4"ϱw{! o:՞l5>wOxCW;dF$Po/*GJ}םtBQ`pڳ Ξ-*a,pÙɞ}ȅ(]t`` mXZ ɔwr\D̺F ݱ8IQ4AmWz%GNxr냐;_<+dH1QlR6e~Q>5c3$SImX0̋`$aTa5R!C,A(JJˠw sփMS'A # ޻}Xc^"dO _ ";b8 2Q@?lt%(Dy5 LY&#Pc?|aR0vs<WЁ-2cMpi6D"<%XhAS43P~ NsA Bs}R!* y_JP4n}j(Ok*It}Yzr-&Dbb\ 82V%u͑ R{vQ0}+HDO/!){.B)IiW0"- J+24 kYA:AFԓOaBBX^fD('k H3MV!~^!}ux2Co Cmؿ702`"+0*br7AT#&]<1  $8dap)wb# ]LR3H(xĪ)אCEßߋS(B48 ȯsWK-; 檊Q ,9{Re 0+j` 'C+烔@;ʅ[ྺ}6yqЬ? Zdf/ ?BVR{/ixՃxvX xt8 N Cm}QO &o~N m [2^OAu(B5H1oK<)Q")r|aWaa=J:Xb k2&({7[ݸhvjiF e_*'/}hVdQHr4 jcCi~}(!'s;&/V,BBx7rn$bI[@mX<0# n mPCpZoG50@/ B$ AW ,|=pz۷•mga\T<~60ޭSegVKVAƠWx4O(H{Wd |. 7,:?4̮:~{o*IYdْecl 0tB7O'Ke `BM'0`6GIYT9{>^ɒIzTs{w]kO>U\;YYۥ^9C3yIDH @2ʖچF] +4cDSQN )[$!07G_ĿxD#0T勻G7C6G'=P=/Ȏ@~@#@Zz,$h(Y>.h?Y& |kOOmi2-vӄ,cl?TǾcqaj",JQ6ȤM&֠"Ac`! cţ }A.=;##'#9R^Ls >įӯ p`*7`a#k{E1E<:S>f(WOA7vO:U0t gGsP0#H},UL44H5'bϓǰv뚒4pp#YЇ=Py[%";L~c# 4}|}+q Os'`?ʲ hApP@Rߊ_#hS@eh""X joh52=W׿PRyQXK8Gv,;$3C@R0?57YYgoAkYZd$ĊRnϑ .Y0 A|ʸSg$A&ö \vaYis&aQ[I\CzA+.< PsIs9D܆cQJ`c&[q(TG\\)U[GE^,HDڒ| C 49C ©ŋoz/Ng@@wa|&G=זp X0A:ԷTf} D_hU͛Q۸ĆN sy DIOs84>JJtJT&I½?؏-ox)j.@߆Zh@)4+t$$j1 [b"6h7)@ ısk_xCqFGHg! e$w9݈@oR(,`(Esuq <vY~Zn!g*ZX߂,۷E]k7`/窭EQch1j=䟷9!o5kHan8ϹZkCkV@0[`]+РmXbB[Vn 6hR$#k!z29"vy`AD899߾cpM [9--Ȩ˅TQ?$HNXB$oY#{:up9--AlJuB@J?~MB!kV9d[/ʱBW@[ ;!H'VuC$Θ4~V>2=àvgSˁʆRF jsW%gk;G:YcH4%mL ,40yt|~\k#k6 K@\3#Fߴ}B7N<:A~_8t8pœӗc86XJ(} )KAHb#!ɢԓm/F4 F{n_#Y(%Y@hh K07'4J5D/EЍFV`l 3!+xI_gP *79RIat :7pD׾: /΀ >Rdt K<(dzՑ~-Ӓ󧶜Z ¶oYWrG(0$k $W?yq-^/ʎr8*/\GϕQy͵@ ŭ3Бex#"DHb-aYV=Kf(M#{9CHC"ܶ qbaטq$P ʎ'r!2?Bz`V-eBe|DC#,jn> | ; [a&$K_k6b(O;?/sG2 =˟l 4Gsr8vʋxc3hmE1AȾ630wn~/"{с1 wA}Wȳ{Y!F֌r!ۑ['̀ T453d-g!,e %jXR@6o!;h\$k< /hx&fY -g$mt#_r)&PѢ#f"0tbM5?I:}]$☡u_@""#@, q$wP  knC ^(Fyn"4% ́_km>Rƍ0,QJ5XN3ˑ~> mDzWQ!Se rd@Ь!0^d|ト_w5߀{coZlP\+e0&y 7Eol붍B,|!jC%31x[_).TDĶ@t)C MByOhtLwb D^Z ,QZg:K$dL%} @!l;D֏9ŋ}8|߽;"k'/έ ҥ!fPn]z @Z{^j~~U^P\DS'(! fDB7Q5Ye>wǧW/Ҧ8mHIܻqB$)EI-Js'} .-EQB%4AVçFD2-LΘhP`F$Nbwcs6Xz˪K#]P3)EPox18kY8I!͝3HWKjrem*Ջz0Ko u-tƂAQ>yqBEdd**LZ!\iHL&N~`=U@=H{ [O!NֵcᩙU^MXg/$N88~bB^KA=$$qX%A!X;H Cb@#ǩ{nVrBU1TZ-@)a T4|~ +WW]ʕ@yY(vҬ5['w8V`! (6E:0׆ V#+pO~IcQ?F>2diACH'Q^' `d#OQ42 m*gY|43X G{%CTY)EVKNt;+ aFU;s[ʷYacԖΑf}etEcјo"H;n$[oe` IDATl>v'.zѕXls{  wIXeΡu4ۃ$YۙgN&"ʆQ;H䀴"y")?j`$H(B$"' vA$!%# IB@"PqL PM"϶JH!E C+m#C ʰhajg$5Q3fdVˤ%̰{s/x@β3:?)E1S·@Cض4B riLφ)E, >ۨP6_P8Xvqh뉐-M2D)]a, 8VCCT1Ys8{ 1 8&͝cGZ>Ȩ1ud֙Mڭ3QqĦQ[pLLФ-f}\Y/|`ke3Y"|eEQ= 6=y{Eq.5UtY bn9u_oud `k " f[*ŭ ivyk FI@kej3 F@: |̸9õwlbd jAqs!HG` YY;F:=5J{~lR1Q3G!Eu Llx[DPg4;j5?&b|ġxkW^fi0 [Sm4 `aL!Z͓P*n C ΐ* UQ",};` 0H$( HbJ,Q%8BG 8piG!`ر5C6F҃%fE֜d )&1_þ<QZ <6Y+Lt 4%,]˙DVgL8 ! Q1"* _sv--6 Bw@sVPBJ3ELՑ.TsVS,9m* g?~O{7pn}@IXH[xon)6㸒M;p;ywjUk5BO#P8yrG0Ȧ!%H"%[I#,{gfG`OO]zI\cV\c \=VIǐ=aʎH?I `1}bD/X$"DHi'M@Pv}Y6_; GZ==GB0_LYLEw>Keo5ks@EҾDX~Y/ ܰޮVmJ8žqi!YlDkYpGx?} ,?Ӕ;DVL/I|v Qs ̀\lr"E) `(F90aH2CL0 bQ8fn LPVQ `= 6:#'\vEZ`nrGro$ IzTZPL= e2MTD %qb|'#cIZAZERAuj$oPӟ`?KoF5vW0Qqk@@;`}4(w>*bKL}hi3#܇Qy_vX hZ AuT+5TU7izzxfZGYɓKFL  9VϽA[@R!{5HˍFaǨVVj 4" N@tDNJ)MMu8Ү*q3=vNmnjywm6iS$dxX]vqdӈz͈r?&?[M^?o~6k{PPL= k^4t.|bP>~<# {(lVm?; Ժػ*]Cʲr]aGpx:S+_W٨ȥ)D. @" .";6i&an9$W XQl(w*EmFآq!M!kq):6>_PdPF.Sᵑ犂~DZϔ o>,G>ѽQUЈ~OމR;T"H"**>(TMZM39Gq鱴wbK,"3 b6 #9")OL{_TdUm7ei0C3Aͅ r3X>S[&T+Hf|Fc"\FhiQȤjNv+VfMPk! tYX2{^0/!LtyHG-Tgڙu\@J*w|=*'H[9:>k?bꩥ WpѼu n^+`eEeO?-N,Bayn<3uP2.g^VN[myA6(]NWi=h%ɶZ$j )֎܁||bƏ@9pG #CPo¿wh4|ᵧa*7*u8(@߂^ۢBf#sEV : 5LEF5 .=`f- \[Kέ8Ia*rmwfOkZaŚ :<ZЩnw:N*ddt-VSm?.;vq[e3Qfryg"}[Pyk/ڈp$_izZmHӆ LUqEtʰx岮_1q`8tqKA#X|}(,9tdΰϬ;HD494N*z'К;## Dݤ3Ew=u+qf}G %.j=fѷ!}t ɚ5x\'$^9j1ѰNljdsaWrcͦȥ \#RM A\)t339l6 Fbԛ宻ل+y~ʀS/=0^9gfuah,} J3Jy`hm0\saS¦-ljY539 sfPI6CPM I(,>X)e/.jme(.p>ζ;KVm+{p-2h) NH~.Aⵎ1♙mם y *k@E;=R>tl˘uS)~3XuU*Z p/"NMosv"ټッ;(us W\Ȁ5!ͅËtd ;Re5xmsJHah$q( DDƹFf aJUY,iFKQs_(dIi'[e%ș'E#7lj$7-iiNs)w?3 ҢWN7gZ z~RBiBs!`DH lq<#P”zT w χshtsAtdÌ~MoPl:-iB@'ZKL`ik(X0x&@ f B )ffʞyr$HEA)eR92F+3sm]m+`p__;LsR1<̔E'@״@E2Т__BC)#"s P.uɁx(pBh}ް.y9aO$jH*[w13(%a5YRsZ4i,_$ A ZZky,mQs)q `QZw Xv}j#==ERT[j$ HmwE]ut"j+7.%\~gPV,]rDoa*R /E߂z<ֺ(׋ec{Ox>+EZ:m+u囇M-M>20p̥<BD KB`@!eZ:,D|OjA-\Y@l*.8_fy#d(jY1r"g)POИ_K#pSo^&uG>s>+u ' [_|ׅǎM{n>O;zwsMcQf9[F,TdIE7; 4zJBu[7 K[eCЖ5@-/8Pof"3FN22DT,FLN?ϷRZh(MLA;0l@g|fg4F`s U8-Ϭh~=v0zR1rZ6DQȐI827&S:K"`Kn#׮_0OlFd#>N @,egTt A HV'>:AGk1*ĪIG1FM%+HH v~5  ;Vh_'(3-ąZ47ufQ0]ZJ@*g\K9xT:A&"P2-Xr{~@Lp u $jƢEbrDiB;TDP8}HA{EmCXQY1ZHKAv¢|m&@IYn IDATBz vff?`a"iPNO]f+l\[?Xc.dA۸]O$}GD[]^~OeM;9z),|Ļg|f rrTX ޞ`|DXf4r5ó]B9)`%AMh‹TA} :;^ߩ=X~Ep"F)D@;IRH3z6 -V ? 2祎eՖazF5/m=3`~.OJ}d3s(anB`nH-Q0 LLm!jt}`K5&@QPtOX/mw۵gt?إOuQ5ЮsXb'7p`Ep(hk4G3;S%%t5ƳDvtw膵vmhbW4JWUس77ocv)k#gWm׹DdϮ\<7U7h3F$?dL oYPO`۹c&CmvZ;ChP)m|4Ljd9#U9LCieԠV$USRM⏂2Һ@W!j,52=no<~f0ʹK(+犬PC K{qڔ+emAT1Vu0e+B .l0̛>?gV#00Y G@޵S&zsga- 8Npp9,Z0OJ~J { |.OC&t -{!tNq˭n}Uw_`n ρzWUeh2+[m#2 EY)e>,gd+h)NM'44ff9^74Ç_)#ow`[ ֿ( {[/-kd0"iznwGY~za=i.ba06l}v:b߮X~?*%ZMX^ԍ*pPc 16K>ܥq[ ~k7wpBm]fT%fn|W{hݰYY};6lu;wIT*JN?r)ZЪ-/؄,eZ'?Ӯ*VmEj%EVS==4[~4lw|׳u@GzA6&eCp"z3pc`q^4П|+"4tE: T_}{ը0P&ʃ{]v׮gGؔ߱TAG V?MD_ڰ{|]{?2roZ}h\Aay]_,Ƽa =HaҹiweAs{p{=K׼7`TΖ Tf5֘xݟ{{;{3fْ%)FFN`i<&^q@O3akmFXof\{E;u ? 4Ck$"_] -YC[۳?MdiJMdy|fx8xH>3;Fwnhn]7gog(d u; R)d@J{ubfdQPd0oe˖lk[( G5ײD<""G\#hZl|H0z{lhQ4CcKqpbšRAu]<jP.* D^DD^q˭g-lR}iͯ-ǐsZ_ 83_=sGd-?{^#[3zMOx0PkB`4*;mD[yb-ZW#uX("/kM$""<e:ygXzV{^6R..uzVʀB}:>(շCatt!~_Z->-W_y\j2jH,ACsÞ{BXH2g`Eѧ=?Ԝ:w\&`89>9Vjۋ^~;mUyk]oíe?|_ QVYDښGj?~Zv[*%c:`뒘$p@U>xހCCSPjZOAISjFyYvD@o޳rlٿȑ~@$ g,szU]LJ_^|IITȴ̄srL_<ү*7MrU|Zg:RޕtϦYGοBhtv9n1B2^in&R[V4(>F^sA0Y~Ţrh4Vy"v "~v k֯=+]4~f(=s󃫴ƍ2"+ܲc`(gGa; 0sI;:bEH;g20a~(R.&lr}G,g,`6,Q%COokߞٸ=_{M7LmfЀ äkt*Vm])6^?߲>uu-(BnB)/]`ǚ cbA ((EN8ji{e_Ѩj{Ep̀{4i?A<]Nk{wDq|5X>mW/;rtͦF]{0~?]h[W!E=Q7j@ȲFZ)v"0Q6/#3TO'VjwϳQ|C A{ 躱Ƀ6W'NƵkeƢaSjTXҌ7՗~ bf@~%QR(Y"HdѾذd#4k)tV†lgzrMkĪ8~իԼBB%&ۮDnD%6ic VYܞ>khi6(U \TLi);{Zbˠ2B$$b!!BD[>{9/qPqp)T"3#nALi!e3TxEl 9sk #KEE0##HIi} t.Q+ _1K]ǎX& ບms\?B7.a7fExdҮjV HKW8xIpDJT KDZBX4;l>pSM[F%~Kq5+ʑ&ө/.?ARh,8+A@6,3\Kf -.4ׅ ȕ2JeU859aO<1~?~NYn,=?nxDIH9[.իfqՕ^4ˋB9.|}7j2lIjƝR `. TEUMC;/?v9"1 yRPGa߁cؽ k=W?p3@8窯ħݶ5X!-FOrاĿ_f5?\hi;%?}(2T`@Y\@N+#\$0> pjEךcxetcO!ŷ(R'-jAkGSXB]kjxla Č/74вB(`AB逎pd9@oOD`4C6SsM[.RBɥ~£0 'PU`lAS34t0*i6͌b(2bP\_t}h_t9! } h2E >Z&(3\L<WYF`ٰؐb#-ȹqwDȢ o)Ʀ zYevnY1ےk `p I0;a>d$.۷'gp7RQشq@i6,ٚ5QI6Vk#8*DhÐ@X@t%i_ᛄXFf R"g~J|kԴ53K0?JM /~_ϸ㹵Ȳ~4 ,gT/b=/_}UXDŠ%F2xf0oF!{ Z7uz?ONQXG!Z]=kQC"9gf;e셊i =iz@ͬ>)eZn]\Ņk*sHcPֶTtbFOEàXbGeq8M$5f10N,3ZSH7&bC|z4Qi{-H )0 EU8X[4z?[CwVϯD̒ i\sS9b`8b\qs"‚焧 |䄷}|Nz[W,~Mu}{{*C%6δ} j6NpdA^CU; B༞ZXY\y߀R'=p߱Ě^=nG~L55>cZʲ݋  WKG9iQ,Lr\La~~}@ќz},o=a936-AS4l/p>2 k. ) u59wuUϽ͌nYFN\ % g&XXX ,v^v@ 5!TqlǶfեh{i-~]3wn9{sLJ2~|( S:`# zg rz\h7<뗆C Tt_I b v8 Xr m"'' oSWt9`/4aODNkIxzlE_wx}@4*Zxn0KyoMGyS_Kmj5.++bMGhhxeeU &=DaOWzbeCϫM?ߓ$ Dҹ2\)lXZO$TeT.!.Wv? hi̓Va*šZW]?ːsլ P&\XWdr 1P˖miZU4n;oS׎dt* 3_;p_<]@SKi~ +$^: P@%2g;DP'觗+gO33A$Vcai].^M88Ů#)ny-kLk#.QGUuoޞQEgq̷t-ėtTm.qc8FU9O#LrYkK!~?̣A]v3 *Cm=΅|W.ȿ/౩uZw-찄f:bQKOxO Ylyb>1BGݽo<,ʀkj-0’k,OXV^Z(bX V.3Tr @v~ !7r;,,f⿺i wRn+.j^^ _n#+A,Fi`u't!Qf;- :-w4+053ye K1|*L8ot96T`Fu:hCieNXW]Cc^!Wf~Z 4MWHv Pc/h9 )1Gb>x>mQӝB(輂3k>RWל+ګTD`2!tli6]€3^A"A3FoVsJ"7-7Zϼ6pI~ g\ "e[BDA'S͞0jBKVTpKA2}*P>H6Jc}w5Xِ⥘xPЌ\ўF[$A`r}%ߐmCD'#xGQ{aY]1~5GOu=\: v8K*w5E˞9 h 8m3JoâѦO]рh :k0l"M5]xi H̊Rh=߆Bs @t>gZ-̕n \2VUqGe.RcMG%^^7/I4:ztHuYP惈vkVlTuKEpjZbr7J\vJЈ֤9FHRW'b[ooPUۣ AZ,Vof6zՕTͦ.ҴJ WRhD{hObۿxY )x&QK㻭$i]u?yi#+7w/m.kGC/W1ݽhOFfؚLYh0vYB($FhP?x}wo2sY K3[oSϗuʊ{R|<=kGQ,>yR84ÒqqC)DGPhQ[7ǶmzEY?6pj{Njw4TohJ8{u)(Td3t4M=r$rNw|xkߦv>>J@b![׷Lv;hgR׈ߣ='y RG*%{:-K֌MhmI Ԇ5U8yi%*QG&̊Qb8msp$j8"!4f'I]>ՄT7.+h -kƠ,97~clsG.Ww,/5[* }3Z>S"o87J>+5rdz;x@wߦskBu<I$<x7NVeqUZ'جȾiHћ9VڗnfNwo<1XO0@k<べt/ Hlst+a3hOl{I_Me g09ȟT'=vyoS%Cz%xS64KajhK@Ic`.EFݽe@D`]`]Ic6+H( ô-fy`ܡUXBvbjF[?{(/E-H5?6z]B:) a -C*vfX~h +: }$&RO, M]j1 E"AP9*=q ?fטx.O4`k|G&f~mZ+]$-BZuh=#{[=)VThӜ;Csv|<9xnxfc`"/6GZQU8q"z"sgo˾2z˅'}cyX]#M]"0yStr@3/6X@'DL){NhOYND_H#AYFcq.$Po|co6q=ch" *ӀpG{bЎat̉Y 6D;hO'} .jčN ;BpUHոvx(cX&(Y mt-?V"/@`A%<^ʀ- h [Pw6u=E\  ofi Y&5FJ?^2s_wo\1c(u|Ka{1ݽo+ga7SΔv#L1E qӌ`';f-b 't1l[K@&ȁڙ N体0 zʜNis'ڔˀŃK!X։esg1U2AK_OyHRx?P.o 0VrsP0$:Wu(vr4>:`Ym59Ĩ7@0`o 0ʄ'6d)!oU a6A"|wƷ[; ڂN\ѱHx Vh'3wш-̱:lu9x Gl9 퉍RDZ]p_4b/$s9>x3^ҥƒМm0
ljSۿ.,_~L+FydC *P|׾\s @m-hlN1,hd`r>h(/ly3'z\pD(}DDnz|YA|Jsw=/H,qVhhhc5>Xyo h28IFTQ] KEd?(3/ FrO1$ mٴNEb0 {dl^;`jiqrm  .`BPY]`GatXD͓(0uw.D@8o9ம64z0[uܛ6,| 5=С ~9 0˥F :o k<3С'} D^?j |Jԋ>V5~b[,((\Y?-wљpA&E'[s}3\@f k_=||8<۷hg1#ɜ93 Â&9RE?DnŸ\mM$̓Źoq)H`)̶@"ұz>[|Xcn ;G燎q@V/7 |x^<y!EY.; LUE>NDqA ^9܃Yز oo(c?wp>cEq,j#ޖr E3yAcE `ҋY`\ f!t}hQ$?z꽁t Ci;e;ޝJ/6h@b>t˕A%lݛX'40XiͷEX gw{(Ԇ2QŮ`Rdr "ոD'1NC6u#t sLЁ{٥X?C?3 xsrS0ڇr@Ќ/,w,SnҌC<3\f_~%yx|zs5 , )0\י{;>@X43a @&?7PY5!{`$Ykօ1n]3Ъ7٩YK)0syb@0'0_҅>G)OĔx3ȧЖ_{e8Brd7 D p&C/;&2__z_=uX]]&EQ/ϲ6>{q>X(q@|@+R&JLDD 2I>ݻ,$OliWnyd?;,OPu"@!"v1G,mɖKT$_Iv6lqço\ [QO51 e˶ o3S?:?dlc8@$bQsFEkGkaf:)<_2abRZ#7l[Nl355ܩA@LC{;2ib&,R|hKw2bsR>('Bʜ_$.0bWdgTg؈Bйs':u{]3ǿ8?9j(B-  (ɧٙ.\`r X%Gc|[y=/` ߋmV0s% $,樆GuXC2O,p!J]+kgH1s@7>:8xspٲ-W4ŽLqvT]~hm겈ΗΗo7-2Cz3f;NV̌jwzM9=(3G'8|~tOgC7=cΗ>3`C}̸r%SW7h-6Ϲ$LJ+ܴd+>m-8Q|yJAp=3|=ɜ LSx]]Wjةu:[ZOfܹZZk#eGH1(5__ٝ| ˗? :Z'H'8'?uⵙ̣??rN]h˖mӿ: GXqzHz'Z?6QЌ?u3\2s`;t'< 09Z+jz_zi}[a)Z'HQ@< =a[mA%R¶%f>h""z:;:Ӽ0률w,qmI,qԲDNo=ߜqWQMM_KW*5ZZ˼ihvx։%9\?|;O l[JݻE+}#P Xqb|̏{a6uQYML""3O8HD&翆!MxzFo^nix0ɺ oS tFѱnv,n^ ScQ|ҺC8DD纶zYNۢwRm[=![l 7;&3;ԡ6LmZb"k |HiO]ܳ4^#ܓBV1zAD8֜pMtY]g#DIDž C|WVƒͶl[X'­x?]|#]S@U\&ˌ!k,Hd5Qzv0˨jm->pY\&2XCb- U!uAi R*MNf%TL77XϿ&ovcmV"zVfnG#K T2YF& cDHi$dC{Co0ɬ{++;;F,X[WhcZ'CN~#3_S[&_ֳdwHOB*FI+= rmƃ380SkT ijj Ҹ | ٚ`ka /=DD?p'cJ ᚦv ef7'+x3\WLA41O2K5HAx,s~У6^Pb=fiI.yABpP91뉉|V"p'T!ʪ9x/>f~b9tY]X,9/"K37C" =%(sY/,Q8 ,޶jO`' bA 04$.x f^f!hOC ToSW-%Ne\dd v0&3ۗf༕U8U;?X(Bp`9@H XA'E{n >ߜ#:3M3yl3#i9 yxBt5XR)$3O+!HAHs ?L?0(>L;ɕ$UfJ3r cݽq\f((+lR*ƨR%&Fhs}BDp?}i$ [ާQxKWbuG "̌6c>ULْ$Q994qbw.]:fƳ ,r>M?ؘ=G߰q4׆ fL2oP lI&"< BD{b}s9ftG>j_s/jXVs KM7x3X`nO{ JTϾ$# oLڲz&;~7Dl1?Umj'*͗9ỲB eqEf-{<7ò@!~jpN:qD[ɟd,%΁Iة4$lWqJQ0с ۏ8Jh!"4U!2!u~BRX^.Vil|lGwoXWڵ4h=tdt?mus浮`r Q.1;D &a`Pз+ \_s\ruc(&(pJ s p㘃c !4о)5XDa@08͒ X 4dp3?}x ]ŧjF@5 r . ZM*8`"2k$N`uG BŅ9_ W L$Iv9&)ְIRcfbwo|Wۉޝtu.#C(HˬaN$AiRf !Iu*<3@@ȃpz5#Laۻ{)CMDMz<QW]$&}F1W>#[$=9s/fLC8*'GEogۯJTK&#JC1C91Ne?_6!jnyR*?^˖.EՅ1˚ɋmrRܴRۢ=1 Dtoѧf)/oPG~4YI[by[FⳂ V Sc8#.u]vu; H5p )W7ĉ4#+'*tX~Q)f<ڗAlC*A 7p)KP1lgNyz)%$!! !TfIP?dg܁n=.8IY]fAݸ7zO썤rJs2홸W3}"-Lhƾ+Z"heY($Ee1 $&$jGF\]ŏ~ץCjޏ\ݞ` OfbYR` pZX fH*k ".7F'<"$LT\CijbIrVvJyϊQWW&\m=fKʧzIf~?v }.R$fklZx3*bP3~?0,AC^jꈻښ?:<\<53ʱOnxzPF#L-WA x0Af]oo`[Va= +Jc$!,dHR^z7*2WʭںVp{EIȸW% k%/'"Wd(_x}'2[JL!,}~4; Lo3ـ,Ͻm7<> ^,z\@JXԯa oNr?>r1Vty! /1p'V#NZ^[vts$* %Im=dB?P?LaY|.2-G>|r`nߧm?۳ 尧(b[ZJxF>U$p`H{\QEk뱦Q +ٹg f"cҞuYzWAʝ'aX+_|9UrLbLsZ3;2aǠ#^kX'/FH ,`D !@xj} +/c +oǯ@'& 'L Ny,<{$'g2 (EAu8kUk ?#*q! e_z3ҥ@`eG.=lPr+V RHÚ;3D?JѴqNc &wq׋icY(1{f0@oh٧.f͓-kl aD>QΛMfMd pŻy1uMFoϓG=+"j!m@,i%- 5"ʊ6{x@Kg@if p}/ VMLbr #h{f'wX"pxiN})%2Jhs\wuu;tNn fm>/$zp~u $qMgV*i v8DVfl>}&q035AW a 3C8|=mim| P%hT9sd'2=ٟi}8R1$3Ңҵ$Iv%qߎ$l\ f`62Lt+QcwML&!](;v<.Պ:|' Nw`~WPE|\f[zlS8:`KC J!x1xhW Nz8Kd]de5{>Pu4sH?<fby󹎹aP7 { B~c=]kٰ 9}_a{TeR rޯU jlA W~fNp0Im@%Q$ j(&YQ6FM݀"]2?GZAy%`6`K" g O$mٌ!-k^ U-knEu!6Gm濖R,a<ǜJ `<];/XiCl~/^E!DX,1LI40<>LX+iE5 s=H 3kˮؒ_4b'ˌ{#KVu]yIĆ:rxGbCFĊ;h^*ȋ\z6' 臺1s c`s9/^N7ŏ {x@I?!(Am :8!kBk&(Oǒ1H \e1x)h~q7-߅u_ B@b0AOzOm^_q{ő )?,2\ ?ڏ^ v( t$iGD"16W; y5@za"dn=MLo  H-.4l/BX4 Nq=Ӏ  {;sua58n* o4/Dr} !Ob:#xw㕌lAdvBՂe `z_p^DA_b@8op=Uרml3JXJ3iH@E^ XǑ߁tn8C4Fꏁ=gApx\@v®v"ZH\<8;A|N^f H|a?/(yk @[)R`?}Tօӆw#5T>Iח5mbI&_z9-1,ۗ=︰fχ_ ;dt^C h5BT6f@ 8;iգWê\oں)<6spO|[qd% %!{9 0+eTK (M=p>h cL6 -de@K4Y8;Y?YnT8nCm=gp"9S~|K^)li 1’^Q^Y1$ `<3S^v:k"f"ھRD;M"30$OB[!/~ >dry+֝ •yˤSa81Krׯݶty?G6.BC"ͳ0 x18#1yiG_4 o I=t3vx@hE'#ܵ 6  !oqe?K_OF"+Kw=$ِwA\/̚Ƞxd'06ҁ{3XM3p5\ ĒVC vufTクž/[RӔ<˫A`x PEгDi'2\\~!dւ~U 5Ou=um6+j2]`-TTUWe/2RLg /Zki,E׼ 55*2'tSׯ&@tN& fZϸ `/[TH,n$הbǦ\%f5)YC)_f?I77ۮC22A6" 0+ޒ %2HJA 9oxjobYR۶QX9c٥$\Sn 3L?3|CJ L*?Dzұ z*TÐdv3 *2.P:~/硻1Q|Wv*O[Sª' vϑS Üh؟eT=41 aTt6V12 M 7x1H;K.y'B+ Dr@L$!R 8OyS®pa!l|ǧMV!U Gy;TI3gap?OR®3 8RܿS;Ưk&4a*"cPfUb,Wd"POhM5е?|~*(5GנRncDBa/07oXCZ#Oy ?y=quXZ2aF'TTtXrԜ{<7RXx>~vr4p>T3 HHҀ`bqO/W@99 猁>L"rva )P]?V]PE͜2-Q|_}nXx~⮼|9߶} Jr fBHP͌<{ūV_fc|&*2Ȟ ~H#hyF=Lr?7AYWӟiިZR2޿%Dr.B̰tޜ]hXRumœdƟyӁVДD& *]M'qR S V?@BB Ʉ/B7ATՀ7s"!Y%AX]tD18p o@}rX.YX!)ĘHmhU+jRjtZ4gA!P7yGG(f^,%{gkEI!*2A`vѬAĩa5qGEcpbLl95$SzB4fl݂a -!L,'}@eڨVcFy͛! eVT]h$*D$ *)̃SȺ2e{Ă_-{MaޠBq^f|PM rU z})3jT`0CwṔ-̇$i~_an? ԣnJgfŜH"K :^{7@GۯEqh4 r}1<&.w=T^N/PnNҹ,trmP}ZKM *x" ! % ,1,:%'ٸs hSnB15Y",򷟀ki.,>O]% ֭(v.咹% 5 7.zn?{<"{{E,e@vG@5 lEܵ͂HiC * @"ʼ[>GO8 MBR > 5 B g<7vdT$Hʱ7 [k?P! a>i\^*a"Byp%փJٺZfOv~5V#Itz AS V3j9ti= `9EU*!(1g Bo3/0Y*~xSoo (F_ `MTzȈRm~>+xں;2>YJB 3f5C-Q`& Qm2swNMyc [OA!̈́G^w62ecS?ITR8fDՓ|Ebb < chp&dZ3L;Q* rltQƊ(' ~L[ZE ]֭q%B Rb 2ey5@ŹBHBAp͌/}T !5X 0b+K3sssdh?e(5e-e[g+;p(O X2!204@; TQ $]$!1!JRRys~,h?zh^h{S@e~Q[H?d .hvsMVB6"=` PLxhDTO@ uNAP< KDQ2C-Pihk-A)};k^ 8.@F0?,̏  E5\lq Mڥ LR.) 7 8& @6Ů5&$J@ F $Zcs.WZЀ{>C۹؄cվ=8ޑn5O)Hbd:d AmERz8 ,N ,7p](Ssg7? U@bv礼1{b$ i7zp!(AeV5dXDP(>NYiz,K7=vZE>Fy`'/}{a PЕ=2}Zld0_ ag.7>! ףXRM2 ;v"-X/|Y[i]X^/2WB۱ g7 93@hD%)^K"%:-@ KKFC8zPAXCP *U<'&'LR (y,rH}(pNjAmOhLL5@¼lǃ, d`, Io :+3G> ꢹ"P9!WUs Z3`K?N`#:k{=u8NV ǭ9{ m8{/F6m檡]+{`)OLPGBt )!@S>r R TKaiޔvv1Rr=|I#) #rXE\@ւgE3D2-p{!;:- -$MkiTL' 8q,@ >h*P*I,ߊfȎΥ?{[ 'F`flQB*P[8_(P,OŒwYdHHYġ}KѕK9@no\&2X{!dTԂ`Og`.k6q#l]Ck *TP7Јb΁^XgŌGV@4 ifkĔ6؋) 0CX|(2}&lI,ۚ -:: TrfHAݕy&3~4j^@@p`nHZO[dF,83f>V1zAkSM,8_V##Z#qt[yJJҦO.w*,Ϣ[kv#$@Wwք,< 5lD"yYLM-)oϗЮDSHp hf;֎eW07K%X3es6(A΋1͟ڷL 3V^)UQE2{9c 9X58 HFb_?94;sc6U>޽JB;e2^΋a`}Y,py9eCY|kp@0;]?;@fF5?(0CqlNv} !@@i|93!l|Q^2 RRǼ%DU uP,5u2-K?@U lF$g"1Ot=ykQд "k)]{,Pю vv  y=~6S^EK2g synx9}ز.RH`cNE\ KTPz7zB@͙ρ5,,'qȄMQb$*c\xgBWwug9 =g v*(X642іp?/"B}(I@sLt!_= < *G4*6.0~Fx{i˕D`ae@%da\18Ƥg 6E#߽AuYZnu{#Shnj|#"W.4#O9vOwrʍa%/Q|*g1ss=mkO("^zh=̞_Lu]\߀Żhg`ד l-| b~nmߥrޟI ^jM8DN1b`eϹYZbNO:@YZkbGR@4!IJa8+RA0h~V3T.ewVuۓOZL{̌8aDZ#Bc'8V4DrlC$9NAmtQʭa35d0'l4yLԐNS8q@*ʼwq̅lކ^@SN95 Ul8{<%}Dsގhhzִd/ycK+o66ө7 BA!=Ⱦ/|0\o.Z̭iIl.b gZ wy-AlvszV H S8 !aj;%RX`c@6EifJ3e+)Xs5g='mr\'.! * \Z @nqjtqϮb38VETKHNFk ^{>ٽ} Piga ִ6j~_My"xͻt1DFJ`,6bه c'l]l[ XQ&YF$"{+[9қw  yOAKAk r޴316x:_p`Mg{2؋9c =P/ b5eM);FvioUJM(nܔNBu! dvQ \dӋ]_#VUĦX<~eVyA?b^J ŕi3PL  haQ*]U-zpS1k7 Qu|*ksō,FkDq(ֈ-#`~4JӯwBJ &s-|dKC;1]silݼC(NpsZ'h(.JmTmφ#J4XhĉBq5gmZ 5oEGv}c0`ac(#:4ނP"SmOEC=xx KD^L֞v4\ڜB)/"3!|()(B@XՄfLSX0 g_~$S=U@: EcEdFԏkl1 2@h:0a9d ʕ61a`hn5dPX'9PƠTŻt//2ۧK/(#1N•O+d%j3ں{1ٕnd=B$f͙Hl\*PjnI>s0Չ¼.#DXV%ӻXa/\}u,醵EQxɮy0jo oD; v/.y)i.<@lV`)r5%v`$ZlX!NL x: tBh>Ƒ1~T "@k6ufhX19[g`] kho ~>󡘑$arQ2޿,`֫_}B]Jn3$o=@|݌5j v!_vxK>x0fSΥf*LZtc뒦nFWmEy <1׏@`CM+Z3!4Dehk%H-)k.&[U MhAHC`WMW@'"8@)GEmqAXt" T  al2ŭ\ gA:S-A" _g~L.l>X0 -lˍ|*YVK:g*3s+e'2LIՇ.Li1&Olg~h12{Y :jhʔS1 (7B%*FENn,E83ӳNI4q5 Hӯ-qo+-6It!m0qpI ʲzEǜhd̀JCB'UC`֊ɴb$u>X0Dg9bVLN{`شB[`Ehk.!Den0 ' YF?QR 2{]m۳Rcl|?- dp %2`C{72.D 0Bo7vbKUgIfr@ |/!0 o β/tPbP,Q"/Die,lr Yʖ Cм1G s$J_|$Fm-{N"2lB k~m,a)wXUep4= J#)+-+jhe75Ty.4毻Q5rǔ9gtc?)BXc59&x^pfG^@ $~4X' 2bmz;K/9EW@Aΐk nyFuuM_hϽS$X{2Q  w\'A蟽~?"Q8e N[-Zȁ ZU7ڃ{BP^CS@kצkL2k*" qFeNKNԒ`|WODX/,3g`SY>$׼?g  v"^-srI*1v(SqsK,PJwx,W߿@_μA4~f_YzJ7 4~ ΀`j봴sc^ZnhUC^b}g|ӯOSwa6QSCm]2B-"2xrɆz/pRfn(+,9,V1oVA#@l{Z]8 BX(40m=ѶoΉ~a=| X=i1B%LC:g:@pE&>0G#>'Ihe&&adr.YIFȁIxHdS&e60<yRoOf_Xw}x)dO& Xi[MaSz^DG{NgC 3&pcfPx\k*5_/֋aDZi"G];Bpoύ%hr,_+9p"G?9֝ IDAT?+eBߝ(Ǚ:Z+Jc2h}_Etg`AR(Sl#.yN3klfKZL~ȋu5331[>_)ϔSw^`gu2n7U޷uo=(bl` I8bi*;ԋ4dugeb6kYDPD.ǵ}B@X$h]M9}:ז ~sUi'݃.|%1r?+;ۋ~nڷvLPNENu}/3*V@ƺ5FO-_s 6N>{9?2u+6# z3'KMp{@ײּ"ZJPɺYltss9XDKk`ߧb={_f%aBfc"g|l,{m?\̴XBt?j`exY z2qȣD#Rz$B&k )ܞW@s~>SGn}NÚO_X,ĝ[pZ¨9dQ#L8l7p.pĞE*TQ EBCJ 2  A{&f$!Π6Fw7|=0cq"zms=S _RaEwϸ0 VM-yPx(S~l;VMPJo!-0x8S\׼A;Te= UKy@.%C OesF7qrמ?FީC2}wh^Ͻ @6(@ZRPË#B:} 󁙙D >0nm_g~8g\PBm9=-;ޟ&C gSjZ;Z dv;.%BywL݊^oGO7k~|fbt:buskCO~!)3^r۷"WֺњkІ3hYhYt˽}䜻x~jnv][& )eTJ')g w5k$FbJqJ/m2͒څX1ul?\'w|;nLԲc]W:sE\t af/̘}}eؓÖR@4SQPe;͸Cq N>,X+|󁤊Xň*8ADj5IQTA-{z+>dV{knly۲ǶO<:v(ΘVLx5l>}Jr#j I3=4?~ J,ELHdRRN/3B㬗x.t tYJS8a6J|_x;VyftC 5s@/bWw>ɽ8yikmu )LQ\3ƣm= VT23W&/3"2~0vںAO/?$%Ӄ8NÛf+F>P{UcTzȁ HAJ = 7 'O܃ ;o{tym)"IbH XMj?ğ fܡN6P%᣼Bg]u-֝: ⵖl ؽg^R#gCZ WR$:: OO04X2 n Ia6crLjiz18'rcX LM(2&q G(U<gNj= <' ~m]"*}cwhQ\rQAAq$B]|To^،ׯ ':BpЬw䊖sV# e'n_Nw^Bb=XOCYh= NBih=$9g*J]`ώ.}4' zQ4${k=WI<2 k$'K5G:gJ!w!\f1;PD:~)q 1Ʈ!%9g_ba 5qta/3r _pd`}k?O?Zs39@ye~usiYg:NR5&lju3N=BwAo,'BDI>Ɂ0aywFGPi$>!{`G(F;Q&YjWTŌ_&$BR~)_l336FOԭP7~/Kz^* !ȴ餬S vxg@X|)3+E_֎2.rSwнN>~OvwSzn>νY gF6qˆXY%PB4֟} zT7Sr=gי=#4\yUq3j J$BT'Uq8| 6o⎇N7:V.8Q~>I U OC)N Y ǓhɴZޝkJfzYoK߷]lG*>b`ft_}y;JC^fI'+\W ZCq9Lu[KXSı#UÀjZq n*J^S$n}9xt D Pj =e=8 ,, >3+$o`VOfG?}!&$,pq|yw]m%K*t>YF'op ?į~`s5kSEX sWX (qզN@ tͣ 4*J/LO`Ɩ޼tn2KI4b@ifh"v]~߭E|M 9%:8T:QˊùxOMcg}YL )/v8!h!*ҳ1y#O.o㏖r^u ~@g'6b$2UZ"k!yʕ( ްNUH^qĸ/Η#IQ+H*xQmPWQ48^$0/<۷!'y.@`1_^x[__qxQmQ*SDfI!ƶl)Gh+9 n5mep`&{*$K wጞ8atxy(E_O>[s UAѢiI |CXxWZlݪŸ*kFgĕ[m(PUMϠ~ts}YX۳1olh^с_݅lhJoI'xstobY 9tjҋb-ZتAoħ1>j&BWA`5^!T`-d\C9t[u4ּoCMo}D ҆_$86CM43_7}E 5ZWyF0P-A[Q`Ebߜʪ+`&8T v6jNIr i҆\J[l{EpnAq`bĚ; w> aHp칰Gh.؎M#&<Hu%V)"ZX׭mz28}%kMtD/t2kvb4^~^zzk x=dHعZi^߶( ڟ(h*N.*°ljǙc(ChҬ95s6LlXЮn "+^sf'g˺ibL9*HYWzB{g5ٹ\0kh* RPsuOV)Ua 2UhJc c'suM$[4ccwuYȯ>>8ZYz/= a2 D ,6(B H[~KAYXkh꣄4S&([w8RS׉krBmSˊN `[LB)"EfX_XE D+713(H( \{a?‚ͥs5^U>uRΎ&#T)gfn՛iXC]!}XQxyi7HK\&8D]~SHN{^Vk64ӆ˸#Xl0h*YkgUnn:#s%逋LjC%5{,:Q )Y4=qTN8XG~|cVEѣ04700q z j:C5!rA+iLܿ$+zpflwV ޻_v]FDVYeUk\pg01}0093}fAxyEAE7 Mgr@{4+2I=6#Z>35 xy\ԫa ֮f\77r׶6׶vi-`[-j bhW>:,Ȅnlc'1 V9MO~m88}c:J_Q~q}хɸ)b@Z$ `o8TLOо5mG')fli@)"3t=4.j_pts#m'n{_8Bɚ ȋFN,fG;V1q4|U\+bHZPYkM8Fyd-΀ xt\WG{nQxTۢt2Ə}U:Suv"2un:ZW? #+[VyW;qMc3B i78Rƶ J3I(*J*13k|gAGk*:7S'nQ5ӯ_ދbY(P@[eZjb||ǤKkNj9c. s~j U;>1]{nMVE]8֐fb& &-PTi O3wL*S<8=mMm؞GwAoㄷ]V+_ٌx>S!IPţɝu7WnLX0/ IDATv#+|/?sJEo^y\^HG@ c'm{kͫeK 7vwkύgKE+9n&@?ctKl/0j^L5Mcohxk9?kS%йkX[OT#1 Ý.܅ bꝝFˢ&Rhg&KA*Ha#mzq* |{8"Du ifd)3R l:*s1P~wl##SjB` `-U|$a]qPEZeMRsqHpWW!6ގ'THNPR:&Eoc{0soUoRZZۀ165IbmMHHHB $0 @!9l̀m 1x߄,#KZ{յs[U-KX=tkFY.sVTaYwLETНb(&̯Еk~]B `T(iKKB~5Oz6? "hU[X#`c;D".B5 6,87 &͟=/ao@%D`r [v?Wɀ`u:SɁ#i*z)NA h={[|x``{fy߿ɕj `Æ]lk .k(Gv ~`{?X~&TKt뚪|w ?bnPLrd=!a یRvU]~ܠ\?8KF4WU_0 Df j5܇>#kL""ݿcq"l|6)s04gB\?8fsc uuRDkzFXG)"\&S'ڼe,(}"wt9 g_ &,zx#_tUkAHgqk"H7>\p~ؼyo$RDd d0&<,%+,la3*GU4f#mj#m~s38ݧ|7u[< p( lͥAYu'H2ڸ>V(<1 }N 0xJƹϩ[R5,h6?|LQC(37yPa x6+1>7a۴+;&V|u*@>?v)lgu6^F{590{@Hn󧭓/GT ~EU.Q:5$ܦ{w <\:0Яsk[p*c{/~]0ͬ*\#~|`{?/T͛z0h Iz |;v5;҆{ۼLX ?ooJ)`v :GU_'Nc>|/ZEhK2l,)z?z` 5olm Iҽm8ң,|4)^9GQr0ڌ~S-u!OB2S}d{;&N/T-T>M-RoqHereH|m3WjJD)KUFUU9fQ!l6A;N4oLGů Q_y)pU& Zҥ۰ES,锏vs TGO7w ^B8ʦqɾ6 hƥ^攮{B78KI4ډt|3pi{֞U(b!m(^}ܻJm hEcf,vW>-|kF?$ٓ4K |yuW+ $FGicdgp+;i])gH' 9S B`֊mbVIåm.`B" !αB& }'i:n94k]gG'N#~-XU=_Di0Іag(<ь'mD?=L]]簍3 R36oߝ:vHpЫκ"a?gy$/KbxIz4N2nk ]+g7 mǟH8Eoڽn"b`L?΂h znʎk>ҡ6 O !At,e;Ϥ*06<С9&!UTuI@;s1:[s:%4@o-vMy-dȖ6%NXDwNC`O=(`(|<&_)~[YDdE{Tw.NWٺ6q=?=L0?>6qe[EW j}Hvڜ+OmO ߆nCWvBε# @ŝQ  AJk_rE\DUn_>6CýXd*:N7޻i*X`[V;68&˙>MǓC6m: "κcm%Q0jAX8h{ 8w"96mpC59&RզSvD{McUu/M7Zqezf\N~"YovA~@tuJbL擙PαhS}b;uO'dwnk㑬n_ r/$Թ9"qw{3jw-{ctJ֑6pZ\@DkT l鏌/q5trα3=i&Y>iޯߟ@{+4?= `좽I${fGQzڼ-jJYNv p7"v3$6t/ºl"BaǏNBTי-e8ef}x<Ǟv3#@:N}x1{h蹎,9;&ߞ Ň6'^m~lO>f,U(Hj5t1wkh֑/`"HZ]}xq5vo0 f$^$͙SD .ްon9E lo''"oS\g-,2{kaŨ|A6޿J@xHmÿ @ }E?̇kp{YLlFTu"JNߖfomzz}MfAu{:v'z-׷w}Eħ";;Ft~}ٺY&~4ŋv+j.!WΒ_3V`&Ivw,vv7Qh([6cm] P]78 QஙoMI:~_ .[|P4(`P:.d!s݈|v4٨,rZ\gv9#BepPݸX8EDQ%S1'O رcժ.`άTllOA:k<~J'>6gRl;G҈wYZDfjul=rlONGBáC&i,_/+??Y;'࣌_z{߶p_e)a}` хOM 3?p2~ P8`(jYDfJ6"PG ˽NkvؾB_ſcN[/=skm:ّa""%SeFUOq w[ wIeNfwSD RYsOGB2eK"/HAlj$Xq`""%,; Sc[S)Us<6g]~FY1\("36мݹíUQ=6P~qV^1 "[qL݃غ:>p;/Mv[%Ofkt:um׬-ޏ~~kUK'oTKhn HKa6 PNIIj8 T\?ٕ+?ޏMܘ}U1CU/"Rb>wi$991q~zUqV N+c01)NvSg71mp|+T~1ޏshӟIU yvyTOGi܉_L4S*O78-#"""(CȠb1+FƧ![SLJk2MS9//b߬tnޏbNwy?>n"re?Q>D*5 Jsaё:RcshRz$XGzcP+F)$5 .^(OQ( ?" _\?x  P.Z:^.qFyYwx?;9͚Mv_ޏ8wbN4aNU=&OV'Zǽ% wx6muKz><QnZT@ѧ?m"r0m*VQrnb)ևgI'sUb8uB(-vDD'kmeAJJ42`*ܿc9MwEJRt^<|.-ǿfOjOH+_"B!2U-vQʉB8]DMsyNl[qP(UjtX3d@fਂ-5:ʓt)8e9rsm,&V_WȽOx?O0_jT>_>SS3!HS9|8Ӈs'HG/%c m19H@@ؖψUΉ!jtG螮dJƈs{ x+}}(z?ޏ?ùޏ/~=+f e:]7UUSFpy!yCUK=EópexL6g`jdH+V%cG 7O?nAqワR-d`]{o9kh$f2Y,ɞsSd@E_" ӥr_:#uMAN҈-ׂ5Jp{͋.{,6| >w3`$'ܭQ]X]iޏJ(Hvoi9m2>x]}dç #Uy 0v]r*Uԑ5mpCᦩ+w_ Z8V}m7{7רsL&)2*Ϊ&q&D t]ӌL9ꢕ"'LvEx!qJ5)8O\ 2QJ w [8 8 N?}ߨoMsݾQOY4-[}5E[ii.{?~N'g☬x+ɲgpt2^r/GCX%QDJweI_(Hω;w C|yunlRKIroKGg'‘U()KuS\8KXɲZF53˖ļ ;,-&c  16oo9@33qXӺ;k;>97Vy{F{ߥ&"u:✔*j&diBTLT,kz#3Gj=&EvT NG BCzyED +I1oV;-yi!۪Gތ;fe)6MQNGyZ%%40SDSINZ_^gyY1wN;cw>&UuY{`_b&C"ryCO864YK1߱ '?!wA_n{H? 6,X4¤" $`HneYP%/<_}y*Ȭ UY/O :wBқ_{~ӵ>nP\..Rg{eLvhIVHC^4xƲ?;"5)`5EF8u-#Eb@0&f"~`mGW^^|WρLU)۾x)QnӦ?x TsQOXuϫz;;?z{L&Q.f`y喇3z;YhsK:cm8tr(bD1:qR'e%`|Y_}cy}U2=ՍQ*Ţp+qNٺj-+g[ [tBۘH (}'ƉKUlwMjGu|gLSE5zM0];SDb6_uTbQLUM:nY\Sl$']Bz]>U 'Xdt Oc7T>X;G_\u1u+'YS3ɼb94}Ɖim$z: VغUˊD6 QrK!]68&6r=70|˒TU8񅚧☮DprП\Uyl]TwܴOL40/\3,D}Η2Ql,?B׈J'}$˱yba]:6XOM;^I {-\Q >cf IDATO C#Ƒ7vq]!5B>,2'`jqbG ef(WlX{)fsѤ.iq֊){/ֹ#4/7KkУ zhA]9zSXb[ezb3swWcjZt*W:|rPp5-VׅPOSv.):iU%ƟT]{0cYr^^߼z>𰑡#1$l*;Ȯ=x UH4jl&}nk._džUK0%tOca~پwm/,*xզyL:g+"CS L03ln\O dk{2L! m&e`6!cs$"-dtF e ՏֲSH "F Øu>^CϽ1FfmB5ޅUz:]=[ӏDyhOPU֯(malxgt?r<)@A|nBA'Pd9ji5:"0]t:fo JaۚOPש'XcPK#;gm[%l ae!eX*I;tPC?ŗ \$ 4rЁG=v+8W0$cGNR";jiJ~tb5&t]^F亚 ?&bI!21xI]"8fw~XޏԫslOZդZһzn Qeꨙ0QfŚ% Mu[ǹqSK{D1l7ѬJ(gXy8gc}J+7U+ꓚ$_x7=R::ƸQ`MѦ 'U%.+HH48  Wy(ړ mUMX)CC^Bމ*"F2zhIY3TW@ p*GJ.74Gy妯q.!mcHWKw]ڹ@b%[)LD47m}[`%H -s d ѐ WO`d2-Ail,bxj'&{q='dy)/oEyɏPphQ2mq٢ :2t=XyL-ymGjc+S^8Ai`wQ?;2fϏˉ;pՖJgI1TJ)Z!6G.e]RЕ hҭ^އ5c-}l3ϵN}Kc>s=ԜCkgi̚V5F ^ 6Rȑ_h w^qz{:<:[&J @s~xV)%5X o S_RmAjy(Z=`?hhgIeM.#s ?΀R`~ xiSȯFwQʵ:Gh=JmN߼92ZB+QQ /O.˻_K )MDV|t<5/*q5f>R'3Ir>AN6;̇U{ڰT α`Y9+Ȟ|}lqkws8$5m#t]nC" d˚yc$|_no$AnSE1}c|9WQLuTR]_%kwQߤȣI xRG$'997sOJzzvn,>E?qGjD $'9%K=J 5 jx+Su g*N ƀ!`"XVC873o!}W=$ xqNNıOq^q:--60ɿ 0y+in,nr M*(;ʜqfVC5MJG3o;eqަ>: QK7Iq I^̒CwS|k/y: E@Q3S r{SVAuomES*}]D_߸;,;siT1ơqA n F{1}޽6m[Pqi482xgWm\G f6"jU0yx/ x5Ͳ`cA x}7HG4L\R&[ߤ04z#ᚍB(zK}lNM \N}%xذu}yUnhƢR?Dͥe.Ǯ^FEWSX-#F"w~yQZ/y=xx&$x秾?qnv͎}N\{r*{=E]߁z%c#/L%ϠqCI4-:<4(ŢD0' >ש*> 5>o˝\ Yu*sAa<-X<<fNOA?tnM+S#UG<#7c!kqf?MX3Fج|Rq]V9ss$iu.U*S~t'cUGPP}4JP%LGٍA M;%T @T:Vb.JC: |VȊb))  ~{'y/cI翑G*~}:Ԩ2A]Kl̆.;H̱[Ec{G4? W]FªmZ*Q-߿~NZ' Vւ aǰtG5&n{9>or(IFiq$;%6&9sKRɓ7_&[.hm֩׿9}GkküW$V=op/:\mBFV=?Q ԧj<3T*DzX uhV*M;L:ϳ0 5vR6{?|m:Ϫ 0V}yՓ{,W sx7aIq@8`i#_ZTlqw=hnk.㍫/cYOJLIO ycD6-(f ' dI1q]fikk.3b['z O%~!I$!I7-^SB0xLlYwD.lG/6*6d(MsU#e>V 0@Fxb#N["2ʋ|-QzIDj$Fu"Gs?c&SgQ+ DK\̈́*[?D 4/Uŧc4w Eᆏ|yvOmEf*6tmZM$+pmMB_[+BH<88RY OU93K!;CyoH l0 ]U&Dz=z=Z $:|Q`ݺl3HEБC2RǛ]+t=c]_Ha<? b.fk[?ZhIADp aΣ\UttƳeMǺx)o'ёo[r {^F>/D9f>EzkcHfUf?>)Z>LsRMCEV*I5c#DYl0͊W9ASK٭Ov~Y$ISG(a| EZ (Dτ[QWG!sm,{!pIC")OTBP*3 Ţ4 *U 7\,Leǥ)mFo!nPl)/Jo(nL'lcgL3🬀0m~7~;tiG6((?ME^-V=IX^^CGff-H=B- u -JX7Eg,O}r_3 %k]2W. g<~c\W!ܿ8$J܆1 >xGbohD+8J#YmLbٹ $e1ۆ`6W"c5ƒ*7y7"* pρ^Gj5XyY덍2˻&=p3]Kgr&/jX| cAH'9JoM}4lg;6bJ5+a}x'T1/DpuťZ \SMVVJO}zU̔O_C1%p<8m& uz˫îVNّLY -T h.549ƖbCsH88^t.λFD#q+"Y񝵖%yUT&L+:آ0)-uO`;u{ 6 ; B@?V5"!5Xfj 7>P" d q$ ܶY$ߪ :{l۹]&;àyِ_Q"𤋮}%*b"L] WڗA=iג:`1ɱ wC4JA#U͂Ϫ3i4~a.QS!#GerԷ2YJK@Շ|fuklń##Ɖ閇!rϭ`%"Zx[(U4w+GnQ-IVWc E{Ą["ci(sݒ &m sPT@ i{g0OOɧoYS)M8-a,3\ء)>7'&RL[960V3U7B|Nw->Ij PBzk;Ze;(>3 @-8bQcX _ q,ĩ&Qms;#Ay!`n*3.- ZK=!O<5R+TyV5Wk5O7|eu#&]q|M/tp+gcL*'r"pbG9K9hVYT4Ȃb l$|;>_6cS$A*q ѶLGpl?1EF`\dCٷOMykSGh}Z# `۰ l(ѐ|8#9tEF83;oMDaԣAjUj?+CiZe(\{ :3XvFNK^(by;? 6ܼ@4KV{iBإפƎNfP E3𧄇ESHZɀ /$;"ťOa9$FM{fG ӟtC8  2`Ӕ &c\0 5 Y`zSY@oϮ lNhN=ǎ szĒ|S?D j\u`W(v45/3ali++*3@u /n)KB_c¤~Q"az?o,uӷo H)1GN<23khxj!>ȯ\$%/@>MIȗf!M q)q(}f^6a^XShsM,BX(&OZ B׬Hغ01w,Ys>Z3P{A (f%i{kQn(9 Ue݆}}'HW/}e/}>HbH?J%l(`Eni,ǤY7T[qԄA#Fy˞K\bMri-1H;V!C4RiIzJ43ImKlS}bXE08b[_U@Xn>2RGY&H78PXU`hr qѦ-"E J& *JTw`/XWKRgEq&Ѓɀ`315!o2xl=G=@s>X]{kjI iutS6ȶsεO Ky,D %/p#-}۠d Q@WU*J5XIF{N #QTd~ǒJI 78|φ?Өgi9ID.iٵI]Ok/H/ͯIvk儎qӊA E LS;}J#$*"]]<> ,u*'@Y!yZҾiD©Z\=#7+>R l QM=^1C il T)>;r =gV{).C" P,sZP De_Uc(SiO 쇑|JE@_VJtF yQlڦ=T+ywĵЛ.B/GE͌J6L;1 mg9bp7~vh8<7EBx^obGu0FPLpwDe؜ӫtN_h D{ܨ6*Lo Z!NPBX (Jk 6p|$TPSW5N#(\a5HSr [mo]қzDbħ勵[EDL O4*|Y IDATmBR5-2D]a~vh7ܓ8Vg F',]QI #i%%#nyG)GagGB`)" Mi,ULr)2BZ[4ݻ\N;g))fy~i|}5ՕIk.9̟[MO">;5mmy*XQHq[ْ;8-;2!ֆsZ}c LWىt鈑d:b! ;JVkJR_̞L wt@G ;IiQ2g!40M%nN53Cw: EdiZMv64PFjµS.aD-\ʰnZ94,"YSs?I ms!8e8LWx Ft(Ŧi,!b4 kM$-іj]xLWJa骵P蚷H0lTm5ۯ?L j8xbetp06- v4d!2Ho9<>HI6,Blf^@QImȡbMę+~يF41+1ne(/ kL,lVG; E/ FnM(2#H"YmC`OfgV(iTy4KzP,\F;Slu-i)K1IsS*с!WiF115J֤h5eTYKldrl y 0R|VGaM2BzQ$d7\ A=dHI^gJ`b*VKhl%8c0Zv16ňGC{e^Ç5B}k(ʗ B\ӳr5EK~ 0J8Z-K;3?MoK%%&fw)Ƶn\  zIB1RB7H?I[jz-xS,įYq]׽o{gA 0 A"^-Zͱe5ljCF)JX/qy,KI?I<;!e˽HdيlKX0`Asn\|fs9޿l8L~bv hn"S4h42+ `ѻNL]c3PC|HTgj75 o7ހ҃CrJ~"^uU|ba.Yq{Oc{7a. bA,ٲfl!lgNfBR6a"a&s71<`5BY!D>!QRcך'see@PV!*EJ"+&ew`YI gfCɮbf4#aYeRBms@ O)ҔIFBOb\Ƙę k!HU SS V Qɴh?f1;5SVQ[!t*Cxlz_Ӽ8l1_Dkj#@: ,RXTB- c>N=EJjkAdR;BQ _`uE: 5Y $ $Hq6= 2L 7vt{R E8RhRܚgu"k,0]YWVfa!I~ѝlǣߛiHuIB`X+ ;cC Jc,w IL|,pE!3 [D.p,;eB%8Y?rH/6V=%ya~3VE\g"J.RCIǎ /G=+T2,|f=`h[-I26!ckT eŪcSS0i0cxb(>{'{<BPJ0Ud9Qde8X(?p)jG 8$:oBI٣\C '4/^o2Ydi-;eep=3QsTīy999ZoPUEa}pddr8 >0vՕN-aPH8b^9̙WPPxu1X2L&NZ%WZ ' ahqX%6]AR'M̧6\5BXT ? ~臂S||yD 3UJP*.~Pq(2|Tǝl+Pj2#hrX+ +)= ?׌P'!lhEcQ!T\AX-C2=YoS]`v+H.44 Z4CG|_ C$u #ï,A-UаmbB?c#NMB[/$1Fn7+A0c'0;'+}!u?AB\x<Ma.QW"8~yQ=7 )RjG VmH'G=1yIS9(-ׅ0<B'B<;bM]^55e*REˌu4Dn*(Jcشuqڍ`;M\~aH4,V"D<9bqV' z*TZ>5/gh0% r9ʯ݀tGy-=_4 b۴?E`T([㎎*&@MGy7Mp#+~\Gb|HPQxqW?xfKL<:(j(+RQq^"2\#gn IW>6VUִR R˺m2ʎg*CcFa2ue'$eNMR<9)ӄ%U%r'Œ# QF1Df$3^647R3r Fsck (JF(Tʱ hP&[ֽu&u "JeƧ'uy\A4ϳE6|Cc\*.P3S;KV 7yւO8&uUSw'ud#dzc`eQu~9PJeg`L2@gC?۫\=$)e)*8xXz P/Y ` V. XC4/tߚx2~njj(Q'*R@|n44)5"OA870@D'7Iy_Twdz.rasׅJuriX3\׻?2 q^[ý'ty ,#^>}W#:LMiWGپJ{"13$+JtiMTIlaԳ)3,8,^c?텆`DP9iiJ`tcwɌ[[WһHmݻ7G^5_cTͭR‹'BWC$ 8y.̱ʜ.HH/E1X/t=v{gd]ͩ)B/9 Xiۿ]q #M[>zY)z2^U341^=_SIJ趢R14/V²SRK {2D- @8!{]v]w~ekX9RDS[ ,巴,~@p$^es[G=48roSĠN*-FgRW{KWM/tM"R@3#Е&ټV /+Jk/ c?X ]v=ҳ,HEC8.LZT6iQ4'\+:g26&=~=1HqusPV%*F5Ef5kSu":PiO R)mCJ8?Ӊg31tQ`QRT>8Bf;U 3)~?Q1`KyjG}x  ff); ۖoí)م:}4t!Y.j9Ks >~y/HL6~>LDv׿|⋻/>{2ʩ$44!I-1]-dJ33_(Z)BCs*EcxI"3{{b7epx}6mW [EbwFМ890A <::x\,L(RAvdPhbf, 9P1#u$~HH@.TC%uxݶH0-YcZpλC ;a蘼4p50';Azxl~sBoomy<+|֯[a0ȹ#XP}ڲ8nȊ/FuX< VՊq#"-pmŨhϕy~0ecmzחs ~mܚ!HR :^(ʟ) 6δP/'+\`57&aQ>>q<= 93cF8&| w1]qC.3^#,aO#(aSSNHa17}ϯ蚛 2,P, 8 )-= IDATC]]FHy",?{2x^0Ǘ0aqi3!aeˑAʴ%m5߭$o}&fQe4K2"W.LC*♅YX13}uֻ,vC>ohgn6#涌 qzVsbz }33)^qy-rY>S8ǚ[|]{s,? RO} t+ `5LY ̥HŸꟵpP@TiY]w{[KϾkXo`aF6eMKXg Ѡʁ5lHZ_+ۊyAX@7W0.$X[ 9H"07m}os{F+$ jlc xV466UWS $ 4nxԔĞs9؁rSҐD,$ y=;s0{6cg=8vtze,!c9  c:2Q)bHe)A2`ϊuV%*&_Dsq)ט6m;7YoUzx[Z`ʁ|h=ezRELK[mM߮˾)f&F:W`$.3S(O?fRNw{ok :^Qj[-HftKX]wH',kc!jV烐Jsknl71YwUTRA0݃AyT4 Z[$fZSAT&FgzF[W-6s"z(a}8`6AUP+C?Rk2 ]#%o3Z[L  E|ӯzUxcguhlN[@kpUI,C\ ̚M[`J'(#AD_`?޴n'FvR$&G?ۑd`x&&EpRNCI(5@lE- ]:fF*W+ ~0EIqE25늍xh# .}C=>lr|H RzPYb 悯&WUEQs ֤` *~i L, I &4SPvm̥;~ӵMF"H-2C\w׉} hH_H_Ƹ(4-߲c'$&R^<=)uD/HR[f\ <2K7&ɤSPJQR$Ǽ٢| #ތC\(9~tџ'c]_lz Ei"i=y2!kފQHfb@FkdH((%b"p0|pʘUNrO=%!$:Cie{ŐT$(HR6`3"@LUQ)Ü83]?̏O?٭=K#݀h&''Q+]|`"PVS|ɡ D`?2c/l< RNE0ik!1π̅<3}`SJ0:PʅR%(537n]4= cH55Hzz : VLä,ňM|]X:_2?y6g@юfB%9C5Q2sg,KD d|쏱^I}⢅S,c!-3GF˺,7zH<28hcy4NpkИJ5dЖ1vtv{ֳͰ@F}`+X}J7|7M i8*Ĉoſs>,uW[/4LUݏ{8=W?#6mSmTl  VJ+Ss"ޕOZ\+sW9҄xߏX#Sex^-8FyC g9XX -@Dž@`]?i7{ KB2m?]T!JPwy#_IA4.%\#JyL!{[MLQ,8/d2JYH["%B vIӃ9Eϰw ``=O r55qMu q @! ,=W"3bC-cɂl X^okcrwnZGJmy%ϬKXZk2+ l.CQ\upE=L0;q#e4̮sbO3m!}ŨpӮ6^mZF"<2R:mb-hkp*lXtJsc'(wT$ɩ"I f%z(Vl~K[|$]N9^;il\JX ]u;=*,l3.6 ;ESih*h]Rs.ZvUuݶ|:;ذ -cA!34j/oXPR.`U ^:es^*kl 1Bbz!4(%cCO=Ve`c$k|$?' ЖO;}WkmלGs\M6WokGcH<+uL5_^( 'v4vN?'$x _Y+\K {j"֪I潄| 1~^7}}mX /#]v02!16#Q(IVVէӞƦ&t6UeIԛu;-v4kL†kʴ︇=d4d:qɖըˤ*XAW@CmҚ_bߞ{ P#37u4 My|ъṦSe2,,[`= Nb`Ynl78A ΜAI?yeo%*&o皮o11{"KQ [HܖNDI65@&\l~DP#ϑ ARPe 4[;|Ov)c2]vBn,窮z\WǪ(r4ەoYOoEU~)KB)q˘CRD͞hckݺlc4$2nϪPR"l(8YFpP=e5`EmtA#C2$/WãoyOt) u!+]2t =s^oi5[[qkpiژFQ*P: tx@':m YccW7@ϳ B r}=SpCe vepmLR|1*WFL8ӗ7!-D-[SKPqbT  YbeJICF`k -V)(uF˒1W@lDtjN!E2{$co|hQtj`iqfBPr=][7X+}i|궍tjM^kmS5dj&)$!b_vIm\dy+ [1EN\~f'Z`L,{bR֐J*WH`lmA(5ݙ$]kC\S$zmlX9\ǟ\xP"D+g %۶`QjT'% 7 CDt}'4LW ҡ:\o8o8pq~vvxm OiZ76i x'ޞ_$F4f3Z€ȧ 8R'v=u:(u(jp"f՗ $Fx@_#6 Kp~;|ã8Iϯu,r-mӚ3IlmŕgFoG=\E fg{&\pew'|P8_PQÓM$ڄyPzn}%o>8c'*N%ۄ膠ƙ:'\ƚ{pFݙ-Bl8LC@1,&siݱi]d𛳅Q"NА.-B$x6|SV!Ы77;w 2VF)".zA' ( `A\2fA1ݚp (Avg.7}`w;fc4mLH^FqmWթ ҥ3*tiW@%2B)$]@ɑ=7 TFQ>4OD`a5I|kg8,3nL0[IDIW3܎R^[غy`po\3=Z O zGvgNer/xqg100vm {xT樛*0 o(I' s3\0 (ꞙẒ0fG;-;k]9fN.1G=ã6I1$`>id/b؀ 037zd$xKv8`ݗ垞ʷ X+ܡd8XJ~oK)f?ٜaB_Mۺؤ=#9[duB))mzG0Ӱ `m-Hn#Y#Xh.765.ypxG[xT ۤG̗(ĠKB*_эlF{\>E8;ߴ7%Y =6Ak&ڒj:I"|c;Oy2&)~MM(zv[#.攮-V\{n `B}GfZ'3w3 jv% (/+ٝF tA[?pR-Y+2J\@٩C;}pxA%Wy@5"(2By4:H3``ŶTH+rىY'ѷew}, 9>vXWcãÑ0f.;s\^G MD٤.# >mfR?ľ =zf V*+G$3̓ã{&~_&'xueR  *n}ߖju^(x}6?wġcPen:Ќ--HdVZ*5U?yq0W MF ãWvdGٷmuz^(rO~ A^[gPpKոlӸ0Lz)3F\f neqQI[pP|,6\ .,T$If]I>?㽽x.)u-$Oo:܎-cJ M8[[PٕLSkAc:W|+APB>#? a__aE_ >{u#nm72X`&{nG^x ⼦"6@M8S|cȳ$KH]cwOZњpT&:}t08ٝ "A9?fIesٔ;$,x?6eޢh$  IDATӒ͠o著*V c[ ZR` US%( 3xW֯^7ܖZF@|]G|ogz_kZ`\H* G $u"ɒ.fXݷS8k y֟aK,{Hܘ)7Ե ,K007PO(zJ@J/z33?18$X؜i'AV՞=(x]cPFm y=K5'lߒm] 0fesJ$+<28<:G82 =UaBo?o kn ɔ#>eI$AXF6N1A(Q\pbo-gK0bLiwd@+:"ʘ}<ݙ+jyBnI N_t ;s/d<{q)5`~1r>ܞۑFdjDV}/G m"$Vd<|DݙMo$]MXK|=TãޟۑD'`PuRRV C{Mevy^ݙY\׺uhT*ߑmѣ>ۑYP2 E-9]*Q'qBDٜi}^} ˗> M u_AЉ) @}#\Yo),df?m͟Tj._ ãyO=DDV39__H8dJQ9C hS7wQ ,[{yᥐ?VTeN-}s{02b g\NڲL26`|>@hU]ãe5H69+aG<@vmNl/[L]դC0W_fIQGw>z1χcu\l$.=KrjUKX*'O+:ՀhMwf/FҢƱ:'{La55Gl=e|3""yĒb ? n"YIP&Sv@2 -_%+sӉ%"_//'\5 Ι6Sc+0K1|S @,ŋ~:>tjI$[7(sY'!/8"k:㨬]O ɵ(B,7yfOR^H XRC5ྗ 7M1~U]-Y &`;jcLj_~BK/{v\l$ n˱NF!Jye~>a3$Q/a0YdXSRWp'-{m,7tK`Fr/WVyAEo 7$.Z–Jr kj0,5&?]JR"DZCI6\ɹJ6\Bfs P5~e8 Nnk \,cb<‚_&C3I\O򉄛9~{ͻHX@d[Or KERKw6tR)-7XGHI>"8riM:h ] ₤$DVj8p 'm{2:^{deJj4-_]O? `%"-U d?~{{ 0g3f.뢍} ?PK`1X)k%ཉ/#.IxE#+5CH.aSHVrϭLjt0Tuk5tj}K iIJ]x䤙ݤHr?^;uv9$Mobf@Tqeu8xcV'ߟyI%|M|!^}>kG$%h:Wo-t&<é_ٔ>ɮKVT.B%j{]a\uNbIQv( *W.E(z~gew>; o)a/X,3kx3+)yRK"Ef;}bZB c2ar\s"LL`)|'zJmPȅ)dshh| ׭&K`5L 1EΪx,8W``xY^bW{W{[WhAK =,Ze!yJHf~ Ɉ 56I;̕Ϭ%0rQ! /f0 YWpYQÙ8!}M/EE ߯HZ^IA0 2bT}jT(+KWnhYHB]Esgܔ/5ћvCmq4FՅRA.Z=L"?e 6͹p21]DD?-EqWgw<9iTc\CW=r> r;bdۑFX3Jҫ:~9筪NsP$@DΘd01b^ha.cxXH$$$$4 zrT] g7UWό0kJ=UIyo<9$7"+vynƻw>|q<xaNF6io qtO{?:AC? cxU!{΢ `{._: }'9~fm,~- a?'WkH>ZJط׭R~w;~ŘPI"RWӯh/߻}$*@~hH7-!:F#k0?9|ӹypTDFhȷ-P,%hb$0_10_NyӈUJ%s8ؖhxgr 0F,\=5Q8;߷z N~_.@ϩ?k̍$IN\ p];?l:a Z+w޾۟x.u|.?@vx~B'sc}#"2LD5T{\y}ڟ>= 7;ʧMpt~p$0f~wec6X,"#FhԯanCp!X1ydwX~~,kJ,g{krWD |~͚-BUN E:+֋m򿳬!|`0 `h;uu/=ֿ\f4U3 L/=e_7)gL~"zpl^*Ⱥt 57=azAA%</ZxuRsٓͅn+˼ֈȚDcFDHсV{_?c5\i] |sE脨8O^jWK" "@iW=wf&;7n 7`p3y~Vٻˀ]i+<3 ;k3 ;iͰp~[wDZ17ߛ(@۽#YB?N"-㥝j@]kR" ̍w37~sW 8GD%*-ۚ|VKADpn'0F[)Jm\(6TAȓߏ Dtؖ:W晷078sk6{]-"'sv{!`G][hc8wmZUhFS-T+%V02چ uH-"r=68ʕyTfantDÍ3+w(ܼ)ˉ.JjYJ:`VTO CN_Zk1v`ŨrI e!F3f!My{\S2p"ۓ o${L9htn|ᵷzO񬝶)wm=@x ~G__yI@3}='2wi}VםLe[6Vh%6UDiu7?MT<O>S!,ӆ JhR)GOWȅD.9uoJ+d JNѽ3F##Fcs=9򮍵Ed07~ćK +W~3#2у7+tbw!y&gEpL?E*V"Vv@(@`qa=I8ֈpl߽ehL Q%,_seoo6.fn<||fS N=?ʓJv -)CQ*3D,>+P@)i3%J@ d}A`c2v !%@5c[ 4cL)//. bˢ:$61n "CCܳ %X< a` i)]|O|.bì0e ӪBy @`Yh2Ԃm͎6)'(l=OoT4ߜDk`2ʷaP/VPԚS4ܚ@b$H|ƶ''6gC*m miw8P~FMDU (@OvMm)v3,/+dWd歗9&S "C}(-Y˥2DJD V31ŸyW/.͎mokosy̍e27ƙg.o 4ylPD(= zyCrlYh3j5zT7(% X)ӳśko~L8{}U FU1VgDOf}{{ [8"LԹ7`2~t0CtΚ Tt>屎Lv^1B v1"-;^@kދ>"ZطZKY~+@(mnO&_爴~=}sӖsEpiZt'`ȃ)H"!'GGZ +X6TP ݼW$3Q@@ @D&5*6n$'i˟mh3|.ƋC+ #b),Ja^1ޟi@g N'c[?rRٛ"ywc 8ok d1;@Aj  'e#lFa+*r?i51<3ჳMcӖWCB"p7[$g24o?U5qk|nXRUx3V,Gj2x@i>HAh=:Ԙ.=vx(:ϟd$z(ڶιr֏5T6zOՠ[8iDbjPQUrWG\0 {,C%! BPPP5pmxW`5 be?3%XP H(%"PeAHpL?eDp/O:%X̂D|aMDiPm40-_cw[XJHn8/x(" R0 ( iE D*A-@֦Vb GhO8%vEoDk @N02\鲀Xg"Rhy7œ'PadJp߾  bՀzI>m1FG#P8_ %-Z 1mQ^>M1Z֚_Eڏ_kv`.0r[gܻc-IXsrh+ 恠I:H 3t[=Mq< IDATKp$;B}gq+?"{N3楍a b@/zF00Ѷ~4ƁEhtZEaJX2d0Uuh39d@/LR l~5?>s Vf@&PO\~>k]؈xm#bXq:32}@pPy" v[Xg?ZrU~m:\8ѱYĊP: t¶EpmG"4cv_'"a"EU\Uƅ4izR [XsL}Ed}1w|uMt0ѱK1\ cǞ>*O5ono_Sz͞ 7o܌纷y/"P]QU-?XK@R4:);$¤HR w{!zh(bP B݄ eDA`;fw#enVyg-q1")HR|0a1zWtPJWO @Ӑ ;<$ k)u".$2D{taHC Xu+kxхkB1VRg)h 4&0ڙ=CbN;M7}2'AԆG?xmB9RvhVgrXD3vC3O zڶU@~ L8g-MgI_p`E$DthQv (p>gcɍCxA<묕NC(R!"u|3kL Dw#QHfd]<+=Eۧb<|$LK*IυMxŅ˰lq- ({"%+wmD>wi;0?ԯ,@oh? aO_LulkC= 'K vJ :s6}2SdB|MλaFR=O-Tྃ!>~:=wSy:,flJ@ *`LQ n!*o8)lnHkFީC- ȴM˸6&[J}z %e/Jl0 *(3cRTe F6tT jhEB+ġ0>6FE0L]ώs.^yp U_zEDAC,ݾ5AsOxdjx/G1Ìкk5;z#;;S9T2#5/\UfR`Dҹ^FM J,l{K^hw#c2vئq~뚈q+o {:~KirGtY)yp28fG:YGP@P7BrQ{'vwbX,(lKޏS^5? !QH-_]߽ڍvֹ Z&ds>@|{0h)mmenOܮ}aT`! Yq@vs7 fӖaigy'][*/B' #6 ?sΞ)qn,=<:)V gAkS$^ġmH \͘+(؂ 8GB\XwުDKWO]5$OHz%2 hX O#  eWdPޫ]I4'M01I$C좛p8XM[сfΖ2j4 ,>SsJ`d$n!#:L1c6YP탉֝]L4-AVՇ|zDg瞶mф3_cdSC|N ?|oXO5߾s;Hl37k>9@adkmVQ {E=HX>g֪x+XA `Q2~Q[GX:Wbp8@H"#Xfu T'tnKǹhM[^ g~ 6+왍kE&Ft $\bmȣ_4QZSI,V[8ąp]˗5;y.Wl4[0|oCm`;J O`vfMt:=N ;hmŘI//"ێ'S l!3b7~0ψ0.Bq +mcw,`rߠ{?l9 4rŅ0΃$VpxێFP2tᶇ&‹6:/4,k8 L@,i0 Y<0bv&v?6|h|GI1KnoB1Ɨ:E'3;b_b\'qz`l\&S aŐS6nвycNA8Tus*!.*c?cܙUTEXD!7eSbEza,$NNpޛ+밧/F|_lК߁W;`럁`ra/M)o uz$4 <)l o)oDu ƎL=Z9A+zI@ը;!n`s_ iѤ{/:y8[Rf-O̎XBA5?< V_S Tkq啚4Y M C`r?.EkơbSJ w@D8㥐̀nyjXQ?s3-R9л}R(•W=_ Ti8D~21W-'[C+)^8.yb-@z OF@g7>0ѵoJ`[|nS D15@{I΀،:GtGp% G n2y sp`F40Ջ # ЙBc1I8 L #S+V0*9 D) oNg`գ]6/Ǵ}v&+6,?W]x/.>s;ZVc@ .i/h7A̒Kx!:AL9@D„W ^(`o~IY@A\<Ѻuw/$XXhH\kIZKVe L$6lnG AH=I4at.0e Hf? kq0C!ւ!eua @t1AhJĭF%o\WXb2HAzoU$X {$({w~P PC#|AR3Ă4!^ȶμ! HlQR]Œl$K^)pz〟 E焈0yp7n+me 7)$k0mSP8 ;^28# +fGV}nuֺt U`}E5$laT+gϏG&xl?0F ~V.wqPZ\%LhB<{E ّ 3"Ğ|蜧aŪQX.#?chu o?WD XឩT~5}cJ)pGuf$uwl@ Y_bkR 98%K */OڄO}Txݳ~w.@ΟLC8!HX6ahINp 1n=Zx/ * 혐'ixp:ld-Eā@8B`03D$50l|)%R#{"NBn*n_,lAh^BҷSa-K2-3aο46Jb?&94HRr}vӤ?MF#plKӌ_Zܜz{q9/- ZpG)HYnf#HUO܀gy XZK5!pq.B46kqv1@`\̐U/RP^+t:a.xXIN} nZp$/Eۘ@-.G!|yX& [rh]2g?JRY_I;ّ Oqla-`-!ITFa _$_o;9iI˂B&n)'UzD Ȁ⁐BA:^J ؇uQkQiə>@!rEwAԟj aO15Xz08I 6RqF?Aq ;P7Jq{Jr]<NPCi\T B8v*Aq\`SЯ}^L f" l:y9B<"@Lhvq`2jW lŽquw/Ե zO$C}UH!f;7>*(B i30ؘNY~yNv"`S56 qxljWqwdx *|" D D5U 4XǦ @쬐*uH^Pydc)'i0=57) :F&dFdbN&4>ofx|CO~\\3`8%wm]wmE<(JR9%]_ 00 3~7%`nddA(yWd %f c[:X&njL!tE0){R,Likr νχMMG]^yO=T* 6w! SU=DT0PGH&Vt"%@A$3,ȧKhZ{ᅀM 1I~X:[fT* p~FP A؊Ib(#?{S.A2 E9c1?G jy]ԟu6nr_CM.kZFc珶/X*)yqn[nU_g_z1j\^DqHVb9$R"VDI0T=խ_?tK,afx~ P ~<_&NW8 О ȞB%E*D>TD`4;[W{_{2` H $`rbqkT{`pq:(OrwI K?),Vr?(Ӧ9D#ȁ%0dI,Ѐ?xDMb Me%,{Q?mbAiW&K=RUcMve?OI)iSa&\__("Ȁ>y")'NJyڱ13y<F7f|tGђqRB,?UG(ue_AWq RnXlxi WX QА,1N/׎ W(%Vb McZ *=iIa]:U7h=a%0"Zai#Mt?%D% V l) H>C1&NPeZKG%1ؑAz Q*PeD@(kۇ75qzL^PMARP`#{t܏𥆐KyD dÛs~m'g5/%-*P*`Ps?guO.:KF\O=9@@ⰃNw/|#${=JoIRaIs>E`]TD蠊PZȢ6 /^b@h(U]tTF+h3\KhV9XN`pl8!T*kI>;'r$ُbō( "\T,:w=pƩ442&3)&\{Vab&^21Fa'49D 3eIwڵKmb 4ޖA8!PTهVc}i+'ގHcj` !*A* TPAO \iPA2[9a:7+4ʨF58O@ (' {? oWQ$NK h T@Z+j=t˒V6+.&`aݖX%P8@"  QVcPDTG@.['A.WZ9#Rb^1 EIE`!:~@ \_CVv͉((rBk۠}pqvW$)Yq ZT6 P=vI<K/!;uT+DhrݴrcEJc: 溈/(ɯO$Yy10D:H0f>HtԗosEH G ?l)0:lߤ%o7amTv'lbJ8؉/oYtE ;pWkB?B* WAiޅ8 CRL1fGg_S,@2aB)VP^NDA5#awo ZėvEC^`-pV11w0 Ii*mhݖ7ͭ|t " 8@{I>hZ)R@з z OڿttIO@%2RLQvf@W?^H9#RMA IDATGBص? ]T < "xyJvcP< rh ̍ݓ0Q7ţ˻RR׽a'+0PH, v%_w?)T$ J=$ I!s\004n2ۧ]5{ΩS_L "06A=lox.B2ʫ?)nQ+B_qݚOM4tlz;ß\HS8MT^(R! ^虛>ʤuU:_bCT$t}@1L+$ (ocfG@@=#q9,9,u$ R[XfM0μb$O%iU=GNKGMtre< m}G};wyq ܳ X(d$hs&hb!-Ͷ|[K@f_X A@{5 ) V1݅icI^Jp4!0$ !qrXuR&`1mM4H y̼*(ȀqX ٥æoR'1e,$ wc`#*pA/f < ;D.T nj U*ۥGqKm/mdp⌝7ݾX`6@ AT@d5ڕ~ k-okQ'{eY< F0ZC(ʹ2q: <ę9&¦J@aOcmyϻdDi*vD1,֖ܚP\e}H//10`M: 孾g%N±{^Һ.Y&~,L1;yP~}V7R9wGےe+\N3y>HT0̅"4v:Xz/ԮkE&\j(%W^lcŀwT% Y:G)z' X`J)4 A)/,0VPБ|Qm"M'dX;"ֲd V-.&__y$ɓ%|0CK<0f7B9ǸsY߫pGT & xP j3UR Lea(@OHߍ[6ࠆւ(bC^R"(ňS +߯bGC޿ajc_{bZ:,,r 'd"gEs [0A@:ίdR4 @ $*Y uyϻ$Fdzb^C1?뵌an7٣&hqCЀX7U [ӝ9Z87Lq=t$1=1Xt5Qli4!rȵAg(T1lZ@dmI~':ƫ:t,}¤)S@v= si,5x=F1Mُ5πB)xe"QLd@2P?ە.Tby J듾;w'Ɔ #g@¾v@!(zpyRiʯT)FK.)LePUC\ͬE>i1"?) H6(@S _Rml}0~z<`5_G3꠿.qX_Li+J@"wo"N=,ՓqdPie1irB!.Ik Xtm_>N' +qa92$IVؚ浃إ'>e-$I9bw-NGtCJk˅(J(1vinTЋZ"6'$3* C>WzZrP8?<\ ,r_E##NXhK 9&kȑι7 (^c"r`U[;l@8sVi wBi;GY!9WY_L(.&J @~N^U~f*sU%"y,Kv_X,kwȗ -a@bCwMe2eybg:vf=ON-g:P6n}tݑk 4*L\~c߾CK&u\l QJq"*IK"nS)`pBȃ%#NQJw>l|tm$a }X *י&yFc9&!ijONjS13/ue`^_hB9`Nj=%sUpi{ K +"$AV)z"XDۼ!Q_g J[lMtzQ,ʍN h%Oso S&p°ֺ*o"ٙ\/LQ |ӑ+ CY?[ T(T$Rg/%E5`$ gv,ceY@X gpV+N 38A3D`#-AB K5:30;Nvyr̲xzV!.Ϙel&Kpg#HJ#qd}lKdKB?7:bK'BYy]kĩӕQƱYaY4+;U nxH"~Z/;1" ֝XV -xۏhX޴z׶$Xʑa cwiq @ ) g5ĩ!=Uy\Gu6w>cK6pL0l@@KH#$, _ |813@ 6&N Wٲ==.w:?ۣX>JO?ݣugs(ϒڈXtk@ h>S KJ}% P~u[{z" PȤO҂‚V/R N=Pۘe$Uݫ[ez ٕ_S54J* (.C`CB:jÀ}]Z;k3DNX]j\w=bY:p#^1dCQ[tԲ1g2)%6ɚ 3'Nw@]g?̟_Bct"{-SS<9$ ҾsD H 0n{+ڡEpXBP  ׾]+\x~ڹv`] lY&)!r"`H]$P) 5v"4<`atGmy#+8P#PtWs= Ly`7زTͅ&`)*"{)h^ i k k[޻ ܷɘnaS/KXHdZ!swA?T@6 ;-xNZ2=c'EA`p*m[;>瓫]MS{"LmniɊek-"+k2t3G /`gH4rI}R`XԑmfCЧl3HѻXm-ň}hh7133lD$Z`:ND Hiۤ %ӀTvݶ1]9[_i-`[~`ZjC@rA5K JW r+\o rEz-ـ`nd*u.P dRd.Hi<ZgT rpeē-޽WTJ7-F Hg-3+BjU#fff"IP1 3D"}mu^;k54~y897dO=@ tꚯԇ >W,J*x3$ִrlcGZ`ga`r\~Pl"L`³2Dl֜`@"8YQ-p̴/$*ufUx&]T814 ,bH,SVUP)x .HUf Z[M[ORG:;JdCM+A}2ξgm}/i TvE-R*ayN\PZB= o&i]EevQ~Q*4P _ TLHw@_߽?p&:H؂7khwue !R*}-DDE(ÒS Ml%FH۪Iƺ T3zǦD0R2)E-O@)hA.iP۶Vor ˇ]xUA -le78ccqEFو[Xl\ Q_k}ep.d)@.9  X'4ez;@R_d @#Ґse㮊_LKyumO/<[毈>J2PST=3̬ b|7z fKUP$JB]#b;(%t~qMS*[BXE8͝%˿:T+ڗ>3eaI\Gt>~*"|/-r@|C,25 ~BƬaԺ:̚ D:f$лx(^4 |'s5 @/>ZZEvv~xɃMdvKDȄK+_X𤊔~۪zp<uүDDʠw=>Xxgi@FGV$HO诠:>YR d9291kHGM_ʋ>|'HٌcGTb8P,Tb?+u;jU |{QdJ"ۃyFwE]SQ,V^{ugɉs"#l(b>y_sp[rLV9WnQ~t +·"V20 RJH[en3%0>يsL"ڬ^s¾ ݚgf:c>˖Gs.#Ϗ"zh a"pXxΠ;ᬰaݢ}~(͢Uȃi9>,UET%PDaGC{ƞ_s_^Nv0dĊyfrظq=lF/h_ʇQzS!ksw>'e[ ĺS݅kԷ6̀V9D^+X2MBvԐ\uK?XIQVEГRJ#+&M]1Tn]17L7!YAckTE9f>E-7 Y)$l( btQd 2 U #fc,@ K՞tPbׯUw gH ij8@f'r?Ӻ޾F0l.U9@q%̡Q<\/lgbEPbx;UAMؼa|¿͙av Y8E`MCT[QB< 6ǒ3caiz`Ts!t|O]6}a.jDq;.Ɠ?#m<_#]Т22,;d(`͆c j^+yHDw ޞG2!nC#c{sԦĖ6auN `XM>(z<5#?QյT[k#P2`tWnzV(9O!,_$ z7NUǠļ>U IDATq4>dn)g^\iS ( QҸ) Mp… IY.A`y]e20,/y:[݌=|]2V|(q>I?w&0:Ǘ p03] PT%d:{t`lHK2R(A%c7mݺ.AQo ÔO]cW|L"9=%, 4I˦e4$ :ePMX]Diڃ'aUZJMXE"9w/8j1Ev̍2l*X6mU)JŰIzl,gGgI!D)يhx{ f/xхpUy?~|6*! 9e4a1if }] Gɇlb ڹ"*).o\ 6Pgs29)ω=4%/c6Qp ^ PRN2dt ʌB Pq^ǝ:U$EtEcW5G 5ߒ* E[,c4ءv~[O2U c"6_F/;}}@R*+R6SOc 1ke:GmqeAMeY8a]>ˁ8_BQ*Ž<cϏbpВnWy)hBO$.CkB =H"<?pRŽ7MaU}(=,z2d~'Eׇgy4|9f! ;!K{z/ ԟ7x_EJ]/KYBؔek+H+J)ytdj\ʈ n^,RBUM ||vzb!70DtJxQWm˨̮m+rR ?@Ue$ A0)ir)+TS`?MLz(9p31/NWm(SnbC5}0B >boVA96+~,ןqwo}+8 _wПVZeledl*"(c- 1<̙jr@gfa"Y Fn ߪ/}tzNG@Yb"qk>xLfv8/5/ٿTJ_q|,kJ̓$ XBy(9W,&(,km\V %,E *[.!35ΟCH"ҁRQӱPj@m..%d~s-$W#9>Hupj<\Y"+ qP_p`[SxvN%S:cy\gewbXݳ U\+[꒾ie6ds>D7u0uƾ 'nad(twc%9eRbChPdl¥'j *QW3e==3_?zچ'ܨ3 ꥿c܅9הLTPR+faDapETEĹgή dH)rR 03Rm=X_5]s_jڃ~X]3B4RP FJL`&FPѕ y(J 'P(p<O;vj^n/zg^Ϩcə1Bq rp @rsngx/G=UT an(ko݌vZ|xU4 mسnUUtݹ=@)JyP5* )Ȓkqq-E + #/BlAP5R! N(%b wMjV |xXS6b8˚,n'I+t5 (RF|,ذx`XZѳQ<\&J1Ru@¸By.œڀ:a-̨IPj~1WA1`jXڌWš:A ! L (!Y2'E`U;#gZ -8vB,Hp@^w<3bbBkCezRGN#&꣰m q=q07W?_Oxaw~a8SyH.h6Y%0LRJ\48EH[A, 6ql6]x_jŸ1CM'~-BM] 2Yz7ybŎtkS#~NAJpR +zW߀لuϤeAzUjA8cd,† d0BAX@XDPBT c'f.(<Bb[*=(P젻BP IYOa(*kc@&EXHa7e]K*-hӵ쟞ۺ Da}S&BaUoeXSiaLY@:=M@qw!sBkᬽ,=T e*Du^Wp`b0zZ;CZ(&u>}ȰC,R#y-vlvڂ3ˠT{ڻ韟 u{3LJiA?ϗc>:9:xN1Wt5ظV8 #P6c|+m0KK%BAT?ҋgGa3eFJQ0"CIHOǏ-P*PrJ(Q,9Z9J( K~ۛW3e1ZO\;.;PVakXibTG@CYgdV:p%Sr.l"g@TSHR`WWG+UMf1b4t_opN_8/}o*J^Cly\(X.Vz?CO zʼnT}@* o([4X`fnh>Ra 6q- TZذ 5iV5$]V,+m-8 @*{]Fe)[vH2>#]l`TD*`@udQU5mؙWMQ`?̒TӇZJEg_KEn'Hz_n8-ިo8@ʩflE5]߰ח|`nOɝ (<5'Ռ}fҦҟY] =. (IDt!'&I\+.N)\}z.\S.'*%"_Zpى8+KP}iZ j@K]vq9i" e[R`(05D' E ksUv.SC0}E"sa LhH-@ZP6)v][%[FV>:3idlYYSrqwNBWЅ'wtHDCMbci$6 72Ũctƪ,U26趔aTEp_&caAW5a;[IbW5{WI pYY-JLR6EQqرp~kO5:%풱^IPByAnr.ր."dmā,k%۞^?Lp]}1Gcm%[p 緌n|}-͸Rߔg6jb lSg//ZS6܀hIy {/^]K7]"ZosW@1WKԢ>%"4վ/|]8B5'KBK_XK:]p×kSj0׶5*dSHOGH,G* mCOk,S7e#7"AdR;RD3zjMqp7Ј~Lץ pZ'격H9V2`U" ) כ]`o:&M ~IXߓUs{yul#^N?DUZ-vFJ= `}dfXDhpQ6l> /AC7߉Me۸.LBSNK0 f^ \a Gפ,oS2=TOJJ G{3؇g?Gr&@KBW0mͻ:"iS뱾'5P klNoW6c_fn]/kC#c9!.V=~7,s?zgJ4MxA)Ax)-z5aKN=ח8k'q]KےؤHJnފ@o@~NXz3V"eΐDQeU#' mt` )Aʠ 0`WK݃Q&= 9!NO,NdB c_.9uB<#&MX_^4Z`&ɨ3Ϋdy:.PoWtHkW+epP^Bw7=ǀ^@"mil>v R}{=>Hg,| (yf^] t3 mAd 685d bPJJĪ Dw=:|_JxMk#t [S3RB \@Q]y˥=xuwjdbI~,dykғєڌ }Y.tװn (+tOP4aku /'̧$eftS9dhdp~-}`6In osko_ЩYQ:sԷ/>%7?ihd83ƀNӎ,a$srD${`:%x%GT#^܋u V5 |n7MM(z ڭhdޢ&{`ukA %O?\Qr x@-vԤ-HS-]q9X>oXvu|i [M50ؔ%bC56W_yXݙ'C33hCRZT 713F_jRki`-gt6pMxhIPZ?[ oxܑeHB//ӕr?'"-XĤLS@(.Zݓs̗x@R`E@s/f7K:|K"J\) ,`+M%蘑o #j8}oU&Њ ?̗+}%Qh)אƕ'c TQcTc3FnlG yOB%dLڰ x?Ϝo0wy]=8)Y]z9ơ?!LL1m MoyST{ﴳ?R]#sZ#ju }3xrvǶ1 7`V45M3,I:MD ?X0ho2ȼ%w]~=rl*ue伇EȤ36Q&MHldS)ۂm 47!4MݧX95!hӁ3IT%B]pwo3]1V͹Mt?6[{ Guq` Z/pαnmx09%ϟ|=I?r uOc{lt,IgZ_5Qlw kK3;JPޅ-zِLLTJ>Q]=0{?b +͹8&o@ht)Eg)R#-Ƥ1U&L1C#cs))XrU_n|$S+ Pba &$IqW /Yb{MJDҨR뻬4TTo5s8T9u m:0o}>?iCf' GL ω$j< AN~s?vHt_7?]@v ~Aj|*)c"d$N/c͟ZZ)_s΅D?FDn8t$E٪|>==?!-ڃQG@n8? _ݳ2= ]@J- RHCq~J312 u68z-9)SΉ)Hq3mhdl/-0Ʊ`泓Z]?E(G7 ^Z kp/[A;4I`@1MC#c-*,TAto 3 *dcdh6d[s|aƣ PQ{2]C#c" ӫ>9AJ$o,%h|c*fX+dKRf/0}\^HkԪ+.I'P*䅃-7羗YRtIMK$f~thdllpd;^WʀjrE-77G7 ~X^< EfZ-[01qxww$ <70Q1FnpK~sHR-LqPa&^[aq2C~jIe\`Jb3+(G lR ,+8c'I&n( +lvDevWb.N, /$ ,5eI00Q qaq[A> m(`8!C pbdlW6V?(!sy < PH 9R ҴVvc>>bBqB.rט0I@Un`IRjDQ 毖a=kRcBtg9;L!iQfN#܁FzZ"kK%ЬTן> PG^/"Jɳ]_| s=UI3h`~~ qe^RfN H l)[e$k$JKG FdIu%v˓ Uw/R #Gz?я{I%%,HIX@Z9:⋽};@QeE<Kn? H@vrYErқţ+3o ;1%?3CLH4`ǣ+xD:/KPum"H"MWf? ]|˸g$B䩄o/|k_ !y=X2saasGD%M{mFui˩,wYJ~?SH<~d$ح-ѕwIXwD*Z`:I(E,zvO re\̝+%LIΤX'vaF0.{hc~L^mbg(ݵ׸skTں ٟ_Ʉ @w?~0sR_^KhKOi3$c`#Pj:)ҰPEY܄ ?\fa$kSKy+:r%^Uk,^'3X`3q\+| |%|cz ٶ/>0ۼx& Q;}׾5QU L< ] oXHsc' q,|f]ygLqP'p OJz?h|7xddm_)N +iXU0!A{S#Qദ/WIsrM%n!yp{.!Će+|Ɩ%"UNj`܋+3Sw,A)^p$  g%f}ko]^-PFgIWKTI3Um>Ujy?0hDDDRf*W l,*>Yye1uO@▢( oYV>)V| yeR 2ք-?e:lY|̋C# w"3D Mb{tNZ[܄q7/q@p3JK+:s|3N?n2|}+vz4z@ZڂV?nYM3̻"ص-($*ID[Yp(T2 _BS>`gtD˨a(]Adyiܫߏc۶uŚpGyeU y!/C+`s@"corƫC擱!KKZ+Xf@.)$]*Q?IjWa~ܲB33?d|SmDEDBaEC&)JߠzὩ:EѯXy޽yWG7pE5GØK``{ >O"mY]ut|zk ﮮT;iZN$"lVF=ϭ}UK ЕL{6_?m[o]_#O0 ",1N߰g//#fn ffeda#ػZf%bs߃p+ IEf̼k6?oV@| ~& VxocԼNRm>R)uJ|=obm]U*['G9]GDW,7}Um;>\V`>k,G!v<4Vg:?9-"lU<%p["82M=N D5BCFr7k?_spvTt\ɕpa@i`3' <142VLrȍ|ftvpWWuߋ<>A<=pZvl!"?3l&" l08ƐT<(79B ۈpC“s_jn>rsIvUKiiDH)W*>TPJOUwb166?@Rjoڧlb{pi_dBWXJ+S6v;@J Z۪m[kX@3r_߳=a J Fp,1t7@fC8}r_'D{7Nf$P2CѬD4Ny?ٹs3?^*"c-~!M@~sx93&.fR h-dL@C`Vf~{=ҀලoA~s. ytleߵn< ^TJf^ޝE}Z{ҐKHY#п%"7?!Myo?| oBwj$>\a56k{:L2 \b#`_5@&&"D aiJߑ"Eff3>!!R9en 7LO恆kt1sB٪c8h9}|RNxTrK\*%8EgaqqENJ*^q<V*.qJ*uŅJr,5 g٥lRv̅yCKMMVtv* yW2^114-qg!@`+0 `zhd,Z_hl|g\I!LJ)&?"{؜3k ]"D'3󩊑 b:m'i1 9@ q:]el)|NˀRLH (It9eZGCm4%MD ,o`U1lf!%f2sLGIw?W3R)4:zl},6{lRK)Ȗȗ*%n3;]qwQG7 fht+BҲ %b7kau%dQ=/P0Kb$[uQ_ Kv0 p[FYR̻~WSt-zr-R:pJ%b1-y_Ws3DsZ]v;'w?:qqvW跪jgԭy$;)8DLbK .\p 2]\.^Cv## q;c;ؖd[duknZ=a]5眖1svZZ֪m5Zl69qMsϟ%zM}1D0fZBAŜŀ>w©/0 Dgz|7y,0扅 &~1ƵsXY2fm_<9^}o/l:C5<_~m2]kp:XYf%9G<1{={~}v]p\Ji†ύ_.\Tg,V'덙3ܠֳ 1K\q"V޼fmxa Kpmbjkq`$`$?⋏/ZEG + ,)as6H ArA-zC<扯ͷZlt4扛 f^|I[LL0`~ 2!5T}'ۘ[6P0 l`~l[?! `XGBy` pQi%dDEi4oH%_ 4Oܴm_DD_ N2 &F&3IUBGgr?$flKp89A d0I ҂V 3J2f[&g 9:&ȍ[ۚrTKl83Uy,(!ZSsƇrVtK#$$2JVK'Yoner|Ǣ҆.U~h-|l93Q5l'_>&J90=04==lj$lyۉnj`pUWn.7j  &](dZZm#3_$T JPE{y0:3QOͦO?! X r\$t%Gwoe`pK/##ǘz~1p1g7q}n'nv)3_FD{RמeJ}5\eH1%3e%C?1!H gPd*˔ra+vk+|߶m+[eFch|@ DZڵJ36 H00I0+"ȹ0RHY$jD_hb f<_%lyb<~o2f.1\Mf=ׂ1`lX0f0K.mI}cwM40\NT^_K~`=80AH֬!i, w2yOl쁟+0oG`m7Gkk޲` ڮع,1Y2#su"Rw5#Q-k*~ Upޟ kÿR\@*K1:uItd- }Zc`hks !%C3>± mm_̨&M55Wt`a !T`ՙcH3[&/Ƒ~E\?ǙeQ9%plóKA(-) 5Ė .pՎճt0$ R>ǘEol|'RBtzGnOD/`k3ȗ2+ < ]7Pp.7iɔ @ k$=J"h))uU2rem-=׼<]v 5Zn6;ZXke,;z:SY\fΥngqeL{qAh282H"eR$YIFԚ"EGfL+9,CC?h=/S7m{>w!Gim8i Ԁ\hJyW7~&bFW (ͺ)3y-c`9Gw0Ƕ2x {.ۃ`Mȳ5 T뉛3ѻ`\%6ե̠M6G\J,͜f42vhf^: 0HF 4[MS'"OM~(s~覆ZΣ  i#gML~BmMMLfR._!(nȹle(@]2W@ $)=zx'>xvȍ[7}֞n2 .=%@dLOOg21w;v {s@a+wJHO>o[) > >RI}9kW{Zm 6&C'E1N.&ښ0vEW i%T,IL IDAThP!LGwʳ@=01I$ j橓k]nƸa` dy]m$[t hbX3J0$)1H!ewnȱ|- ǡoj_i/3 d1knyŦ~AU1>\9qdoGRAy>C~F=-$/N=ﶿ4dy.5ԙ-ND8Χ`_o{:v:WnP]usNG3qšuW04ivᅆrtF:n)L6ةFc6ھf4匽;+6(.(SU5=$ L5~7OD>: ͺ s{^ ێhDp9ABp|l$0%' =oGRK#+dxJ$ (\>3&80 M9ؤ-^]}_oZrY*T0n>p1^hnnkmb5PB &H P"oDN/iyhKR,53F3e436cmk]]0D- Aee~,J`Bzk^IqXNo3-d_iI9Bj4řG{rC?u7'lрrc`{L$!HINql4s7 aO! -E"YyR[y iP]ER=QN/OW % hy Q<-=AߏWRyߞ?BW10őHfm?63~&ٰgCVAxvښ״5c)3h0Xx=XVG|zQgרVF3"$gx9\sXw9nGZC18?ӳxp孞D@쮛Kϵ SmN"rѠwܯD/Yl wsPa {Y?z1649c(R4Z@FZ_3 aSO{/2=]U|[eN44dD`0Rʑoۧr)pSS1>pi! ± w=r?WAHU}"@v8L#_lA/y@}k0dUjNsZLmfrYk}k,AT]>܃?9&ȉ`.dE8pd/b V ߉>G4y)F#%d,oFyW˙H@D EvcEP5q$Qټ$ %`H2˘ a١[( xPH|7 }x[_jyCd3 ]Xf#OsdgўxZ}餾mͭ๣H1#hOOc!L0 ޶X;{xn$fgPx2>u6kiy!fI$楴Mc5w@O@\u" ݏc3 ba)#Nc%"s׎pt.G#3vɪdZ3gZ|voyV)l6*jn JZ3kVI``5VC!?-G  ."0H psP^/}lGCrTnGř4`|>@5#Jʁj ߜha)s#**faM֍`EtI "SVSg6Mj#wWoJΏ>tԂFGT9x-K@Wqq:,k)OՆAa?"JDTiHЁN<(}T=i/yy,$xAdOƩs3&Bo ѯ\9 R`}uW_A3m! $& `q@`8 mpf1Ck6lܵ G^n#oR3ЉAn-^C~0[Cz7*#PȤt6/@GyŁE#/ b>zO"M[x>B53 mFKE~ G^u@z3m,v %HƆV@k=@WSGN-b;n"*\Y3C*WpgOF !sgMHXe&DC \?ںibQ]2}'́Ѿ#H9N7r\)( J/-bJ=0b +D &IϞĪO1j#MWBG:׿9+䶩p:[_|l94N&ދ CpLYlkl\"u2cAe2H d~ӿ{>n.np폿c8 ѓ]+wmod*N^z6?~' ?kLE?EŜA  GBU/PQRCxPk^"h[ g[W__A$ G%6v T/W}?/~)d\G5{>0 ءQ(Z2 4Ck v\v*u{D#dZ|~/s \juFz B'kx@\]Ʒ(M; 3L= ~ЙoW)AxK) P57'Ik p\Fc1\r-7J}RQ-sm{;y$(6dc΍M`.5ګ~PߴRgY;>y>s:>"()$ NgAJ`SR2?[>0Ti ԳkԢ)$An@FM si)d}e7B]oЗaҬ*۾ h"Q!@_ euB``r!|cXvέAlЁJ:XsLChk]*6K9AJnB"+}E RB̌b(w6v9`7lQD#9ƀ1.M` D1л߆lfj{ #:HgD 0$L8uT9cK2ۓ6Xk?򾟄TPX O*h&ǠD'6@R!|棷a-86~T+PF{*S_灤֓c @}=6PY ]&<B¯7m(RF2a 71־;ػgO Cɝ/;rnt3p;w:y[Ai+/k6nR }* (D&tu00lp15g3oz"osa AUh%ú.nTFv\ b 1@80x՛߁ 7>KDj#HVm`*d>{DUgJr j@mW#Y;52TJWLt=;Uύ {4ÊT-=xL?o :Kїi'^(4h?e^ژh_Yl=AK (U~.L?j5%BF?/F L!ׁj跾66:HF7䩋V}(MUU;48RZXI 44R1B@ ='?IGyY&Sb[#mg$.kd5~|#(M]H㞳{2Iy+obT[k 1v$<mFW?0rT@y6X m?"B_%ip/GX5'l?~ Zށm_";6a`቉qWBv9r"˭@P3P_~.1p;g\~- gQ-|VO^2!|[/ëWYY"~Gm sOlFDz.Ko-7v|WKa{V`G}~pM v J?\vBD%QQ> 8á\ !4?ak9fr lE@rۊAXPkl,& bϽCY3@Jx*ci>ŁL'!z>(%O+}*>!j*֣juZ{w;W >۠ďBTcz=<;Ϟ &ͫc j TSw}HGG.PN%#'Է5pg_瞈@yv=zy o2G{+a8Ja\7sW_`'IJxN=wZ>| `9|eBH)! k$ft$bzyQB>8_ka,h)>\k"&[JrΌ{[M@I(0GF$](N@'+?()ބ[)`3 K9cC pD *T N)^.! ,w?K7wGA€PA )Iay_!~3$WJ{I.ݲSY~ ٳ06,Er>yCol7}+_JPqFA)lok8Fv~},j]oဉ(qE\d5l"%袌ldLHug Q)"b3Ȓ(El3._=V] 6jqуʑHsaIA 4¤nD*p5OrZM Zt9W"ωF; KkQJv4.#ryjz1r}Z&Da]_@}#!i*Й;v<K!/{Z=$D}n Av쇰eȕʊxȑ#ظq#1e=t{1% 9CAܑЛF17$~=(2("d KՇEz#,9^lpfřEKG_ugkHnT/`ך K iiA0\ ?/Q٠t= $Q7@NzaN= X6v쬽lz95Tn=lX`/3<>K GIَ dx@BOs\IB}K=Ƀy[f}st!sֵS%}_20 lD+ hP~cz9ti;WW6?W5Xq9BB0kilB*~=8S(jzK!&K1Yҹ),-+9cH?wDnJ9x@a0Rb,q+D- C3JJ~_EA[#کuEd<\B O=̲guc[ N?-z.30Z}p(xulhB݀P o; 0{fw~꟡dhەb6Ղ+@|bike#|.h_)ӃpyQA䍋J~t0a$~4;,//CeDdH֫0k%raБX n3(&Er|0V#W}I86ÕYFHS6&pmVɮuTC8vE "*X8BQ HcVe\F 2!y G_2QƁ;3TcbօgD~: u=l6o)6q/_#mt UPmqjGqQ+ CE P$ J)TR,r*:D:Oӫ3GǑ$U(e?!!ozR2-,Rr\ǂ# E6c'H DZx+J ]iH%ͭ/@":t 27<$@{wAdY42Jj0)R?_[5xG+iӐRvyyn٦{D:de":iaE Bo$=BVCWrc2R6e`uN*FF`?<$A* w)wJ*_X.8=.hTOq[2'j(e,aY]̞E6 n+$u!0?3 Rb@nXF Y+ k Na=P%&|W4\bms8g^k3` KDq N.j v'ۧ\S: 07=W.MR {->ՙie#g@Z4>UR0 IDAT8&%B~7EBn[ D%}o R5C'o+% _M$eDUEBD [coƒ G6hىCW#/0碍ʺzu[-!F gqdjw@(R3U8Ͻ,rH؟yK~.1 s3, ÄٮxV$20q{A}(NwRL B%Y2 3[;@E[g(-$A\% &retнN@Ž! Hؔ!eH:=(:3>F~1\jΕ RGcB-eA BX2,8pƍO^qqM\kJJbm;Q܊8w\~YgP"Wp\X !UR\'모6*= i1 `e:=Svoo:Ā |s笹tDRy' =Ԡ+; S;`R NF#c0hPu!% A6!BT0}|ПD" Wޥǵ6WZt2r~+*blnQ\̍/]9B)22| os1'&ET׼ ڀ+XB>Aubj0Ik6zږtr}p\~f5L0m+IvVg9so W71M)a(JZ݊IR*mNy0T4Jѽ^"rs|jM!?@z5ӄ*dUk0&JT3q%CZDdl SNb a"΀5]G;[" N$6V J jPN$R>s[1!Vj0tG,> g ^Vt;;w t}v4na\EVKcu 6 UZ۟KM'`mT5< kƹS d?|+9sA6u-5BCT * '`i~I՝*Nt`(w )Tk ҽYQ2˫ZV2@@z Dqǝ7%{F2Er gF@ia pjaa)PX FFwINt'ul--?ˮ25HԠ8E?O0vNn# n!l3*Zoa 8!DwrލyJc͸Bׯ} Bjܥ,DUa<^Bwkvk ͆d]垞6CGAqEINe~B?ܖF#nMo `i~9"! }Ĺk)8vΥظu;@hr8:eT(BGJ6!Bj60`{H%Q}\WR*lں j՚8/ ԶcX:pi .6$pc\_m!sD NgzJ :Ǧm@ , {0G؍pDgM\ A= u=⯳s'?bH /1v*;v,-+l{ 0%wQ]h+ \;!~SN*8S,] V SǎaE[ z5Yt+ǺulvѸ_@( tDBDTM^Q _.?4/8-,..j_Vbz0;*lgUb%?PCJ¿ADRh7h7B,c1#/l_kGʂ$NTыJ|Ǐ ԑ1{8\@ X F FCX}^+=_+Ł/b*԰eCM̠[! +9)4Ja' wBb:# ~Ӈ̲S=Xkc8:" m$gT.}0Yw` [PG;Fm;JkD+!Ö92w& hC-0>>^-ݵ΃]N}53DΰF1Wwb|˦0G͸<cS|dKUKkc`*]y'sM@ $(17 $zJ=D9IZR:ᄡoQ̪;:m"kFƃª `2ΝЎg@ork:Al朗E4 oL vmAH3?7cakONyvH'sP1ŘgH1a)V 2* L 0TPz{'{Q~GKa։+"7IϫT*b]=2ǪK4P)2(9 eȿ,=/ [KK,EnlF s ?9ui(N@aTu$\3']s3h"ݥKԢvRSX}34g`a: H6L/v=.tj{/*O=mj<7&~LV*¸q(z=3 \ W \!*41y]^TR뀀+C`_ 0z5 7YaׂN%>3ϳqtgf5ڞaki Ԇ(a.߬ݸM1F10sM9p#Ie]seۛ$Gk5)>̙cKrHxus7NVW 9s.?:u0$ȭoXǓn:cǎTD݋}G;s75X~#6lX#\渋ZL 7:~.<_:#Q)T:Q `*kh_+ 4l^y<m oDV%P}A_r0PjGG4h`kQEqg|TkH07!2I60:A7H%wƐ GEс\ᢑW$-7o 6 2۵Q}a ӌ432m5OKc*}p,'ӎ/ 8Pɘ"I.r NqThuHIGڂX; % '(`-+ Ϲ9:{DHoɁjS>u`@P`pɦpHXkF;" H `HTDV9vk\ GV!ٴ. R["$O̜#5bǕ;Rpmmr;fy Åfqqqsnڅ9\3 *app.]G N@ eY)Ze8 rm.n6lnG8 2w81o;Pu$ܙSTjC(rE]X6.WDj=A4q<;驣ns\ `x0{&rDǥ2井2*%Ԯ{6Kh$ypjۮǁgbbBYsA @ vn8 \By1`ht3K`V\kt殙 Q-OoEw:>%N|lW)SlzhA3\Z=>7qFǯ|/v޶mvNwPrj P\U%~ďvoGG DYVQߞvk@G-;asJw 坓0l@ݐV AɊ|=8R{ 9@}p'cg-2#rm 0fhmucre]l(#Ev8/RMfL C`sr"JC`iyĎB/ToYcX-}]=j_ovxR0wm.G ckaWGaG [m(ad9E~lD,@ފ,k<'cKt}S"=r HlT!_ 6SaD,NaiY gWj :qknAhQB [s`wFkdAvo:"rSyȈDuR hWz|duk}k5צs]A,:ƕ;3kעHJ_K`609a`@&QNW9ڔCҊN^[/!rhv{=vDYڂ?M Z DK^F!8h lųCCCCκ6^?]Hs) 6ʴFf(.U ٻ.1,([05@x)H&}5ԕMp (pF7aqz Ɩ{pKgM (&Rh{1~Z%Y'_~WS kŸ n9PaW[;D%^C6h`M0,ٍ7ѽ0^DcwTv] ٫c!Tjlo`*R z\ׅ3 V?}}F#&5Ebcc'=*2 Pe*i\ju̷xYݴs0yZJ%j0)~Z݂voBR=O0Hɀ%\[Car]¶[l6!C3mĆG K޽vևMx-Q;=@A.r=i{nRMP/$: h2GX qyPAp +ls|Ӻ.daqCEfawAlhS`/l~ ӧ}Almt4(Hp_370WnӜhBux޵{`L lRu(1,X/MzC_qC=xxph4PCKFfҝaўs 6.M"kqJ̔K#?ݰezoleh_𺒐-8"4bWe{\`u;!}Hט@$`\U(V*,_~JkXʇ \:rB>(@# puibHh0І>&QZ*pi/44~2ƥ02|`ُ?{7 * tca+^5=z62P9%a̮2f<{χ9 WU'3\s>;v+N_N*%Ț=d# Z0}dԾ++yʌEU41u/dhRB!Ï sp VL x似|.j/2?n*}ORXl N!``CL2 DBH#$y^oxߗvJy n9@)+"x__&h,HwN y:fPᐍpFQQ"%%26{ =‘+d} +]KM1`BnU_eMYߠPګleY鬰ss Dkq akz <#a?=G/xctyxvs^wVfDxQ~s+sŁ\ںh-PeZW\ŷ?'_b{yV">K/hipv`6ʋ+ FL\Sq;qf}R^"ʁhw[RG'Ie"IOe$ƾ}p'D>_n1K]*lj.?ok. IDATjnTaH$p""BK N`alf7.Юh2=Lmg3T4@Oeٷ<jLmWmK>s aaCM}i*)ἀGsHyE)L-1L8v>Xҕk_wƹ._/h{Csۍեa銊HdžSg-ˡDM[-އDj~xڿɴ# c*ƽ|s ~d Uss;yX! s2hE(VU4mdFIA23BXS'wgӼ u~ &y- x現Kp(4@XBQ0 F/'uPo)sMq00ZǠ9cH:ql_{.CZo4_hm厧ցad}Cg|Z`GG{/D+Tfy}YG;h |![RR}>ێP [K 6Ch7uv42vLh{Lf|E~FwI"@{f0 gźK4)>FY䕆U^}ea \)BvFp%vƳ`7y"3"db LOIŖz iG[T7CF;chhudYYϽo̬uf(+`Z ŽfˬAP~3+۷O \@RК5Mb bhƋ:Wd|KAP5κs!G$PyJhL, Yj-@oabM#I;6Ad$\ߝSWC@ 2Z{UR'F\d-!hf4.4(ZkBDdUE{3n'W ^9Ovք0H dyr)(9Α 6. v "K $ǵ[؏%T|qST+J&"H T nTԴ[7KV.ƥ, 5nl72r ξp cˍiUlt֒|s}H /@kZ۰m3ж [8,{]%|yϚq X6%a@;6lEL+5M01>=LE"9?L=m}x?y!bhgNzpg{Nv"9dݭ ]_ CPJgP8vܘE P>n0'G.[[gzu4dF`nC{R24F\8XBӝ Kzl,^}߃CǷ?2%`gL hIj1ʐ50=kw+HJqS|Jt3&q f}BZBah= Q8ד]|Ix ZWJ`&$DTSA{X5ui(@uqo;YTRm77ʧ0HFlX$DKfI"qPHK=f-hI#dT7‘ZYeI֞,R;;LtRR  ,D[ Q{x?JV8BG{ ֞GOuKMnjDQȄ¤8CmC {Eq,s_bJt,PPPwtH2DD , ay}1'q?VUqD E~*KPj0]zɀ7 P6ۧ_o3+fn/8F3IZP_re`@@ҠI(d%ʀPyHlG9JDi`~ (#x@*7_ D;c"2,ebI 0 ʑ "r~GWώWC rRNj_TXdb}Cȭ/S}<'#*6Z[G9 8 (X$|(Vy%/jk 5en~c=>\JE WR^BZx|ѾxRcI.`y`3v}D9.[QKVE<-:yk*r uJk59gC.XZTG""j S`X34,tkG>kqb.V͡"b5& iFY:Q$}|P`Y|\~Ov봁W6?IbUk˱V1_^"v<8LlYk_IW8;*B%$ܠ ln ;וMZ\ ?n0FV˿h6 e{}8N/Vy):g4hxm$4TCl cSs3~nl΁4Pkl@$lJ>,.,Ed+뗰rsNp"qTv%]=;Oono! E_†9B-&tįp{؎ ݬ^5ea8!bR>qwD7{Fѣ;wO^2E4g_S+o\S2?ee-״{^Bv uCchJpGRlDр av>!" ޢ+6a B9r 篩kNCYBaTJi0>QT_r\2 @/)1H8u f}E;cE=uMmVX`ח" )ZϨrd4P$04F5ChgݬʏOvJP"Z[_(PL*7:KG;c׈[Y})i5l ܄/ ݳKe:>AMVID6Go=Eǂ%|5k6ѲJ+ A[i ~_mjWw8˗Wr&y:&!OF*5^U%ƞf12gu%hsVk?vf)x홍h+3VA4N0yrRRF@ݕ`(n AbJG|$CD^ճOW#Wmgg"zS2RLr-YaRV4q2l9e H"B8*2yW@`U`ʁ5  y%":@*>pv%r:o?H;"ZUchNRIZ;nDC H9AA>!"^%"WAmѦjR8=+N-M![Y6TceK)$6":-(&MDcqHAP# Q@uJn-;z~""ׄ8ƾƤzCaSkoXӗGU8ce9J,h dh8jG2(c"hg7H2_ Ar@>yHD>d(6]bԖQ!m%`0F=NMhPEJ󢝱/wtʠ+ 'qׅ ,G=5קWu8^ğTyc+B '/XN Hj3N Wd>#!vE;c/ŶGO biƼ"kVFoăR ~ >%_TZu8CT˗ f?Lk=^F֊~QqxP *T5n𞎮{'cA; m^2n+F`H_ "r-rMh! d88HD]֥d[7. "|oYaw[RkFCC!.Ow!66 T 8 zZG"*{8O# Y?olg4z<fU24 uS_]=Uwv/Ѳ$_)Ν+學4kojꫵ2alłTIQY80 ,'yX;`uk*%M}*mz)CՉQTvI?. GG:X?+J+gHmM(!6" (sQ;q E.05 yQNӕ ;/_Ƞ9-%22Ev#M}=;t=cSF3L{߽X'd1}.elK&(  W:z0O!5e= 6tD^{zzG*r<D;cY:ݕf5xM]rRi5R<OJDճ+ON3b(<d3 +w-G'_RWRPLI"R M`(R`(gt5*R6)XLw:ny'6 @$]뽟1^~";zn"R۪[)nB[_{4R "V9+TQ2!ϋȍ]=>a#:,Ҙb"Z[,Z|[BxE*$)[\ǃh)њBF ]=>sN}|E/NS '%pQI3X2DT >֞Gc> Z}R`4%e)EP8H)FE*4!!>$"wf` z@ 0_ 74!z-嬮-wjrzXI P( e"O~鞀x`Fxcۣ?*-Idck 'Ф-{Hl2Z>T}3eOvƾӽnimE؂ .CZg4=axgl@ϊ`]3nl PLDEd4*OF->=zAARs%#HP&%CAFeUg3"!@S%K~( 0GX(YC} IDAT (p4apK@G,-f QZir h"| n_ دEx.f*hTtL' vtokKKFs=>o~n"2գy@}@ mu)=)6`O%ZLQq1( g<("g~{sJxzFFx$m('ϓ&e W,pP B_]L׊ywp88zjQ@k~G-pmz,Ыq9Txp.J 2H|q>hh EEQ \"fNِ}tǡ{+;šN S|ND76Q;?hO?"į?<#h.?wtj2 ܮ$FI,:lgي݅=@ G='mԂ{ܧ GWIXCA5 )B։,UX\8DAh/'EOe1xjzIݕup# Dds@'FD"ȅX G3ޕc']% X  F =0< _ge4͡Оļ30 4~IZs5^X<fω9jKTCbxUP?<*'{]kY=6~BވD A#@=(bϸON2keõ8'E >ױ,"]U0݌fj[ - 3o& jp< z֮Aᖱ2ffE ?8-aJFuʏ B@P]@=< {eU H=S_'*hDx[siid3h,8f=SX{X@ъN>ȫkvyE 1͡[I c\ |!"eHP7X@̉qF!B|ӛ8$h0gsv{/ե^> =wf \k_ $ <3xb%y o܀E`/ዂ6H!,\Itw>~Z./2/ ݠ̢KHQ`Y\&͎sh\>٤`zh4VB@?P~ȥ |DClKmˋ>Sצt@n '@:ΑEc(,9-/K> qEX<@ ;6TH[ܪ8_N|@r( ! Xxp,^?'Ϙ_ZH {.Z]O_2 ~ԀwNw_s 4X~Twb͂ iLl/>x}ڷg2wKN&l{_?uހ8)H4Ъ@ -EGvwn'RjAroc/=fຼp7ܿtר3^¼A*]?b͌/x`{bp#0~t6.*D!n_SO+}3̋;w~%2yQ{3u>׳7xۓ?@shyMZũ2wa_ tu=r`>Q_*L8i]m):_.>Ķ{B@X&2;/t9;NonDln^ü1oi9>_4D}ihn1Lw1gbN݅_O ASivMC~oo2A-z;:V V^GD "REDnȗ;-7&Uus~0%1*sJf>dgrcaUl/!"ROD󮛽W>`_q!T2>ٹ&r7XI Fy mWX01s\c"ciٳU#꾭`֣`Hu~ƶe_ES^k=*"cE /o`G)GpL>,g2o3rG81ǁdeK^ M[[{n^5I(LsMG-FKLCITTPCe_(cۣ&KD,"yז(vp?pQH!dY !KiTl"]Sd|=㸾D!t TPgLC2 aÀR K'SrGtԆtZA %M=EdFoygأD7_ 8%M>wq^w7&0ݷ'\fلC}wzIӄ,#prVe膖}"=V!G@PdS)KH0m>KD,(<Ϧԣ3'?} @9;_yp=Dn`j'-MB޳`{ڝ7nUmu1]i=A~ecac pHD~mi!C9!K7 46-)sG' Պ\ND=]0Q66%+ƤIGHwmD E`@]” FH2cHbDt_36{"4TeR HLRF5O2@@3(KII;CD팥}j:}"3DDt5f1my' ӝݽ%|78w .^YDF@P P1& F$9Ѹljk;z{@Ot42rV"ʂ=}Wx?}=\~Z->64,($d/JHU"rnGW~移{[2"Z[1a#!Z4ljpVә& tAO@Ș4/ـ天03cZT,Y}3y$O3'ޗHSJxBjÞ7jD=XzR)uP6g`;qdQ|zmF޴$##p+}%S|Ekfc"W5=~G"r&#ʣVVYI le7V08mEDTioʣ7jC$ADҮ MRl!`ܷ{\FLue.: Ua=D %0]m@ȀI,!b6(r nϹCD;z))_KTxVlD$!4eMg c6^:f#ܽQZpj4T$g>yB" A$3*%1 ' d L~ <Ԗ Shp w6 4ce*_1ޓSoòhRN2ЎEPSa@ >0Ӏ!bAdl06H͎n{.uokSq15X\m~L,G_34 L8JR\8beTbŽ%Mpo3>Ő":3]Mͥ ihj =Mp k =^2=qJ{1ִ:!Jv )"(R4!V0RIe2 nv~7iJdRzfْ֮90Ό4D̷&lƾ!`f*'X\u24ה@a2󤮯  t2$LMhy b}]ϣk|4i_+R׷9"S6c߀frgʞXr& meX^ 0ײTRTC1?vFD_OkysadX$C˻Jh,ǰo0ٽ }kTaes)H W? Iٹ1L$Ըۺ9';.# f4@d~ZYh}ĒCpn)gãysPRף$lL;5ak} b|={]=47f~ %L 91H SK;$|L,/!zf2Jcct2Pu+F1 PLy#A92(KksS虩V~Ŧ+Y8XHJ(asgTyN;52D{)R_@1Yۋ7"bN3>*Ҁ3HN9NR*?>Y#oU~̢o 3KH>{dt6=L#Fc#3FuIOJ&&j4ft/sv R.Ai>DɴrSaĨ5Vg3ʏ@Bv ;zډBP&癃b9eJD)|{)s֜)@)Foqv{<"# [ qQڠeGѵu_mkAsÿ67P=\N`2~ _;Pß=AMT@a3 wI|"2L@E/6?PP!1UjX?^M8=ɍ/8+f2?_Q0n Gnyd {w0X IDATY_wFi}$ ,B4u4N3∇w<ҫ?8դu?UNNMńȂӁHIry~V.,k7=jn#?Fvׁf,i`*SOB,bܾ3&?J /5.COWFX@h1iPl#C# 1ۨapd6'U L52K:+\Q "_Pxѩ &# غ #+Mo;fO,5c`SA-Z%D@4{1L61s OH_q03dL81Ot8˄>s@ V;BF&cՑ'nA-*u/>n![ & qgJtHƞUۘC0eDA4\-wrlZogx`S'2KbS\z~Wn}/jeHEY2៾7ʍlA+g47<JPBbi(RdBQN2 PY8CORz1~q>E Y@+ҬGR"ˀ7x||ߪT tԙ 0\ދOS\GOMA<#֏iw 5ÑVcxS wk6r<hwo}q:icCz;erhAZ16{!L_{@Yз?IL6M ȤP=?`"3owC0fYtC#s&~3=5*S)uaQ]_)>u.1#KI ^P TQ@kǶ.C~ |lʯe 掀 @'H?d4kLԕ{OɝjȰQA#Aa6V?>)fqɖnqdt Y Y,.Ah\1ޅ .SD'/CXZr.'i 4uuEDI&?ЦW9fk2W?dOONs`|} g3%A]!02ޱԳV ΰD0$Ip*  R`vh+8V|C(\@nރ M2Ίk(aVwtLqL i DD ܿgs.َJW$G JQ]mY7i 謉ɕkQ ww^H:E/_I,_=E#6l~ͯĉ0=]f?zM497B @DI\x(uU=vt0F(xtk"g].{>'g3̧:[UQZh0*kփU-#<=K%,L;o H BwƗv}<y:`.k<}1ͅI;'F!{Vt'w0U]{6oDl::P ܃8I=q{@# hm)\yÕVZO^ UKP]5d=| @`ɦX"3hO7 zD #1P*IsAJt"(b3m;ܭ<~u,1K ;S溳.'qDO }@&8i ܕ( Z'OeFAtN0k H}5@짟,KhkkQp @K^rTҽLoӻu'] h 榹v)Yh|A %|{qhj2av|:412e֐yQCx۵/%aXyZBpf@zݍPݻ[@׶]OR^ΰLiB{n5k8%t^f: ;D@ڏ>q~UW`da g{*( IxS:1GXT%{WM;R} 3 LC$T݄/5)Qg݂YcOAF䣃0v"3Ȩ\"< \a t$]WB-Q;: =~_C_hs(.#_c!FXwj |ke\?r٨Osf23D">xx{?(Vߌ,Ie"Kk;з%.q9L>=K4/dJڌI+(JÅ4p :\LfA(6MJGϽy/" UuAY |Aàہ1 O0"U7]UM3?DYp2CO>=| qDMСA Pb6$SſH\L~\XR QY2KvHh|r, Mc9wZ\-Q"@A:&MC@Z'{ v2smI#z.$Gn( itsD,o?s?BBnx>Uo]QBcުpK_t(!0 }6 e*!.⛟jS;cÕ;:sj e?u츨,nY9@Ns^ { \q)8K 8Z<FWTw|N%j` Z֓gmq<>C(;_Ϻ*Dq@hYE=XP^Q70O"^2{9w}7eM+=Sn0W&"$! Вp?k_vGiZ *:@/BD`5Ϡ0:RԃO"K@E> QBL_@I K =aD݃PV²66fR " D&B7af94!pȓ@|0Uc1 Dd(0"@$C-kB85&V@vK)뜰#!"F`8"&k4t Rf=[tfXg}OˆraxŠdrvygן;@wwn+"4q|r RȔUMLNAFUddiؠǦ T6$Q>=+ VnD2IxDY rms bӧN. dMhue5r/P t@Lٯa0luJ3v73f]O/:rz$@-OކzmKZ*X2ޥ|מmRv|hDDgݽHC'*c 4MۇnO٬N>b ܒ^ eg _j&(p3htpj0) (}_F/a0`f:qm)ytλB4=j_S@Xs3τe ˟y5U;i/>fԉFG15>|n8AB߅zf3>l86n; DP#YC׶ ڨ_v9 #EB Fe 'l=nihC|6^A%dPayH7: ٽ/'ss=ӍC5O9snZd~HLXJC 3ȬqfHfZ@i3Ϊgu(.( i@+}M.%$"HhC1zD<ߊY_SAIu9#+^ecی/4CH Lkc_5>I)!+ks2Ȋ:05IcM@~Ht-_84oGj$Z lS.=@ zmq1V>ђ@icBθ\q0/n1#~3$'^R@^ {: b+RJGl,Q)W^_Ed ¾·N ԁuyQ VJ Hɫ>u=-^HM !~:00c{#0=y7?Ѝaov;BD8ydNK?^PKQ b{pTqP4d4&l u5~rUeTxq ı}LRؿۏ_6&=JqaGd[=,MPDCEaebJh'tsj@ 4v[iV;JsA*$)j zr^(D~'q R>P2h`$1cAڎʂ oV)4'ưihu.Y`dYτO=ƪa3{v6 @ߺ^H7Vca4G2vݮ_#Br|4((3@ ,[333(:DBDQK2 ?M5f'[ %5TOՑT)?˞o6'g&Jlr3xeQLz3DF^-$"y@H -0&L]CjDy}HX`H7f6;"T',l4olVp 1?oӍݳJ:N+dÄ=ϳq[D(W&ʌ;.oV XT8v)>f)l/Se}af Y@:ڲU"S̈9IU8fOS1:]3Ҹ<5^}'m IZ6Q蘈`/U =#`)(FlKr&V .\vыȝHwHvmǖ?0T㗾z]# e"=8-C{nK21lLZPQ`t@7h6泙c+R %|Ϝ0ߥC N{{ e պ\uOvcJk֮N3I.+O?=5CǼC1`p$' e)83 gRد˞sT`h6e1 *Vqt'N $QB DT.J)QTQVj Fm^\y\EE^bh8DG[K=jDr7oQ5C CtrJi!Aa#E1ns$xƕ:1:Q~XGcHOgљ|TBڅRYmw<43@`&8#_I (KE4 rW55>a;P'sQTWgAjq8߭^Sn0gN!'A,ᒨ(DkԱQ)r U]9k(RԱ7HB;2ȧAhµޛN{Fؖ3: gP+Rʕ*Jq 7o kjggR^5={=ߞi~.m2 f8Wga+ZX')m;鐂.W:+~]W4B; 6hQ+_re/ !~+PXa^K>KVsyyda'ufbF[NRl| Q1#6R¹(Э,cZɌD#,*8+[ ,Ze|emj|AsVȘ i8~wځ-79Ch~dޅWO^h$h.u+-ӥ<\MDkvis\4{śL6{e!xtz?bzH:(SQ/т%? !N۴%2h/Y,bQJߒ\(lw?t76MO2.|Xpߗu.v-u97 =v2!TL68(g v"(f.s/`DŽ;@v;ߚLihcR$D'5M;U)q0N/hw.AblPy_(˟,-@ ~qś)gH,rmF8C696 ={RB`@+Nˌ==,M QiD\Q`=sFIaԾ%,/YZ7zi@D¶!/XqHS#@L8G̍ܜ0g"%Ec' Io rNkstEh:3!Iđ2f1wwƶCgWz3UշU|V K]O%oa勥2:TZrvDaq*U:΅)eVδl rU m#[Tj8 '}]?mu$X}_Q)9wY'@AJ;pVF)B#5Ŷ[[lǾmei>_vnZk {X(Tc`:7k{A`%;=> #uQ]h:؉"׳4܏LPq6ƨ/Ze~N4߯,|/s{s #̚.z-LNߵFz-81">@ AEsxO.})h;ۢ\gՔr#d{W(૗Aؒ0"t30ED+BkEg!`j@Cg9kC!D+Gyyଙr-3#Ru J%ضfmaް6 )$hf 6ܱ>Q} t#=(S-߀7Y~F]VAa;Q9y|u fsjb`|[_i$F3UHqf,ߟsZ6 44&{=e,V/bZ/Jr| =0È{;i??ޠs Ө:=xQA^q0N6mW9Z<@3o-#D o3BN_*Wv9qó[ h S^di93ضFmA4Ui02 困Z|R .Zl]fBPwN˒|`{9,!jںVdہ9S:ẘeڢp l"Bmu cզ`ASEBG]sx2QR&x6!f`RYc"3VA>p|ϐڎ1*=0\-흗ܤ\e3}Rlj!2)2ĖU:J[kTϔL#J)|s׍ܝX Ȇv>|P J쀨ty Ht[4xtqMh`pE/k,4kv̌fT$fZ0Lk͙6 Ek E K_Z }BزLӧPm*c G͑j.Dȣ X#$R Z.+@ {hb(r#眏?ܻ2%@9;,D|铳Dڄ澹r"Y`)m&fRP%Z$MIWn[Xu.`lz&P$PFsn!Gg7?tE9;;sKc`<󡞡(Rhg2T.? H0l&j7POfw_h +֎`!Oim`~"4*?^e T^)2`oXbXa%Z&:k"9Zu422ypDrȖBeݨCX't|]d+4AKh ZdTc~?[ηn$I!לy/,5lZH@3TBl+wc'a׌] WZfai?2 ؠȲpYa,E;‹q?jKh[n6& #'6Fܭj!tR6Ҧ8,L7$N2{aoRwj4[5+ 69333gcB:ptN0Cy *k5Lqdҳeskm#mE+֌la>w=h Ț"KV"eJM, (2d"n˩zڜek \P}^Z7 ~Ϯ >W躖*r@Ȭ0P3c ;0I{V {nPHV,rl$Sab#kҗq{$"_6Ft|a!~Ύ5wO=[W I)&S HZ[TE@WO m?d2)blIH98+uL9nu[(ŝp-RXy;rt-@ e󎂹ngU,b{\r~OMZgLUcT 5 ߻"Pf]? ȵU7 "jqa6ZR@"2|:{8v@P:y\BU6•kV>4~jPad[3K04c5 T- ntK=nZ# sSpA×=MoyGӸz쿍M&F~msX6X)رD (Fb!uw I硕 U"q #9&ȖWpG_+KOL87̃RF__Ώ\w~LcNyzz^d^\áHŒJ7chr -ySkm2tբX@WCsPB>/S"f7ރ*ܹ:@;.2&,]?sѬQ5r 2@iiѶ<ˆWop69rV.{f17A \t/ e˃<7--,P_ 'ds˂E=dshzNCkrQey|VňQ 񞁥q9i8s+= \%kex{Q3ٲݽvkM0i Ck`ݘRh kñ=>8udz=1~kۻDfe*ST<،hHS_S)Rm-UUڦ 9}q9]%Ago{s~_X9Kp"k>MOk@*`6S%Y)$-Xx랇["Mh7| YFz^e gO,+9f:A7ygy3yZAlٹ+#W >}h9)?-;w}p9ݒSDlem eH)9$9((#"dAc zٕ뇠9 WuT֖N F+;$Kh\kPL6c۰\+],PXݾ>[hu66l8shlX J*ͽ,Ѓ U=5( *t ؝giD.Ȝ3iJu*ف>,yw[wN|dFw#6|`t߁.Bs6i"svBMs. M@k``Jԡ$xADH7oc:n ־c\QS_FAhb[N,08܍ي'LYR)A-^ 00|p˟YsmaJ1$#O?u̸nXp\?V7oy1%{ 18=x >IH \ {@^i @.V#5,; - Y'vӗ6M'ou{ħf'馛#ks;ʶJ oK돾 eie-b7K}0mӌQxu[1XđHI$m"M$ $I If2&q^(5q7kfXww9@׮/ͣq}ޟc@Τ >qR7y{v?|\emer5l{XGYR s9W,?!(/|YV Nxa8ypN)iR\80̳:п|%.WO~1B7_NR`UЫLw\ɝ(.H  6>g[d0{YH)u˔!9/qΰY[^+w^-j ~ !1c`sAlM*t3+8w$ܡ$2fI}l]9iiN0y=OC-oذYީ ʕ\pKطjʩs5}v,8F~j5hwl`^ 7|/ gذ^D`S߭u3dJcoƧ:2aœ8L YVEK/Spߞh@%HiD,!Mx1{PjOC븞n9DȃwOilN@AHU+z3A6f ʋ7Cռ@42Hm}-/DBUh= gy(5OC)(5 Y>:{$WG o>s>.s,3 )6yL&`xw<"/W_ OqNCN\0wش峝c\J`F)hzQ!rM3*Y >u9+$qKO2:ДozKXq9>vZ"h(A,FEzi6aG@2NdAD<(lpAu}&@8F6m>z=s/XSBA)]p Ȕկ~8)%&2!}2 IDAT4kHPLA G9 %c3.^Glm1"ҾoȦ 3{O xM?yM\ FÚerFl>?˶`81Ĺ2܁a20ijUڀ3\8V 5 cկ3(`EÏNwoZѭ;5:U?7u+u㑷600HH~}ӫ17q [Nmݸ=KORap%m  SHY HuY s]wc#%W|dfˆo5w  J1\#2Y|viL%z5#;9hVĻ"4ވݎw~7Q,V3浞f177Sԃˉ|8}}}^?Tj@PjJCy3W-AY+,)1&fGnJۆVq׶yӳG$No "QW,J]Pp2?fVf5hݺ ׸`E N!b6tu+tw6BKh,|_Q&s ڹ4}j3I"/5TQ'⌕Y}Q;ޏ I͊đj*kg{AXIޝ|ᓧ ʕ$pJeͷ,ʔJ5`Z)Ǐ;I˫()b T D|5W,s@RgH{ YFa뮿 l}}Z(x2uWWM;R'þ*xE.zS7@&-לު7 OPr[Wk[49:TI]|םfi=HD/@i.C*mXEx.GP˪im_o>3z\| aWtsu<%zJV̦kĉbt6OPez%ZdvnJ -D evbqZ3J۲o?UdX-2Z;اKdV+ܚw3K)_s;a6΀n<e/˙h1e C =]k@cOԵƿ&sbl\v$ 2ipuuYDA^c+VOsK|;ӀE'\iكH8k(whx+W؛v0;3i=kgrp6fpIؐj蒘p{gv8ik0&"ZN3PLW{UXU}guͲWoTv WfC3^}n^d'J:˻=K [ftJj.qK}6/!猁c(:.@KϹ%MTE%>U9/C%F2{FtqDŽÊZcJ˥'.HY0 i(Z;v}5y7nfHΎbS*E# "FCr&z@Z#%cX"5)*GJAWFwyZ%}x;ԛR#m\uV^ܟ=k^dvo\W:pΩ359.2"'I6}!HX,k_L?|I뺂?Ckt?z5򦵴dN*EhԠo {+L##wꋳ*EK>z<ִl8oE_9x[ #}GY{KS!Z?yTـmC;TY }m=#o7zi K|lLcp?֩$fvRٱ&N3"yL|S06)o1Gjf`\BoH& M@Ŀ8YJtN;yFhM͆;*J|11q;ck&r(f 6je@wtM{SQv ȯQ=ٱ"X,ج#8OejiH! OܵqȪnTRy)QG~Zә+#>Vx-h(?[NWmQ9Tz.9c:c<29;!6L|$r[~T[CYvX9{eȾ2A8yl:})ݝxFh{d&*QM޵H ~L½O[mƬXV.5|sӲ"+ش怩)Lhk!ʧԁ8WڑiYӴr p 6|X|WZ%<'{|L?2$aDz*0zJDw-;]{'qb_lil:kozFez-2WQ$lS'+& 5R ;|*)IVUr~W&c-guu\i9M'eTS'~1OUoaZ( ̪OWҧM\$S8ҙ,m1\q^7{Z^uJVhxGj9m Nim^uo6J]|ג1i7YO"fû^N&xQJA7(OYx:oLl_3\yagk͋uHt+_ Ey!YyhBtJ {"1?Y[\@i /Zշ\k_5wV)0Fd͡%-YHe_MiRw`!R)}J>˛<}|+Y1]>wВj4b1:Ƣ r[)/*Ui8erۆB&ߜuWwi>KYէٯ?R8F쿉y{Ma&{ۚxcUV:i&teLbeB TTS@5M _rŜ/?6ۿmzE;Qef -p VҔqbdV6i ȅ[Fu}[G#<}ֹҖٔ d}Cv*{8 f9cM'=D v;"͐jPi ?T:iw}6u8fCJO;.jgKs8>M5lڸ %T|x(VԫPՏ??d*aLupƮY6k4QUZ}}doY&c~_pyKii`5>~Ʌl)oC_YJ:HM0TmyF[ǀwmxE3׶`!c[w\NP{;yY6gIN},-L2UmC (? lWe$@!]".ɶ|i*nX,Ešb-Ui.{R@ XS`ܥ* t{LǨ|]9pr`1ў,a\rPTUඡoAǝ#,¨*7=;%G[fI9e,B3"MEs #sz@H3}#G>J?)ɫlaP?Pݣь3ʫʱoYX߁hD-99ocib*hժ/I Jqȕ"ϸq+ cv )X֞aEWLdP'Q*=^;"R-7*Kҡe><ӑT;"ܟ "]`rk@ oo]kW࿐뉔cD < |KUo646G'`V/ sۚx~KlE^E]p,0y; I 4%nPbIqHOgшXh6^tf-5g$)m"ي|]?c\RR^\:ZldWɆP[r7t8H>f y/GVQ1dHhHsmj۞R 1 niK| O~K6kFGeUV66Y:m4-3}x_7H>{cPyo!wwmWDrيFs⪔X$ඡr}طo{b omK3Jy]͎T$dݚ]=3;SGr8uO : 0Y!0Q?uء[N*)+:N+VX+mcƶncxXJ&*Zm*q0C^ۚW$9є? /l8l>=~~"䐕yxѮohDf >M͡<$uR )E?ۚFUJ`.N I@^ L9s3vm8ݳ%{뒐6JzqE?5ms 4>(:=̪I Fi"TyM(.%  P1Ink~πg'i4+ ՈS^]w /mC^C$7Snuko:?T:KwB5I~|%!L|5u.#65 'r/:#Xj;PǙ kџ7v⽴ |ډٮ_6t 袡4lvzC=΍7dDuAxј>'NT])RE)CwMr8ѶGA~Kt)motԹ04/!NLH [/ơdM5 2N1␫I8W?|.J163 pR(ڿf{E߇HچO&VDt!"?xE~|>gWZ:Vq@fcB$;<(_&3%{~~iP[Ed 8PHX֙{&$PjO Vඡ]'Rc';Ĵ㶬jJ=q" b%sʕVR> xgS7'<ҡ:ٝF;6ϷK6~+ &iB j TcEfV>j~ b(emKk s+9}~0SIl&N~O#E ?֬y4`Z<'O֨gwJߠa3Hνk#6iHy9jW4kUM2ynR@=̺xmƫ]K;# y)0]RczZYtc]bB_S9TȹE`EC0@)PK#\d"J,O,;```@& zR-)|`!-JWմ% %HΞich1@]}d,OwQip Jx.Eʝ|ӅkS=XB I&8kDf̾恔q^VUקNJvIn8m'ƴL{eB?j  x'HX_VZcvd\H[.OiU3'/8b#Kc ‰;GiP`'k⎥9ȷw+}^V5m:FEŒ\D4bSpvU kT$WH]Z~x1D4rOqj@.OJK߳"Hs#!I_h 9Oc~7hkho^u"h`m*qP E~I9GXL6񾷸Tw} =8o#rϓ `߾s[/>EݑܓRض/_ǁttρ `RO}WHR9u5NG#"ϗRw:ֻQH$,& Ge|-a812ղZ;.K!g1Y%P߿nxo[KDve(:cyCW#(%㐈lmO#_>̃e1F޽ѣ%K~o/ԕ$ 0<ӻzTR[r]z~5@:" /XXOPje V'~ I\L"H RTY5kǹ¿Ns8? ת)~V=={VkG|(֎hcJ-d7087~sQ/֎U_W[K7.u \&{ٲktiur&7Z{: Y0^˝ùڜN̞ou wRkXڿQ#1e>V?ܸ$L'o RYF\vխ]q:TՊ>'Fiد NxAR\.ET.?Ü GYץ"+!M64jKdx/aSDI`GxXUs[cヱnFw.v΍~秝1U?xl6t~͆7v5W=&"MS6 ~ J*S=ÔspgIV֯h!R@̴Hl4x.īdó(2LNUspPQ\gYwWX;)Fܨ$:7QkG2Wo(%ׯ*"UÓ-|*m͑dR8u ATTH <+WK[ /̵aU;N"<,xjTJ%L>BKU?mz9:;}sX;̹cˬrn=|25<:z0P/*?XF:/G&@78IlȲz;7usM̒lez7VU]puYIΌO9n^ϲek΍޹QvDfMqOCsVymj } }-Kr&#u2S"mg7@VhoX;&FTv$‡].efRgx0 ױ)ɜ6^v#'N]l3yn9;:qFe9\g@j2'}TɊ|H ͹$ |g_jz?T<@'DeZ Gh-&:㹭F^0Uq<""f^NETo?soVA9R/_wުsm!1 h,l@XKփ 7aQEmCC} u:}y0^q9K72YBQBxH#L p }K|6ҿVr3sts&Wdt@MA~ wxGz[2t{tuKFu42-[EUqոI]fOAE#8KLLx"8@3`>-";s['tvY:F_<sdӲk"rW8`{xZŁ-GYO\S_th~")3p&Vt7R5hQQ+_ FXc1뼲 x8 wnQw97bHG3OC8WDOiNSʢٚFՒ|"א 70>V}"/BT2)m8ιotn߹c֎FU?g7ȹ&UML*eQ%Lo؄*L57X"BQ"$ 1*'ӐlqM ~8E&ʝWT;ۆR7oɭ\ehI*UOd:Pk?/p1v|2_AroP )m/IHdy"ܺ!ٷ߽HyeRPS17[^!-:RnEs-aMO[ D fڇ'i)<1mG-g 1RS8N_encQ: G",`]}l[9k;_nNʹL|1;"mͿ^HedlUL1rRYh1}+ŸOۊDJ"Fjy8:E*牗jB{^%Uo@1R1TVc$E|5xFij֊-KI٫r0sG͟#p熇_ENf/pU{cǎ59DD&sk7ZZ_tj`u(jS"gUMEbcYq"PE|}##Rhmذ<ДkQ !Nj^:ZU#pV<*E&Gi*٫Ϳ'qD=yhds4}/hRj ܉r`oo_RQdE58c%ƏbQnog߈i/kYd`q΁u1*D9\yj*SO"$?5z]٫>O*_"fS3/)Eъ#rPUE?nngx{v.ښ v{|^xe l0=(yr=&z=#aQtqj*}ꝯ|dU JҞmN9\уIB[]t&B9M>9xsI⩴bɞ-oXqn8ȴߖnFvP)~`'ZN,6+9T#!V&w @yҪ:Cvkl l:})ga#A}njƱtE&YP|ueǘ5eW?ۯ8 ͟O0AFÓaqܞ^zA7FO3T}"g#uXCK8.tH6KvrD?37nt)/͋b垺 {VgldS7b-eI&8?1 s-gx2^vEXQ8V'1D`1MSN T4N]kMK\*"*UWHl.Y)(Fˑ;_tA `:^dhOxZ{Vxٹݬiê̈/ CUjzިBΓ "9kWw\MxDQ1%z#e$ZM^V戋PSG4o<%}ͯZyG!!z7N+xbCGdwm7")UP3'qkk7 Wc @gWpˇEN'9չWX78q+ -Qk玟wO< OHN` 'rIʪFpm p%\pz7Q< ;X.f̌OS?~=.ۢVWc%h١4%H687a< |??\1 2Trw?xA1>{@,~=bh?’#~Q,WƣW{8앬Q.o| !M`$\' T'>dw6ة1 ~e\ڋpch\'%%~oSRbG巾 }I=`Tn;{ո7+a7Eo0^bx80?û96LIt$8' ]+7c8n'xFr ?=u/!v"d2RF1ЩMzOdJ"xP.05QV#5P3zis!(mZ,9<?2s{O)~G)ʑE}G{9 ޏm"X 8S~ Z/w|?W{R|,Ap3"I\62>s'1>qp$ I ơcGn_N)&XP pa#R'r>r'LH2\y/u3#*;2}1vqz<_D -gv1=6'o?CJ|t8`OÝsg#“GʼϮ!?v005tX±"#kΠmm>U(U8R5%f[ɬ~=yaЪF]xX۞A o@Ų bGwq?h h[e|(<#24uX*c)?3L5'I2a#mK;^յ[=qq7jf{b" /%5Ј8 DV7'PUibs IDAT^C4Qtii.dkIG }*7}12"W=80ig-ris".LͲ*H_ɥeϾٓtw?M%K5ɫf0aݝ  v_zR3fcH9KN_ib'jG&ٷÄ%;>g^Qpǃ.A Gn0 q(;x+6E!:8܈[Q?n)G9V tb[#nil:U&`|jQz:&ks^=ZH:PLLijGdWu̯:zp>ؙ qNh<Ox۸囹cN/DlieəounXu:v FxtJ ($xolz5&$^v:?<,X*fۮ> sLM.Mhk7' dЦj=E[cd̨sd&<3ѬxQ8W;0WO3Z 9Fa.|P~g7>Q5An8^<2tQqrtz87]kǷXnw?Sm#NSzQ"? ߱yd[~Nȴd@YG5tt$= U__-&OnfHH۸]6X~T% L<1ā& [x,Jy2FVuRL8F*ZRBf5xxlUL qC!ηEmaS4aԄwr 'k 7m4E)JǦ( wд?@)#1z¡;?ĞʙTdyrmѴ'c߷Řo=<uRq^ `- N"D_cyc jE9jHl$"Ja3=;.n>ݚkjgc"h޴\rX $`G &4TL&eaf QEc6 =\Oqf j٘N2xg `'Gbjc`@[?ލ[{8ˮlY{sNwݙ !!$2$" ̧BPUE?pHMA d$NW'鱺^{8[ `~woM}zֳ52kWj83_8>:BXp(w667;y+.xƕZ@*izdHd t;aHC}Lr ҅W\qp֊%_8s?ugk(ѣ1.MlMԻ w_bdKkE g ؎Mhʇm6qw0Qe)%@R67`pc=~#{f.|WF51Dy&obo`~6F6B*ALA_>fVC:k7Cٗ޻>R[J`n4<893_x. /j6aX:>}enC+4]V GI" l˴9%X̌<]' P#bhunρL8zg( ܃lZSu3GEeJ_*}]gdkZyoXX>ʣnwb֬wݲ脰Q|RxN3 !w}cO$H)&KIHXkv8ac>|v99;'0<К3pہ-Zw筒1p F/4O !EaS>92%;AQ"J"$($2[?e_Vڥ6?!2P:7Z;Q F[#aTagߊ yTe{#0s_?Lݸ@8aXBBAkmy!%C\/nby}n`#FtaKC@ 3,D,<L=vb3 ^'8y^܇hOd,!4!|飷K`hsC4,#X2(&~nGP?z.|&!cr1TE =w!B?)Cac7>OdJ |p'w틗P" qgwz$`,);9$1|ͳPߴytE" 26eo9 \;_*`5/R@ѿ4@}Hf-OD3 f*:?_B玠gb"PބЀ0 {9`EAIg$@I߽."QIxUBcA"Xl-XQ?IVjWaG`2 Hj`OB̧bp[EDJW K!y/*D` !PH Ii*@UJT=F)XJ5سe_z@Z$@< /'joWws\A%k+sd^g!hYG><ϫOrN=ya>RFgnHPFF0 HAF@x+8qK =tF}O"8A CZ=rs ;]=. ?s^{,?n_M%hQ.H XG">t/.zKSLBw˜ .pl#ppBgwYF縄)A:ic >Ҁ6m3[q cJ80L:P5::EyR.X)tHfY#{OB͟h[,\2b o]w@* Ibodc h5\=Ls38rȽ(|ŵXh*4N(OITO !~Zy3 ƿ#"@6TM\^^'^,X)"0Z#|/g_"| |Uht"?0TV+â9? 3zNG]]W=moS/'r I#Ftt@O;4 6CA~E|\utC<  `bGڠHiӪτu ,!I*r_Ze)^>M 5T`n~)$B T@"zO {WHai h# d@9dKv32䌦sT@k)1f U ґ2c𛶹7}d E5>\;t;f"| @7 MZ RCCQ!XA#8qSyՇ>O^Z 2;7s`|E=|?HJkw@NU(Dh,58?JP_i!HjwwYv eƔ>gsvOK~@;ף9f&tG,sAB^?UuC6ʇQZZ~1)L@5M'DHYh0a"E=ʨCB"{߃ )J{ ӽRkdi%Vm4ּyHjk\>s!Db,- y6^ GpK7ނa?c^kbhx4nYeVjk` |Q)RVGOt0b>E ]@%OƝ_fu)ea$A!B=¡(A-cY!*p;ѐ~ϖI&p#JF𫖱~>{$ q?X'IHEc@i;f Zۿ5Z 'V FG! (r3d %lJpϕոOv}.W)O+;"q"D@"$:}82y[<Fgn]gXN;3(qVk[Ǐ]֠cyO3ye 禡*JcaE "5 |9vFW 9îkpيŹY2]8 0szs\yar?~vgʄ*S 4o|!k. V+NfA7ڠX110WuC$Ƭ ^pD'kUɇQ>ibJgj"G%JZHEmB*w)B>+H)7ԙ+mGdTQU WA$*ux؇\qL* -=z l yk)ktמ 9Y2I8+$%W?f?RE֠AI0 HAbApj/>"k9! Ix S(`Z㥹#.4CP%-yۣVAʎ52ηEOꓒ (@JU5=] ˜H\3'_:XI g&H6x;;(j]zMZHݵR뜤:/1z٢|"p dⱽa C0jNܳ _ۼ yB֢'pHN3f$ 2TҦ]t(`*J"yVR DVW̎W2J`N>Y+YyRG>r?DRnkLar^?I 8 gXFrNK\(sX L08`I}C`($a\J#@>ҩqL8>{xhHaE/D3G8O-5f(H)JTF^ _ /Rd¹A  sq~k'HK!qppl)~ڣ0+<  m1f2 /cayQ c ZP(|m aQ a|Sti|eYѥlO;tBRCT;'Z!"hcgmKROH%2LZ rRLdя\1f# Z*˗׷1xٴg֍Zu uJe=7 б` d {[H _q)JR< yA 7Zհ"{m:sE)\XA߹nY(Rb'j_/.K$ɤW ˌR "Ƶ IDATL`C}h u;s -$-bYktA?J,r -5cQ`{ ?I@kq>B01jМ+Am"zJHZgfE#xDTbHd{ďmG`UvH*XI1͊e!/Wqwrx5;cnϳߕs.wj.-C>=XOUn@璡2_W9`SJ:>yM Gs^t/R0Za9; _VX9̖_Z;/xFcG4)){+Oɲ;f.VV&C^8͍z H}D`>-\ܡGlG[ ˒.#10Q<<,n>WG>zl˗@<Q4M Lbܭ&cind"50 (i1fr 忂})y?@U0%?o;ɵqYÙG87_Vu$*]H xspy:l ~0Z \~='-_|FѰ0f{=J3TuqEL\{2F97I(j6e F6H6mFMq>c3V.HXȘ:c%Z; `B/~wRm5w^'k!`ņ qhٰg:ubEGg  =ppL$!^14EWPX^#41G  Ri*L\<HF0X$A!T.}{^^: %}`"/L9|Z6KiW@eq%:Ӥ+RI_? e=ж^){2:S@bhN3C iEmؕsYE@6bwŞ!hN2d-vZ^k `0ja0d%,S( ;3lؾ.F91uଭcl;miзf̹{aᅬUB\ BΕ Ý5dEgbYWDWJ4qRn'i} ^ ]>k(흩"e]/dŠLƿc`0~-JqO5l=kr{G!A)/{v;4`눍?VHMr V@<1u Z }p$"j7@,۲MruR =oqvqa.R3 W>9\vf $H. Z mYiz?(S~{ =Y઎~;#G] <TfVt pڔvxi&/G;"p;Z3.{zWYdΰ62#k1Z-F Z tՇ MBF+mh(m*uCx]]CPyKKFXUC) vݠR]Sj {ߍnb|&'_ͷOQ) "GN `{@mMp* .?D8v' 9H=CHJP:7 NQʔSN"V~ Ch`H$|Bz^4y54Xh{9 9zp.@E@ck1疷fWX2nLadgns75b:JuwG@ N_.`A")ݷ'Ěʑ!BHK|`aㆍ]hOc EP 5ghf )"f9ᡱΣrXbsEm?hyh9Ď+^MU@ Óǐ^b]2-qh06X"cẗոqB ߶ 2%ɋHz`$D"/8nBY[,N@ 4`4`4 J_i}k"^{턽Aۇ H  ’Ac`q~vXj1}2Af24%VnN6r-ߺ+eڜ>7 7wF7e`k/\cn BUIr-.d8Q>+61:@.FF=(JgdPgkdɦ7u{ o_8?~۱jgoy`2@sœ5 Lڢz=Nxu_ ,0hSLN@H-Dn)Ca^."f^l P]r `M[_D^FIVmn G4CdcԷv0YG0HsQwDhj@&-kU/ t}?׵td6g,~!"Os~S<&n6=H€YU2n>e4%Ķ]O[iz5 La;9ߐb"xG$$8_ێmU=JY,*)<'R Tn6HҮ;8W _=XX02 mR(ҷ}3z53}=M[bPH]{zFUPK"C`Oe~T2A!5xR[%S!a-u0 6Y/Avh[(I6R8(`"Ͷ)%hfqȦQIZ%aNpL%CNpLxg.dEVk(:k&Mr,JIh6@ {r*F!Aq>vNF@BC2lIG뜅TG~zV +쑼}õiV%ݹHi|~[.B9#n_.0rbf8u#" j){T6p@\veд-WG.Wd|3M%ZsE&sBAqCDU @G7-m( mOZˇ v`LfW(wH-jY;&Qhr1=WmҦ$qbZ4pbk^nީ8+ʙ[f&;z>g%\2r{g-&4P(ַÚwKh|i6hۘnCAa1i|)_X dͺ$zLַ%t9 Ra9$ PF6a#)5C@ cV[Y Yfфf{e(0򓂙yUS,QD!T`}l&tw27҃E$JyF")8Z.(8r F=0 `9\=h i gL~$ (T~!'‹f;M =m90]`1#myrVHjAֹd0rz҉ X>耈"R"^Zijjo "ĽTC A0Fb|:x7=ߥ1wRФK\v T cm;|m8Z#8iX0\KP \D^cyM+M[7KeB$"] !S_\tF궼xļj/msHF$?W Ƒ/O'mVZ9țms;>wSsyNT9)衘[к^/EkC\W6n5 CkOj3A AM !Lj-4H8wk w`pA! ܞ+*ƚN3#u@ӟpPKXq0(mb1e/BՂv@'5E&ifw{:gPB`+ߛ-R2|X?ZBkmxUy>2`Q*)1Yɪ=uEZvC,1p7cw~>o~w_5Jr8 rw/ VN l~ӧsffnjś`,VvL a pHGB`xo&4k1Zw] #eȷt~|g2!.;@$1f>ra*E!ɀbpvh4e ڄ>b/ 08pɤ5;|taۏ]z[4Y֯F!/y}].u[Q(07 (ڄޡ*_tzZ1/4"׫HFpAqATfxƿt\]E)N+mFR ?r&X{z1/' 2yM{_U*I X_nfϽ K>3mf.ϳS^x>6lC+kZr߻FN|,%Qn^]}8xp_zizY=R!cRY Ç1?E;e;n[155Y AJ6!h;g H>u%GV2ż{r|g]~:31Y)M7}YׇA!ޅ$6==,S)Fї9ᢧmÁRԘM09>p{;龝>fq –ӭŝo9UWw׫3DduF\zx\El=Nc7\1 *gx_>|<,[@K-@lY>)Buv`k؏ F8Rwv,a`DM2I$y#x歛?tc=T*f-&\ vTc̍Rc`i*CBm19Gp+d֚6}׵֠:'}Wozp"o7 ߊV(JK4qs*Y޴?͘|h&m=RH!2.J@ !Pt-AJ812A M$ B6PK8]xɋ^l)(GSIJB :ԠCf{{L~kY_ 7=m8wiNTk&e7~ߍ7f̋rM\t4T _)hqo(MF2"ˈZ`qQaF1nٸkF|l :o- uP<#>Rͷ\O^ ߉m og*)pw;r6 c{W5B@SP,2]C_qA9r{$D$w IDAT:k'.]U^YLT&Ķ2X֡+$ D" /t@B:+~'_Y #!Wb`X7orc#r,ȕhKIAJ0C̒(2=nǎnƆbqd7_ d7. IgY5He ؉{n{p oJ[*˲>Wms_v%h#p=NB`^:s0lmXU*- =!1sǫ8wP>hDQg!ضM):1u}|Tj!ϖ&tso]{=H@)y<.h 0k|qHphfoAȲ(!|zscTL', |Ɋs@WyP HZ4Apy6 '5.; z68w#y.&q㛅1aLEؽ$D=>ozD,ꇍ0P4 O'6_"S9 sUU~`* Q"E5X\D> ګYI c||;Wuj8%h5o=y~+S6sN(ac0KmZޚ\5 I,if j0-YP)ΑX$,4 js5v⑭28L0_l9U_"!370jݸQ(V J $388E"y"Do<UmP* /9ϰlSce%55U8mcC=Q=_y.U`7nă!Owݼ E\T_pԌ pvwR>H@"2`L ]Y1㫻--;;Ne96`$ԉ:>vLrFk"%hp~HA0Bc1|fA[ k&JJz8PffC|/}?y}xjo3' t%­k za ̍=@z0F '2U;xF1k lY'ʢwR^ߎM)^v.܏L3H0U%#WIW>#~G0Ο"˶ֱxشB5%/PG֌jJ5ыB X3ĂY~5<11)Zrqӣ?B1ɜ0S;o:{e؜B*\JP5)#uFz` PYXĐ> r״ 1==uOof^;viKuZ'08pdNcfAamkV@CBZ '|A),gw jۣ^\߽x(L~ -GϬ? $UDѾR$iX〨AfWІyObpܕf4讷 dc n/qDD? F߉3?/+P:Z+Q#}(œ++]Њa|ο.qp^'8` }w^6$ k ^?k/^?{\uZdʰSueZ5| YؼC7xAϬGBݚxb8suB#_-c5\1\cj ed4~|m'o |&@O g'o>#^%5ᄞuF/R^۳^\bsg.0O12@]KsoOO''$u~#c=q(Cs譧6҅O' `n$R JuƵڪSXI`+ߒ1Zx_Vrrfس-eY-SН>xV\cFQtnU[8G]du^@6[* JL 9-5AV(󜫒V6)M?]L\7y73o2VN9?8'Ibh0fc̼eNyj]mT =}sz*`;q f`ċ2J   f_C~YjzZnI>?pKo]M#ނ<)aff;v ט_ҿ1sp|Vu vaM^Q-ɤ+th:@:hs3YJx~pwn!"-umZs&x5[c+Ha?H 嫜,I)Ol+߹J]dٲdc0plАCDLdiLНd?2$BgIFEw q`v 6+U%V*T3WRYQ-KȮէW^=rA +YIyM㶴21d:H E~&Y]%ijY Eʺ$Z^B{/芬1\BWᤦ2|lu+ʽVT~h`s'0^M+K˶B@W6UjMU+E\Y# j'©,, APIRo(U9#ܡx|߅%+ v SLO3x#5\uV.YQ/I}8`' #kbql cكD@Wd]`e$ `jAԐZ tXƍ>q޿ 0!;$j ϮUbaWU'{!<0Q)="?ԭ BҥϿgw{,1>tE6%#mxRax6 2ETaڱj_D.tEn9ˈcs2Z5IWE3,#|&2/;O;9jkʕm yUX4@ɇtCPd"Uw03߱ܕ>=n0C{GJSx L W 3+h_TZ,[R4+ڑl$Z6/-P39nOQeutZ(DMD(LD`(wrS/?@W3s7V|Ze*Wx= k+ǧ-]^ddo3E5#)T"rG0V\YcPL=$>Hg|b \wA=,į^I@4UɈ(d&czhQ1]0k8 v73Ƶ@,9MX FXKjȪ~LҌ$S'" ݲ ++"t8p xb w/K.KdaUcV5W!@ʠ FƤ$ɤgz>".AnOt ;^,p>߶d< RMVt^E2D^G;4Y ?VJ'4j+~:>2 \e;tV5݃YlKтr%>E5>BOgBA}kP36-%ehP LLu\[f'p#CI]W^fY9Na1췊LTVXE,/C*+D02a&[5 $@ㆠ+pO>]&0 )rST}AD Y6?@rc tE~ TLi@tQ*ɝ5d{EǼLȢe&% P$ EJ)fdii %$Rd QkUHA#ytsg0^Q2 E wo0ڤ{&cz6Ȟ)ڲ˚xߊT) &ņ,"x(>iolkVS"O*2tpH/^> }HT7B mODj-dhwLHs ɊW&{ȱHg`=@7675fiz<AyvӦF$+EdG0<Ÿ 5ϰ= Ra xl'.=C]/>UHZUvk+z$h6wUܭhBĉ'~Ɂ$dT'뽌Nih+LDDd,F0Ə"t8m5OL]m%"D$"31s$xMKG vdmI8rPs\|1?_Fl8H]>{LBę큮ȷ;+6r* ŴGBEL$FL4L(_RK+QX_hHRhW"]GuZ`2Gڈ0KkSZřTz2ޔL(3UDTT7]d![x땩> tE@I_n4<0F/CߎJb&;zMvIg40Ux4ߜ wmE9-ihksrɚc ;Wj=hQ/ٯi& ` FΧYhZ[,U./( >c^o>D"Y䡤&0smo9QToq~ 7u1+ f3苅B0jc_ꇱ&3Sڣ@IOTifQ9€zYDw0k+m4P +>1t 4ίTx$3Y0 E7Vm#h('|iy^+iH@`8,"2H}*; F7F:kp@Wpv9NW.J<х8&oAڭ NH=S-12EՑ])#'OUm,>GC[zut"䋘ξZ`nS3,PxpZ3>/2^yR@Fm_ M,T̾Jch+L-e-@VNY;#U)KZHO0}kjxvn|5ʋV!MDžȞp@Y0rgxpptNZ; tE` #KiW@@w1Ocpxnt?z@\XcCQ-BkF77S y3L: w8BX4`RM'Tڧ~"ZKSցBdy`=xcoCt^wڶUR8jPS[XO4@b"^U/ɡc@ mm,fNg<@04+s)U3ޔpê =H"P7,ZcK@/Du脃>Oֿ!y޶A(Ooő̞jȢS k̦ M'Nw-GḌnQD)s·7tPtvtVW}"ԀfQuw=ZqpP6 9 &!<%;D=éq;;O:^EM ӜEVj*Co9N D|6@ҙDcuS^HRypk"p­ާ3 'p\.rJh<%[a"K1NX)nZ#!'I)",bgx"/-n~Hnmt?;35JIchBCp| VNt P]T K-q%>e_ЭhWiXԞ8SdLlpH%ܠ=e$JA|>PN׼^TAw.Տ"=& 0P|[X zEG(dZꈧ3 IDAT;b OsmQfD&{&HR 7O,""n_3-n2ND&M5',"KU8db:rc%H秖0'ScTR:s>0s^ ~S#YǺb:aפ! UQ3Q|C''y_F4&wunO_ 4d1GVD==}P{t,LAv3ӼX ﰦ"1b4s0KPNzm(3,''CD!A I~@_l~"/d웿y>n{NuGi͸=Q$~8*bj^q,H^.;~3 @¹j.>4֭.V k l6rYF"HENNX&瀛>'ajtnONjB[ol$sb9-2ُݘ8D/g+T7H$pC}"qUIۋY6=s|]~s3(S٩ Y/OXqLgU#1 YgۣE|AC/+&n075F8y]Q;Y~cI5OP{H R@J׊ܓ`VܶHy lT+0NsZW ou֣_ɁBIqs@I/G=slϧp| L3pؖ<2B_z`Lx@D)meaD$sCIg}=-{m.>zc/h`OMDQq[!8Q=}0QE- k/Tf7]{QpWOes7<9Gg!mB<‡`U{k/`Om=3(2>r@quh_W}V$山gǀ-s 8p}V> ݨ8)pSݱU/h: n0CKS2@X,}4zi9)yc?=n sDS̉KD}W.c<`|1B"X *EЇ^ y=nߛ{s6?'` *oE?}^1}^=Go8/(\]Qzk#m[Ctѓ(|.w03D`8?f{K=?!0'9>cMMwf24=4y6N{ә0'V s5kGF bro1͡c}@ۙ?g"UXsg_2̉)q QW sFfbi}4txI{h(4{86/];&|N[X}S)t4TT :dt˱`mRk%lEb.<:04/420--IsI9Db;W3_pLsn'/9vs8kzZZ653'.a?9>3'1oI$~۩q]uJ$_Ok+FAur&3::z{ls7Iilo]GoWb^Y92MZ o\nأ|}d'2H_ξڽ6o=#03N`~r'?]+k1.WD>GPXW{FCA#wTM~.yJ1#̣?Pg') I*ɛhaf0Υj]tk'+ڌ.T*MfO/~"!B.sPSAF%||˟5{;blBnhZϏwQݮq__" FwEgzWںg]ٷqp=Lݱ]>^og0KowFrva  J)%Jy:Re0ǁ!ȋ m:_MvjfY<ߧxD-Q PR8. =9Эcg#a G 2Lu!Y\|۶h,x ~!e8YQf;NTqh!27oj #D(?ŻX-jg?L=7Rd8Z.-nmca'}}/W3& ٬RƵnb< }/2/t 8 <?z<}fs#͓l˴kPFu\e2'9Mbo}"k~h}1?0i,.m?=:%2v WynwJ}9e6` s7Pćzx!YM-<]:1;Uw,cj vlG? ҖQbOlUm 4QP <ˋE_V1Dԯ1t[l][u͐GW~$'_D0:Bm vsw&?rz]~؜_yp8+":$.&>Ly蛡BJz.fszqU cDQHl_USRMߍ(eEUVK`0(vaQazhz5) >ܛ!ug5\EF8t`:QF<kb*,^9b 31xyq\L]2&!a+Jq_?;{6G47:HϬErRZ=Izσ! j4`=]E|CwΚ86eG00î`<#pR::ٜP,r2n??o_oƩ`u()~X>Hyު3QF]GϗAf:)4"A{K5Tfv*8|lo f{*rémDn0ZIV t⮋}j'@5}iQ'8ÎgU l[ 3 E.uixP^>}6I/no<\2~8nL?~91^SJ +GW ( zY EnA#d%Ϟ|7%c Y-! l 3%e[l6cW=4ZfK0&t|Pz8>h J8O?c w[!v㘤750 (E:v\.Eh' >?-rlS(~FӨˉQ ӳ] ?|Gֳo#ߩArOywiWaxb'ǿMW @OWyw{ig] l~_=$LbApyr65q~_c.u_U;gE5 > 0`txCΟ Z|~al7wmU^p=][vØzb9kĪ QkYT5O>at€>0)m7ih9j\&La!F4$}H%qpԷ)션 (#֧Řb.j/  ]|Ei0M{[8R#ԍ#i@'ǧ/Mz$Xu[e@koЋVjCKC[Yf9ɡj9z)q%e/jJ=`B|'uYs70`Uh45烨ݕq>5 0R"iVnC),>/#9#w|]yГne'^YP&zQUA 0"fAJ'CXmM:QhaG'@UG5^x1s@RrlSR 3-ViK3 <؛A%| %>ANߕw}K]苯*AQ}?4"œbؗ87}m_=C4~B@e1 WMQ60S֫֫lZ1Â?fˏݏVU3LRa$A= *xz]UWex. riɉ1y>\"ۈv R9;%X[Ng#H@ "&9:7f#4Ws z,??^|I31p?^[ \ץVnLpa07ӓ wNxrvn_γ'|w(f&;+B9H* g>4-;<~ILƨ12u|/z,*HEa,qC%|N3W3`^z68J.RG6_PI  !Ǩ  L=NY3'jk'%7qƅR0×^0dn Qm0tp?wyÁU_vfNUv9 &["Cej|a;uu0ݭ/Nu벽Wn}0z0IzOZK `!aD㮑i0kyPZGaNm6rIVY;l/9R|SwqqA$U_^_E~@چ,VVSW_-ۋӍfyI‡"`a2f|+ .QzsbA׷G ϽOmN|j6H7'Q/b֛b+bgVQ?srEO-/<w#0[@^!CDQċGG!+MȈ{E>>$pdf!_e Ucud,"ݔ." D@_4%4r4*p/~ݗ{l7VwfyQ0bBl-VXhlz2ñD~GD bՇ*JfEgDӨޜ_}("st~'s|w|EC*1G!27ˊps%H`QLB7a6ZݴR4 ^^}ٓ'-˽QL'lG=]44sh: (C+&ϒćFnq_ #~= d1 #_iЦ]t׎PjJNXrat!sg|>^1Q0vDHS btǮ Dlf8L€]܈ñXM#pyze\Y|2;&6 z>_oO<>~p;Im;EABLJ!Jhj<12.qكO.1&G='qy+4^^\m)ĬgwGݝ8YĢ\A0]yylX3 @%( -%1*nUkf:{Y޽R3H>2ӣЊ+}?,[N׍>M@WM!Y{I%DNJFX C]+dSSy3/X.Ccb_m+|'3ꉺh9Ԣ(ﵩPCՍK# <KݍO,H3; &9|usN b7F ziJr 30x+%{Je&ap_7á*bcsHQu-4LMq{\j mͧɁaݖO_]H^RLEs4aNt۱ D|Lx76H}ܔ)Bs #ϖq0Hٵ琉0BaJ3g{D xݕ#Fmn5[8.jz7 (p[O٩pGV,~ W< _}Ὗ0҂g@;dr{9<&IP ՏisC@)%Jf1hۏA83_3ҷzzbr5.؏;á;?_{4TAS/ko &tNt;XM;jFhh2=컉:@Y1c)&>nȽ,$m79FJl|*"5\_WXr.`=|q`? NŚ{eѤ9iaI pP4;ie^WO|/āݬey" IDATo9e/N/˧/ӔQ3w0DYTYe7e4 @SZI޾p.FP]X,21NUn@ӍWYjn7G`!sx^rDJ JL",k/( D6Iy^y"fAY 繷0IW~vJa҅iڷϼ,ty;qjNX`p1xpo?wC0X1 CBgsjl`}(eE'l>Zs-xDcݻ%wf`:}+-rNf땿&M$A $Ue\׃Yjno:hXFp,RoA|ǖkY6Iq004D]^n?쮶~nWrkf4&nI^EΩ&>=f8rIΦz0 wzl*(Z7%UЃ&}ck4] xs8tȓ#W??Np9:Q[M;BǡݸUS=X>?,X4cR\:OUSyۻ#"TþNLZ\^ (0b\O#j<g?΍!+j|=|]n!Ł \_8jMu,oZjbB~Fǿ}}<+bR:| !ч}(a*ݐb{$Rea6>(#sKb'`zkL qr}G)?uCeuC+q h4CFnE'q҄zN8b)EV+1M=//AiVDбRJ.Bx><|Cu<6z4b(iO i E{yH`p@B8O)` gz܇>n;yn9mݖ|T-Iqw'䩁/@NUj/SMz-RL`woo7GEO~ 0pXlA趵A6_ c8sd3[ӖsNiA&bF$De/,fQ7Al8hU%ȡ( 'G͠>WCGQy8t3oGFĂ N=^Fbڲ8BA9V#4I1#}t& Xl,Lax,C:ʡMvi>!(R(0 $tDd^DG!` d;䟭^bX(nGArv?o=F@nGDL_x-lszϖ>@)1."D!jr+QZ7 rd9wl+yY'A 0PV1 |RA#@ e G'5,3Ơr߾0"FbzPUJj kxTn&}ۺL#1ph„8Qz ʌnHnwUX Ÿ\}7S$7;Be,g}02ĭHc4IassxճMcj ˳4HOTWln%cE:AL$IȠ7)yیREBԝ/C]eW ;$FQU|˹tl3\?Yβ寞pj'BT}AG:mQacP4bOCi ? =ǻ{r2OR'Y>VCL<_QTwax|Tp1Y 2 Ckt}D˻}4UVehbM@6c u$mledh 7Ԯ2J2;c]3J@7l@XntMpua ttؔt.bӟ??׀ %8770N iIi86]S >um QH5$ݠC6':j=7p:TYL Z*=dNܜvx :-pnѳJׯGB ,dLX,k7hg )zv &=MꏣRYWmH̤<*Kh:A{h̬%xBFq 7]b7X F!\E $Eo~Z.w/9|$!XG订\"oatRП>$OZTuc3c-/}J$6up&5~tNľ uFRL "맏]Wo?t$rX0hi~}zJ\k:0s|qA^nNǦlz]ԥiA)NIj؜'Ds_~W-VOg~Y(,E@] |meU9t)|~x_bhS0eGFOIHzl{wHf JXIr\J c1u8>Ok|j8[F( Tweŏm'JALss Qf~zq.?^_/7hkZk&L[g?بK([hл;:lF7vUf77 n(hodz4~ڀ);=l0a7x{0'>Uށ6}ʢM@p?\W붹u{926mx8a}jv:][ \޾7F]f{䃳d3h큘/P?fwV{vi иXj? iO\JIf?NM7#y2Kt)}kI݄?(i2f{`G?Ev>n?~ӎx}{Eqx}CwQT3.=].YIYWQ!#|J<-T$(rS~xc eVK7ȦIS.arCR;^pr!i]It<ލ"]"|).f㩤h®??~#F P4D /_C yjut r v_3u/es(3ѩ^oGkY?6ǪbVY]8E~x^|㇛o0+13}ѝ-7hᎋ eVVu=$Ӗʋna9ƘFw, GLܡ!FO}9!@49?췷5uLY*ԓWO4ҌOD0rݧ?5[.껽O۝ ;I[1$G:a~(4`Rr _Eu=<Njcojۻ}7]/+I` |_WcP;A ҬnͫR&݊sJ]Wqs_,ž%4p3<ɼuꧼ!flg.Mr |2:Hm1hu)hS./_Sz\BC8IHr2jqO%ˋ搦6JNH( sgϰc0b1'~ЍCfTf'<^s>tad S,rv:O@29ʊ0fCğ??V*vkɲ5A oNSYӧHB3!\<\ihuW&o=Q7='.Sw<a\gj&Y Wu¹gQyUxu׎ ,,!JA%Fxʣ:;~9YzCۋiۮ7p 񅖽` z_<&ևFQc7t K0Irs1D^o^pny(( =dga "(ʼ|u4m&f05q`z$y?Xx҆PϲbY0o݇:s,Nk0nN2  tOwF.u" l?I.OE>N}ށ"rjdC(3whFmEe+BMO`9ҵߎGGK} .C^ Lʺq(DJM]9[FeW/ËvM \"ܼ+9-JAx(xuWӛo^OqJ4TC[\,/ (o23!:ҥ+|Ͽyo<5| //L ; th|$g's&4{ˋ;FzK>5E|SYŖ3z_/I k{*3c—bGr@2Zyu;# C|9^=/f_yx02XS{.g3dx ء~:KK >"tVa$t`6.lͧV[!Z0$n:_vG!z< 㱼K|A`M+ 65׌38-=n+Exrr1 vjiО>'RO,󣥓-~lǦ'Q}eWwffD(u 1/"7[`p9 CA-ݬ6<e%Qphzά@lB=ϢДqhTo[>-?C?-=P#աjAp`|T8V)Dn7 }滜Mz" y zk_w hrKRO0%Mߟ}xl;:V )N4v Iؔn ;DJ\6nLӀhi7 RУF>H8S߿Lz cdRdP$[n7vFF@p e\ 5CK-l)e .!r\ɴC+c`=~4J7}.\O-fk83_2a|(5)vlԍ $V0,\Do9/iJQ">|"ϮB*9u' Hw sB_컦R TSnF-:;=-64ZcF gFatyc(c?` ķR8nl-]ϡ6lY_nAp8E y^l痖e9nŢ.X7E*n./^C?~aR+CTkQ/_'.ǻ|Be Y.‡$ ecH% Z֡ };dP|V@]bdYثTk?0m?\UuW6^.Jf<)b2*ݪɜ(8'?$X0j~~ڰݻ{@Btqu:w|ndL)B-"gb5OS`ŷg>D.Q7 2e B8>*̵l`jh,^W@?/NZEght>}-0=ʭ*M9,8ccdqjbMɦg`_Xtal?99.tGo\8_?^^[/?W+ cñcr9&?'o+3J᪭4'gr3s,id? hn[?yJC/dZJJ @K!FVS,]NrKǪl[}+5 -Tmvr8Tc'|'8?Ik ۩?ijC[t-㞵`sÓnt c\/6whS簿9{[-zvW2 Ld%&Yh"})ɲ}۶x.;A6 "qw3/瑏S,L3X5d&q)FtC8Qh#F!&*YQ+Dt=Gգ$LW e]7u/cZ)G o#Z 7/t fovFLl9Z08I7'0Lߕ~df80 hpt?[C@}gKkFJ{ޕҲllj\'gmǮ?nMB[Ct|ݕ, l+{}[$  8?Q=eƖC7o1|; _?wj5FX6VPw}mR;A1걹|jKvqR~3gm'ɂP(1/='FCVˢK)*.X?~>V%w\DpRHZw゚g;Ҧn>U? 6=0 .nʼn¢3J!ˈCS;YgF*ϟoh9(aS;Jͳ)jl@0b =#X| V]iD`5xp4o/OQv mk CmL :yz` n'42E@ؒdį( IDATB] u|vᩊWv3+#!mݰ*3ڪ[zjROƂFF‘3?7q}<^V!Uy'7Fr>1ʊ!FkMYyEH`ښe#wWPhV_?wWw4b-PaO1#Ts[{vf[۲f R.NfM8^=ژs\"Nx]F)Qsqٟci꧞)8HOP.-c%gqmJB'5=WC*(IZ94ѐ!_i3Kon2(,߷1񡬆[oF߶کa!eǒ%RL._ʮJ4IJ)nd c,۠axӨ u E xcN5y|0a%}t$y㧪E5P)Y>>śI屩g*Ifh&/fABA `0Eh?Y@ihb\)G?];dHup\.684I &)UvnU4,:VM3A?SġJ+0ӯ_[q4,Bw1LfSg7.%+m fUoL52"^@1L Abc-,.bQq!'KSo Q~wQ !YQ95>Tz$/vHC0z1@7 3)E%wm($])G@8*=!8ZIf!D&-VBDi9ɗ'Sӄq()ػ;4Pv0J'C%&(\5AT󑵅xe:/ߺU4Mw*UV;-0ڵ 9|*+&,.fmowW's&f829U Tvc} MzLzًᄍ]DI]H!=gZI[9_2E$ʀ<>/N6y<>֛`Rʺaȶ 82\hL\((lpUUQV=mzoٳT1 WwƱW Ol;{uQǮYr>P jlz<WzKȇf| X t ^Ox;> \%l% 盥k 0?]%IINm!JcV_>}b`uz~/Yvk}fwq^'r3_>=hQn>=* h&ko3D{Ogճߗͮf6Ĉ 43 SEZZ˗f$&lH(t"?&U&N:Zj\~5M+6gan0 u-S Ekޥ{8\x}>a)o(J{\Cšǿ ~QQx{{"X`T5ɳr$Q%AFa;M8$wdhMFu>ݜ>rs;@ PO ZU:n! mjGP!?>RrE0ڻײ`O؜?jgtiG.r뷛K20k ҵp6nZx3>1]mn۸zN$o//h,{>h˓0tt=xa+{jU;;qЄׂ_?~npe@i,ǾOke/OO_}_+ɅYNcN]3w9f2Pl੸>C7-фGo9}& {HʾNfBVRjmY-]^OUG(>k+ Ȋtz> FaVwzڛAHf`F alZn\ƱqDCžGঋ,}L(绛eP[}Y96k_ w6I,70[lXMFSdY"py/-v7QڣeEa4Z$U= fU]fa炦zhq+?֞ +Y630[g+lWϐ]H Ǩ ,b|v\Gzfxw*=}~aWBKa vlm˭]&\ Ij3>NkjhNVWC@!'*$cqSe&t(DܙodĥNUy6u'S۶/r` 0Zxf2hsfYwK0=?; ̲xzA97Gb77"ȋ<%OqIΟ;,1\ 3 pȧNxu8ߍxlkSzϰ`11ЮC^}gC; Cl1ФEZEQME3ɤFeO+1턶3g="PԲ˒_=OCh/4ZZ>v\onhOS/0P1_,!"^s*uUQ+8F0g:H A: BbGX~w}?,3&"8 nJ@fRc5~W2BFG 䭦 0Ç{n@#"8WB21o:6*ghƓ7+?B *<+Ӆ!5WwEr6r,W?Q&QIOo}ypț[oH( blv}3KghT̶/Nn4]0_Dīؖ#&\W M,Dfsľ[]K `yF4zoq]@ }:ژ_E/X?\1\P@qQvqt‚zYtHx ˡEgo'!qm(,*L/fKB_nha^XQTH45|@cE^2_v<;=68z}#Xn?ᡠ }V#c@g50rĒ4˟~D.spn,0I[- h\ð9Yv!/*Q"=KWͳ71Mno}w3=ԅVL&=]lfLp?_};kǶ1Bnmf*3MOdfT 9I]5cQ|7ҹé}*f+g ESrcY0|yx^Z-ĞBP#IcE:ƻM7bӎu]V@0 :H(P|RPiſeSHwUޞH!zTp(4|zEUrmw3?J׭!o~>w}? }S[' T1QS[yv7ԯ|WIgQ' `δ֢W,@/q]O4izߋUPtef'1 غVBV/R:= 1Mb0 )Tv,Yv-/ɫEz lcTDB&id!E1d}_!o?U^7tn]o*0n|H͖sDOgǮOsB6hPLRᦜ(h-_A(ٱ0m 1Ҟ?W5Xܥdx  Idg ]'7wSˡm#,|ľYۗܝ3b5 cQBZ"dR9n۾x`w/6tr͒LQ`S3uc`XvAl3Ef^QfW"^8/n",ysTi^._N%/>\`+zRiOP)`|;JaL"jj?pxE\W;ӘhO3Sy NKiHN_?߻cB 4cWLp`HHԢk7X{AB 2BE=|_\ &zMOΠȇK`y9P's7ד;3.vmEӡY牡1]%( v> i+;l #ygԵ\5U;dn~,|z)qSoCsJ rJ2$m"_jG3ıIߞr,V`i# %j}LՇ ,Am_o_Uf"5#3C){3\BhWqik2Ǝ-O nQx~U5r5uq)a>ǽfw1Zlw|Ls>?3TC%1hLS3'?rRw }lU>,KantG8]Ad(`Җ1#?4$DijUH$j= 0BkDB mh y9ՔP}ۆ߫ZK3Z s.}}OCG.}bmB/2 ڎn}bOx>#!@sl5)0Nyr8m ('ќ]~ԹGu#PdC~lH./v߼u@$w 8Ԍp`Y0?F]1șFb8.Ζ.WmlP~K:5Cم 1,wϟ8II`:11Jn0MXi`\d[;Jc?XCI#GZ:h;V2OڦTuIpEMR}3JU:ˈm>s}d'88Hw}۹8/GhÎl7_n7۬0IJ7'o~/jA aY$r-Jvy$512 x3@glm B$VXlvǠ?gq1iqKr #$[m}0=!ahH`'Nz4\@4=Gq7 h=#~AJ(._瞶fܐ>?y^iV!q)lvfd_?r ц*cx Pp ɢ>?<^dź{K4Kl]6E!uĘޣx[6R$[tl|9L- ;6MyUb$85 $ Jl`bG,2( $!t؄cCK }l\7m~ʘ`}3^]C/y\3XBǫځ`c?6aMXr6L/EAЂC54M#9mu S:~KRqW\~Wt(BYȦMXH,[`=k?}?S8N@vY t>}8]=`0Bk>L $x|Y\\I& ]z Q腨N *lvy:ŧXFz]o1?>p0aAhG%nx|.Gl P?)E37=X6kz9r6ZirQ`e/|Mxj(L4ud#R2-`T̃Y@fUݔw8ZzqN42EPz*K$MOzA`-b>oMSl>uPipxh>X̏t[mWּOT0y^Xw'6C'lZhc$Vj0p]fزQ=WZ*r26uu?yu}0|6ܷ8%bpAv8L )*`F4Q456?hWCC}MSKBˋ6{V8a}Q1өWB|䃫pomj o{Çr(4=OG,u%8ޓ fG)C?W;?[mҟ4r_?^=f4`̤8fejbpIΞI=m -kʼ!~-vlmE[p|GeG\a[ ﺓ]g)EE:a͠v<܌|@jcg*Ik9+]ʳ#0}Kao&1͉TȧMcص᠀| g/=Uq IDATѮGzf4\$e9il$rL7Ă֨f:B`g&L}Sy}=34JcN;gsv*|8P ~ Z>XeϾ]1,uC]!\&(v>9ֻ]ؐWϗ@2M\/Wh/ՇcDH154H.?6Jz 5eT5r Zˠ;*'p10a8:K }7^0ڶ&r@|U7o_&W 0utXnMqzqyS\9)Wݾ<4ǖI`qk& ep(OWw"Xm(4.j̖86H+ڮOjRmYj8~گ__ F%NL:/VQ07~pfKϣ4~cA@q'`f·4M;,]IxgyF"4͟Ƽbtr˟|\}~pcoC>gc 1aBL\g3H^@um/;˶mW2 uhC' rm0za8 ՃA j` ^KP*sf[C,߼=ru[&ۺ)6eDFvgL|Mjӕ=ǿ#Yr~qfv-n7?¦/au5-f AM4g  PBY,a_.((MX{7rØ=|$)J4Mx|خ ܒU-m7dB0HE67vhݾr!ӡBZ R6,+ LS'0)o^DDӈMn~qAvۤ`V#|=诟?{׍Gp12w?:&\>n8 m^>93g$pHЧg٠{4qē)|y&,+5*i/^`) H1$JDZK F!m4Q {"YTͶًQhu^ql$8Z(  jж Yr6h` Z1:-a")`yco6iŒPcӇ"rXaD]ȲUx޿Ih? kJ\4"rC?6 f%뷏~Mcӯ?>D2X=5vtvmՔN{gV牳6*\;R&dlM@JêRz=G4Ѥ,Gġ\HbD{ihi>/\=rB 2dIQw$) ! s`8'ooTJeR1yQt,1؏,![LG'dOz-жcQ0jю癍YDR9<XGKYә  0KbRJv4ϑ;C$B4w[l]= Ъr)EF1YP$rppIZ m$8wq<ܶHСy6ŌVU`~=rP/^MiqTIHEq\F9t8g\+a(MP{P8'ZKce9y]TR{h%8qv;L/ڪ&ũnh\6'qW/O#$Sp??~KnWʢ@z>Qn}rRL$O @RĽByu6Yv<;.sT׿@{X <;5}z*"Jg.ɦo0ĚHGty2vAh٪;P8FIk1\=Gd^ $8oڛV}Wu-|66n`ٹƫ,?0df>+!)cb_-Ʊorw7~گzwy>I8}\7v_Euxa>?bRE~!aѡ>W?ǟX0ZqQw7qAqqb}iw͝E׆&|n)Tuų/д;SN`uIPdzGYw`Й6F:77uCd;CƄ8KlUշ FwE~wz~V":aB{j>> &$,O_D)8bﶈl<_d3 #˺=|rOz۾|ǟ,'_:nE˶f ~<(0 7gO3`8*˯ވ /Miw\\-Oӓ'E\=~"/ϾJh0.}yrق#;O~OP5(FJm7[BHS4h!q3(I4 H@9[?l>llsXL](p:88F>c)#=줰M?W//<i#öݯ 1% /.!0_̓$ÄL Eui$bo2I2-cm1[ k`I4Eu=4ɘJ1 4rtwGTQabm-FcNy1Jdt @f2˥; Qs_@NR|k.ȏV:,q$~93' r3tz-8f2(!4=A(-΂H"͊D1UU=m{(qNW9MJ8{rÿ|T#D2'gZx?&Qv2_">nmR$ =Y40,E[7]oh6&◿0P%;=7}"*R#ތj/ -ûmIwm[r%Nϖ$-=PaJX߾ySm4+IRMtya<CO{؊ͨ~i;XojF9QK#$O^u'ᄈ#QHշIvx EIcgˋX#xŗ&1DpԳc~&_iN|u!9ߴ@9xm F0?R#yzHC{>0o `xOatBVprVT峓ۺؤeRҴ7(aQ*#a=>܏C=v390.TNh, Qڛ2h}MWu@$+_K0unެ8FBhVj>~W>npL7Mǡ%O+\X&EӟOؽ9&iW_nҲHQIͦql:ӻpx&1t:eh4>k<[%XtCCi*dezQ#X@ڭ1(9LD#+md!(Ãm}ǃŠ! cNf;U1 -2mv[ o8cA'T%{B$[4#]FmQq6IQZL&JO sf}eZm\~i[W!1]0, N"n8QȪ㚰:+,&}:?lt^:w^R_]k'_?@0tmOiuC^"޼?=UsϾxDQ;%=,I10gbQ kR FzXHoq-FGpl-{9K#`eFeZ*G`ۗTקDXd^s ~zfdV$S`-J )O:޾\ Ћ_(LNCֈ(oZ/io^v}g]*0üAi[͘ s>NEHCCU$K\-Ep)N4aƎ]'g-fs(2 M6%nGx71:8 HP$N౪<d-]ed tR.Mc2, Z!4fl+M"Q03?&xhҍm; e<rc;ʡ$xsqyA,.a w4NN~j]]C=3$űiz8?l6[/Y0Iұįߴ3Xͱ+gٮxz}#1ʪ^%oG;zZqȭp:  rj(. HQƹ~9½\N]R c~:2?% *N٤1V~<.f'jQdNyo%9}F+Hj(`Bه:Hd~YĺM4I?!. 9Q5LJOϯ +xH>|vy"N,ZY 79{[r!&:5ܯ[wh7Wח$'kmCUMz ٔ& p^EA 2*ЎUBrO/ TbRp5(*LBݚZ@I [ Lp1[I"z( ص1eWmOCu{P;~?wǷRf8xVe%EӔFYQ=cT{{8Ib$ds[-aa 18Fio:goTj4G$IY/tB<Ǫd%и jhΏT= ,I`p={C|2աw(dӘd!נ4UE1Jq?gW'E=w4"!L+#a/s4! 1[-&}uؾ堼gn8hO"? ?,I0qQYk=Mo(NF;QZGW15=䓈 lpu4VfpR)ՈXUJ7h,/s$^n,j$,Ȕ5e4h _o߽{}jaH0=лU?yzy]aNa @l 2CLJ06P=*f(0dUA"C'ً/ oݫdyvrgA1< .OO q/Q^g_YJ,xI DC$dJqz?aFip2[c%y?M4=u2\IHhӧE|wG(pbgq9Uu 8]w|w;L'*j 0*bǷ|罵ْO@'Oϯ .V iSW A:_Ö[oFMO$)6QJ~ַa ތ Ɵ??"e䄖tNIx IDATFDX9Zry"J2bh΃CAFBcNn1hAj&\*ɠv,c5{sCZi ^CcIDnqj=Q,WK#a<~BAβIyx”CBP)m `c;٘E}xun,m*RpFqq1Wyy*"آ:hCQ_|K{L4 q"`L8@# IʅEH~ˢh8ONζ>Zoߥs:o; ,rʟO.z5 j$4j= #Dl/NYV51I)g甐aȊAR\NR!`z6ΓI]F4Dc ! G}h 9➣,_.DaOZioU λ#{(հEAa#z95Mؒ`™j4?m Pyr:y۶CTۮq@F U;u{X'yyc>ȱ9/&*c1@5*$,R-4}k.u^!}Wa,s}kwbL<ՌC/Ƞv棃"̼}> NQԦm yf)`L/M' 4<"bQn՞'arz~zqc%N.lu8C}PNl#BT," v'$Biridx:$LN@;Q_^ 0Ywq$lWݿySJgvp8\7G(I:Mc^h\r(ϮTx`? 3΢Xi,FzdE9g4yw]G!-v1QJo붩~ׯ&kƝT@-6O8ͺa/ya]P\ E` 54Ů(`G" ha1JAQtAAF"Vb`H(bFA"uWFt2ZChh;wAx|!i}X A:O7/B"IBe!X5y9|pU%Gc+Q7uWeJÐ@$/dp7`DZoÑYa1L;NP5Vk1̒d=|aݱ?t!??8Eբ^N_ G!a?b l',h;)iB)Gvrc5GOFk2  6^p:Q9uU þo۱J}<TГvgE0 y-0f,Tv B Mu#0P7B/S@{g_A v (&R M/@kW_McewO.JbLgbD6'||EqtG(q1 xZ`8 =xڈ6E,mϮqfi1n(e:v(B8BM`3^q 3@!NgRz`8OQ4͢06?{1m\Zvc8!8?"uަ9zw¡.:h xlwM}V+a@e2^tb8)/?|v4b^4O@~WNW7}uupbGe ͏7?hna!zf{;Y4<^O8m3Va: }p(S:F츕e^qՌQO`]AȑyH&Sfj )>H9MgOpalߟRk^g4'ip,47ݑybQGA;#6 ,R@hBUdxhKh\) dՁ2N<>n~Z,$(IHVhk Rńc)!@w<ȡ "T]u__P,$3کQ"PP/.30J`|6Rf&o4T: m[j(Tt%xppԠʎ/~Pp묰2MݮlbtP _0ũЪi:T$2l42'~ʎv`B661Y^z$ Xt7O3<+޽{:DǙgX[x{j3moŒ$ 094"\0-!@4=Ca~^ePyDbD8Aut`hZ9 WL x#7#NeuY=of$Fb `;iH@*m!=x1 Lfok+ =d)yDS BGI<=[F`nu9J!'^kfaer5s%|.Gȩ&f*M\yGWA,y`Iݗ>"~u2Fvdlo(2Dxb#o@DLO4-*S+~I2+sTfqX)5 "M8CcRd%!C}mQJ81Vx%8>*Ō8 ;X*t#rn#A8Pghq7\Luev?4ٔ-.cݑ ",$a?(rjíP HfݮLJ xq腣)sqVds|Y@x9 (3iWqq,G #>gO돟}˗" <C/DØNa5ȸm}晔ƣp! *J}/ṾAKd,t  w;/͍Ó'iirLF!D10xPj]DP,waCG}h9C<=b˂Nr7KA{Dc9I=9wCS@TO2R M2mZy l[`G1rGD`/580f&N 13<@|g? 7UY7[1p\&Ǜ ,H2li{ħ~iw^Aa\-C_p$dž1Jg:n\9~~|(@חp}9v;dErwc*ӷ2$7ɏ^?DUAg2dD~̷45 ;̎{PWa1΋Sd6L5%f=Ԫ$]iibl C[*! ^z UPH3Vl1C'EHzgO/~{BB|:M0BMF l['XIBtCaumSO'n_-!#2_^ bo{ww̖lm[WO}-?4x ;5IXK/קe~fqq^GDŽD1qwNs^(a -|vDP޹0"NGu;H]gQQr}38ȤǪ;}CAX"(y'2ڄ8Ƭ/Ϗ}=_\#2dڵlxrɇ6Pbio))q_'g˦?2YM7#!h N1,CTb>]ΊՓ/;M e=ludf5t@571BP! n7rHO?*m dhke?nsEXY nnn'p8ٙ(q~6t)ߋ*)|aaaCk QGOǡy|h=Ynoe#YV|w >.jt탌 8/3UK'͖M[Q G4 u$.Sz=ۻ#~WkeEdbӉo0z@=}z_[ fl8ۇ~Nq,ҮUmd3ꞝϜg?B(KmG2_ZȤMX\dFG=3I PSם@s8zT19T!"CaKpy8VH(R]5qLJ./k$e֍@ӳwXtI@ƽ6ʧlxx ռzJA:nbCկc0sRRF˭"SBLˏU; W/_t 'TY .G,4*1yG1Y4mvht žWUC1RE8PB,xࡥ??vd}C7IA^N$kQNj:fO`Ǫ@$1u-QGSzmk|4J<ݕ 2VC.ds󧷛}tN8bǺtTOx4.'l{ϼQ=dX%*b餫U70<O$bp`a+Q<:qz6MoBD(-ea'0@I`,пG;4 IBX"(bkk`Q&I՗?c/$09 FMo,'0 |R\.~X_7(1*#{d>&!lKbJ㼅/D^AtCyIBkn XMn))˦FgF屪f Q0`ծo4ߡpkbZCJ//Y{gva8`zIA, 0 .E,]zr;X9LAl]3yGSmu8?^ 0#3'> z@Ů,@_s o.~? ln=^23KDQTu=Iv"D:5<Q|5ɫ8o>|<ݍU;o7B7Pbu#hz>t]䲘c3&өt‡c{x6Ye; *QDN#, IDAT#G{L锒Փ|Q$<'ZeCFD nqzMfQqȣIC wJ!#G`DcW0l~؝%Ӧ J=YOG/(Ž/֛}U5 ^]tVR C`!,gQ. Cg$K$˜q؎*!(ы^4Tg}3Iԧc P|W]+%t㫫/ I朽?&x]?ŇwE+H{C)\\85 } aX5UD4("9T>J8!FuU]x/k(*M)~aG04-@ڪ)eKz졕1X1 gsmˋ#ad@#i H}aj)x~f;;{꜀CL`> qϧEUuI6uB"0rܮޟ_n@9jia'3JhYٶQˤ>> 8foЫA OEwaqt v'ǿuwƁ0_N&pj$i7MW~櫫'vW/g˓vʂ;sv}Bq^+.(/G~^?0,*&˧g^ c}[Ի!|qQ;QYL ՞0e$L#/L= 蓖nj?!͡㻇t圮1S,b397X,^>;`ы#$`rXݘ \1eѬsP I:qc! 8 〸4cJig,0ÎY{ib4ijZx7򩗒 ƺ{j w"] Yƞg!eHNO/my,R:@ƀzexeMi,u:SW/~|r~^# 8$NOYmkB kOj&H 秓fsRwJ`?g"}I0 CO'ؖ{ݔͶ8:%8_$UKcㄪ@u Ba54ʩdd{"gͧ`7J#EHÉS#u6HiS/^N=۽M7Tm'?B|"oBEݶD\LVd %!A^ߕBt}+S苯pW B( }U1?Ly{R]̚6,z c)rf},hTژe1p䜎ӔcQoF+ną^dy0Rb]^%1,,$$;t _Lu#YL=pB %{,|.Uw8 |=z! y;ҫ*[ ϾXA@,?o/G.EU^x~ 4  R+d}1}j?|OyEQ88`ҏ=l=^8_S/ 'PעJ$n [WiX&J2W/^2i hF.ԣhó|x>BwE#@U_vBL^U(bq;! nk|;N=; w¦l4h[̭?~A2Jo<4F)I+wʣi7GmLO0flYL͟ޕo|8U77Ӵ`}qqj?z={YK98]a(PM?p3( et(80cp;/"XDp}w/_,͎}˷ٲ(I9#1\|'t|Z'b72U) #Hj'z _o 5q1yoPk$ vQJ+r3⟯gc#ҏWusxi4h,VUU+2rBϦs& gBUM֡lFipnssgON6, 7}?j|9MPX0Z=NoR ˜~{hH{ڌʝN/EoEB:[Wt~@Za8o24g.1ڋ=zeEy̍Y:9nn4fi_U^7 <$8T3 iVMO^+wa(Ynq¤8u!1z~6q#UCM4MiAj*ɦKeoD|4¬Oί?|uUďh]?G xl?`"mg1U#e%j'qEdIJ7a6:ӴRĥ 7onٳÆMIȋ'hG3]]v/˓mCoOv>(D ÐdI]Wuulj<9M>Mqكg/P3/O4Ţ@▏cc -n{;p Xv@6*<@ͣ AZ ,e"Z-qZCu𳧳oGJ ga[>0pij+h lځKI秅R.#xpdh~i;0̐5 i p>{E4~hO%2u[0U}U>B[NϤ揷W/??2 qG`f Ǝ4Q}8LgaSz_NY|^&Fu|p/8'p1 ݇Rtq}ϦS%dd1"缾Uy'2\feAntUe}?ԛOu'U*>Np̃9AQZaT乔j,=w<4#σb8V lr^Y%a <d!Orꋫl7~譑~W g%f`47dR4QCBAf8EOy]ȋΐ;36 B4Yj@;)ñS!j } Dwd Fɋ>B30{XǡgqM{:=Y cS+az5ɲ< (d A:am{/w#$V r:i$y-(Ͱ8{![WiV/ϕ橷n&̗q\ж=$io}yUGn4GyD8[JAFwqB2^$G^1z^8J+(Œ[:(+8s;cd~8;g{nfϽp#>AYz\-"LtI[٩ FloT` cA-?lZQpP!dnu=[=)E \/R&Mgcgp !+.JtY4dX;[C8:цSdՑsS;+6rs-l8А4\b(OHQz+p|fAdUHTi:AVdD,jB~|5/w7m7ۖ(~sy jf9fwph|>UFIPE,Y0<Ck{ʡ6mEfMs)-&(ô$M%d'I@,d{-_a1Xja=R %(}xSB?ǻwiXcI@G"R3oyQkcSEgZ!h(phPڇ=83(NRFy'ǯ..'I3<Ӎ* LX܎x(+`wϧh;15VRp|vk ٔKI9nE=}Q*V=%!tc:yf]<櫉g]Si56B?|) y84p~:StlgOR3!l1p2؋$pR6(ǦKҘ׾k^]4Q(a V$Vݠ}ORnI\\,J" AAGa,sC5lmH4,뛽p#'/Voތ X̘];E"?G9RCwg %j1 Fp>?ʡgŤnyf|?yN9!~`0sn)\3otGa"9* 4)jڌB"zN|X>gE& IDATB<-3!X F/|X`n"R8!$7?=Vؗuc kVO/};O"JWUS[hB\4L4;Z $_Q8jm,Gvmg<za jH9áⳓcQ{]ӱʼn˟|u>9ձ.m;Z Χ"!q6 j|> YO0d4v`M+O[N\C7cK ,'S`IY( ?_"ʥ~6lSkxS?ISl#VE"O-N]gJ8B}Qy8-VoinF]δppV)'Ce96q4;= sw}>mX2Z0jnb>9!秧ϖs my{h ›m| }Je!\ҸK@La"3f?AȡQP8^󺾝$SQY6,&/?B]RI"4P'i0e1`T:}WVж/x5t%;`:j}+4?nVхǛz$Ffꚮ6FyoGd^[~ -gZLt= or.͒NNj#ªa~SI -!'/wG C'DR8onvt$4<6bN0jw6`uM?]?E5^Ǯ-O~`#x7(ggzOݞ+@x۽q2  O#|x_q ȳ J):6[?r4Kų-]..N(8pf m{(M}_h2~_s@谷{8=ID"l*c>VZþr:IVUʐD(+lU-?<&0HB3gq87 *#{lV`/r0X,~{$X4s4<;Ie 4Nl:-\K8-i1b %rxq~yzZ(ʮӅgOCy~hzI+cr,K0x}،U9U=ݴC̀hZ$iHDR==DdoeK~K{4Lwhq]-/_mU]*@J66Ggu]`|w^|F`[Ew YĿXYJV[J7DT9mq04~y_IP,e QjH쑁a0\~f8.Q -<螺BOXf0tfdmf%y¦o)17=;e  j dW_?nQKkQNmx}{bM׋ &@ "!~od{60I|{rR-]q$vPI8uow㓳 L294j竕B*mF%KN}yyyϥ+s!>6iT].'ͪ,Y<;hI+-Afͽtdx\,{6wŞe+(ilE1KR-pǛnnfw7uY ";Ʈ% " >dq VH-z~xC=,UM$K/5N8l7 'R91 Zl2=0旱shץ.Y$6Uqǩ;05VZXmUQagMيw0gt-4<ǷrkhiӠoEwȋB!IYw5T%(@+g˨exY C`=I G(/.AP/Fa9P3ʈm4O;4~j41߼>cRI@m-]yctl/ߢx<˦$Y2ͻ0qfϟ4|~wȪ$XoQH STjHة#-7ys 05"m @ Afc񩫛! }DӃTi8Pz&:#gQkM,ͲSv0z}Yqy:I~:nTq] 2LH?gB{˓l#ZitcW/ lOO#Lj"|ׯv+Fqf~ 5J3jc Ug 16Z dAں_\YӓP:6ZAwo_}4DyWsh["߃.P,7߼o hfχY^8AP<{ef0CtKaWo<5| /L ; th|$g's&4l5Cm=eHS[#D=%" b˙K=󯎗$i5=q1E1#nSSKb9G -:k# C|9^=/f_yx02XS{)g3dx ء~:KK ~>"tVa$t`6.lͧV[!Z0$nXvG!z< 㱼K~A`M+ 65׌38-=n+Exrr9 Fx={١{ OYGK'[?nN;YOw[ہR)[ Ym j5y(Jж1cC #Gل{E)Ш޶ )Fqt;>_s; 5R' G%cEBLK $ƱBߡ.gB/o$\c-~yG >&6. O?;^z79kΊWoNOǪd=ʼnƮ Im6=ΰCxzul]4 x}Vv l=jvH™}`KpK'%8"ˀR&rCM72(`(e>gZjaۤH)%u~`]Mv pJZakY(%NT^Fnep2 (׏?= pQҎVg|ʄH8,G[ԄsԎ(eʲQ7N6XaXpO*Eq|ȋylyFya>~"/B*9M' Hw sB_컦ۗR TSnF-:?;-64ZcF gFat Ph-Bo3+ pd[Cm?<<ݖy萩Lcm3`ײ \Y&I;M&Dc]=_? Seeᵟy)6-ڽ@S!(}4uߊ1HΊuJ%E|껮UK^vwo.]Ŝj%гjHU3 ̙˦9cpx ={q:,1oowY,uyRj ,?c.׻x)1TJK%k?(*nr>~>&o0-CM/qOв^v!#^grP]8~ei:=[qe2Hi;nJ|ϱ"'ҭj̉zCҌŸQ󋳆-=@b3'#-H/ӹp c~`7mqU8Ky/=?{ G?W06˔`& 9L;KsN2gx5_`\:Ukq?['?VKrhYq8_c*2h> Mhz+Jj~rr8_^.prOp<_d3@4 ǎ=j8pty(C.^~ԜLBNnc>0HS%YFs̫Uz&;ʡ Rkd5%$~,_^TxζՇ?XbJu~:Nj'C d;u1MmhKEbܳlOz'h+Ø.ˮ9o_p^FaVH& ْMG,;h"}Ôdmgvr<m̝ V΢lG #y8 V "+:>!=IubPtl}.1ڈQ JV 4]Q(9 vYM~fVʑ;*C͋7ٛݧ)8[uNV"Ld98N :864VPڬRw,7DC7Yta۵߻itcXbckOVw?ea Quw| dbA2JaOPv{al9t˗c RzXaHˆ٪/ԾRj5(Fw^m{`ɮǡdiܱ7sv꾜,SsBlW~X}1Yl*qE*"J B|Ҽ{<;{8KG86LltY|^`VIpyv_(,{h14(oo2NHMP>-u?wwZy Eb89[^T--hFL0g;`o{ύ\f:^@}`6.ֿMâ_?faqlpo'ІO2 ⮓gg !qQLkpI-Ė% v芏症]S,İ7OU]qȷufhn2J==  GJзDyvzu[TpG!e<*+[,u4ԐZW/W*` 0[c7I5As\exNFA Ida"5$~ݖFkMYyEH`ښe#wP?hVg_?4b-PaO1#Ts[{OF ;l鎭mYIt[)'3&`ww6lS//_e~QdEvngG-,y1,SϏ܇O byOEh`'dEcΖԁ6%!i ƚ+SS$-LhȐoU7fg}},ѷvjnX(Ut0.g&Yv0)j9sFOcdžEׂ1H Pv/Zu;tSd[ MQ Ve0\hؕȆƲ_n\iX0:=G e{2꺲[:TMuu~0^[g˾jth_5XX#H[x\0ó'4zàE%Su87Zq`: >0t ("/ĶA~8OnxW>'(஋#7?S±e0+VWy,^ad*GX#'&38țX+4 Y w~x[^/þ<[7'XDI%kg+0MRF b :v%6h4jBҢj)7q )&/&dOtqD>@t>oNfkAQy2gkG~x5I<6 RBsY ɌDB,\zqJ}/I^ p-MW? WaboágR&JZqw QHR. *KߑqT{B q!*B(cM:[!r/O PR)ݕw!vh&a4NJL)Q,59\k#k I`z{m:/Ough*UgA}۫$^Tz(`ݶ/Βi=>֛`Rʺa괏ȶ Q.4VUNGLI6N(r r6=ԷYؘ+ӍX`DV'c׈,hAC56O=xETcūU] _?^%C3X ,nh:ҧi<ƆT]NwIƟo$$'%G1>I1A:[\|,;ӵtp d!tHOI/v'|;_>mo5(@`P45Ë˙KV3f|rntbJ)nfTv-l-K3lz6$:G ql'rIskym?횦an0 u-S Ekޥ{<\x}>a)o(J{\cšéģ:E.8 kM 7g厇IJm'Jvmq4H:% )Ɉњ1]mG۸zN$o//h,{>h˓0tۇ B<0{ڽ|tӎFhBk_K7@q8o2|BP4Lqnc_gUյgg/߾_?EWC}k,+er)FxS|;(vW]L-0;}CtTrh£F·j\e['hJ+)6zVT,zͮ.S'֪ogvHŀF~ݵn"nHcXqwÿtЪ-D$:Q(b§fVy 86h(_tq 7>|w{߶ j/+tF;f8 BD IDATfKM(vʶ ! `Qyb"ŷֵŨ=Zv]F@E>>\1H mM_%jffyy.hǶ9c`v؁>ff 0t443$vWR13񾘬,E3)caq9z=?j+VQ¥0;A6I<S.z}4B۱`r˃R 0b˅`, ۖ^r*kɚiovU> b6EiG ;m3_R H۴ fS}^4ftv6i<+a|-QO/٨, l^,H槏A`bАei\,(Τq2WYeXvy~$ mpsԫ.kEeYe$eǎxӵ 5N4S'!tx`b`JGDU2JK:"k7w|J2R*H<[]v}źm[9k0M-< c3 hsfYwK0=?8}x(F -KAe8 $r\ oɏ>ݓPzAfHШ 8QjȻфc_tB|Ib[br]1 6QIn-t6N"-g-zwi"j#/w79_~=* X}x#ǖr1L0f܇&I*ZfN[JfU< S+ Τ#"'^le%vbUxROOUux/BBlc@!7 `}n3'qy23*㤮ϱ( ]W>{bv|v)93@^,[pj_?o3Cq$*o^=y*zDU8twjq>="q㻙ďg7O@NZqRu (Hw|W-<;RCU 䤳fwT0XgZkѫNb Us8Ӯ'4տw*\(:2Ol]+!TyI)m&1ӄqlh;,;ŖU"2r*ȵ]$`,$; (0Ʊa̢_/ݧ_6* =m-_~ߍ_r(:yηR)aNe> I*ܔEnoᄃFɎݼmSP E`s}XH";^1VD"DG#1FۻW'J( ,Z)*^cw_?~vqJ\5nV,ھ8dGٱ6Ҷ]NJhNC(Ĉ$XvTECe!!d 2x4zCIMdAH@iؑI{ҏx]7ֆƥOro7/hnDt\>tnNldwJs `ShU˹\ FD?LNR;L- uGlo_Ct%Ia1~lUɛlML^x74/V*P QcOy^3d [;zי8sl4/:]ɇj?54s2\qe]ճׇlRO! q *9e]oGi5IdCM-n/BxWWj{ub*:#!>Ix => ̉p {8-$-QIh1-0^l@;fmgLN-* v30.>RG*m,n01nz}r-|F>\_iˁ6pT8чǼ\ޙAp)km<(dhSS8E%iP=&LcaLaM(Qg>L` oX[e[1ol!PX?R ]?l<.bمG=Å veg&chxĀQVkŁ]U3lf]Svqykv{nk}zዕ3Ǿx[LS )X1MmϜKAųUCOf,]R@iuŻ^wM ")K[DD\@ ޓV!m/yez ": )a`s ZsxTSC7oVt|ZCk9.h)̹P{:ry $kzavtc^W-341'ʦQ!\ 4g,Wil˜O@9?ꛦ =Ĉ|"K~N׋$ba˫O]ψ 8|ZDN|ts, (+F9(][B ;XRmւ oS3t_r71tDӄF PI-0U1TiDЛ=rcE[.$ЭmJLE]ךWd//_0Tض9׷OMvu2Ta׷Zr)=츙f }C- =[~ns&\Iͯ?9^-|@!L6$BNPRWiqy#۞&CftmmAd Q֞Mҳl6{<.s&8 lOo,2"NRbssҮV4vGqDsw8RBATvb>-`?0o΢d d,Ha3$Cq0W0 Qm8i:{{|h+h\M @A2-k^BYbZ4A\/ S?$d޲:&ݪԧe^_Tes7Wajipݱiͫ$%q4QL%WPg &FQz"O<BׯoˎM16m:m 78'5-^ So*md xU||,?=ieot/ʮHҁ/O^Z\]qry7o_ҡ .g!&ϷB4Ni`!lD|LA8 mB0H{ZefL :Nb4ahzדIB/D8E7tV)D`Ϸ)>26Z߾xی {$DC=Z,qËs9O?fH02FM!vu,Yˑ[L&#-w}!kjS#Ea꧱G[TD$:l1`2y
͇T,Vk?.Bo۴N$lg&C:z}S!@G> Jy^֮0p7|(@0KӋtzRWQ Biz2tе|OO(w_6c& P7,S<4LrMnhmY}Ut~lso@4Ofk+r:/OUS> ,;Jxם$:K,b/{n(  f4#R8TI X9 ]BWYS^B{3lNԠܘD>m6/oOt l[]3!$)Ic'n#f!F5y~x~R;6fˠyQcu69?N;VP5 Kmx*# ;U P\,Ri]7"e.bcevcٲ,1 xs/mFw5($A5QBM4g*Bd$жҾ|[\xFz'՟n;F1Ff ֍ 8\dU#gpI ӮSh"o~Eۏ )m֕AiK \̖Mŗ/jHUvw0_lՓ:a_7mkcJ\٨2&׃?}w;'=>nw/02ajV5ذ1,O7EY 7hq* h.J K"ʕ@Q,b닀AFqyjs͛MӎY.yձ$q_In1 }hTd1{LhPz6Kh*>~l~?mXv cYA!~{Bb5tڣra r Ӷ(I ukԤrLI=Alxd/ 5UeqV7z]sA@t61r?Ϣia<=ԴV'ǿiqyunfܲH҄w#1<_zMB4MӴIǞ.z Z-IXvcNf! 4^dscqۮ <z-E e34%yac|GD4$*6m=aMX a9"׃Wxs *cp_|q` J3s@B }z _f/D w#w4+?~< ]L8^5drACQ+_N2OĠ8PX)24>X5Mʈ8 Σb[7}PZ0x\}D42K" QG VCG<˗'Ji29bRb56"Jt`a?FŰ7J/ElE]56 KʌӮ€ਰom;=Py?%k ^IMCbNA, aϑ76f&e>6}H((UAݕ,['ǿ`Vn?UZN("!g}=CN ,mIiVh~x]D9V˟Ati>)c]cGgf_MP qfu88k"qc@+eL4y/sDcMbtA:υ!FD:JvnfË/' @uM`b0Gs\=_=\A|Q&,ciE#ZȲ1ptNN[?עX`;m;áy81??E$ścAuDu9щ$F)DkQMY=Z/=tN"Dzà:*RdH`xIEAH"( &OqGmzq>wmC(;]̸aUד %[d}GE<YXE[iahyLy͵֩$EJ!p4]EpJj@#nnI\]bt:X[Uդ8u -&2~$I1zdVz w'Oq, ċ :{'+54K4$Eܫ.d9WgUaandzQ2M~ͷ'ةӳ0ViTQ:+Ϙu1M6}q&@:˓kL GV`݁b 5NJf_<%"wh Y~JﻪkɴieHvkOe_G4^e?j Cfr< ,k[b,W}wj:8w4ǵ||QA:$iL8&^U}`dN~}WDϯqK9g!(⪭0@!䰇ޫCm>q `2O"Jdqy%MC}.n8fݱM60"qۣ>'W t^˗~12>v-ퟷ0[Aay5>{QI_~fFI|ylRNhyr]Ο\?)3@y1> IDATWB(WJfmkT@7b4ȁfwUG/p{8<|hvT ~v5F CCE!)ib$(u{a/)Nb,6Qi%H}zt{6 ,Hyx&}1KxȦ) u'ǿ c۴I,Zc%Oz50|zyF^X,2y}|n@q>| !>$vo;|^{-=Ti,I0`%H>7݀QO @??߯~€hkjku9֎nlx7bBa²HC LgOxdrC?@ZCmj_3h^g˦3A@UGsy}r&֘%t #>IpCG@Ug=c0]Mfr9CtP4浫^0I!J 'RtPZv. @cd6<;/uU1OKMd0WojHMȝ@jls_߭빣'?]@T$ʈSl e6I͊Iۄ1CP}ΕoS*0l97 ||s[l>Kn.;iGt:_A$p*/;eђd8;H68ڂ]__o66C69,&D PNW.f8Oo#픑Zc}vRئd՗_T4 ax 7?!0_̓$ÄL Eui$bo2I2-cm1[ k`I4Eu=4ɘoI?TpطַoTn& lqT]^geqГ3?b3jD_{VQ``Y"B|:/yo~ml4o)%Cl"$}>H^xIy >48_|yl/,t]os7-PN6^[ 58/t7o^Uqxhg@XB NPȊ^?NΊj۽|vr[LJvfa%,Ce$ LJqa`&缕؅iv-Z:Q{SM2adXZCkFݛ(Y- ÊW/y fɒ8$u)yr ˄3#$J}km]Z47ʽ}ux{X=ٴ:ZGqzY$&N34"Zgma+nh(6M_EzY*$aԈv{ai./Jx QJE`[b˜S|x[qpa"-dRI8x/Sœ~j0F@i}:q=}֕A6D"p t(( *`&,JiߵK΋Bx~k _x'wnt:`Pq ^ۛw'jw }c%"&指X.qD *eΌw2A,X ]08^ˏ Qܵ92Kwԍ(CNNGl•< Bѫr4~|%3P2FÔtp me' UZ,> A+c#(16c@KO">-u͓0 s"tnk"zQX. w6J4 qV`Cc!TAi2?$OTD ”Yhtj `}؇i,wWWaDPhzq IqE/ϯ'K?|Lt7- zsY?^)@HqףyюVE5r+`娜%>'O?y'kbGqeY €4{FCi\ƌy8=!w,MT2F&N4Z(`ޘ(vM/T1^?[FmOX ArJM7IcTYUmaI á(kvۣynufa\Bqћ9{x磀]=L5pw^Mgmu ̒wgG+G9Pj\^`NjRC//N:oe)Aޥ(ZoqCSf3EU;~W6Vz(O՚ϲ;0]̗آ<֠~읕M`G{)(`}7l?1VP$ys b '?!q+ | /b|ad?G}Ыաø kݷU83qZ]xxRW_[ ihdtrR xZˀ a޼cS`rJ9a߇)8x/g0BIy4{X*ї0raLOU#VX[]D]_<=FQʏ geD-,)ޠ$h]iUQEL(pS鱛/8XQR&O/^~q&wR aul9 wUuk׈j6e 佦w;k qžCʣ(&Iԏ,UX $Jg\]^0amo\,YW%>߆IHP[S ( dkI.fK^8ID%>;IRmx[ ߭o@A>?Ex -Wjy-`/nGʧϟ>w7Ǩa1ait@վS7e$FDX9Zry"J2bh΃CAFBcNn1hAj&\*ɠv,c5{sCZi ^CcIDnqj=Q,WK#a<~BAβIyx”CBP)m `c;٘E}xun,m*RpFqq1/Zoߥs:; ,rʟO.z5 j$4j= #Dl/NYV51I)g甐aȊAR\NR!`z6ΓI]F4Dc ! G}h 9➣,_.DaO|7* t=nPMjI ȰΚXlI0ts6QCR<9HӼmۡ\*m8r #R= yw'˨? jSƍpS3 0&͗}N ]|(7jOCo09=?= 8̱ 'Y6:F>(BRrH!*I jR\d!y[4A2R M/@kW_McewO.JbLgbD6'||EqtG(q1 xZ`8 =xڈ6E,m寮qfi1n(e:v(B8BM`3^q 3@!NgRz`8OQ4͢06?{1m\Zvc8!8?"uަ9zw¡.:h xlwMc/?W7V€3dn3p:R_^=zi;g߽`i^/IbnnlĎRoÛ7oxOid #*C (: "-n1??NZxd7kQe`;vD#}q(Vx6͚FqHIzwjS ¼eta]wNYB 8Gb4wNqlʨpӀxֵ'0<'b{s`Wq&a6LBSpjn 1'Fi>0B/L< ̶.2Z!YyD翼IY mݘ-bU5xqπH ^mvg[{[ߕe%{q2ˎՖа}7M߆ퟝ?͂24u B(-DTjwt_+}QY+m^Z" 0ᶪNgYYs0`(.OT$jδ%ڵZY 'T(NC1it<$KV;-,I1|Bv2 h.uy g}-qftPtT-q+W˼6C)|qd9#L "qmk?5R}r8"(Yt?;?iN)l1)Xho#!F 8žX%CU ,v!GlXc*!{"9 Rzd3'exu}75YHP10i6Ӌ /F7RBLxJ뽑C#FDL|?(X:I5fS8Dx_\.g|amF̄Mnߖi:uzi?mոQJ(ًAA-&S_|az2Yaۡ?*E#Mev]o,=tĜ|~wa2)SUuQө" Id|?DiTu=Bd6OEl:m߭7bH$Aګс"8X- Փo77;f|yV{u: 3ϰ$fUIp)`ysh+Exluqh&nqfԲ7N4Q5[0IJU6VqZ95`Ӫq3y:1ǴٓKMշ"6]wEph"ͮmtbz\i"VxF;!LƜnٱk_ql8?>dlzy}+-\`[ChzQjuʮ 0Йщ %!qwmnдs㯾O x#7#NeuY=of$Fb `;iH@*m!=x1 Lfok+ =d)yDS BGI<=[F`nu9J!'^kfaer5s%|.Gȩ&f*M8EV| R (X-f%/} =d@S\9go_߼u37I~'V>,tBBe kk1BvJOzV`lcL{} O];{K4z?z_V8hmS._&0~hNnQ9`RsOͫ;2biq6:1Qx, 54T,mޚ8'LF=0"O%SVG@DN34IykG/L=A8/n_ϏǮ<[1*Rvx"eNo_!Lv#qN& fP\&a颽AeU% Ik#G`}v?^",Y=w@lp$l{?cD޾MRHLVC݋zI$F¼ҲMsѴoo/hε /[eH]GDO˲Zn7@Drp_1*]D#>/θ"̹nxA0yU%D tNJz*%RQݘmp2J4j7?ov-Hff^03YEЧE5/q: Ut]i^:r>rGIi! 8LïG0+Y[kI ~_osCӷ$tIENDB`DustRacing2D-2.0.5/data/images/grassEditor.png000066400000000000000000000011561360473665400211420ustar00rootroot00000000000000PNG  IHDR?1bKGD pHYs  tIME  iPIDATxA İZ KV[-`0 `0 `0 `0 `0 `0 0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0`0 `0 `0 `0 `0 `0  `0 `0 `0 `0 `0 `0\ X UU+ IENDB`DustRacing2D-2.0.5/data/images/grid.png000066400000000000000000000003141360473665400175740ustar00rootroot00000000000000PNG  IHDR_ sBIT|d pHYstEXtSoftwarewww.inkscape.org<IIDAT(ca, &4QDUȄQQ 8`W &$cFOvx0IENDB`DustRacing2D-2.0.5/data/images/intro.png000066400000000000000000001110771360473665400200130ustar00rootroot00000000000000PNG  IHDR8CsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxky0$I ݦVRau<W =<OzT/`EY/Ń⢈M6M2ii&63Nfiyg^xInz+NjdIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK/Z-bjjr%W{zz:f4͘Ν}JRV1Pt:ҋ8c}}?C?`Lcxv;&&&b:⣢q7OLLDp D8j,,,lW O po6133333xZqƉJG^i.]} `c777XFғڊ~kLLMMdT*ۋN[[[kv8~駣VEp @.01666^qj4׿N8w\/OLLD^Jn޽{qΝy>j8jl6cnnO~/})*ʡ>8Z#=ogg'vvvbuuDϛK//bZX__?jۏƈv_2}x^G^j*0R`c3K͛7|gKCg/--=c~z]FF#^["0@8ƣN>)&ݻE}{=occ#b}}=>O&1;;QVZ N8Ƹn]u{ʕoKKKz=FLLLjUp-Kypyww7nݺw܉ۋNNgG%c\ {ىh۱/0R`cO_NMME~oRqGt:& (FJj5jT*!۱Wt kZ?~ `G(sD\jlF:o[{ӾZM`$ G(+J4".u% `PsE^/rq g `#~#Mwn B8B-KRϥlQ&a8m=8" P `x8? n-0J`#~ܺuȵ0J`#knZ_ga 0JӰe{nvn=_F p8޴sV [@0`#ZOQ?4 :\2|}_`c{{ J2{ qh0HVz cs^3 FPzk7N`@<55ےxJ{G`50[@8&k .sx4N Y J0#Mп5p p< jշ=Pzlv]➏4LP:sNv 3_F 0Х&Ky3`F 0`\'K۽iJo90HPzX>}㩩^ 0j`&o|m D賷w) 8rgQ#Y__NSt zvX7}(7@?G >5 ?` }JzΝ+rR^"x[_FUΒW\_~9{Vu']l8N-`F Ч? o}[[[[jXZZ7nΑv]n6Cq[@o,0`>aa&SF4X\\?O}l6ŋl6q…jg `>a sw[铨V'೶ (acuu5VWWvZX[[;~css󉭭ܝ4}Nzi^?sjRܸq7|͛7cooǙP' s>FF#{*Z+nQ=99yu=Nܽ{}5,0`>WVc~~7?!o맦lqcZ퉉jNv,--҉>ġIޯN d!t:|q{r,//5CE`FQΊ[nEݎzϟfY亥wWU8#'@CfW xzz-[@` Jj & @0hKђ1p-pVy0 Wz{-B8 ם;w޽{CnpR4)Q JCn# a 4`'KmSOE^uBZ` 5:,GM"@\*s?X`T 'pWj⹫VĄHE8 W T`t,rj"0Jى7'Bgggh4"0q8F?>Ptbccc*5| @67xT;;wӝNgyBfgR}N'>p$_AO=Zm,[booo׍ vX` W^5Zt7^#yg޽q`7Šj /(矏w'ٟqze3&,,D}33ݼ…|3t-/G++ѹyt1$}.^#7nXrD[;̯+W?h|}NDge%bwYI_xj׿{/|Qw[DDk%h5`[@ {^7)Swҥzj|_g}Ж_Lo7)Q/~qի}'ׯ_qڵ_2u~}2O/_>W_W#"ɔ*яFs_ēZw;4 7JeW{^<7#~_`Fo=Hޛj ^I&w۱C_³~r ۶\.cxx@X >O#׿ v5>>:&F>Bryi1v-81oFFFFR9}R T B\}8XbY ȂZ+ض <nlٲVU41BuqqB===PUX xj c c0aUd37 w/}/>I?YEQ eq0#(oڄX,D"4.|͢4Mqhݶm4M$WGhj?ʕ}=D#,˪y,!̼}ʕh#U*׮^d݆+`"B3>;7oRc$~3d;;ǫb[03n<տ@ `~%"0ծݸ pwO4 ,7M+a8pD dסؿ?LD\(4 pL۶m / dlAfhDww7:::z$P{KGpP$ o8_F:EY9`'HB^+v[Xoo/*RBҶ,a4dYPEym{/<DDDDTC6e]_|8U|bbCCCJS!1J% bxxlk]TpE| LAnWccc1c]$dfn[{4n?Z#x/glluqXjk]]~[Wrz.w P, P5k&U/=Sd;UsFrhwuy a||vm{M0`rםu'2jC faYVˁ ```\Ѓ&˼3P.|$LTU+PzLE?TlSc뀃S3jcI+k? L[<o{fP(UUglMDD`"""Y v gDUoIcz衇w^# V{YUދ"`|||A;ac%3`k@\^xO?A6f9ךa Kz"̺n54f>;4-U0&"""?L&M4{W(`_Tw7/L&UKw0 YbSUn]c %qp__n%<{/ z$ x;^2GGw,IV5] `DD a޽&"7{LΝywhR}}, rryaGihYڰc6MEO<4med٪{O)U:]:;DDDDsfD[MtDMqѲNW811Um:Jko;looHκ矇3:Uo5q4ΪU3^RGFP, ̱o~m4M[.vm]h݌hx'FeOV bicc^b.&g<8R,k:-ZR;ݕJeml3qx|SV/%J%j"swYTnP(.z""Z̓;T,52ԮibrʕPkLD5kֈ² >kͼ]`uVvy]c:7 㢇llܱBk]TӢpECh w8oy k_ƖhT϶mX4U7;J̗?a\Z`"""yp '* N>䶝,Zv-V\Y5yʉqmWMXטך ӃpTZ6V\96#vByb K=,yr֫wBU61~{ڄܠfrmD0F3U3&"VhpP(Ohb(4 yk 2""dYG;Z5`Hy*hz0fMչLUS}G/( ( v!єN: ,CRUiZm~ǀ'l܀ ?ܾ$z v -˜n< rh;D朗;&^͍VDDD@P-h4>p-͛7# yo4^L ŒJ WTdϞx"0" Àa4,R?|*5Yj!ׯpg'iǴ?M(tWBovw@ڵ ?OJd2T*հ|`EQ`f1Q+h*""""%i&}e]]]((+{7 bf`YWhPaZuM0b'rMD4E$׽C$U׿Q?.Z?/_5N4$uuuͺ}r鴐6CV/?Qh*""""%i&*/N_Y&UUtZ3t mT*J%/&ۜWڻa;T$|@a`q!{4M躾8 re 7T{~@Ю9nPsk1>O7, Eoo~]׫*WwuuF&02L !iGGG÷QKك?DDDDDՅ5kxH$ZҪ 0`& Ø> \8*$+}qa_\=ϳ%`2$&lV:նvlKQvB!9O|' =[v, @2ϣ5ׇ}c5_~dP,5vvi[@s`""j 餩<V4C MӼ_ |Z  ׇ. 4:dHS-5Mq)p(Y0O|W~(Ip8?XQ-]d뺮C9[HO7>>^UI\kxxv2 RRy]kZ HDDDD,Nm `ے{4DW\T;$٭e4?w .@>GajO?-zHmchjD|kǻv|(.?HGNBdEiK?!aڵn7v฿OӋ,Xuڗ0DDDDDp14MȾX֭޻-i9q`2׿ECWBe*,kݎKc,Fw1MUn;XӃH_ȭX5vhON=<(ʒ<<$IdDKzwpoHPifM\S{ol訰]}]ƦiVg<}Zk.[Y]{o;DDDT$.'|K|wQR3[n=(D"4 hX >wX,b``D.W+sϒq.BuQU^M|kkJ5;//nPv_g @~8߿?ma`wf3r%Cju"PŻθaY$aB9>$[.dձ ,q;Uu8ԵPW1OEC7܀U== > *(IKiddD=Gdll9qYgU;̗>DDD`"""j*Pa Cޤ`4=DjrbH[s1T$I,0 H$4 BeX,ByXlƷn kyjQw_D&VVUޯ(˲~e=oawNn8NSUے^VTF3Wk.sl|iohGSuQzk:Ukw<ԇBw?H&, 4$mx_nr$8͢X, ;|#z>ۋצ:p>JRT77p!^Cu}آ!i ihzAwϛh4T*X,vkO'eȲ|>rdɶW±?BaIYPvHY5Z~~Z722UOF&>;wzaKDD05P(UUىx<] Lr>mo{.tvv.$;YVϚM"an(B<G\8H jKuds72+~}Mnx:iŐ 2qߏU3*M(B$i:,&vs-d8|dm=a$INtttx ~_֪r.M `&]?;/} z 퇼& !;–k<44$t`R}XjÆ u檫7cH C$:;;a&ᰰض{< /NUmepثvɏniT*uڒNZb:::}U!ޗˤd7[@gM_wSZ =NRD4]!knk{|{mر/oۆi.`}"?hD"s.9}_,#²C^U0]}-rHZ$IBxŖmܮ"߷f0 DDDtpƭx^uiG '_ø+;q]]t.@EP4 X xkY^dY8gO`7ML.7=0+TB`fZ}r۟.zӯ3ʹ#{eȦHa<{O0x^Ԛ5P s8}ja HTTn2zR82Ul EA0ML lۮj,Uφ;0*~3~̶~m7|XY׀K/]TՄD5pxxX-D"Fo~ ØQl>͡5>QS:v>* nF-o> EoQQkr 8Κ&Bdp@R 0NgŘi5N; o8 ?M2BaKZ@ 鴐 !0?Q`LDDDD fCû.| _@&AP@\fDMMڽ;ec1H|Ւ!Bl`JR Je}j}ZАaP3/~8Tl< puugTVtXfx5EDD[@Qì]=aUT|pu{4M($QS 8# !HT_:kmY̠%Ch>k7$ 0 @Uӯ~?ւF/}iw ^/MhDW7C $\.W-O3rocNDD椓Nw!zsڳgwqW"H xksF IP-ez`ڲ,:#-|뿀 /Fy}eUǁ;3 |;u|=to+i`HX,7xȲ EQf󊈈ZKaN=TCJn۷oC=T6mۢG ,ryY ($abj ,˚0RJ@S ߵm^oW뿚#uᇫ^_THN%KKdp$ATPe-bcomMDD IDATܱq;wʼ޽{.>яӟ4[{oVX?p$(ز,5}HO9Ӱ*ٌb4MUUx+GP_ ny??طW7pXZ t:-lVre h""jU|T!,XR_۷f505l,B(xAԺ<,r"޽moyJ@QF^f|ma/u+еk,}\Z#"""e#??!ٵk=\|8 * C) NkigqobԎ`4*-b0Q r> 8ZVޯ q(|{9L_9daD"x EC/DDD05[( >O!B}sG?!LLLT*1s&&f4YQN~z`ִuy7=Rg~?]{{hn^o>Q\VAq{ij_M`&Ѩ0+Q-U1&"""$ p_*>,100Wjn X̛eVmmuZۢ ?x::?FlE}?eE/4dY0Mxapk8f h""jU ܉H$h4|3򗿼'-?+Ƽ\"؝ ÁmۨT*(JUC`"0`W3W<$?T*힏: 7bqƏLD?7nM&H$^B`Vc `VQaLDDDD 'IWH$p?1=XC;$oCCCGXd"-J%Ҟ=9_p8re7&&WEDU_f=\u(k.?-x嗣wZ3T,C*`]x +Bpx<֫:DDԊd """_ 8¶mlڴ qwoFFr~~: |Sp]ǽ۷㉓OFXLUb1tvvz_i"i `QwGGBjU4*DDDDw-H$4_r%8餓o} {T9l6[n!˲7DI4/VyJlA{wc:Z6KcW\TѤ|f}70GW _;c[mP4MS%XboPv Ef01&"""ބ,PU]w~ˮ"@UUD"a2?n܊Vc:I&Â=L!Reym-@s2_Vf pOE<:ZǞ;h{ZbaFdtT Da@eH*([`xmcdd}4s-`""j""""@C`7D"4 uV|&>Q<0MhCQaN ќvlGn%wP* AX]C`vӻ|@"!d85U{U𻷽 /n܈P(ei0MDHRiu=.~GGGaYxzZ`"""" ;٢(JUV|Ɲwމg˦xΝؼy38bfcxӫ΃H$MK$dfeYn솿gQo{L'? <@x^I!O-i(vttx+TUu?[Œ.aq!n `""j5 H[{EQʗ~8pbΝ;^z \r(J^3'O?4ԩ_uh=(…Œ `Llx<0M1q8\uduT*Gn:䩮0 b1tttxo,a4 ~Xz"+;::^LTL0?QbLDDDD'ZA4|[svm( \W&AP@.C.CXaPEШI?pܿm׆0 $I=Tq}}(\RH6mN\w|SN3ɯ\H9x~v%35M*^[u?`0bzvh `UM""j5 H,{K/ũk>4::rB|>R˲`6'mi+_ *"t]G,uu0=UV3no}Wc}Atw|m8~ӓt=߾mؿn?S5MC,jH$FiTU% ԮZQ!N&os>DDD05٪u]7 ?OحN,(J(J봀#("Sm7+-zBr_eqo`j?EUE&FjhHPHY\﷎D߾ϞpPm4M/u_4u~{ F###>6CoDDԊQSK.駟믿O>z*ݐ /lT9H N#J!A4?sVm&=0˲fL+1:'C! ̈hb`6o/v:5#,QIkWS[J׼'=P+{;No;aAi4 B7$XD5,~p5!0C""j5 hYW i4M_SN9En=+dY8PUhCUՙ/%fM&ׇ#js%FGN`L:ض s)@}&m_7easvz[حw+񉈈Z`""""Z6fukg?Y<vI^r?cW1[ `@ЖeyϬOD!61!z8&pr m p8 EQ* @,j`4Mwg#x<EQ|*y^Q+aLDDDDNj`wVuaiU-+98+5@;wP :Wn}! hU_o""j y4 xb4 $=Ħ/arh,7դō75m۰m/böG]C5oxdbPUj+҃*T*JUNL?ѻW%IhB B$-o.Mu!12q}qhBA`?趍[lATB&*] `""Vڊ$IuᇣLBPsCa "4M(J݁0n]Ufja8PUh}8BSn@Bq8xw~>Goo/zzz0<<</"J!L"/GT,"o `""VZ>0EA4=T$d'M&fǡ*;%VWI`U>XX,6y6 80GF`'=$؊P,zXj`fcط'8Nkqvժ, ccckcÆ ذaü^۶*L&Ss4MC2WWWiڂ{;U]3Z `"""""j;n((񍀀~hۋJ$t:P(t.3u(:F6oFGDZG>"z8#rf0 6o70Q$iKB!tvvs֟;}P@oo/z{{=0JJbɤ5EWQU~DDDDDԖ܉,l }E6b"{mՒj鶀(LV<Y2wGF0lۓvo~3`jp>-iv`PDeВ=\\XDiZYKDD0-IYQGA~ml~vW:spmWUc\(PP,Q.;ܳm_zl 1AqXTX,yi?Vs_""ju ImB`8F6E.i%UŁ~_kBT籦'a $(Jmk[O|d Kr'cQ`צ R*u]X9{poo/zzz QToA'IvaX 1&""""&I*gGBƊ'@ ğ}VXvn*cIRwrteO>pBƗDW۟8oy `"Zv>?y{bƍZXӴdWn<3C`""j5 m~ 'T* DZ+-'ɥ<[,1!0"qZ' Z$Ipo:\x9acp`8JaʕXjVZիWcBƗ>xpsj J:b^m(s!QP|᭫i +:XZ`"""yu"*9B!*zH$76TBP@itTв,C4 4ż_ IP.avup"!d,BSDŽW<=ѡl4_{KH\?\#4[˲`qPsW@]<976: U/vu8-ܛ+W CEUxvE"٦ &"VhGy7IRdYƙg)x ˗$IumBUU_wRt,I5O۶QXM93뤓`U67 5L>uTڮ DV ۵XӴu""jU pΨO&{GHwґGްAEX f5a0{<@(Fͺ3Dhy_zɒe $"vhk׮źu7@Q/ׯ=T裏իlqB˃{NmZ?6VԌX`  QP=YI몫#qx5]oقa(UUD{Y-cccT*P(D"׎ z"DDDDuH$ ,CUUhM&HW]uђ(pguWqiZㄖIn-, +$ O| H ;;E.ISNAsD7 l\qP,V}{BP0 hU#dݠQ02&"V%Q:3vZ/F0 VUwB!}݇;C)`g}60 DQ8aKE$3YEv!pT{uvb"HӪ¨H,z;Vé+ !㍐~<= IDATʾ}}6Ec on1c m@.WGʊQ4MSi0M{ ޽Ldg@\~^At `""j' jؼy37y|u]G,&n7M< `PʕVt\t"|8 zcdd L&|{08 ibH$bs~"`Qi!-|09wyUH$0M"7aq-K/DBewWD;NдHD#p*VBpV~5cV>^Ǒ$IYgD.2e&/0z DltWe{X3L gk<44:)`QalRIȶ]w#"V6m??b֭Uo2D*B*B4E$(DpM7a˖-Lh1P7o??a˖-qbw$ɚ -$mD<>Ϯ&[حo3wߍ=yʺ.zh$$I*g-z( B76n? v|]F qۥ&I(0ǑNNJ`dY^֮/&"vDDDTך5k~zXJJ۶8=C(WٻauQ0M ?ܵ:::b Xxl%N;4lذ{C=]vahhlJeZbScS$]Ri1`YEQ`&:::qFy䑈Fm;e٫~,s<GQ,U[!x`H~-Uz*cv&Bh&Vfv %Ll]kIag2߹?Ikw,Cy: ~ "?Ok,s{!%޼,ömJ%Ū|9+2rl,+#QF!I"05cR:;;bŊyQ@sԃa0*DDDT7ߌ\.߿&Z% $Itvvzտԝ(p'q(իWcll (JU!W+MT&H$߰&ÜK/Eᢋ044@ޯ1~MTq8pL[#B!(׾9 $ Xm7ja UUDS}MG__ba緻䩯h;l r!Rrߣ;~G5Fww72wiA=3@qN rowDk9wax6a8JRp8 u}V>8q{i19>|> }@Qy݃sA3d;r\[瑨"dxkQ,ׇd%?DscAH$MӼ$4W;gn;~ezDDDT2ŝ`,"[X x0 [wzU(,rJ2ln W(B$iuݛȵmH[ .\$Hxk͹SrH$4T]h8b2ޯBʢXnؼp0F:,B\FRi~ ޵;׼h4x< %Ię~bUgn?~þJ8Q;{^˲ܐ@U>S, p#ջ/xdzM_bll l֫rWx swX+JD"-ojq߿z*4ME|k}׻h4}0Msr)ch1@k7~&""jE .wT4ttt,Ȥi=DU;?INN꺎x< r9ŪJ`yUG%;8dk˩X,&%k'yC4a4mѕmI,&=V34jh+JTUm&M$T*D"^FV'rb1V׺68x*ZϽNo ^jAr&D"QzǪeYu]ؿ;F7LP!L?nw,T $4ME#Aג{q9}sq>X,]{zɽ^MC%H@eņu`Иi0 a@uh:XPwaLDD0FsdgG":g\3ӫoO!;FL] R5#HdQI=1H$ ˲>68quZ׍eYFPhD0xWCd~*7HFU{#;Ng^z_NB3سA,%X` w@fvVH wbIlj~JNlw|#Y\v'ϩEz׏:E} ~vvh|]J|pE~֧̮6o8謎\6q}CʳF|-##=7T&)"zrvj\G~s<`0}f_"H(ҪQ fe թ~_yzT'vn#_}A {yO~|>OEQEg>6{S:S!ʑ$mcRVP\I.l4iX!sY[v:Yv9)}m ;[ \v{o~sP#3Ej4ht!oXXU}u[9Sާs_c{Yf)ߙߍwX5H;r4쩎?/  T]n,?q*}wĦR(r,ﳫ>@Zu÷;fz>"1C}qxʏ}|=;cZcZM=u5ͷ<<qq?tȧSJF @dvUtzFߪ j;;[ *8)Oii0侳V%^+a8b4xfV_{V/h(V^l 9S )8=01|>O)X,h4*f"d2&q4M&x<.'nnn˪h:Lt:sy},N\;NjZK[v,~EQfIzumZZVn{gYuo 1Fa0'ANZ5ÔZ 9Vj5JȹX,eUcf5FX,|>/Ub*|>_SZOEݾ(cC9^72&2B\^|_~A:<)} w x>h` 3ciNeasl͑t6dr+DN 0<9rWGQ9 v8#aGQgy:Sٳ2`x$777i25x|'Vcm~:ѶprX\r.#tIn7[{/gv{<:@uF IL&FtssSN׿.bqAnS/#rO^V`^v}|Ar"r4N[xjaF|z8i呸B-p̦iz,+8."zrq}|Q4||zS@"ؙolsFen_-#ey9砜eU/;z`G}^x...ҋ/ҋ/v=tK)?D%pd23񲩏h[8aﴌ˦^uZyߧٳgwp>\\\|?|gggFD&7呷Cep`mΡxǽ^/={,{ i0/bv+/g}~WFdOl/ G>v:fC?؉ttuuA"髯J_}؅ϟmSN 졀{_ u ;?|2]]]4l6K"-4h4*d2Ia2N3EQ?8]\\>`!t>zeS@ D' [ C)O&C>pvvffYe>;;+O:a8G|X,x8`` x4w: 8@Lf3uS,lRJ^xpl6K鴼|2xyxMz_V?ʃ10D&Gk:nq Vny F#EQ^nS)ׯ_ufy}fy#.{l=j{}&F[ֲV'Kpm.աxp\=NE߇s^6]d2I(ܼp_n}14HvjXvӈk:eXTCbf v;{UE'm!amqu0[Fcp-޻r?[qyRJ777)oLk:.zՀlb=pFQt:Fw, /[-u|~+ uFiyj3&է80lv'vmj CiNmӹDqhS] x擊竢q5z˪˨"_,l.6ҹz:au/[޲˶yG^`0HWWW+gص<N̲}sX5=#pȉ(jEQFm׉sSxyts|ya‡n۪θʪ^P44sx(Y߲#4N}}}nnn|z8ޚawF}L'j݀[ݡ>u F/GZE9땑5O=G}Q:ytp8,GF4h4*t~m4% )M&8o;w8~Y/^_Wl4]__`p'׃q5,VUrLkMjCp\~S{^XylU\Ut^WjLNm.UiOö]Fo7Atӣ(O/_Lby"_-yzjȽ/#^w+ EnN]>vӖ! yrWj|7Z9m1իW鷿mvi6wcqbZV:;;Kϟ?/?i8ypi`EQ5ܢ(nطwcV&"Q9D},"Wo2xYH0D$$L&' [lSeז+Oɖ7j WEQ܊./fMGë́Tn<?ʺ{qqJ)};NvwF?4w"5rj`ׯ_ի4N:pjgs]v]/ϜٳG%/ ūq~9N=͛7?l2t57l6tKLhM| (i#sm6֕GRn7T'jD]`{oMBix7 w O?4]fz^9u]5/nBLϞ=j?9t}}}ud8??O|W<իC#} ljQH|}}A.___q_8*,~Ыʣl7 <v;=|}\ 9(oG/_z5 2L7vH^Ko?De?LDE:)vet'jm&=A}ADb߼?n!ew!=gON̝ٙ{ Bh~"|,%}5J/8B${1dD0EX "ѼD0laE"%@Fna K)+TFnA§" /JW)an%!BŌ+aHO[]6a \aJF!aB,d4?F)3 p8[DxF"~<DhuEClSMl Y6n X1i%MH &Z6M7?4xhT`;ֱq:qN^(  %Up0X`R~&ro#dAehl εJ"!04(L1X>AZoÍ;W ]ھn/A5P [Jq5-BZ\L˦0۾3@1 h,]aF|7ZIXOHb]jy Ba_סqEXn@79kMx&`ױdaȁO_h tsg"f뗃} \b6Mfo 7gVXof'LfB > Bf1* s֖䅋g8,2ueQ*ȟa&X Xfv2LU )*@c6OjTEĪB8;t ANXogƤמ R18xb頹RxF9<coW3܊+`n {fRzՅ0y|sT[Ԏax2i2mߐ,l^ucre#KPD-5x<R:N[ab}lA_V&QOIOCP? '$ S+fޤ"S7œs~ `|[J7u'f d_\!԰XBe8'ؤ'z{ $P*VN2J( Me䟸6p"3g ֡p<4c@,Хw>BÑxreeizj֚ ! c ~o/HHT@+a@ + _o)tH+x Y$-EX]{lnvkad`3P,3K0~56/\!-%r<nT](v,V#g}[xӗmG]Ց=- m'J ,qށs$plt`Ք1܁!_NmC!#1-ajcOQz^5k3B g@p(@}sx[dC/t#9gRB\qƈ0 ל|U"\.OCaW ¾SI ބaC`0߇9)*p=GyhO&IBq2wPnxU֏_P1itz 8{S7<=} #kԶi2q-Oa̗0n﹫h/w?mcPk P$D˝-u~exPSڽJq49>-@)bLM&GELN+`fg6M{zp]#܊ )tr`5Lg7Aն#e[)_{a80|Vu;͋ *ւl8 &eP$4 y[uY۞6JMN}߆[AR$oXp:NÙz˓] 5cf06W>7 X ^maL͕.rtU$wZFx-_\KzAPa.PBg4 Y34 zJoo;%wn]AN%~7$4i5΁x5оϙWJLju 5;`HSM?-xˤ>J3B)Q4/&ʡH5VյOp6&t:|AZY8 K$R rRUA9k֐IakgTK+FL79CJȓ7SSaYq^ 36^&?A@oK89â}SBBw 4QvAK1)vV.>t/+C|JqP.Abٌr(:>5zΫtRq6Eץo?XvS?O;`M܅7a.@E(n(y,ԩ˨߃X֕$:W+xdA|A)~tPNE⍚g`cHA0#e /aD[cv?NMw'j ~I#[p'xǵэx n$*8 ^:y i Ld bHz\93 {V(R>T7O}a\D?Jݲ:N{_X/6P,ckw{2)tfɔT.ߌ[V(='d}@ﺺ^D`C0ciP<i0ih7=)Ns& U. auyX K))EB !+^Z7sn;"M᩾p%9cDTѼ**޿!BA˛.{N)]R/x<$܎Ս "T)kL RtjA&ָxgvA*Ifik7^[u*"p$ (N<8}b=;Y= :#Ao #Bh?]'½،xؙ%Pɶ㱸=tV R{ 9{y6q{Swo kmc݉NFU xHaw8 aXc,SFNȗk[+AF Bފiطc,u$#.۾@m ?7L3  `gkRIENDB`DustRacing2D-2.0.5/data/images/left.png000066400000000000000000000132411360473665400176040ustar00rootroot00000000000000PNG  IHDR@bKGD pHYsvv}ՂtIME .IDATxŝ{Mks3 eFM.]܋PHPItAwIo?JtQ!JE)DȥD*&̸1cf̜}ǚ339gsyu2g}sYk /BdJ)A9s/x@Ȍ߸69xT0 nmmٛ.Β:s[D(X<=^M#~W4&ӹ"x)YI&6iTN:? Vx.qVM~> :Ǽp o|`sC끛Yjn,.DŽM> Q$'Ope+ErfB]zu3<[\H]zAV|~]0]ϣ^:Ŧv2T>'_ijeŠͫ#N ?Z^ Q|Orpr9&Y' !d >Bp(2Xy'!`wԨR_|U6ujHjV N槼4o(Պtoټӗ|&%BB.GBXdɫ!x˺ u@,yruH2c_0HC[&hPb7G[¦;{[lتjARE((en#uAgCT^1sɊmk_3]Ir;&IQEQZ|=ݹ vՊSIf ΔSx`E|>C>)۟*#9I\j-%'/'&^z?1e%K Ř4rƂ S@aVj?%,FbQ;YJИ&P"yx(V5Izr"Ԯ.9|Li+tx Ց,}-C% u/NC`qY-NC6A Y!^/2NBɐ0p:] 9tcb3Äag7u]c>U*JN5ŦD[*i{6 di!xg[.xhv,^޵M?z\}w&{TArq&1 8pXb\A*wKQ*)s&,+&0o-&*"'c5+Қw _:VnuRtȄǀ <ALFJJm6K\%LNÅU^zNo4ykT$Y1y]eo0m>:Bf9P/E2~uo bywVy2otTrBgHO$F?4|(SY]{[4wBG6l=ˢ9= Rѫ,UT(Iڢ4k 9+'HM pwNd7E)U%Z %s)/R~ pӓsڲ(cv(R׊HTXN[w Z7Tk./]D2vGc jWw ? Xv㔯#]+7/Cм?|+lݭeF5 hP[R"ƇZa*"NVyLUu*/Yʷ/6”O:'^dX_ 5V0|< WӢ拃 ~Cй3u"_q7>g+#*QR%Ijh iAΊ7DӁ|, 8Cm#g"մkAAVJ`DK!4 KNoj}:Fwp}өU|{T*8wetuk0"HM(:q33+$a#۶#v] Ӳ$1Wu^#p"ݑFBD i TgMpD#?_~ &3[VJ1ʃDkZ ~xI66 8[p{G 8;Oa1/kgkq0WgMܧzv/B*XED6z)-/i|PFB_Ec[OՓ *VOR>㉈ v{*=xr\!Gծ~/>x{4 9F!"Ϳ Zc MݧVo;W~4aeY˜[Aڰ{8th-~)5R2ﶨ?FhqJMlVnpguoߛ5a`?ktEE ]Ucp~ٵ,ABjsh{ᛟ"(,~%y:^ 9IH\T"h4/1m2)4T(sXo-RE` >"֦jUrHOR)?RQgs,1Yw>5.ę{"EH7}W>eVT:9R#)U[&;Wdm74xԩ!Y͜g_+URgd8p$2FWg^d~WvrjQ&0,LDwE6[T!2u  Zڒ=xfz?VE|'= yo~"vg$wS;kt,9tdzt5yy% eAPܢV4.]^U`w,8ic /k uinR%C+Ӌ:.}sT6WMmێ+~!Լ_j+ेX7'P:-EQdT60qRUnxoi tҗy}wY6Mg} ;ٸ]P/9|wVlv "/hr]ws^XT¨H`iCRB e 8^duO=D{ݴW e&mnZ[vApr48|i+j w;-}FDտ/#Ď}-M"{n 6FebY #xrs(p<@$.sr3^z*T[^|]q3us!lS6Ѹ{ ut6B9'v3ZMg7Xmj Dn"]Gcv8ucp>.{ke_4vӨ}ٺU?Rk OlO޶Gp@+fKN unI;?2SI,s F8ȗlީBuA\p@{?;4Ww&9$оir>EkwSiïzޥYk_^ؗ!Hi:|cZsc|y5ݹX0kҬ||ƭ=,6I> Lr9խ)IKjѺ͸{͸:ò՟AvFi^ :˃oL}@jJKjVM憮6k;8ڲKôTՒtog3vEƌmLlFƒ7Ӝ m3^smi S%'\P0mέ=,ߙy-|.AdfIøiARԪ&e_>HQ{[r\^ڠ\D|s+$ ˛Oxt~j@30uΜ:[vi\p;4ظ]c-90dsYsuC ?ʹ0'IENDB`DustRacing2D-2.0.5/data/images/lock.png000066400000000000000000000531101360473665400176010ustar00rootroot00000000000000PNG  IHDR,,y}u pHYs  gAMA7tEXtSoftwareAdobe ImageReadyqe<UIDATx %Wy:nԒZne! 8&4 %Ǐ$N8JWe< ـ'y!6n' -Zݷ;;yשa׹{ԩSgU} HH=q~W?[gcFo{. S0vKnqz%%"-W1hگ 3eT6ĘSoS #cPu}nHHVQ ziRhhi>}.IHHMZ1cZ%|dzq,^%BǢcIpl *AE>jq˖`mv:رJ_k\B> EGa8y:Z%-#ݣ?J2>8]~ v֋=^mVI+,T \ Vtx*tk'_{Nv"ᥗ/e0.,֦aY>_v\ +D;{DPBpF%Gپ*Qe?5S"@1sgՁ<ۿ@l=v>Ͽp$g`6fg/tVlF8N`ܩo|ueW7n p宫,@!0IF2vNZ=I<#p a6 ^RYq[4P'P[o3޲YLj`0@ۓaMH%IVTmY!)3Փ)G`Z\LM.A AJUPȬ8fX츅΢(;-x-p <'8oڧ0ָJB&7np饗*hrr2VL Y!H~ŰZf͔x[5|e>"{׭uA+cUL Mȳ"':˽W"(QmUF~. p %@Yٗc\}_/?1_Kmokhe+ȨoW6&'RjJlڴ7e@1%*pDl;>+\l5, =.+WQH?N99Ͳo_{HBƵDi Twk֬w}eRYMJnҘپk-Ӱq?=s.ɗ&@QX׫ {5#q+;&'IiӆSm/@O4 Rr[,@y*|dDAdysxerywu\yaX2/  ۚ^z >ݥ{ɯ?i)諿sԚ5?wl ֭Xv ff2mm)虴 %@H0ȁU*ay8͆FJʧׄ+\g:"h}jA'<\_K&a?|~oLpгv:-lܑ a X&w3aS ^6-.D`h+*dNhUz0"p cԼPu~.!2^Eգ+33q>3i-Pyh&~sO?֫?İV]>*XɘՇ|ݺr*\CpBva:W[WO@@jTg%z%Йs**{YŞqQp\%/* UX3'e'CR z$jBYիB0mǤLjcA\1*$LfUl83O(5S򸂑aٙy{nF"ce?RWaL>&s?Q< cۘ2o#ӧ2- 0&bİ%nM2 ()4a?ZYqVt>(z0'm95I,.* ,GemLB6KK0/z\THs>>òdҏȴaYٌ٘m}w?f&bCANqZ5ҦSP+o>)[$O3*m"PL1?2+]~:DAxn*(! Uw911s&hT@IW1TxFXw%@RHx" [g k3*ϽvTm)G( A u0P1@%n t1s'YU˙mI%ŲҼYExʠo `bƥ:_l[ūL0fυ[R6-Ե@i<X=ȴso`uRU2ԀYh{-]itLz D.ە@.JB bThʻRt h$(q!$ux4) 3 l*`e>gJ~C.|Xr[Q,/ 1 t Ǡ58υ{(9KΙ/۞[ƭ u)G>4 `:{F'<$\=Ї4&pJ?jkviU@nXɻ)) UϤؔUfa& VͣpLˀ+eM@ZͱlB1f +lGw3%rył?UоEyCK|'bUv[X؃/~iزuMXҾ+g59ݴoPjZɡU!duy7_͓۲,~D%\翲8=ͪ xm@mTMkȒ[]/1Qns;^ђT!6Jzx)pcMtVg`viz W2(t_0! jaX퉶1V+|V?aYfi5)Sw@5+^;ykz5*KϰمkO 46パiꯪNՆA,]rQe&=d&at^ƛdi XfN3qZ5h?P#1Ώ\u:JjUX*r* 0Xu 2 #-%3,!27)On;ߝR`'-$- wsCw+6,|bjHx4 jfsM| O%! ?;79Y!h@nV'[LumLI)PsrS`}Swd+F0s$̜>)W^jrՂ>A@894+sƫyfjۖyLVmZ$Gיlj]rIp[(F}ZsHHB~%2J0LVi%j0$aZ7q( Ak|pM+axA \Nثc;`Uz ~jtyLW-M >XM5^-1?WZN7gΡk'o݊+`V%XuW}OĘ yIg~ zXUp< <7a֋eT?Ux`eu{o]C‚+7/l*Ⱥuq4a\kDָsx*cZMNirE$.(\̢r`L@yY\ySG?IӯSOzb8\/s R|lX+/uq [\ /xN<˲P.a\?s =P,3ұU;%,Wʤ^`Jzr/Xp3*LW6CX<<2l?=^/STl֖%: *40'8ԝ4ő@GD:oB]8{Q.a]9{wfWAer4C*^Ƭf| Z"~^L>߫ wo{{wm+LJ^뚂=,C .ڶݵ?},aK% Azh1ds0&X@mo7rJOxiXS)4~te.x+Mz`UȨ~~yOs#up宫aCfjx W [lC]qir$:}}7ʗ$p\ }6~k嘕.*s\nLAɞR0+]Cok8;뚰-dZO>y@6lؔ'daDDw. Z/Kϗa3N hQ^عstOyemͥVc&yBdBT4,Wmc5'Cdz30fm!|OSк7uQݨ! f"ؤUCmzvW;?(|jDz5iI@wADE,n)[:7u216ٔ`pM!AUABv6$F>L\c4a%&S]'is͎L8sL6v^P+Q>HӝH3h99,]j:uFcQnO/nFȭn:`EQoxly#| :Fz^sw Xeh* W䏾dEИG Zx ?oB#gJx>,&R Q vRT>RV"&(XQk׌\w`梞-Li&Uk\qqWlbWO==he@+JZ<#,llԁSŲ t1^ekk( X1umӖ)Q +CS6F\mbjdRYRMM4O_Ӧ`L`hExMΞ=̡jQ^;Soc_4O%p3~QUc+-bvY8M5 |'y[d:eep1 5e[·ƈF',Bd&WUsl̓QŲ$2nMCp>Htf!O5XE\z'pV&tXP#+1WZ4qWΝ=wJ48DrksYPѕ6ݳSEIĹS+*aGO'2h%eE.t^ϥn2%J`MV̕믿&v4gN,YNǚxm5_Mj aO<}ˀR~,v5X'h;rٜ@%e/d2+&ZE 50YwMMEUJW V95@y:)ZfZ0[<_{kW(o,a`h2~BvecL#gZxjT=WSdCٵ3OjbtXu xЧ댙 0nL{k &WPZ ӫ{EPD+Щ9c •Q){1a||)v +^k]fFL-[%Y[ƙƼ>UgioTG+4PDIx,㰸N9zث CV\j9^S~,;(lOMGEe!T&Gez)lLiʉ~ X/{Wm[.7GX(2ؕBێ{D^W[!Xq:nH”M.Y)ǕJl#_^@&'XPr}kG.JxJñ.|] d2W,]-|A4OPsYzX WAW/ ɩ8XQ˸&2* 4*;51gIЦ(nv╘cդ5yHuz/,u#x,7khLCF fvsqW£+ͦ|.F:Oܶ:wLOjR{bOpSM P%t54i8bseO` \֪gȏEvcor msLb_8ԷYd ٵAɦeFVMي\@8@V }=5tǕd- o Syb }O0ƪIԹ`ӐB I]hƯcj֕)C.)5_ =Mec/[IԹki;np]a1d~,`¼6B+uZW.Ocw)z"$v5RRV(z GڠV2+?x(?Lїi0$faѬ\>Kz` D,zPMJ3 EݠYI.I1/[oWEi&"ml8/ ESWWm_~u5^~(Ak'+=zK2֕0YhV`` XX XvX&SS{$Ys3$" \*JH0 >0%`b1,hZ/y.}dً &1 FLzADa%=U3,|W1L; nf_%4 r0QO@E()Q}X&Xt}XpMrW"[:1 c[bWB,'$F&.0,ӫw`I>ʓwwxUA]#ܵ7"o` .b|ܖܻq~qw½Y9qO']&RN(J?̰,SH/B#T-#$E-)9u`_XY̽"~Ҁp$& uk,DYi{pE,9tmS%Lcq e>V>a¡.hږܼ $arPZ-D}M|:FK2]Q||R3ݒu:rEM~01YaEۮ9¶vX;W)Kd&"87!Mzٸu(W{[ΐHߑ]af}X 1˲U4EWvRD%.BPd8Л$}] MBA'~]4"p<sz gD`- 8*s~+V"hepf_>lQ%"rh]‰aWDuL5†ZNT{[>,ȇ5&IJN5(Ϩz,hIZe>XeթXA3RR5{t9Fk!hab}PN$K,P(fYrާ"#X(ZqI}-K]s[G_$W[͢[ջ@J2b K뎹jѕ1)#dLB$ J̈́TqIjR,lk<ql--l[Hm6ZCプ&T[h.41A6٬:./':(Y1nK9쁢yI k%>{ Y=2*T4.MnLp`7@B}CYdQ2 m^3pWUOʴw.bAQܱtݏw ڥm[]pV՜D_%L6})V>g11,IRXH1,p@l\s% >aNw^a։.ew:nLW#`ӏGn'dJ}!79^L .q1eLu': UWmP:nu:٬aK:U *'YzOw;O}aez`%}XDb?(Gq,cX/}W:ql%8IRw&v(ֈԊ ];32p:h]bd*}ҺdLĽi6`Lޠ yKTwvm*ԉSEdnk|X&Qd7ZzC}B|TvsuiNKU߳X3VjՈ+v_ۗNNmvܢ)I`:Yi0-|&peZn@U33=~ι[z9KG@P^~dVP CV ]>RIضm(447Tڋz֥e4wϏ`6q)8 HHs"T:^V̴ZphfݿW3ܛlkŝXTGuVmZ=fCR%3LQ 1ӬtA@c׶w*$8ɌnA z~msTsN>;:J&6 h}*LGG]eUW߫n#S`dKxway"I#{YVk.3ڿo9K_xg'5;'{Mc@˨<ba5XT@4>%Uh@E3;|sŸ:`}*w˿p:sBDE#*UO&Qun2l,Wף@}rMB _k3lƇz@v2g?3IXLXIXa*DcXbdMBm0gc}JI&|ƚ-ݐzol:W,txOAw,0\'C99 Ǫ򬫈Yղ*F dV۪cLa:܁>.v |),2}]NJ<֕T}_|."ERǰ*@KaXǶNBqq2,ܞpIfn6\Sґ[oP' Gb 51KʰbYV1MV *@|gV݋<{z6 gv2^$_A,Ƞz?x/F֊%ư,-K/υH!U`UƄD?c ^OgO#ÊR3=T !VFO*ͥ~Kace@t%'jf |Wu^0dZVhĚ~ec(ɰMfVLihHɶzi`5:Aa2ݐ^Ix+zd$[aJ^uষ«g_~6G*biX5@UgUT>Ī{5}=dR?fYd^noq+ֿ:gsl-N IU3+rh_"iVL^ϼH,53ږ"޵g,cIy%iXy0)H̚2: Qz82(^ 0Y=zV,bV.=qv?&!1,^I'"V!jfV(B^@V0ʘjVYT{ uA(InX!ǝ X]d^$$X VP0{,2W*I @ՁYB `PM˰Vz]+=/3% ZR^TQ^@+a GXCG>.l7☫U"xa51 ȉڄ15*^Lg5 $zdGd&/`5zBh+p5Rt,UBhkI$İV]UDќAu&(q>6 !Z1Q p/<O^ .^LJߤ{l2 t:$+.lE/[-bX~] 0h\%qV/rLP'XP3`)bXpǚJd6mHV;N1 Ϭ. +,aQZVUż/8j뤈UՙX=*`VE~,U+ġҒ411$^z] % +w A溙a!Y) ?.A@\!?'&kM($ܟL;YYv|yI2^ HUp1E]sba zQU PEq.awJD1tv#&t.aiV*+Wtq @ush~\Hb_HkֽƫAM- %D\RX.fhn x ~#ժjf%[)lL/= IU ENغXU`Vr涚cR !,m dIz.5ppdBfg[rkSqEvm kuƋe5}-Hc9WkQ?fb{u?Zz5 G\8Z8ur :" lK2  VKq}İLGK8qM N%JQ ,5gv^\V+ 8ybRv=gattAk~,QP} Eo XM/ZQy _Wo O#6 G筄/+îA-D4a̬\q7/XPמhf), ߮΄+0V~+Ūҁ s1${{eoyͰ3p^U]/ؒuǖ'ZYx0󂨆1: pJԾfGo~d6`Sz8wW_sntj("sUv"%6 r)8yb у}]L>w-[߹ilx^$Ԁ+uT'8y0 sg'#3f FO~zs)柞xd.:{T 6.I5f`]lOD33jEzC{)N ~4<ֱsA?? ?߀e$M˜տ!dQʲ 1tnƫL<~yէY<;/Y (2=YYb+DiXq, #6:9If B 2 ̬??#[7zyRVcX+;hډ)h15~wf36$dEߍMb(}5 s vC^0p|W[]?]~7~ǁ&kC'<r>~eWL"4|}݇dP!g϶?+c507_෵`R+6΄( PYV ԚВ1Wxd wVm#_TLª"0Ln>TuZAQ%t\2JCY*8_1CvNw3GSXaz[\.G.a{{1z07>,9E\81FZCQ ,βtsĶcj` Q0 WG\8/,WL9z*q+L&_X$m0a /8@Ic|X@i5"&aRbP[Fb19uMQ;cgmɄuWfa77XYͽa7+-w-+P*mѐYca*lYв+„pUlMB$Є}pGE]"(,L8F7rnq@ufvY|JW,* y{uy翲2G̟8mmʶcbHz2M5)'`u;8`չ?V]wV{*VbPrQ.^ `3 qvu+7 ⹄>} @̲UwBHw~ۿpwgw}w{P[`-3`<ټ9'~ߑ^[u>PξiYڪR#h3.kc=_Ō ]?3? ?s߀e1_Ju&YmL`j2ct7¤>f-{/[=YEe~P1Wu1atV516?l`O0R6og{YE!4:>3$_5}qSq EaIzrՒdAFC6oc+fX$0%+-ˎa tViNb$CX>-JoqmWcyU<j}+5+vrtqW P|0UՅ5\l!U"! EBBB2^ KW)<e$E5fN(  *vYj">o;KWPzkuוE. 6ePðTڪ~T їpWỦ2TAtg#x+lβ#ҝL@&:n:?/a-bu)X5aXC8dp5|/%8`XaZ8 `3&ea``IHH&YLB,#t7U X$$X$CŰHHHEZ5Q ,bX$X!U5۱IHT12 )`JXeez^wĴDE24 +8xގ. Ha) Y úG !!"<^$!!"!"!"!""!"xd2|& Ie1i Y=.,,,,,,,,,,,,,,,,,,,,,,.ܾm ^gs+zH^ =+y^ߡB#|p2JQwBE֫2х&YEj2)CMPLeB{dM¢ɡ[e6Ԗ#KWqv("Zİ Ux m95٫eYbLB2 6m\4hR/]|վ&GAջNE$=g\X(pzʼN/ahEBާ_-H19Nw&<'o_0m n0,߆}UK2%"qXr20ܾ=&^APXv]^GIbH]Ug Q\X,hș| },?#Yje&aO%@!Ê1 (DypwgX -|2cy'^ק`>O^\LK zf_R(Kc,w |XqdXV *a0nwϲ@TX&>YԠ'00TBx@ >(Xr}M>,^V%`& Gx =P;6& H@='Y:O*3 C#+ɤ4>mb9 $bXXm9ǡI>r!k7DС1&z\lCwx&V ª,L|2Q˼"s 9/a X/- cX1fz_aqhPelJx S3 \>, bY̲~)br`"V >^LBnnr K cN!h1m\,6+J.6T+JMB1y(>J5zcX5212 ɇX"* W`I>', v82!dcsQ'V/nMniAk݋a1#8t `)hY j9GӰe:x *J0b;PoY3n0bD |X&a`PYM LB 3 OKȉ~eS0q ~SzOKVĹLGgEKDvc0Iw5KzUAC_UjEg$Ew³(/d7_w*y>dIMt<,lQ,q{A7홀?`ZǟS/pĘ| &yM. Ln<<|WaC bU1"S1 V StD`B"S-;ů gggc-ƜQfX(wf㞘ozv¦ <3/ߊ pY%`V9Эɋtg$ϰ꩗(t|"bl˱+ıd_3 WlR}?{xʡl)+O9x)8b:MŝFDZmGgf1)ܐ{Μo(zW6B q(u pzx͛ !Q|t8x^޾/X߽ Ԓ(! ߚ#X(@BB2A,F,U`VXZ$$VQq2l! !AaE3[IOHHV]kfuNEt6pUРAc)}4i:D DƊCTPx[k6w,YkoooNT/,IENDB`DustRacing2D-2.0.5/data/images/logo.png000066400000000000000000000174671360473665400176300ustar00rootroot00000000000000PNG  IHDR@@iqbKGD pHYs  tIME  &tEXtCommentCreated with GIMPWIDATx՛YduXKU]Uo3=™᪱De ɂ Hd@`/ ,?փ! Y$[H25i֞ާq3zi)̼y+ƉU-80/JNYsx^{AYP;0n1X83 ù.SOS]ɟ&Og/>HfO6_g[RK7yc_Nh ( "3=v g! !k(DIN2liguj"N%.NB j&-(izύ]^ٲ-B*0z2Vfv(Z\00 ĕ`ZC>{TJ[s<یFCʪ&MS:nt=sЬ|@PZ$>-LŃD(' Y _{FB]vz5woRL&hqDZV %^@YUiRV׫REЬ4;)^An4ru܃=WV7s$K-t!Z[V({{\y'FkRiϽPcD@`eix՗!Hܺs=UUg*kBQB9Fc-"MRBpeS߼hg}uN3? .? wv\6m 06Z6h4h6ZH$!J1 "ѣ‚bRl} Bt:(wHU9ʲB(Zm҄y4Ūm):-he$$V"ss yNQ]iuFw;Y՗2,U;c I0jT㸛=.\mJeS&De0J]WGqZB)h …f}41LFy;$i Y$M0MͳϦ=~̤pL&5e^p2IK5(-4NE'7/4hNͿrkܥ,k_c F\v/ܺ~E6Hxg*4!ׯ*.^3ejSڀ֤sj_uvx;RibH@iAknVIkBX4sˇ_7?s7oΜanita8v Wӯ|n0*KК>˯JUԮiÃCx &k7nNP; &IPoů\g<=Y:#">NjzlFWݎJ֚ou9 O?,+k["imx޸s˜?Na+#դI(2Н_m|[5bi%~ {/~?sm`TԴ{~7~$kؓO1>ŵ[[gX^xM^Ɵr򼅽'"PJPc\m(F#jcFy8y{Ǖwy2_yy¥ j;׮S%'rB]c恋{;[7u(mIF%Jj+ $3Q'k=F88c}x7o 0IN$4C_{BhcX_wc['9j[D Miͣky5 ?6#ǫ߽/|?7xy~#].>BEux@\  GW+M"1q=̶BЬ~Ma3(JYE]y5j8d\-]$[<#2 ; E Q*aRLg)F {y1m""K ?:Y.a2$OӚ'ō  W$bxqȸ/(&$\]Gh5'x3k#QR,Ohbv*=1nM7Ah6S󴒬EU$ZןKûOK;+8A1p0H󹆕UhmZY ,HLe(|skb&(R''%n[; :HP.jų\U_njK l$i~otZ: ʏ4=.*ao2,s:) > !R\DiI> B1fx&rkW ,9!`J (6b 7}?ՑS v9!RK wi(@Bv t( vq{MHz(I52SJ)kI4"2S1+o2ܺX>VLhDl[e3MvFq1V6 }nxAMeFk~.r!&I}B=ޡa2fR4!ZO=#0mQ@'CPDSWP- }^n=l<8ux5oVYY;Fowrq'~ќ\3FEA70 ؖ_l enn/a~Wh-3LIiZT*Yiڙ94?S8^-ANkN{@*`5#5NW"uV[.e0BT)PPIZ28)cDX#v=#A#.(rP )8]1kscГ'x!w2s| 5ǎGl:+ƇNAg(ئ܎JrݻFs㝫,8mrɸnVKaZ,R(P64E䴔 * ?[O=T@!@89 !BqiMn.ŢҰ@b*AMU^xbhSzmɍ\r^G,BTCL*)f/Z By1GZ.4 YH[@Q34 ?),.OS0G:ZLC&t;]]XĮ-q`kТ* !T>ӆ! FS Q^oʄuhQVf&ДGcC/9{7G@o F\^}grۘ$_b<i'\bP)'5wS^hFcF& c5*BFL(iisO4qEbLwXSIfX1hࣽB3֦FY&^qgpu׷5i)Z೿uϽBިnBHHtl!5`LR+V&񑧚Qp .k&P{i;8ҁCa|8(;tm|][d.v4.i)ib@q /9>%ܠiqwyVe?vIrm%/$|oKZE:ix<9<ኒT!+mV\]&U iP{O5UɀVpxEX×peAnhq!Ls-fUY}Gq%(FjGE]2hr.^Dwx2a}yϑvپzcg(A|ֵiVb*\c8y24a*ExS 4w:k+0MS=MjLmwqZa9BXZYᅏAW^y%;) [׮0)A=@"WF-MD,XHwo6b(Y>2e1 JI ^)`4A : ^r5.sM ʒ .2LNH(Ƭduu_cC^f*) |n[9=>xQJ,'`Wf2 wvv  f8JY?oY3,:H=6[ T#Mj/ԍ~9n_<-n][VV;, 5c͞'Rs]в+GzrGoV3.+ d|*iNij~Ht_;y_ q_ϯt]QՑlh#& y{666H`7H5ex챜y=٦jAl2&eI]L~ sK{vj  5HXt):RϵW8-O CSTB!1BfU팚6A6*v-|>[=:.O>/k;0$`- ʍ㖿whUw HS:U e eEݼb*k0ې(3C7V V7*D2sMTcG'$e _{n8ڑA(YkPJybڋ?{Y;WmB5mڪk in M kQp//N"iJ,pQVG#JAU _{p0a*})<ш=wsJxay^$mY;DuSk &e1ѡ"Sk{5X5V Hx'?t* L #h : B @`Яҟ?nqgQڐfI#٢]7䉂Psz6+ip-wS(/2 iheg<^?МgEs>n)>7beDX ;b}IK@xvkջA-bPyJb ?.4Q3JNJpmLW; d Vrӛ@ ~~Ͼ(pNH~i% Bc[]YHu(Z LI,(*"*qʴM!P marc-^F!PwGqr@ȯU79U@#U}MQVw#D+?=~ 2nLhYRLTEHH'6%~ٽ5 a<`)/F`ȁ{aQ 6!5krMٰ3dVrm#r6vA9tX FҶ}&EV 5I{gcbO>ڱUZyB!Xc"nX=#<>[[;lagÃC{}&E^7ym4i֐Y}kllpj}3W@=¸twq67oO] qkM WY'D:luh8WN<3z,\Xy|&k) wv6ww?3x_6)ѤƢtkmxIjcOkq oҮXi6WX[IMjz=?ۣR=lOþ#6 XhM$|R*{-POJn7i=V҂s.ϓ$K0:N&qހ~DU*uGnxmpUK3UQDN36Zj4g(k#vgɤۢHwe+8 a2D`.]=ysbsnf$Y0.klݣsx؏>ElUZśEp\T|r@b kgVZAwkfqLzZcm,MI AoP 6IENDB`DustRacing2D-2.0.5/data/images/mainMenuBack.png000066400000000000000000022264411360473665400212160ustar00rootroot00000000000000PNG  IHDR5؂ZsRGB pHYs  tIME.;8e IDATx|m=4@z>=g wi)$wY,N'}}^7 RHӝ$I"T @ #; E$^&(⤈P\_?B덑:c U4Z}a;@4_2_Kdr>@(T?E:~EƏa KA[/W־D3oS~_M-R*_06|B UU1Ɯc1|s1Сf]뵵-7itoBuy|~9cq-[޵޵9]⟛nfߞeo~\ ]*t U ۵W-"Zt:4 Icl-M:9l57Z\/Ҍ碵k߄~g.]Hs??<cN@||ϟ?cu3w^@-wTo) r%TB)*ƞ P90JQB]` \ā\QWvH[YkLxseU 1PJ,^ͽ<El%*'y\ rÙ{\xζ-@u{qxSPx#wR}Ŋqr39ܛ̪z_e/Ą(QO_dowWr(\>[]<ޭ.Mku?T^^V]z*:c>s<ϜsL{sLvv @yg1C7_'}mEYk]}3njJ"zVUa!ZտZ  1qa.fa/Eݹl](Q=DV,Z㘷<ŌK8 yCO/zº[AdUTrYIVШ Æ$EfnIXfgk~N7b#4>TR9J^fıK;**Q._8f:}wd߅E8>TjoK_u~(ACt 0}QՙFUGTByTGm1 ڨ\UE$r'*tPտ tp@%W~f :_`(²`9?#fCbflYXw3U/tc'd ]<3sLhx}طѪ\Hq55(*dD _k-;r {@ ]$(Z@%^?(Nx;s\4:U"'qFovpUlsgOᐩm-_{w^"pAz-tH5ZtOǯ=#J9(H쟿I]xTZ$G}AL& ??ϟ?>yd9ȫ̩i-S[\puW E tCMhC>K^^w:us>0B͟C[~p@Ϊ(Wkgh_?^fCS1Rw%5fS188Dj,,[t1{ nbF_b$\<ASSf!zTI\N85`w(R(X}]u(, Jǩ]B5 A jh1#/ DcJr@p80}#, eG!~\M!0 H$Y"z"ŜP|1-1Tm9ǜs F)d6E1?m ժ 1#-_jlsGT".tR$[sY5LaR:O enh, W}(ڊffo ޵,=VΫLU/,0,[1;|8ݢx_*jwڅT1&g,f%)؜&|ف=g8ȷWòb߫\>Zܬ#Cj\CmbpnFn4Ti ($Zs:#;݈:.Et!uh1տ[sx >A Mikz7g#łs rT)W^] Zտ`xm,xcb8c8U1>vvk"킃=9: ajkښTS;PTԩcLގ !N>'z7@:$QyuS!ﲿKhWP|2uT޸8d9u_׸ n(&8ݶ!.sT/?ҍ:m$ 1t>cL.~|>߿@خ? QU9FTEف2pTa荈 TƉLpЅhNN_̛ܸ/C`$&)s*~Ղ ɮ`>>\/mŘHEV]cLUSR(=eƀsP,G Rltl;!|; o&fE./ f. +q}vfE"Gc^ NA"|U2_^#?LTh~0QKG&| Nu9 %Q*Aѹq,;znJuJ%s(1nFYD3 05`cm6|(&P l7#; 6 h\e1șA@IăSK<7ޘ#Xg^{>ImrޢCiFgSU5hKfݏs0ױΜ =d,cޱg|>.fXkJZ{΄ #ώ=9C=UA<{T4x5ٹYn~hș<4.k{sԻ?Sn^C_Qq^|'*+E!1S7_CTQ[ %ݞ@}Gy | T:Dd xIjL\CH~|5A=EA:0;x:|L/*䮯[Pu$d V7]Mm *& A%ME|ϻ~.yý4"xA'd=$؃pOCuM~Mo)jӅcHtq8OP7u[njk7 X.w?3?큻:<{ ^)#GU`81vqㆍ^4UsEQA2l }נ lړ'߸Hceroy ul1Zϲe6Ĕ'}?}{[CP 1Fet#PZG״JMow5ItGa5'<\f6&ͦNdn˖mjh15dwO2GOp) NV*HlCb*mD1H8J|#.tQ׸A-!AQ4;enBUED e%u]4)6BkCD!*ţa^da*%0d0▽!* BA9u JeZkJR (]T]n^`9WLO]C30WsM5'-\eQE*Jl m )F15sZӔ&fnd 苘zH q E?:[*+dr5“FKS, 짩/?~|5btgS-iO5·(#{O[Yy\ЍUlKtP؇)X}0 *CSy_(k4r &N%ZFvBEj)q܄+9Dc.GUu k":9ba*л24oC{ ʸ `po iT#u 1jTd[[n U:7I͍s!c+(cT 0$8\t0~.i*܃N-'̄ ub lF2Z}2ˆ!2@Pby &. '0_)ixe}ї-pT*cDT?"0Ԛ?p=έgKyP .B%)*p&7ZЦQ9Бˑ[k@ZNS`EM=!}%SƻO$g;Igo>P-ېKT0v.v7EF+>J\P]%(^ZC$ܥ)=qı<貉[ ϚjȗڔdK~"P|B|J3Ly,5V9)XI/ʑudޯMfK^~8e7 !#hUq|8;Q BN.ZM_͌ȏs>@تUW둂:69TQU?$[Ivl8MbtՏSNQȐԬ-Gv<#h 貑RNX5 Jtϣ)կ{ @bvwMKccfv:]Dѽ;. ;C*p4C3UeNuo-U9&g@<2y18"3q^M=hi6t X(RZHC  ;[NIMVhg.p`C7;]@jQ5{' Ṕ5vsڋ;C,aD1Bq[ǃe*Yk;\(OgR=S0.(Jaџ9Ɛ *@tr1˕As%ݫNToPDd;Ʈ4t<:<< AEZHf*t$L1N%qs}Obp-b=>mN[嗍!P?vGa` D11Hqr9ϘTRFCݭ,x P^eJ֚$aJV܇Y Pgi h#pt;!F@(zmcNls</8DORS<E+^-!)מ[ݔ;Ƙe5 v=P_iRE=}L=A ps7 .԰'줒/7`I/&փ′8ʪs @yԬD! sRaȭH=8ne%2esڦ [p']RfG"1^l`5pXy0C!2f<yH?|ƶ~;jtyԞʹ]Z@ٰI'髭ضH<۫t@l7<8gQ^0`7U4,vSk5t?8iI⁲c`MZV4K%A`l+sq{˔h$"8MP^%Tfb9A67mb: ~s3t<9u!vzr8G4Yhn _r_/]V*>xV6s Cٮ|Y)ͺ/=zjl]㭝 Uxf+z eԜc }Ρ3n+X\*n%ؽ%v5BﶲR[lG LCKy!e3Ո(fl {_jBJv":gD<Ĺ%n?OϔQӡMuiNJZD5令?{cP iŢ&`-]EXk>N_.c{ Ӝ&*aŧI^,;4=]L;@G;;bAm`tL!Cr= tn0Ո4:wwx93^ūR @~{O:mg裘Dc6 IDAT]mϐDesDp^~j1{fmLy .RAijw[MŊ /ht]<$m^X) Gq"۲nZpD'*}^C|\p[*12Y4_a˃*}[d%L5ƚ_#vbYŭ\PR{&-Wl 匶n[*u޳<&]cpRsCL1xgΟ9~V<>}zl5Pخ&H^$u+bpuꡘ? zkNC@%by4z9a]{te]D>Fpa"+&_.T#YҜe$+ 8I?yHqǶ|tinEy>xhd6Vy:]?Y56]ooZַyпk;V!@v#=ԀC{Ixj{zMly>s>ks-5i&kVbI~տ4ղ\EQ۞B;5ڔF~Ct3j^]; +z= Î '@F:GTsms7|c33k̠9+rGܨ*;mܖ$fp+-/9JYHaW%vwً-6< <˷;D4!Ht#;ǣjP==wv\.dX7:njnKv]bqӚ+b3#W!߱DQ $:=7BvZuQ X7k4*1UEǧH*{yt"'bH=yf- UDIt|Gj4?g0cHn阢&5./1 '!|8ħ0LҔRټwIJ~_&.IZ$Ͽ^|U]*zVAk6Մpuǭᙼ5SUr '1m[U ٮ(7voIu@p\BϙP|_SCpz,^@w$ f5CZTcaG \c@G׊hp{w:Baf|,ŦC d 8e9xZ,|숣b]_@Dgtz7c& 6l08.f õM-yhmh"oiq-_t5+}]e_f8;-3S%kP/nk1(@1kgɆ0%0+D_Y#$1((J\_}ݳ'hYT2̳SjouWX/p6)x6($1Ơ;S;y:ps?eK  i4_m"PKr?$h%Sԣ m^ [pl3-ÔV˜qx2R4#=q,$B3*bd Be//TM򮏚Lb7G,2BSai+MQ"9_&92a-s2rN+H"a(nws*MYuj:Oh1Lj;/W#iLk ; o`vPg"BuHAYT{!;H F/+b; @۞ SsÜp96T]=U՜#\/}k}/;Yh7(2)d;ss^tF)a̹l IB0+ ;.' ̕  !qY[UaG摻Y}e>˖ A'$ھW+*OC͝3HWv$G= od1ʣ)DtoP&ś9ݘxK0XF9VlhoE. &P_ӦC< p4zfnMDV$E|{m֚x_4r5L8済ߨ$ uD2% QaE蔚N)n{S&q;96{[pyq༌Ўo]4m^&5)8DZaวHyb;g=z#MKÎ͠,3x(b4fY2Ep[luMEj6.P VUc~¾P1c"έq(=Yj/]k ^v7D~ipΠYqĠ\n8mTU,}*ftTjlYkk+~?wo*gNҩt_gV^sXy@2+\1i= @5w䧜q$Ғ4 p+?+G0Ϲps)Мl~UX4[%zV7PRit3+{u-=Pkg+s wӃq/H_b-HZǥMs <:KSzSkOON>)n~&U -*Tr%(#fz|&rm>>Ƽ <1ᑣ{(`ޒٜ-SRM- t2}n1Gqha`݅悵⣸s 5# 7Cy!ò6Etc.mdRf.qg{X9ˌm!dK{ZbB7xV߿ }T|>?ϲiyL=LS}l.c$u>1D\X=/~B/R&K"tEP[+혬^$)8v(ZN\&[y扄ٮp,yƾM(sd3MYq?IcD"JHIL[u\zosuYbܖh`rApl!7 o.3U3=E+qؐ+KG@AgqD{?.=d碃Ahy= Nw]vB6XE.ξ21 L1ژS#8ila'_?Int piutO[R T֢i9}>"&+Bbw5iE$udl{9/լq#}3gN )0O3k m27뽺 Kލ/%?~jDnƶ?R= #R oB%K$q1{y!QLwߵ>q-gGtP ЅM#cndK5P˅hB. ,\2mM|4uU sN$⢔N <-+JA' P:EH&IA:6h}\?VK^F8dZH3ډ¥%q{!-ءi_^qhR q ] r"F3feQq-l)Nbw4+2J߫D @em'ha-3ZD[ md-wD^JlY< 0;Cn*=FNoNԎ͓Fu9-e9v @0N,Hi!D:""Ç'e❦1z]K/l;bJS#lr Wi]S=f0Κl:>8ߘmz덣-̾e:&>9δ O+N rn#ZsT.&kVUW85zrHo'4R.`@|bE]sO??cN.&\.m#w PNyl|@)0lrm;> [.!qDE4Ě]0+Cy(eGD݅WH| EKf y`pO![ْr wy]:s6t>q\"el hl=XNԻPYbAG@?4ܞ $'mۀZKdʮCglI˖c';\FAzHY 6wpdq\eՎnv{pG v$N!A?g^ 8GQĥH' @|8!M\g uknq^rc1H8M%,GԶVSi-ڱ~l yrB+~i?{HLZ CĢ >JTB#둭=.c;tM55t.Eb"m339hǧhO RٙbQ,0 cIDSwo[Yhy~t"Wlr5 TtOMxSG*YCIKazzY',9P1p(=Nkd6;<\ywm+W_֫cԽs24 h$r@zjZC "!Ɠ/ea (hPWhdTm49fc@l1 XEÃ㑟Hln);PH sG 1F:T&́n9ֻzQ|L-j!CrcsdYė:`׺YolDa a(Ԋӛs@1gPwKu0Y7Ewo<opwet @'+x219ҍ\/WVv:- swYʡN9P"ԮNG-U# i)RPũG݇ĥX>0֒x̀qP_WWsSS]YGA! GUƜ [qằqG-GhTOݵqcf+>TGeY@Z1{qa3N ~EuUmcCO S&j{w.Cvz $%Hns担/DXhnFnM r&IZn`HOEi%PFpjtܖ3kp<̑WoG.G'(dEtzm踃%CR,RڙUq)tO8S"1z,1H|E%7hHF3]}.w[F =:v4Lȧhm%vCbD=XH T<s?O4ϻD>|Lϼ $wAQ?&߹x0H:z XyVo%B*Qq,̕h5;^Seϣ(: ҅z[ vK6 icߎbK+#E7+G]ޕ#ƫl䷪1su:s=@ɲɗ'JYjy; wn"!6%,/yYv@$$E2hb6@ X%3vsvfFRy+'Xj5De'ufQN<:\E[doWx8H+:e||>2_14]r_ULtɏ{-6[IP(9 H$0zP!؝~~s2G~yJ]sEv2k+d7]MK$ m|-j*P$RdKrcEX'dP'$Ҝj1B/p J$n[~ٷ <*$& xQ--ch*! МO:QscbqTwI]\e(q\>oK&_qEGZZ걱w__͗VSEJSXg5!{m@CYhYiʑT" `3ZUt8=Ͷ$9r%["f(0{uyDe0l-?cizN V4oR&X(|]f9M6Г 9?uoFLG "BEaÐپ7{ ߜgR>0䖑sV^A`k!bBl;8cJΰ9{hq1oĄ021Fsיށb&r̆ҸJF YNW4ONg充ҧJDtELY%џ> g@K`u-fÈrmdw9+{\f^0lK5L*\aՕj0q"Iy(H7~Jl|TMXK0L[A oNXKYwd~%#T):G/8Sr#󘧱shWLE^9^N Q3wXK/T."*._U0#v;8rDU B GG~~sxuJ0 B1YJÇg)Y(\hvCƺ*M`h&`x;D w].䡾afrWL *"^D/*F2Begv_^ 8P`9|F , c j&/5yAWD^/onT6GK%]l8rrMُ6i@(e%sPɨ2 Sc|˟N]k7L6RU?nsN3ȕ9Gyy9NPդox=2؎Je"8Jgm2?BP׭̘,oN*r>L3d *glTD+c m4ɛ!xZ U|Z;XVgiz<po<_[/*,O=@r ZxT$ݓm>դy7*|dSl|u*2f_ +xx8EL̈.+s%JhvvYJ98JpE…9x>;zYhr( ǟئcg1X#<A(F XJWf!E!FI+ڨNSxss`^Əzy1]G`tn1CH_r=mK kMy=y#4IgͯQufމ;mZ*ìQeNy8#GH*4PazP@?cG* MZ0 rpFh#eM{+N*똨u8 OX֣ZxeaUš< @Շ)6;^))!unG%zzRi rA17$58aմcQk5a[r!)+BO {-Iy2&REU(٫Ï/țA\TPpzx?sɔ7[MgF_Z\о])U/v~%8: !UlH?T9xbw1ʬ9ϏK+sPoj_ sBd6#~a0kI"()R䎆\MSd>e!s?d#Fnl;(NG xïŊ &u 5Z˺\l[GH|7o %=!=bC+&x$K:C|` n1!3S'f5ے|&X:`*<1 pmI5\-UoG e7%T+a 9Ẋiݺ3Fe|p/c6ʾT鯪y 9մI M.8~rQԬPF7ʣghF9/o_1b7X}t ֑J2"8x.`U} LUٜrKkvUo l.96e*F&oJ&)X*nW <eИvX$`%ISpKh0= ,89WUTOǬ%n'z8xMUTk,QHfTTjQT펅(1z zU&rqodHH^0vy0vQ/`v<˛f 1pnpc9ridxe{倏#\|2tL`|U>1#@T8uw7SEKјޕ2a%#k;#$M};z NrܖZ~iژYs0AQ"4axƲ8m2v"_G!C# qU\p{vj_]ރKrG{h RRU̸`[O#\Ml1Jym6eHizw?Ki=N .sRx}`T2Z)`1.tM:[o<^Xh8 @(&T껙)v`z@97sDϡi'"kw|xOd,AWj^iQH(Z\› pig W+SwL٠4lCT <4cձu vFoP[]GmBt~ N@%Ku}a[bB0}ְ@D " %@~:ai̲( }GqOy&u|MeH&*PE%ֻ6{v(^_1eiRj4YY76& cpQ1+ƄJuŶWO}%#U{U=x}~qssV6h6ȁmD99a14W/뷥3ق0T6@ (=Hvti"vUF2>3Ɣ@13&CLو*ѝ.VocEϧ ĤF\_?&RojY-<6hj.3ҟ:f >8wM]DꞾX2ϟlqWOTIz2BBO*mr+zfE *6Xu<_՛?Yc·C|ϪCǾhOYTSVrsC| Vc~l2m2_i|/ozmV$q c4NȈhU1H eƴ *ZlxL$Z69*z00:Y3eP5GLBQgeXyi|AnkHjt riNΌ0cu g`@/l#|mp;ܢs @jCTJ\Cn,Gd~lh?CGuJ^jX>7ǩ0:$ȫ|g"I @ݘTL!9D3J|3 3q1f$!:2/ZeDL&i`{! $BBHBnv`v;:{tddW%q>ɛgJtC$fhbJ뵖F>;~Es(2Oy,{M׃>9T<0U{x'9OwP#X΢h m#Q^6 & iCZ@Z ƓcvN EM*~&+ݴK"|дZ*T# T|h@3P%D&۸c=7xpJ)jXs?2a _nF2ji]fx0Dʑ$ĽVcГf:Mf VhRORwY\l6 E>:N=@nj1U1+JnHݮlukR IC;Zr?{Oi暠ASڴnK1eW#˛"]R>-#/ċ&$iRಠn.dЦ^Hե{ʀ2!c\|iIN xa.uxqP1ɾ1 cov\ԹtH!_Y?6A JM{5"1,+E%v׫8ʻ&|Dn=$WDǶÿ2HljՀ3nrd0E{m>C`-Ǿ*' `_ɺ\\n4/-R&s"SBvG}o/K'I1U"pĮJ\Z@|Ux(GWS<۰dUgF 0RvD>, @Yiy ?8>bGmibU#Gpѓϲ7ѼHeՎ]h.l/?Ց9"oyhq/?ɲW$LPZ\06aLpRSb>D4!ȽD8}c*w$v$EMjGp)h"fύ.lXs1U^]]u9Y"P`z^á*n`\Ksp@&/A~.@&CHO0cdgeY'ކ+x5_B`{a,3x-iNXgZԖ^:\p5&!V'oؐhTsYVAg&L!4x,$ oEG !_E14^FNpNqzP/_Nd 6zݧңn0ir/V|^= Hl㽈6+{yՉ&>{)v.ǀLQ3d8zſ{۲/.<>B7V0٠wo4 (]2.ۀtJYg*L$7+o~p> B+WCvgVOt;ռh!M$`7&Z4WӚ8\>qs"#2~A36+DD p MILUytQ=D&}/5pto;r_C.iZ?X]bWC\R:9m RXK#4a E3B#\V[90O\8؞:8 -/ BZbR ?R&qpǣ.Cb&rHok"|!J8_;A k/\6^ N`!(0ڲ#q$>-fyo2St@cj3+Y lOl:o7*5ٸopu_ʎZh=:`[{ 3>yG~u}\¿3⚛4KF J.z.6cD͞˩c (⻳z0 XdH'@l/W|/.q knDu'UhWu3-b2I־9~TVN`lNy(qؾs%zlj4zk `F{k 9'{؁ltz@H A(x VK("Q #sȽ2pA@{K$^THM@0/Fh ߌXO(d<. 2*E+& 'ynALg{? 8B`UtQ58ޘZo%r ީ:-y%E!<+P1P5t\>GG}%RC|+d=Z3; W3B&v{` B0 ]\V/8M'i7)=|axMK/ւ5IBt(Y1:?5$3Ku(<"(˓~(ʈ3Bv^ထ19qڢyx%3-Y%C @N"`H^5WCAMf ;zc[ ,KjȣvAg#5m ->ϱ󗫆0\k|3d>'减_4 dcfK`Aʫ R$`f@e/v&7{Fh`@ 7Hf/G/%YR_ aنt)Qr!c埢4U鐹v%T<41ݧ%:#iQG`|9W,C("1R'0\^ 4vNӜs RoZ`wpectUJDtO+e6c',F-kxsw -(jg |b~S\GT+̄B/[n+ |MyQ3"<0BrQiKb\d{8[|_N/PVtjndY4KRk ۝o6m9: IO%6x{Cp%SnH|9jfc<7Sg@8q˷צtchZϑ7U9w #eDh|f99OF\5$@76eT҈AinSTrh#Ƃ8d9C?PΩ 7'uCyM U+áC0~sTH l_!Όq5k@U~!&YyGϰ&+d 4\q*|,/ѰK*JQxcO\KKσYۄ򼣞*-TrŽ`q,._e윑qh"A Oj//V| >^R#_I3aǢ5гã@ F"2z Ӗzy)4Nz{T,=0K]'U9GנGYcGb,QGBOf`Hbyv9(\PgWzx)Mp\`I="@ݖ8]O%gpi^"pAûK1]R̟8>r#E.@VRiTBϠDNP{hQ*&)y2u 1Hzr! 6<bR"`Pje7x̸A&DE<{ h3gK6(߁_L b;fULxW _/W N-z N͇§=6=@pb)Ep $d8>zNPtW{Bf̏&v]ˤ;-=~2P> @$2* |M~P'QbwL%Hwhw|{9$=ΏGZTJpC$.[D4n9)V-˽MLw\ϟJQ(]SoIR3\/aijݻ|c 2f`J AoNӿnFdwГROm6v:4{[Y_W,sZ]Y~JJCyBZǎ,87S/e߆<@hfI[z>?=WٺN mAV!) tu{¦Vq^ym$չeT!xU:] n8j#Hia1Rg-q_6Dmy_$P%~ԡr2(9D;~EQYejIAJxz:U |O l>b"'2*N,Z2!UBpK;wX*0{jf FBם5h69g4pOy8??VY_ů79] pၬ) A2Pqm=^' SVW5Y-82FZ0Gf@"_qy.]/EB9¦قq56KBCzC ۇ-"yLƸLK8_0Vhh;u'9!aL e^d: h!ĦV9?xk._ˈ9|H^er`hHF*k_bB,`,N, buB}=aFl*2Es?K+Vz!sBA{m:var>ck؞-b j?W`:˅_`|*z~tcsJJ0W;TO.Uw*nYFZY ii{_O&!5+Rr#GhUn8?G@*c *Zb2LՀ$3-2Ŏ TS$1^1)NuW9̪wJ &'N=uB3a&50 i_M{oAv<ѤpPk;?XxIJOD46F̡kDEeP$1 rЎ "7U"5 !FYt#rq4^]3!হxҼCS X"]5f= Ώ 6yǫsΩ .lr#8Rqr>b+berNY1I~de8 WN#9DKT[)Nb"p_rV:d6` fnD# NnCM{:9?Kp6"b'ME-t-zqp9{E&5WJˤݳ̯j'BO+Ex5gP -i"McEWeT&pI~m)/>'?߸!m/XaI77T.9r%9{+UTe֙=5-fƬ&YPVCܠpQ2 DĜ nZwyG#yJ6'ͮ<q{즖k Pp ɳYVDW,=Eȁ\%8UQJҒm@2׍#9? U Tǥtz)sΪ ʪyŨ*HR7& -,+Ā8t d&kc1<5Xs\؈OٍR>C@ӆ^{t ŒTݐ8*L߂"Ͷ\[ Hl84NGh"GːVi=35O|xy+Tqh!B1cÌ Cd]iӀOFCX RxlLtTφ. ~)n>mbR2p7VD_\I Ms?J}"V+Eh艖psttu- vC!lFSaN:Pe4PtLCk. [v= 2iX=K#7ͼy'Y4[H1b4ĚnNd/9;>Ix#'/跩6z;& *q[t]X3 pAA@-K)f@aGgQM|~H*d%qFx~Bm;0TUSӦ_`P.PRuuߏ6 U._;Fv2g9r u]S7P cv7fz\1eC1]|0H81L.0ۢ *Q|S?P}?s1cZy^ \KPU5Zf5dPSc:^\֛뇈%!+'e zUٕ #Rtk3UB.Bs^F@^~baZS=na)#Ō(3$3('6<7ě9"T993-/c _W+JF,걀vf@lu<%^n/6m۾8 b2<6\5 8=R&j$l` LgFlQX>Yﱢ;-& ,3J6j bjz R-&  dPYx?*](GAb䲇 ȓ ﶲoh6+ف )-m_Xp)ߓ ̀{>;)3nxW/7t#5mU:w-J.\M/ÆX/scfP$e] @q|=3B_s.R8W3~lGs~真T>`*];>h+S,e={!)*fU5D@R-)dynm h9 L(#+FP^SGo!ҾsU1nՅc)Oa9}FRABkᖥfЏI^oT?%@((_/hbQߋk7&1)mPǩRV(UAT.f8rC!C>ouI\UP:iJN2.)m+W+ 3*L?J=|%|7sUF?=Pbk ma/ة `vʁ/Pł3%|ᪿŶ)sʱ6Y3fW6HX 2kaBJ޹lGZX`*\~iIHN,FZbb^: )kZX= |,Fi^BJy%\Z"fIH'b>Ϻvnzx 39(hlCB,ǗQIpEQbf ߢL @r&Tg;vdmv ?Ǿ[`q [w֯"Zoj_[2pJv*“0Cbۖ淞sgz+3Ccn )#"AVl'fgw^)q'QKN|xtv Gs?NrC41z%d& DNU茑pՒI4prLݰ)B6}vyĞۺ7 |nH }s~ O~. <.zMdʒvF+5!sK^`+sqVQܞ9TEf0Wkݸk-QjE ` "](RT^fp!t|$hvG=ff*{{-y*KY]Ť4tXRKД#<?m%<U9ޘsa 6?:luRkR+_ȯwj S(;#J<=Q˄_w Nt[g}$cͷ禯ס3ZwXdc(f!odaے&tqF[``נ3#u!]gEhMhxszA"cܘ>:0ͺʶSRRF's,,%*Ui&o%+z^|/^ W^X< _($4b6K[a@&u4Q\Y=Oqd #v '.Eϝo {U1#13Zu0r~OH6D4ȷ4ʮƧϏ3Nk+yLA?~@V7s8X5ҋ?BeEdf1PDaW8[I915we'vC>@L 7iه"z @~b6̀p?zDQ>G NJ_2o~JǜT[f%Ay-w-uYAx!z;5 pv,ۂOiԋ.{ "m'*$R9I-w4?տ:S'QFć?`ZOVHFg-;ЊW2.$і6l[[$xDO/f A SvH,@fTߖeܷyfseg@$K8bkQNˉUr?\.:s+lI 8zw]Ν%8R y v5-K*{KGЯRQ^KT Cf 0NLMK*y`KrEx/ 1Q?L4;añ mJ'O;ΦW/Wޮ#i(Q׌*jMuGF`m2=LJsm#~?Q܄1 )pXű:G\ČjW`*@kH)$LOy|Odz?` rB6ixj3qWP8buq֐4 B_1XcΩn|q-xWZF1 MW$jdюrsv۬sv3vLS`?:L2Z+LL0)gf>Y<)|4Q|4 ٛP H5 [:Bˤ0`WaPfE# i{?kW&sZGIOiIl.RB j<,iE#S Ha|S5MnhT-.)ܓ+G_]^2"!žHAf!i1%ieA\Xd$Nm^p\9 8f>TdI%Kp"8pԂN^4 ?Ek8G u%ݘ?F}$2\&ց1Ln;JVTT%94s&C@ʅ>UmPJasotyY]9tQˁQ7:_RN_q%%ap*)dxCrZ~<}=邃NlJ(:qELmKDԚrdqXlpB ?A׍lth0#%kS ЄkU.P 2K4(ug)Pd&ԇɯɽ;WoD;?_ȅ;|Zcbs|FEj.?%@ߕ!ktǾ |9[4 t_ b PFՖ~22y.˫&k{Avs9rǝv# vqNXȥEeIk>j !kZyg5M䭏-v6 4,cڂ9T" Ԍ;fA I(Wivf*u] ƣG2}LޔرZ.Y2* %3^6jEM\|I?d]ےrDKc9-%jʁ[(*zTjznc: ܮ(”B(TcIKA:ߞujhkz 87`\D)!,bWnӊONqQx!n;yc9ZMcg4)!e=߉QG^Ǚؽ&ȱ2r:tFSA@8 (fgʽjlR~dJ+c!_jJ燥/G> [ tDcDDwhazEFO 1E"q{Z46}#P9YkWZj}C&h@"*f.BʦqQ/r2?;cuUnKjs~LXl(PM (aA9>~r`r0^{0(q)nH\dPZE6UP41(dg3g-5ZpZLA@t`=Ӡg\ڡ !L@{?o8 MY:k'.f03{fw0'׹Ć&ּ̂ édi]IDE8#rGX6_p*jrc`MQq]+ZJR (8-zLH dA2"V3Sq(_'%r]I\|z U24+ue ̺J35K2XEI7;ҘN!N)sRjc'#x o3SZ^`̩7\J/"!q֧raYEfp}OMyWR)=u F\QY)Nyk6q%AMb>b20Grfؑr`0@*a"5rM`B:RLWQyrdĆغ\s{:s>+E+Z0wkW_?|0}ZoMV:%Q]Br)*4kfxocK[@TE9ST$k, &v]hA0UՋ0d lϰ"cC&}`>3Bi+Ib8TJئ&$1$9 j璋L#B2D !G+&Ӵoy/Ped8ّl`SQ*) TeU9zMvA9pLCsy]cJSXT8(r D?"<1B:Nj U0C5^{p}{E$i rǾ9jYXde:5,0Eݩ 4b 1H:an7B|!mq%, ͈ Oj9\LZ[,sm<Ʈvҽ_ |*^s$353fߘռ!|׫u>sLYq墮DVgB'oU7r kr̉ZcDŁsc@2uVR|sb%HOl)/7M1;τ|}JcRoE7 yiwՅ3{*U@xcQ~sʈ.ۛO[Lkgz.- 9c0y s\HLAFҐS}P83‡ o/ۉ lޥ723ӼQ 2ڼؾl/Q~UG"lT39r)ViBmSUĴ*Hֽǐ- [Qmnn90_^MKtʶ1 qYg#ӯ.)W[Ge0RGT2pM^0O#Ec:#B\4 ힱ8*ۙL߮}P}=_[,FG;_j#Mn(A>NWL-~|V=1~FW[1Wz.^c.U@C)xv_%e~Ԭ=zǃzLsBYJϿT뉨5+sh 4|,},CB!% h"I'c]uf^Wp#52yqAJęSalҪrJHZ.Q#}_`l҇3t8J}e}ҡ:dy+#ش8XTCiY5: 2/)V)%5<. <s+"(FOZlxG2J E +X-/< >1 3*+7>[Ģf>Hk7M?;ߴ_&\Or?|Vy7‹%AC2V!}3)a~bKDo5yWi|a+xp/M`a-+gRj `֓S69-O%Bn2F_-KYr_) !7S|{ |HsC b)M)>+FYLi1&?$eVԹcKrԯ }})KČL2W;4S!_f 7b'z$ "$ǽ˅X(IY 쓱+(xe65gOv0}kI{l$"ÀH9Ic&LCTQizQZOJ2Eʲh7ii;Z& EdkGU xG9~= w=s-Qi\}8~b{,Jdia!W)r 9BE7ݭFJ" L4}7fhE  *X;,(C`)/EBb&. `)P'Ef,\{*sw#Ҳd-@|]g IDATwN'B%p.`dD!B /\!e/7c7Zq+Ap1O *"S&o(~T/rAcKs27+|SRt%DČxMNod_8^.u  |N5 8dVB:wnNE oR@彺kZCSD T&As?pZ#z9V6hz Lyd&ڿ#I-6* 4ekgw4dWň.Ɵ$Ȝ(:V;-'gTT6K>[` 1]O QcTnKl[ʚ:*60=[P[ ]jk ,.OGpGL%>CӦ&;U1n!aZ>|PDY @˦!}Lu8.<|]C"p&V0zF~a)dZ?I_wg~j0iO1R ;8_{w s4K+m!(KgSQ뭫z٩yU"0^%Ѽ.?S4ӅG)jrl 缙k{KϪqyjR 4ʲ<MwS|v;Q܏No,8$ţϏHFS_~-֓^ѱ$q<̯-:?5|7qK ZEƘ)_ѡk`lL'馰t̎LWZi &0~(`Dij/, +I"?)'{_JpfrCl-n{Qޥ2fQZIOfźSӑ.BU{};Q/ P3hZAI!0i؊;蠞QIE3r{,aF50|ż}DQpc;BW3FLrɢ#2_)*ZFLdzxab$e1"a!v9bc2 WC]ՙw/Rl';hf@ C^ڭR 1s=8J;,(:N)F3үZ(}bD?(a ᇰ:o .l'q\xvJee55Tt.fca\r7<{F(H$ǗpF #2k3&|5Z?@krɔ9xs~Zdr2HT̟ ćHx sϵ~jrչQ+?DŎR_b_ <+߀<ƞoRa ƛ&`~1xLWI^@OَYeTbdI6z,qh8v]qt"A1jNhfOr">|xvIYGBռ&e0|b:4-F ) I),hs0 kj.:1;Zb8W?֥vgc3dvL\@p{&SyB j֣SN d.ud;͟/#cI$ǮilVH FBSd&:p==k PU:‘G]Mf҇-CBh1b,\~ќ3G>dvB\:RFGzHܥ' PZ&)JJ%#+@ɪJh(A&_$FmR _RGV4*@M=6 ~_( [VAbH7c-=E7z=gXuLPUǁu(׭LA]w&eS(%7=5qt8i{7 H,=5QwԐ8rp$~ewa?gшoP_vU^!*xB_7Q4wѰ{JסGVQ\ڻeHH cklts =]Bp=lҹphM (~vzn a䝙ekg"n#47K-8婇;%u-CXsZi}p|U*œ_&I=Bl]mdcWjZ*Ni-t8;mL^gqfP+jJʦ|#0HuF@*\yג G'Y"+x-ܝbZ *`1t7SfDEqƵHoQG?5:_(~+0$^璓t]rhך=yHeL2rf-h*j*>M^䋓1D:Mh%rL^^ ,y/߇Zs5 FFzI3 .ltj>xBV`'G&P. Nglj 5CNCr hؐkTɵPҤD J2E붟eKJZY.p%; hP'8B:"`Q1U Ү:G<޾USN QS*+ėop} Q{" AQdGkUfv: %w kZ͗nv4ͪjUdP(QCy}/cSˊ)S(sr5Q@,F56T[xA$}"F"ع[9121pq ÿ ,?Nݎ9{ 8/صD$ Z]?ƾrJ,i5h9'<̈́Dmj&B0{ANeொ 8ƭ_73۶D*Q]Q=泖K(FF%ڱ}l`1eqzP%u$G/0ey7\f[Y$HMyDm={n,Yb&j4\ЂxٷKaEJ&iN9n"a,Jd]};9?H1B hcc?"[Jt9~2I-Z:?TR^FyF!` m @/Ɵ.%zT td @a .,}"Jb@ Cp}M:S$1*A=2b%?fw~C͚*6z7NHpU+p3H'D26#6[叮$'Jd,`4JpW\-?L4*֔߰>s,xܦ2c]w@ q֗vm.rǏb[B&<<;25XFW8&92v1Da⊜{#ԟ ^+aEgs0)L4"3@FzB Ch/<͎@j@ɉ.ahXs'C_Zّܛvik`9&!T>zŲLp; rw=:@ORӳ8+C.j.U[I*|s|+b|ƨ~PNJ~ޅ|^ Mf#:8酣bPup!JTpq]^㺝49b0--4ևAb*dۀtI9f~̌ ,,pVTj)5w('Yl%MgqSY|M;p沂Ќ/ơE7+Z9 $m@ј&dn^ɥ!nPƌۑ9F%1斡-%J^>0WɐS n计c9&Es4-kkBbz?hF{"DyF>c`^/2Hhm&MBƯk;,f| \2DEe%/1fUrkl /]$DuXV!(k4"y&:%mBoV9mW7 (3)E`CxNHrI2;]B/zm9oVkhgtj6"HHe T A_EiC[+<KyS(2W5mrH*Ǭ)g D8  \cq֟|ޒqoH]}+_92o~Z|iQNw N T \ Fpٌ Xu%;vЋ|:FMXȁv XTE[k=ujPYiǸDxfW;)xѫӕ9cEe/: IDATC" \W9IA\JH5ydjw)R ң?0_c*wG>0wþo&_; ݳ)5^dr%\-ȚcH%JtؑeT"QƳ >i {y}* J@y[^q1lCw邨+e6Vrf u2n0079Qhs9QVVZ5b Rb>vf$C{R?)GG{e'Qb!*ívVHRłKzT)&e 4'>?yj.3J ӀޢJ;t+)G8{ηy<{Vǰ+U|IҙFxJGesѲVp{@J+h mZWIVK2(&A+ "J+r 1329Nn.Cf^1SflarYRYiH;ł(k+󿨡s;|'x8m-`hF3c2]0 8M+dq4k8Y`%F.72V߄}ް,i}[آeپ%p(S0y0+Eթ}tA.+@TE!%EORƻ30`;}c9tw13꫑D4ޔ|{{}}gabYkr&^"K|(TvBF5抃-P+g2(%^GfDr-ZMh?M15 -Svz< T) r=CA@NAIəs5)d2mS+36.59#YL<`{d̩\=sѽ9+]%R<3P_vHX.,L GoD51rR?#d%9|19m/>|!Ƀʎm)mTs/e.&pC7=sFlXZ>!YC $BNn.S -YBr-뚐K ƉJ?bHJsekKo;Nٱ&jƛ ,6fwZ%寧3ʷʌ#7wC @ TDQ,5gyd1:=1$.e4Fu-&3_Uimͅ Dq")fԣ0Clz\Md_SOnY3z]72#te]S]Ԕj8ytڷd6UR/™vZo|k_{ rc!ϛyRdչ[`XN#HZե.͝mCYdgom_\|k;=쬠=L7lK/tGS2 @1gؒ֌uC;L ]) op(0'/W0n^H_E<|,O3M/KJ-Jsl\s[3кVX~OO! = "D,qώ}Ko7?-Q1 OUD,G2zq侵{9Up7LIr"2vå0՜iZnc5Z<.xAU4j>fQVbIXe3-v~+-L'n<.~"zLf-;v~7Uˑ(3_8:<1^"!w>>(0 y- ᑤ]iVxt"ucn#hwmXd@ǞUD " Wq]oT y",KMe_OIǒl?-> !YE SbWFDR'cel^] [*Y?vVBm`d CH2@S8F:>_. 2S (Y3hi ?4"oנ'F*{%#eD (H 1^c0}#sY'1`ޮlT/K):ٺpK N֪JüTf% i܂Bn \a Ol33V~O;!bfFt- }r_~#ߥT-LOLsK3yCEZI 4L^nDbu/EYru]$'ҧI/?lqs:mZk ä^'@KgUF'MK#DC!@8 4ivJeYk4X;#^qʼN ptVjQTr;'[>K+AgbTj?; )FFyg|0Jă㮿; l*?G/ގ?Ƈ+-Fp(:*]wYȤ}ڰ%nR9E<bge`8:!LEr7N"GY-?Mq 0ыzQ/P@ܔ4+vM3O- JMby Оӓ;bzlKG{uT])uCIFX+4 ;3EjcXu`h=C8Qك7DEJM6UOAK+w H[ռl|F!]i#Ex<m lVFZQI.vďI:OK,-.#HZ{Ao}ͥ @ݠ7+_dDZFd;!(O[>w<.f#{}'I8Ej(Lġ9SwL䘦ZI1]L_@*f;9oWgq<+J_Zpd؞C&q'flu{:zEjo!}j$DŽ xcC҉6E@JX!X#^%6*[)I9ϑ% M+8ר"h=!滍of)brgoTrhe`cJqZ7V+ z{:mZV3;&Y|ޑ\O*r }̍xOYN豮 [@RU9,&uo'@^oзp]/hCZ5)z%eOGU~Jxii6u]2iD#Qbbt+yCbǽc[>o,':DZY)M"MGWBL(v'l 6C癑,c1n$:xyB<\n7a[@ˊpvx:; :lqy*r0>Ǫ%[v-c$ĥy5_U5\9dw(z߻;lQ.qoa:z+.X3Ql ȶc`\BL~}hjf5!vz*aq$z@ ƇT.b"_؊5J7o* 4xsHT,$T;M`yvk 1t& ʗL=&,:*ꦚGtwAn\?mlگ,mͷNTeb[ji."ys߉$]R({w}]Ңr00)%58F=z!#WBC ;6vܩ5s5k;n( ;ɶ m&N͍j_M2uÔ{.fK1V9rÃ0#a,v}=36Èl(q(+c}1!9!7Y=(V)='#a] % 5qI## E,G15o +U4BNpcc5NX>Uk9zSW&`jsƗrWQQKqz;:9s)>kGBcr2(Щ JEcZ$w1/-J4UO<~y`$,|¯MMG [yKP=e+h&014h\gw ݋˜(C&0ѯ%"?Z!/c68mDBH1).mhG@$q1.uE8Ϝĩ᭧vnz؅4l%L S1C(+ Λɔ٤(F7u7]Yy/p95:rɡx<:cnHoWOz$CCWd=ɠѱ\% Mc%f*Dq0b$K(`qJ #Bcf”'?-Iꒃ\F549rR,9&"1!G߰| /ߥ7K}w?XY+W=v\&O&4P}1q,fzthђ-s&\3")Xz+dY_"(:=U5Qc+25LQJ]H$JLuȗ#2rPbi[)Ƶktgm`ԤDSr!ꐐu%@R~di^Ԟ<R3!zr|pzqV(D$vE؟9D7S?+j8,T+=#(Z`LP_F`1\drҀ GufNd:2 t ߼RJϒ#5MU?}ļ_Er VtBXI|AXR9L ygB3B!v,of+w\Dڽj%qWF<"Be՛xUnl9 g OdUF&2{Pc6[c.UHgr@$ aqeȊ\CsTM.vLҼG`MF LU} Kq]K7%Ij>x%+l<>, [pblH_?O"( 9*"jTnqTS=ǙX([Z+~/([ sIuUm᧶"Jc.08\ȔJo¯ P[ \$CK8;b $P^d/ʙQ'X&#x+Ya!b1!3^uRvTw&Ȱ|}KL̏FkQ*EAMS ˸>x$Bpjh(ku ů7͉& (F3ێ㭻J0`^y,f{$ ҭI)5} Bh+|y~ҏwpzx>6sX` *.3deJ _F;j3 ZS`akl̪"r--l"O4J5F'Q1Z^$"m&YOތLO0DHO{w6>| ho8_~ͮIY&{jrއmhq"# A d}18 ۻ3Gte}Рިݩ.|,FPR](&Uh}cJ{Մ IDATpM EN$26c_} ĺ@X^ddFK:hs/4 2u/,o^^_op bSbV8&T޳7>H&QVp~ |`jbO螙(mV~dļ))4>6[2LKw˅IYrhDx/Mo)Uش [~VY zzU";ó;0}ݍ˺TjC&My_YyLTĺsLv%wW.aWHg Th;ḔՋӝg1ЌԘ"5 h..@E7m]*e- fXSd_4,vb8ݶ+׳IJ1ܘNõ9`e5}aX-U GJ?{X a[T޴CܟPPBoZ/:+<{;@~GzP߈Zǝ]y!JaNƊ}22l/C!R/f› a%i &jap9+4@ nQfcYs}|+LLAF .T/]9%?Nipگqq8g>5qw=1VgtLΝі+֕yJyE(/QZs jt߽.ԕ{yH߆5 .]Ж7sn]E겱RicQ iVZiXgƌtbr6:_5䩄e2Wu] nhdX#qo&2ꅔn 4sE.g]<Dgd 36w5p(_־ِ{#cBdFoOc*62pXZa}`[C -,9M&rA80KL昿tWD Zvuh:̉1КBigO+vsB:ek{pMH7`;ʡY12=&McmPS`)X6:_7-?:Un:U+Nz؋5"%9MXzRތ=-z:8,!R }H*x|}b\dUD+ ѐ@qէ#\Pya͍Asr/Ɔ="tTL] q Zb~os)],y]a 7&v @?ecy9clN-O~e!Y}$1eLxE9~cΞK +iM>s'1cƹ3EX 53uIυisSS@ C~ KwRvub*k0,D|PO2 rvOG=gB+Q+]rk^Bҿn9n#Qŝ}bE#m.n :[m[;bCd?Q^ ۘbSTILdm˖ERt~14cQ5[(|>sf/ac9r^5]#A[X ə~_)\̴F`TuC+zE_ W]SRW|9jg +xQsGxrPYDA˷`|ŏy(3kg7^1ŽP!iCܡX!o,9J5j'_z gt7^jU@2u"e*Am,aN_^aaX3z*u[P!JL+(C )($'E$.V^V/`%nɘ`nП#j _k+֔_tF-hij xF\I"/&#+aZUd6M:Ѓ1mbX@ ڎ7bn#g5X!S*au'.3O-ȹt5Ÿ2Տ™y5~箨E&!E$r4AVp\p"pNӰUtuacI}HC.m1FmCeTQ8nȵVDbd ĒƤt QysDKH63~ j<6.{SU%8wL14Yq5 Z ͿqlθԦadl@OÌr]9Y?ϯH%:-V)vLu?&*05t 4swl,1 DQ p6Cd$|j'fVǹ90g]PSKe乫lVh+纮Yƈ ؆;+wTԾh5o/CǾ8}Z篏ⶶhr'01L]*`CwZLc0gn?"DxP4ǩDG]ϮQ$%F~?=/ܤ ]T(*;шzn!Z-;:y"Igl꜄ުash`f'7>pMw+J#X-4mAVYY`,-+{/_r&-?W ˒gi0M<&%f>ף(T/Eܑz T0ph: ("}X3D=,mI3o%{j#"u ||s9!cwD>1 _1XusLN6wRM3s~`rMfj&&C>ץ\$?4iRє|aipWD* AKh{X6s>Uhs@RMӚ9!!s*Lא'TIWO[xC9 Nu3W2 4u#`M`[+ aH<#8Ӆn/ZkIV^ .w_ ٬}yp-,W8' h߬{X:ű@9Q2*ϮUc}_\u(M*m:uXTQ=q7qnW=Ie 0Дr>U1oy^[EhkI994dE_\N1xү~r9*e?;=xB#/l߶=>S `^̒Do@{kVcGpCs͟ByS{Ch3jv3'Etͪ9ff0[ U`%כm= v50Rqő8 **(k%"?G௦6zҧs5߄yc*Kx967, 6wɄOXS$Џ[dz<3γB}cg]{`r*\̜S<K*²vC 5Br*7m!h<$L*\,[PٯVư_<6\ڮWk3$|> D8v}Co1e #p= L(v_E뿄xUmG{O J kŲ,%bYKr"5~FD_DQlbD]ջ'Br??Oش5=W i4W)4U䯌.zȊC:. ; :-AFX'ş Y /ۼ𒦑wFGIC&b{EkJRQn+\Aum 7]/guy0w!R\K[\mȚ^2q3+Ii Wzv]9餵 /i>O<̗3aW,`:Yʿ6dACڅ: 3k[E g=}n}AC@ cr1潎{4jgwJ͈#9pӱXb1Pb @JөꍮڪC"j{>XYrȔ%LĮ3YQ*%L ccL C=|[w&. ٌIӨ~g߳LOPwm% =IJF>٥{& àG#ѥ̘aP,o\sx5D\}- ޼mLOT`\ 6 #tv[';:*!#|Xx e<~ӕ ز`7.AR~K`(FŃ7|4o6VƳzX-+**rIQ.n-"*oZW˿DF}\Q]sJqeYq; b*uf^IUܫ7{oV"3 bPA?R5MCsAhJ9і<äXaxRŷB|S1t#=o ɫ50 1oŽf5;[3W B~iList/ToK8({+,9mK[rlAd 'Ovo8~1r9}>7)>Ī h83 uH4L|m#*LpuVSC>YA&<זnٹ֕?T^ U͸T5$;xcY4@Mp|zߋn,cdV"2d]1ֱ?0mƄ昌ӜkvbXUš7Ce]nSN@֋r;#g2<1+rd,=5 Ghw ̘x$$E* 69UC>JLma뤩$յRƕ&u{HCo7g rӃ;#6$&YzܣaP IDATwW&@u18?{QpًY"3d&Ysrui>k Q}#@iԘj Бb7||m6,`#ѫƥ;95Pmy{ ^E;:&r]C  'Uxp\Y%_ic-t*Tr(#}3Mϕ߈Ǻ4q}OVFuw4yF-QJ6@%SR[T$rzm9U@ j*2̅ĞGg/^ Ʊ+,ǃ5x5wEhlm
,@D(-f3s: x:t6?"ÂT6b,B״a[ZŴ7֬`T/Hys?ą"YI:iى#%b/Š':=D-V;?n*Pr%aUMX=@/b9}[39|y9ax%cU.Lp^/ͣ 'g]9v}G梅f,Ɣ 0=]iL˗Svf*MS [:(*!l ]|tŨ!C#Sжb A:=j)?Q1\՟߫S摣{Sr1:eI$W?XA̩m# q&v,6ew P Zf94&zrȁ`eo'rSϝՆ4'K_/H1L=̛zMpa0ϑ [:v@ޗBvo^\Kd O r"V<-|ZDoZ%t2KM$tPS˴l}xHf;ItB7>lKKm>2bG j}677Fy^ T0J=q-.A"#_gb-^b] O{=X&RU!}石.g"Œ"PsR ,В^_\[`X*݅C6TCPFkÍ33&"_o;60^(4Q|\=Z][Y$dv%Ԩ>~QYwWwHjskB6Esr `/Tcm!sV^S{?4Ԏخ3ر웘DU٬{B+/8|:2'K*1au}c*/#qAgi\_FMvu@uߥ,LfQ:Q}ۋ C ;ɥq]b+G4 @)更C[L2:m;G}%6>m:bՐ4G螋bbZF̘̽!PVwAc=aP^]k}B|n7U3ib6̾>s`*6u G/ȗ4@=:~YIcq. _ǏL.lv:8:L> kڲ"'l憿vPs1BU*|$aH&9Eὖ\Yr3mÁst"ef8ŐFC89Y2EF,/5 dڌHEǩ:y;zN<^di㚕 t` Ο.MZPj75 >s BzK`_ыw5röq;ϔ̿ u6aq=U٢<ۍmkXCF1"ڰ#o/ s(mlGpoKXҺW=֟ec*=Q5ڀh=,q}9.YQ-yEpGv^3]dL@PCP鳁|Jr qܵg KX\*x(|<47U7a8@7P`IXg*l0ߒ7q-Kg&lϥ< ,b9s%btD1c E[ tSTAIEԎдЗH>' _[>esf`F t ݈,%$unu2=Fr\u8Xs`<1P1X%;3\zo%)< JQ2YŊ!gZ2"f5TUF{Vlj.N,݀ᦚ5S*?"MrS s@Gu-JS_Vş' cL (֒ ]2 ۦD#@+YVp] ؇8Ľጷ!ϔtNo;E~4^,<׵.5CiBMU ko#8gXk^:]Y3x~1#RXNWtä q9Qx ={iq5$heT+zQCՌu.l7kwTx8ߙsL]TA7x W O1u\B McGY&53$6Vߪuxȩd ]PIID*MۨII&ffLD@ j MpZI'D-Ò+ Fj \Ͼp#(]GGGp-hlҿBsGI9A[:䭋g8DEC0;ƭ].,":F68b䯮W>}\xMP<6=}oI铏`TlM'&OGEYq9Ԇ<;"p8W~iZm@9ᬭ []pa4]ʹryryƪlRO %f cW(w --&[Bz\*\(>Kh$@>|`| B"NT 5'}Qׯ #ɔM6m-xcv 9&}DnFjx'0Z]:>~a;8?$ʠ]=@SRtpoX<oS @BJ-Od/"X;-9bX>8 jil*`c} \$6alB> 6b=lj``J265U<49{WExf[h#O%qt[':s?秕:t9abHKct':DfZ&`)Ȧ]LL2= Љasc 2g.zB|Ց3j [C.Z8Xqgz~:Wt! q2W&PNc-~C3s;Ue6i3d}*s&4Y y9c%ef헥[œHb!%K܈UU5a]|ү-cZ$ߌXF OYKzYWj)mKJuxk7J|y&A>S~TI)\Q#0㳳.5:c Xpv=]џh0dh!]/L@z5 fǥCr:2>>RX_{qEs߁^mY,kYxdǮjӶ>fk; 㜖$+O8)d׮H)1WLͮKՅF$D:bvҢ1vNiq8W&X7a(+% m@ᒟEAkE˄ªIG_a4RyCf@wx:K̳QV{VEe2Po'u Zӯ4(X u%3LQ{G:J>pʬp@| lO(.NI3RgmƦ2. Wߵpuo(Zz)ZvmQ]Qs%D?95On‹Ҫu@MJ:f* UjV=Q'm*qf㫔Pm~y& W:jssap J`_2ɃJ-A.[A0|>VUB(zZ[Χ{gHE 9MMuW9& oIlT/^`C|UE m@Q`i8[@7'[jڢ=؅j5XwE WH$N%ceAe%ʭ=b7)'1MLՓ^Â@G,) $tx~-c+a *rS̹6F) io.i=撃V+p69\^Q꧖LI]۹ z 5 <>$`+jD.صӏ3Xjs`kK G^"U✻/$*l[\/IҬ~@0-sY<G]]gWgR:¼"$aez`gEξjUv;Y32,Ɗ=2ĨKgE.{~>=ϵ$6`UPRf=-RCH**J,-/YN?%s8{zT꟒}T5I<ι"t  $m[L}YJ'H|oWXM3i)ɱlU+0jA\:x˱S{P#(#1<1G@"=\@Y\xXf/v-Qm9 pI8ƀtz |+23\Ҙ-LLc.gܺx.4HzU&Z"~V1 YuftEw+0{on׺Uj,$C\ָǟǟs."gE&W׫ѩ2 #W>+vSL1C|IWY uX=$d6tKى-Q(:O1wȚ|PYV*cۏ/eо\۵ϵ1]`^g_9f/>oڛC o5Y%'#X)9ZV "$*=&q>nV4.2 ~8OS~s7է1 xD#tx6,cJ_M6%֤vhi(Fxv dcPh_|ъ`fxK6tejY +l`L₩x|×5h`{i "* %@؁Z s Af{G}Ǥ;%q#% J{j!VaUp^w{4דTM^e'$tԻI0Lz.UԂ; <[ۻە *TfQ.i6J;O/źtdA(d/տ= f5ZX @PW!2Ӽ iLlok%%/W/%h:|*o>m f"ً-hq4{++dIHkE]yxh@5 tm,i$==Hee~87ai=@T9.kEР;vu(+h0qG:&6s4z^{Mta"tP.vgCe3J54hs[t'4vIV`c.z7G.Ӫ ܿT2VU&K_P?E/_xk6ߗ'!Bg3a ߑ06UyˇQ^i (4UOQW(ɺ1U1 FQ 6Axr sSC904&e\(}qSN;VGy&_q{Q?Mݤj2y_ D)PIOV*bSzcK,3IF=pF*k2#S-xIͳ`Dl{SK-\:9*lWV1s{)8F[ 5H;5gYKuT.2 ĆW j!rjkIsqW~4qjp-]).:=nϝ5jX/Dfȃjѥ N0[-JN]/ 6C‘cjk ;9F_:{`rV%`,]q:эӳ(_96g)CZ{1 MK6.0"5|4F[k1aW^e%2qgBlD\M Af{_"n)t.tă>:n1}};W U^#jZ'WF o # >*.pAemNSx!ڞH'sYA^!)9Uv:5p~ `qҹHo_i*jirhjҎYޢ緧=%1OJaeŷ-`,p-O]UX\ע'K+UÎ`3`/yGZPac 9Jj>)U ;D jdt3JCf Ċ?d84:lf>GBo"t]o x_44M.pjh7Nym.3g؉e)Xio yOְ\NaL+F@@ݙJaѱ;4EoF{_@(WM߶)/dEڇP5.vSH} ^)ݏo80PhS%lAv)=buc\2Y,<+!*dƌODƫu[a[K _-67eYC~Y<9- Pnx7Jc#v*0( q@69VC2e9PqkG<4}V\.FC')MV̤<(g%I, J(zYDvQ7Uhx1T̢LB<ಕQ=۱/Ćؼ< 6𱻏1墵X/H=ۀ>0Zb0^a \k=>?@&''5H,`g,}`xqD)J~os6)ĀÈ^r,e&E^ϾTMQ<)&лL&n]Tt$SN~K[S:UZw>a9qU`n,& F g̶5TnsPrRmb]-*#ЌJT&Ҝg,ڙ7hQ՘5Hufd+lɘcCꁬM~_A|Ub7}̡ts:]UgeE(L< MQp S O:mbqgD<+_PMi\ 6^#2C癚(=l.[ S a_{}|gF,DƆ==b`p-[ ]þK5/g޲ eMH-k/aP&RG^"[v)[VJGެSaZp97( * d٘?%C9=drc.`Z&Z2/f]AeprpLHy3a91;<=]ՕwhFW9X,X{A箭 iQ{b^p] dPBU0 s}_C3nLx'o}a$"cLj =Fa;yxƒ91ݧSL!4'E6f/֨ w觹Nh5=:+jymOJJDfka ĶU{;8mg6t~rǵ!]\ ?`@hݽ ZtW ʾ ꆽc+Rg{zu,X}@8R7R!p|Bw|gop{P_?f+xEF&ٵ9 pkx(VgwYGV>8~pAsUtʬs_vX>6>?g/O&Uv%Qe[>Dn C͂kЃ|n:LTFdFL,y8@e HjMQ&Nʂ5QJ p&h\pW !Nij-~ȁ 1T .0ѝt-KKGL/V9!.(GSZXcYAQO1F3f-Sq,xD8J9Z,rKw~,0d[};B.wELoTpL0wj^~WдA9t tƾ(Im=4ς;#&6p >勵Kt5f+ywθ6y,%qf2ܠaeW jE6!9OWe5 v<n08v%8qzIt* הe:LIi) V1qdzvB&ݲ6RJEWUu89H'/bʷ؃tOf(I >F=+#NeR%‘';YL[$pѦJRwvQ #k6Ip*%Tȸ孛^]˹/K έ3PqV(F}4s YIBѦ  U$e쀱b*J'zBĖ4b-z* lf9Ps78ݗx(/A8Q?;tw^ j{ټy,p*H.kh+5A?n 65%4͘FˤnkÝ3+~U2-eJ ?>-#x4)@7w?K0T־ @K oexlEv\EjMap6f S`I{i6ε~~Jc \=jq5!Hn3Qkڎ~b2,޴-z*Zx]2{=*l!ȗ✔1benFrP=2fgV!OӼ0A.@)]sb` ljJf!XT3b;h3hJ BMAT&[9銊$~掲+;5[E;MЙ 1쓂!`?27A\eֲ%X\ނ=L>)NJ/DLL*DUDB7;Wt_zKK N!+))gh5s% ^GB/f Q[&\tSVR #\-:QP#Wgu=aWv k>JkJ[]pra΋@Dz"wz/j\(0]q~P$Ye\C E(Yyg$rn'gQCᚗ9}Zߓ3XA-iָx.r))sXȥpEy|0gc:?6ַ@_tA>?O(jLr7hEW8ƌ`m,YV`~OmY7] m8w!e~j@=!ģ hS7$Rq>MڨcbV 2Y#̤dSQ5sf1!fhZ # y)fD+.ҮUuit PCޏd8 2wSsFPxֈn˒Hu'z~?FK.p ,I vM݈u/pCˡNjqr3"IQo (\5_3䩜mMx ; 2jZeؚ2*5.` INy$(6 ɖ??v)i@%T Zc#.bBp{0*Ho'4y̓ \HIeΏ]9_o.K4F؂yfלbMM vpa߫bw1[(A!;k2n:+J=$jI]eSbŔ(0L!\\p6_%hTaU5Ps ~hp |ֵ}bT }ZRY(aA#6y,̀Ȼ1j-i/N Bye\'9uoK ^U&%IYZkoU6oUU8]3Rfn\C]tgSk58櫙jf.n2{s*u=8R*@oS34)|5xs5L{S-5֢.ﵼM:apAB^" >DSyȩȸj&hÕf $ێH`(.EԅI/iaIKQdjf~tT |Q3EӚRr#cg@qTNtDvxPhTF xZw#p@CMۯ"z1\L>8[Uy 6S/qG\䗄ngw( P_̌[w9׏ڥ/NgO |rM-u*1`U,N Mw0cOZc= FXI.Yq&[Aݙ[ᆯl 0<5+|זmڄ>Ys֘TD*f)JȈOJd1 uv%ʄEHU`<"pM6t9-鵂m=aA$g@I6 b"}5q%bR_-FfZ *3u~; 7^vU(X㧩h[.,7G k;\6C&r  3КǹO{'W c|z-,q-l`pF/tbIhOY0dB֊]=M!oϟIR2.h<+>{/Ol*/v4.w[{ټSġ4=ixqψJb%Pp-4kmcGὄmN1*Q9e"uX_j؄ÌvT0@z4 =<[2CEvFP fhŗ pA&ѧudꗣ򄀐p! !2:ߖ0}E4Y=i*LY}1ri Th 0]t-DZ:ϴ]Kܓs@8JS3/`$z%/&FmFp'6L>29ێEF9I7Bn 9"[Wi6r4(n&PByZt.R'P+ a V?&7oM*v0vj/otdR7a;njHϊ~u?NI'-L+ JKy&$&Zix;DadQDf9nK9v^73/L56`e B4N jOcRL&{v,d(.e\qf\:s;]G#*]k-* ;` =^ىٴdhf|%킇X|>X'gOTo`>vT|d=E=YwǺv+"7-yh"2Ojnm%Dߪ0Ĭ%@;7Xv(T}Qjdyŵxoi/ {6Q Luei˳O~~N܀XԌg瘜w)c? YN#!?_%9tS-yw@x? 9+ }_wMV%@ 1Y=?/jWu;*'WSyľG 6!-XMH"sA1D@ y.|CG;FSlϷ}:B܉ E#Q0#CggㄜC^Y'F<m+ކW?ǣk8n.d3AVf,ӊmFu^pCʼ?vd%g0NY}s{M=M F&>~EHؖۤ>|Ci/4~"Ėiu'4/+B"ɗnؔ`WOV2vVLS !NO(y* vjIfj{"\f0VVGz3d8L;6=#u%Z='V?=#ph e! WGa*A[@)t(Pzqez&e1?Q,Bq6a/u\x3_fCqFԍ&shSpA5x7Qp\Ɩ-kP&!pZgQ&R"9ز'ufV}>*yv#jī-owo[r}s8L03]Sz#N̺f `4ΏJ~BuH]EP2sdaֵ{E^.4蛠ʺ9.&& !W<y*y}q>(JŚYYB _PHT},(7B WXpwKY^$mX.OаZW¹}Vҡ0.kUUz#3 Ք9/BOrn4ZҿV0CKdAq~Mv2};RC{ Lr_Jo-O?M^8JSj+Hr8A;g?QY7ݞ{~J@IQ1)PaI<\=(Ou|BYV1 ݙeeܟip EVr9Y&iH^`nؚ ,;0=$pW˸>F&/)Z/O4j>b 7醦@V[cD٣CDhݲH\= _Ubo\"TڬecP+ZFSܴ.) l֢&`0Q9ґ`)xS~pYu}0t<(`EP;;s\(i_x5;?wGXQur[@RCF7[4?y&>쿄M/QX${> g!'ؾ7 v1Xk*.?>Ķpc$Obn3b\fDhSHelwmMungu_jXڊ>4!UΫ)5*+fErbP(:vCtN’AZdbK`cZ;YTg$SW]3& DžcʜLXьX{\sl֖R{P}6%U %́Z)Pwgd"Wѕ'U4wT9#"LF/pئ椫s?bMW'8GVY%@njn|g/~~Lj~a.D_:x[qTffo .khXήIRRovK ඥSmھ 9Q/>Vq 1M~*-Qs-crl8y` ny0dB*5ԶCR nO;Nj=^f"G1vRvG2_Ě@(C/x~k/Jf^xn5}8$-PN%+A87sqXHra5Oujz"_F @_ 9% ofW}N{.U^/=`EZ0c@NMW;T[*B|ɀMR@-;mj?yUcB͓rEu>UO8Ș̑D>V8'[Qe5=#brPUD j8R߮Ž8()Έ3j:_|_d5V̻rR3`VݱIgjԐlކ)%B|AjZ rL{ _4_٩WuJ,Oke]/t63(/guԷT!tzyLI,/?ꃖ G|_|/z>_Qu|{ WnPMj}E_?os^jW {s,.#^LRUQ_xoZt)1`O27ϞKh gɦh^Si`?snkDq1`toVHqBɬeSD~Rԃu>3XZwbr9U-Y<&{rhčJu.MZ -W[fd[H({T|<˔X=ߝm숑7[Ssc'8h<%yy,IAg2+ 6α Rൕ}od<;Y)a=sI.b.'m]ƈ˷f2<cuuHLdJnbo-])m̀g*=oBx=lFCiG;$W?e-"RyaUq{J~wG9s"ZEΈi. 1҄}F&n} =e,eˎ's~滪,8P-[41@s&3TiprOP㴎\t9'TzHRsWFh7]6LAk4O!_ğ?a6X FE;4a =.+c#\6qypGÏ_ 9tX6hq8>L|_w)Tf4c_lh$l@x 0NU鎨)U5J{OmAI"po7;m-i7ؔ]$prZ榫tw.yvn~XF{ Q\AQ3;26~/ڏbO&d{ pgUBjL .0M+9RP,j؋Xg} ώ Kpg6A>bi RYq^\9s/տf/܇ zN\Q :UX) @E!1T9~dxwy1cpn^mm@7.sBycZZ:xh{d0N ^=ӯ3&js2"f-;J2T۫DIU{#ذV/#cs)F_Ʃ7.᭮Q8_iU1Os _5*LMؒQR02#L5N83g[zh냵>XV|dL?3:Ҕ<8o<PMh5yvmPHcV[N`낾VG٫2:g{_Ijaԋx~jO@LT4f fx0@ҝ:KԷa%bS|X@WK 94F#dD gH'K J-prunZ24=@n0 \7yɂ6cDqĞFv|\VT+O3xJLV 7tyƫPx 81ө=Er=1P0XAS_9+f1RR]i lmx-J,euEQܠfA5W[ W>tOԲ45xj*XJzbß>?#l^'jXmUxa &}89HN "//΍vE4D\UË Ϊϳ߷~F*~X% #}ofʎ%~ vſB.x9tR3eC OLg|գc#񫰹8U-8 #" ^kOmE>[=E+ƽY8=?')ErmbSq{QWʌ=Hw B h1ŝQgdcS = @Z}o<휚ǚ3&Im(U;jJ>5ķy8Ό4+K}p7օwa7= ^ ݔc} <&Lv )d3&vYyOG70\bARγ.qlP۫X) \%*~|av2uH:QWeaߙ@q-#nLl Q~v7f7M(f_IC$QI]v; Yʵ'')R3S0O V>p0N,44X.IAxd -fmZMwaPw`3Vb.蘊i~ܜ'@VYP箺'asck>)?eӷjŦc+"b07[A<^6مTr bcivNw_mGCkWnA)ff0+B'V;'O&ß~kH>@&cp sڲ0B$*1&?k?B@i7 ޲6gbHZS昍^9 Lu>.Xly#[܃5,ݰ kT,t-UF954 X8+~C'Qq5E̩ HE0<=9DAmmdoײ^fƸv)Fjrß ?JUGlvg[1<~P 㮸UCX ܺ AbB HRw.ޔAӾܾg͟`St x%\ҥdz^Xvl#p{mn 2Vhh w֋Y?q*{6!F2Ɔ2*2_aʞ-ٱ:;( Jv,UɡBC@RW=c꩜hbɒmBŵId^ .J׻AsSiG4EiyG. g.yήߐʵUY]*O2|"l )7D0MxъQLU;"),*)# dW\yt`iWdr*3o;*s"(ᯅY<7V>M( jlz)8r d.7 NN'mKО t*/9YPSؾ7VC/&` 0|IjG;6Y? u.)$+@'nlYWs.E&SG=@ ˑGRk\&`- ZҀ 0fgi[ Pv-3 F]mEr\إvuy v5vIou'z0Ӆ˱ )T$a5o2L^8[$a-.򽆛qśtUZ%bWs|Ƣ'yjye^3oZŎwN\lܔ˾?g_lqs5M\ 4n [i+ȜGL|k4L_bzyl"=!x~j2r꟏HWZ);l;2S]0z=@da l`@Ʈwxgx]t!!`ݙ (8&;ѣ5>i%Dc'}/1U~#AΙ6?<!Nj?bEvl8֕SE/r7B)xqɨPry]@ XϰO7M\v#ɺ툳T3kV=CSbj06!#'Vwû_@4{=r9ʵ6cn˼Ð{|ms2TIDg JDYa@P"TjRoTL!=d5ʰ!~aO>$+jqE+^ZA(\ c$%fAN vg"$jiC]fj9_l\G0JtP;_53_UȺ7\!=WNVwHah[ڭ 96TF /Rz^Rzϝ1N^Ru><tDJPx[4BIX$y@̔md@ )r rӻXk6 3ibdV=[l]ߟ=$1M9j=pcnV!d;o|c|1&m 3kf[v,l|vڥX̋/1q+|jު5jiv'ĻŵDVr-,1vmψ$B;PY|facRW4_~iX<=nG<.+\m ?g樞xq?ķp|6\@ =LV~El>vA4.KP<@Ծwe^DZB!nE-%j1?U͐6}v sbSM&qH0(1wRZUKWtsM;tA#7TeISu?X5x;I7u+B{t)I|x"Z7%s5E.k尅OXPe:].Mj^v%Vsj,3$.X@yh`}6,Su9KϷ /GT^75z2ۖwڮ!5nBP0Ø}!ոcCU{a-ԾI, 1!d3 G W<]N:+`,>V$}x G1h/a# 5QUv:+_VtT)16=qӴeTL~+Oʮlų=x—Y`ޡ$|\Mu>yegk3-=o/K'{Tccҝ2^ZM5CB>T4}R\3QaȐ>Cd"}4QTU'?bzR=\dmSYs7zE3Z4ؗMN*8[fݹ۾"jQCe)n 1k|jXٗ?|(~0!pvB-p G603+j}25SЌ88'\iX Dqѡ:dC9~1N#ksr-'-$s}շ haOl(`E|LD6%mX&!&,7y< |'w u[ejEJ7E !CFߦ$ -M]-qO *+< \w!<剸i)!#ŃAMlb$p3 jYS!^Ejs1^MGrWCkꍰHW<['PƁKg2\pI6m9 vN yr~z㓬g?v==Ij6 -928^T}e>Iah/.l̶\Ct!,Y!|ep6JRի,N5go=IF~ßgWOf4/YH&HSAEZd](x][/Jg@0Ul .!nj,%mR[ Np=@Qi`eo@lm=iRφ9{ު|lC:5gWf|`kG9BG,J;Ԑ4gDЇl NEG$xji`eHVIR^6ofHcx\}s%@oJxDv|-Ka(>k_֔pƓkaH} 'kDs/ÅfŠzk:5 Fk5 r:slr` FglƓe : J6ݱbX;ge@Wr& G?XCtm!ጺ?D(  3o Ӷmd49#O_ҥl劝(uBNGP_Ra ¢{BI<YD#tdJ1?:]guDZP o%\#c-sZ(6;2;栵`ޣAo=JC~|kSЉ3T>~Ka3(YCؚ-NN˨۳!uqi\Zd\ɾO0Z1(G;Q4`;h;a(1xkʼ>8UD&Qr^u])"#j;.kd왪d ( BWS [ ?l ;2N+K0&PB#Prɚ$Xw:Mh~Ǝy 7Ro;_h㋻rIY~Tm9Lt & IphT|OqʌO}=V| n*FU&яdEͬevO1:mEnG&`\yսhE}klohFߐjg@$_x]%A!A/\J`?[K91Hn-m1(PW/ + XYl=80I$5J}rN Q XI0ʉuNQٽ8+O"Ѳ5')l㖩0`ˊk}ƓT= eYdH<:Z~/a` ˺"GO:c˞ ~nt睠($'YnECb6gL35*ߓ !6jeJ`qzG=2<-E/Q٫π#"O3^[dhJ1 [A(N ugoT޹h,-<3R|zYUq,1& 6'y#G(). RozY\(sLr 9[ TAP}No^;L|\[tc8 Cc<2R@vBysƐA!&7 JT>F,F+}y\+=vmDwcAu SFŵ̻+junVU LvMO+hox,D˭:àoO[f:f,\;.93AJ#2ɂqWvc]FAZiZ G'ɂ"e0G0Q>%RFSAop]X+n͗۹R!22pmBP3l"y<ɹ6,N'rNpFQ*kT=@DfO  Ba0cP?<풍 Z&e?~:VM?&ޥ-]ﺒoZVJ'BН~s-It4/ğܨqR+5ˍ 4>#Al@}s, 8됯&ԋ~=g [xZ 1q L0ypoMWpH\qӵH p;J߂r@Ѳ^>|b= mje5x[b=.2 6KCGVM5)R?2!Y +ȈH㡪H\||K*޲y  䨵ʼh+TjDȹR쨲4r'g9PSbVtnr#%}ѺPm1l= '7}oӄmCRS515T5 +&MTUl(?7???w?wKH:~PfyTie^ӁT&rks 52E XWZmO7Q_ [x?6R*|()f4tRcTM L;FDBT=_ڿ1=>֒d|\c!)n'JlJl+o90'H7 "\]2hrs3Edpaoh?0.+S3|Hlha54(&(zʞQLAzk AaCx(j.s ck_WЛʰ.)pl8*ɔI/` i^c.!Fal"3:!}-ڴmWr ε.ÓHjCݘ[?~]swԪP+&URytvdrg'&k 'BK.h=-\a =SLU HicmGį 8ǮӮÖ-]+ߍ+([Q"-]D "}fIm-RTf"~򜏀j7l 8]Dd۳U\Sˑ(DzRؚ0rwX֦#M dXU fR9ca=eܼ9_x&xY޹9SWaXΧdD bFȂ*:VQڑg|k,S~>/~hc[eC4zm5ﹶ/^O}DrR gԩm!#! SN )BP&U<S%3^jsO30bZ)a5! q2QLg *yQ9v:ڡvJsbm:0Z8(ת{ NW Xo̥>rU> Ε,g;lT2_^95mX>1!TDh4Wa ,N} sITL/VjǞPnAdX_$!):Hr(M98"Vb [.? #y`[sy 챇o;{$̌/JEe+"3χ瑻y$wP:]*N6ZDFsB }gs?1ohLkh@!QiȤ#3M819V|q:l߅=O dJ5Y`)Ъ Eayh(Ox> X,BJt߼\쿑Go"ǣ:?|-0N<-,P=OLf4*U#+p,C>gπ恲[2ݫy3]0X"R (C* */:#<î;51qgѥqGHb1 }m){zd[{DWq*Uylg ~TG& y4۝kk\@ej[""\(űˬޔaR1B4kyn ѨFc QŲ3-!j$JS)kD'#*3˝ k$dE_vtPruQ;f%7MCaR(ZJ= [! ׵z3O"1"*M3Ö\eUJy¸#<sƻF!5YgM'9݇ 3=URIG{a+T*rArSj87eGySp$& .  XM-I{n¨oaJJ!/!1&$=1c3A2ym,g~C qF,voh r`I`n)>N[$޴`$\e,Xnj`҇,J6h&|$[|D_'A5u-@=Թ C'#}d$f J=t&Qz,aӻBXg?4 eE KX̓X)5u %\Uk4RzVX5G[ʎ @_z)2% tHQTIy#ѥJ٭m=8=Z61LD!'U )v5e2#4W u̎\ ݶbX+Ķo}Ԟ$U k]Z/i-T PҘZeHMYypSY~7XSL&VО#9"9uY|ɝXZ64e{\EAMή؀ {e @?`ӽkÝeBAԄc;:K9a@ RG*.QvDDU;0hUaA "i;]8c%řu|Ir·ѧ{. ]rމ/̸nl68u'_3&xX3ig`C;dSPSO }m1+kNcYI1Ok@=c(2?1qox)€"NaxAxBJD[.w#ÓBP{UbT}#xFћlD57GPԙ9?)J}FDz]Ӭul9%x{ s5^=r\Da>k3tA".6i(M|ǼC=Z*6;]J7̴8fg'QtPjQSϵt{P8L†Nx5ZȭZ82lec|]v]6=qB4*pUD}aZ}  "%jkCL4<Ɇ.d;[-%4hl{!>%Y5>VP\] pЇ'u"Ԗ#{ѧW+8@\m'HQeA@N?PQ[]ݖ_{J+$L։'Mx`խtTah M6#56N=ilXSn5dK< Zsq_1&ia dMkQ2W}`G #-[ RXOM0=-I\2[mԯW!$>#o Ggup߾gY1ȋ\0xcm:wJߜ!(KLV碛Ug igZSB9a(|!(ai3z,!BzAp`8~ F5-d? j7\HTNܩNB$x9ve*cԎq$Nǒf6h+~0ep;ȽZ1%!Ljk63v%:?h@_NDYsXѫS ՌSe+&n;%A h{7—596 kї̌?fg%֠g@QH&j@Yׅ$d Z%xWPs8l|KRNqKxP\Ko"Op'`fY(# o yri+B7x0le. # $u&621 տZv{ϗʚ 3 %l8&6$aKqA\sZLUg/Snԭ>ଘꦺ 5ׂ_\ӬIw^q8l(+sqDeRC9h;oeđC4h QG>k&o bDl* +^;z4:10Uʑ@9kЛU^ݣ0% Pkû3?\| m0\دSƛm2=_ZxOF± yjzfp9y*z,riq`&%&/ӄʠf뾿wMV}y񰦁J1y8hkY0%ct;Y7o~6Lwp{ahcrZF4 o~gHF8z(U#EbJ_ Db;n#}M&Ҫ!x }76fU JX u d0~O8&V'3+-?(dB"6گz4g; ,KBHȦ?h怳)YbKZV&DHM iQ|rʑ㈭(/ɤ7yo(i,xe=2sfP-yjFp,_a2.mzf)((UtdG!]D5@b\YN@qEm1b47yGa _v\mwy9H [ck4O_uuAtPe,ͥSQ=5h}pѨ,T@j^1gM@[_xfNY _H FI̋ s2d!=CN5E7>@7Zmt(&n| ɻ,sȲEK" al]&e$a IAux 3F{pxSx;$,/ۨ]䔙EF6lnj^!>J+4L%']:PNMRnc4^ n(f_eZ܋_N{%]I!G3M[ΡPg慼5*#-t8)gBY{ EwE A mP{ gӔ$u|G.߯-!q ']PUF߬k5d[5ŊA<NNsa}ᶭ#[#PzP+'HG> Ԋ3 .ƣ2Ϛ !Td5 %yTCoe;l oceukV08*~.?ˮt]l'C=쨑dU'mSt87@ם_ 8vs-Lut3=F~߳1km:;iĐx~ۜ=gX\ȼ @S%tw=k>u}0is7Y2 IDATIU0_24|6 %JRK{ 8 3"0.ȿWeqK?.Qرrwv !8ؓzb'CW&FeŗZr@IB0;}r;bf1t̿M?63L!j_2c5MѕH:h><_fdK/;αͭ[̩MQL$d:-$q@gϼdi[ϵy ETUU_w^\(V*wmdو'N4>~ ~ʿ6n Yi|-YW!)n)&x wL-ylHՒ&k7 JW6/5~,kit{G|cGF!}Jw6b h ΍k&܌cH%qDbI,>uv[(k2®uq8fKmm8a*Ajf\r&UNY`Bwt&h*:{8ҹ+>Fb_@r`?9AF]uA KJmR;H1mu^vE0y _1e!~d`2K4O`dy˅!"Gg|E>Gc!x'7̫04'x{ث',4]t# P:5~h㮜!.fɧ4e'1!P 0iCr<r͓-NԸru[n.OϾEN yNтC[4z|өHٱ&5^β^8]Z&S1 FʣJd;= L=ľB-2|'¥Xں@ں,e4 QSTwƏ_|lkU\+Wy[OU|R}6(> t-efYC[6^֭/ W%>+ !66nE"G!"쥍ׁZm<_p2+M`=[;r('W UHaɮ{2Դ*}]`ӫVt kq!m>Ov$RlG#'Q]f luίEY  ]hVo-[lBIJ̣={1rsy>$_mww)!r(O} fc;ۦ"xy$8zaL kGZ_[x|T58fv=gfl!P _{? * ; rETwf{-0L LRhDXvJ>Kb^RZ{tsαfonᲂ5ҟ &MeNvYvZ)M[M 甯 5T\$DD+Fl42$;DΌ#v'?-OX4mc*(rڻS ߎnMY4Gw7m)/TĠyC%20:U܃lP UP/IPy okgEa-J>0]2o% :Zu92(YOGL2q/;ٹpoג5r e+1}";aQU|Tfx{rQ!dN6T_"I o /zE-tj[j)1oC Pk\%) %i>>C.^"gGYm&o4y--~n2菷ъ @7S %唺T$"+SO+;oJZJI|MUbKR,LW*}jGθڷ gmHs|ZUsd"6o"~Hڨd[Zbx\e֝4Y `;iDˢܚPawx% +mʇɊDh?=jkm\NhGú9p37O 9uvLjt-te/<<OўS֌HT XрvOPV;;&X/賨\ud"2 ӘPK5 c `f 3Wx٣ϟNd04"?Q~Fre|X`Syu9żANw.T}#, =FrZ!t[|3I+ *y3 Z3S6ȶG!?a0\ۏbx%˛4&xbqs&bY*L*8#"f.[5puTx 6%#^Ti" Bmbm'=> Rc5Ъ|~eM֛ηCUub:ÊJ`o7Ho)3©[o;W0Ƣ귭}Dh_ LWs+W)AQr^\~337 9|plb0O1,oq ,,ߣzr% ~E+u3rq(S[ NAegy}C"f{!+$2yvʏ꿐Mܦdd*DL}oMVJ-#҃QUCu/K~@"ɊϸT }a-qVmBEjӣ.R,z]Xh.` oO Z]U^2wAv>-v+s&:‚8iG֤]+C.HJlڼ +@q_ܳ8JF+rݗ U8Tޥ˛O|뷽zGy8ݛ88iX=@yTCum(9n% 癠ind= "^ ! lų 8\SB72u6NǹK Z1<-9:H_#g5.|?Ep@2ŀgеV{AvmRYh/!vu7+x^Púv'G8h25 JWm=3q`e~!W!Zx)ijy4q ܳ}] WpȲ8#ȑ!\M6U= F)2yl ܍0.v=Q㗋 +rZ h̬kHQEOܤ=Dbsbt3>O#Ʀλ`curҼXiaA ķ іW~.Y ,?qs$FT"UNð *gZ0(%{P 8_MG2]BHvhSxwJ ~ m&@pw,/ۆ@}inv18Wp[9Z"<=Vkk- ~믞o5d׆o^>?)|l1f7hULe9^'']e1|t>Q9kpXؔ܌1Aa"(؋F6-IR&͹R5 (xM[NuJ"$bEf(s=u\cd-6faC!6EJM?[I8c¹s-,׬C(LNEz׭2c텀.(yvlWcMCpɋAv1@%ʄֽ.{XG8%vs,j=ef$m`e-[v)$ɠ?!NF{ˡG]#yC>d ̑N/bVɻ)OY! 3h|t&+PVCXd 뛮̯1.ߕ`k5<0 VhJ!NE\Kp[[a3Â}>e~}>.3N+ ?<13 >ZNx6Any{Ẋ--~dx PCA}$SeXNbp ik^d4ɒR>VhqX_Yu~i$[1c]M٬)^ D>Oϩc63hr0U|!PgxZ:)j`4?Ƈ$%Qh?:{Ӟ.y jY]0xa\UjEZa͟ 5+x̵iuqK}Iq-uܞ@Ky^w6 %=7@-ОhԧtocB0DkC %}|)lS wWkV@:zqO0-T$<(ِ;mQsޏghS}a+j.9צA맗M:p] W4<_*Fs>mMM=u <p~VF,!ծx,9gU-u9fdhAfʷMSxѝb Ů':ol]f2 MBB>.~}Zq^=J]n7Vl__hS]}0:kXWHKJ( ̰ g nCG:Iːuߴ]ST&&3MG\ߊUiS(ͳ_A7!yF~FR?Uۿ='lhtوL 'Ýoϸ3BH;oʋ]az{T&7|̏@T@UH_ړE#ބݥ vKW $sLL/>4mjE| eXas dJlkwĄʡ)qȰ׊|W+"v B7fUdw3Q%+#f뛮ǁLv&/Df}š(=ŵ]]\pX%"eVC"TҝZip4߂CDQ 9A}[/T W-,#5PpSӁ ިDx(:-D/Q5aL5"&X}P[uzQ](X9K%G`warc;Mc.n*gw wmswS&VE2LwrsL90ޕGtgX}ZF k1q@|,utL| G4PN'+jg+ᴺݛ[ɥxB_ߟCjuz¾]AuwNՇ6yZ2*%r{'OIyX Q[&f6ec0M2 eW5[1ZFf}eG1fUj޳%6ȫ@ 9WcTef=,M~G< .=DnDj^KJ ᩎIN56Q>heJ=5ACFX"͡^PP(tj Yk7՝|%VV:d#g49uPttv#d wz1u'W( _*NY4*N&‰F:cOVO g!<+Y.%-a5N_oA1{'2i.b-`mk+'kuK*a]JQk?-J Էl)Q@WJcC;9c9p^$Z%2`ԁ'5]cd 5#KءGO [W,g PˬDg_Us |Y Ӛa'}1#OF/o96fWE'+Y$?vp=G/7?/ җ}znR&zР8uroEad*UtCKfG묞tcb,5%߇]NX:eNÇ֜\Ï̊iE;1}a1 󄟌zX%:J곣V^]y Wg{_^G8sF2=k_-LQwilW"W;ž-:%9U\C0z@~ .k९'rNAKdԼNW(Mc^hiMg+GP= F(2,Gov(A甭RkK(wzcn+dQ,ٸ]ЎrdpM h&Ϻql{qWK:GFqي nzzb˂]zۅu_GT{"3cEXU5R٭ S^%mID iM](n͛k׳j|!E4oop'b鳤7?S.% ?K6ǡݟ6+u$pJ-k]{=X7}a>͐o*Z8%'Srd*gj_/jV92i.4,`$ʹrc/ d?*D([>kmQ`nTo=2Rc0^ 4,2 `r*g72t5;n|J4z]'hZ4]< ٖY4Ȍ .% V∧ɺ jIo{6C&A9R,XgC80kIY O5P̿-6mdE/ @늡 0%b)j^Pf z9$\2,\$,eZEDs1!;R^Q9mmPS;)hs ri08˖3&Rɭ dUiV1{^2xzLf8(zNDZ%` "bm;wsd彵ؔƴ{Uݬr}[OGjGT۔<C2ns8c#,T0k[4G!Pڭf.ق[𴟮=M.ѱ*ԋWEEȔu]=$ƴ,T|8W-hfrG6;bOAڵ{$2- ljwYHG^alEwJ[s p[ vX 6.Ah5\<%\ƍON|TWCpOlh @Mr h_xZTod s\΄$EQsg %.ML (6m,S7t=B%ZS[gS  }} ;d$C>߉)ZQݪJFģjNdB{T^:=VV;]cMNG'C()z 睛EzVl?zr]b2Pcs dc@ #,ٲvҦtBеcTxN܉rOmh 2csٓ^:a-ɳXZafVX8JV H˭8V;'T=8p2I/l/]ۡD}W66<-pfU@ی16C§<]SR'#ȊH5rSz0feo5P?1 Z%fGmwfP5z+Pأ`*~pZ=z|~aW6;yCJȘ0!tW5 _6Q3ȧj3}8L\e,;iۉx8j,j .{=rnʀ|.8c줖ˤewTe'6G=(,'+=HrmmJd.dӦ]^[x07}[д`EqH >R$b4iG絾Th8F⤝KjW?R14p+?ȱEE!u+ᅙh3V|:ﭙV j0Ik5_Go5 dWXJSװ}ͪ}}wr>;qU a)* ae K=%y#5yoP{pgxCx-e*G 0xwmvu/kb6d{ }&nS4AYq$SG*|3<$&ڶwAWllljǂ`%;I,9?*K:#05'M޼z<9F "pa>4C5xx * paO yZRu׳~|oC|,l]ldtHXn|KXO_QNɒ@7}02^ݠ1^ /j*54 m<=@h=(cCnMS^*aP20q0`w#4FF=gyYb (~ܐ -8L4ܹCAB_**i yc!/"{$N[o)M@#t"ǫXi 0>ǾAO n5N;nl/K/6U*(uN$+k!$׸认Lٓ8@id#w_`תG]'NO@YΨ`Hiւ/Ik^KA aM2'{h"n(n&?KT5hD9TRHh^MQ<mFՇV p:u nk+ t{*^$RÎ/8]G2SXfY2׷Do-Lgq*^>#rؚ~]t]g @6B^fղ.QbbL=~xeBlS %MU j|F[B_ e)| S z,0[;:}EMV4)CP0 Kp#hU.`L*ZөLrk5]g7XXCcm3sb33b@<-7=SI*\t#lRqu}K)#V|۶W?hs*0n0wֱ@N=ex@^,2hFsJʯ{AVF ڪm^r*O]cє {aK]*Vt`ExE@pw`N$7y=, 'NYh98*M==R ~]t+gJqN %E숨=\~~nsOh &?e2tsUlY}tx:m2."0whϿ,Q3fֺh*4f0f*JQJ ҃r"kTR> ixEb[Ќ{Vym%7vQ_E,o@qUqҮ:bWW}}WH1P䢜6硘fξ.1Ǣ=˜ Ϻ> ׯu]X{'ҒQrxo vB6?X<|$O;n]>2?GFy|3[Pjz~ ZHK6Эk4zíN*1sHi%&D&LLVkxL { sgY/o,;1;Hd1X;'"i,ð<;tqe8{YۈvomoWmɵVc*$% {k <ƶ6גLu5eE9{ZplE4"|iN.)v9;JLLۀj,p 9o[ ܃uU""q̾2XogQ@Z2&_2$UlEz2Sv5rҀu:4!ð: V{ur&oM{s)dL7-d] m`Um-JF }CxCڕ#o-_7.W*Ev cx1fx0.v4:Nm@0A Nj&HDUಸktQ= *d3{w9ޤ䃹+[ `pWPsVCzΟ0cf-[2eZU@{rVXtOL'U 齤GEYۀ[%61kZp窔F.>P: =CT) #ڡ9{1:U3Cv@|[g6O$uU'960* S&&ODi,j-"ݖGGz,Zma4tO9r,5zO(W2+K[兇XL|Z> рg]8l݈H};Mʈ#YEIj,[ -)ݱXcVST})UfcKaPδGh.Xd^yA1X6cotM-V{cvA5!hٓd`"ȩz-(!Aۮ-)mEwmN&tb;斫@DìIF! \>v QJ1) oep doeƶq&6,/+r=XHg#9 F!)ʂ'F!ݟ ̺h+*2\nb8^Ӳ|:&.͹u-B$B "6רV[DG\`W' kX{Qk8<$aKĺ`up~9ܮKᯄ4_T?;/ZZ<*ftuMyJ|$| ۀ;Vuc,V* w&f,E8!7FA`8A|؀*9ȎBdW3׹]8?A<#f@F $rң }&N VdQH^R̔Xo}h˻$` FtBY ֖/!R 8rE[3CQ F{N*ܴCD 3Fw>@r2kG ;k ql@,$D5ޟ{V& %ə elbsNa댿+1#/lRjɯR=-e5q4R(fՙ帟$<ɗm@Y5-ڝ9.PpTjzX+|/aJybY""#4y.UejdQR} M%YY)ZB¦}XQՇ椠C)Lp:(M-ڈEZݺ J, 1@R  Z@ G8 #DglxJk֨4CKwWd<ha@J5g&k4^3Hް СJbu['WH4+C*ʫbg-Oۀ-C#X;Vf=hRx13X5 _ bY\տ|mibShN? V=v@w?͏ok. W99DCʤ:߫>,f5yH疮Q] F!Ri?m"2:F]r=s5"ܲR{ R!1LN|aofT.ؔ$cP@BpWF Faօ@K׽=Z}We`Ph]eT7**YRW0MElGh" aX{b#&ݩ׀=xsg4Lwc}M\6ۃÊ zqꬔ}ַ4% A)XX̦h B A^VcݝaCCO*.g@hH, gYV3ܽCh4u=wb.cjA3هZvpa Hc+/>2< JVi9zǫ›)vU$bM,14vfMpWPȖPDaezԥzW "Bh]e$'XRޖ(K^2t򫇻8Ss% PȭٜFACiVTwʿp?87u6F⪏w2ÿ G_z!R.6u!B̈́2CW \uULz2CTUR.@'=W'-Je  FLyeUTMyk7k7 (ĘV$+m _Pigm3_H]f4a^DH/L;8MAʓjz=a"БyUP@$ %U" ۿZ0fo 1KKDYsRh>kNDwݶc4mfUՏSc2Ш+*1ʟaEV.UԹ^I`2gy?0X(`LzF7h}TO=wн EW,`!FU6(߃"KX)|gHқdȜ%[ W2)Q:fr})`0 {&Q 5 FO@ntul)kZ)Ǹ +PaӌӲѢ3ON"U^- zoc[aB3dզk_0V_ 3ʙ-MaBdIw Y'L8'؈Ir(3ӰjLQozZlb!k{Uj6P~O _\Aʿ|aWC[ Y{+7:jӥ pK,QBImhk O mIf " ˫ZJ- M E elO%y#wzF0;s$xVr9TGy&P%O ƌݜ %s;aPKse.>`:aZk JCm'Ce]vw qY1(/F܆r:/- ya@q.Lԋ :+RȐ/cuLKaÈѮW^&%wMmO6W@0.bG ȴf*:r7MCZۇZ-I%@ʁҌBiq.=s,Jb_BGmN*L.l\ R€'1:0p<Ĕ&݈2"`z ;{4D+ō 1 w2; Dšuaҙp)E%<KPn>A` "w=':R^_5$h)%,\Xzo jbO? ڪu\~{\sE,]:  +gXzPZjRZ N]sCY RݏR`K_H9"Lg T9\2w錌(F|%MJm:! "=0T( b=d'P}%ë[g,&P#0fNYM(&s)CQ$,H4q1NKde  1 !ѩHy%t 9] I*vK^WBFޛDJݮ^:5±Xoa-\;phrAʔ oy\2aASW"C7[-,WN*IVv>tSM+so?c1ὁ(P7qk# TT3Uf ?ÎKVBJ+(-ȿ2@ 4]}axFSO /r j7x0=0 By|yIu!\'i68( 瞀% yz!L%а`YYe#OKfJ[F1 s."־vcu_u\лNjHE9x(jURse? bA] 6pi SocEJ*Zj)T [KˡFHbd iHc^m9_@:kj*yv ?/hftS|d3Y R!*[,1F>00,AS T Cs=SfY>Wj6 'dkIdlsE)uIR7$[ `@MS>6DyLamtp,*$)P-3z-6(N>%kN.M ڋBՁnې2nEDPXoɉ uMS2VaK/O[` zHΜC\*vkoUP?էet{%4;6<ՇVZ)eX":cW_0π1plT?b'84=Ln{bIJ13Ha:3#mϹVkQ߰Zxrd (kE DL6DN3ML?3XOŸ_uz6*^iY{x:o!SLb7U޺ZH|fIslד>3$#>5ds&(!bfٿ jCX {]sBVU[3JzgO |up$՘ϯ/>E)?[6  +Y?CK M}iOcڐ68OQ[fZRQ)A͑-9eYL``SsQz6ϙC94ph1}@\?qkfV|}'2APKv =A3qU`Wo}YAq;.'kWz P5e-EmX ?E?+_Ok%ꑈ5 @c-}]DV " ݅;ЦPlHPG1@k#_kQવv{լarmN</v" cP(n~Fu*uQ`ӭeΡdvI1ဢYp"BQ]5-gtJ m3@3K"naRo$*sqNMY S]$O^zd>7 6l1U'6OZ єYN}~E3ƯehKmG|b[LLu^DǕ`9'U3mQ:^ ,:[{=P-WJ`065Rcb̬n>w/] 帚hƗ8z5 TnmJp+kO/y鏘J¥x=P"XJUG˛HE\*,^ZXjp^3Ѫ5x %$7i2Tj($ԗr7h' JͯGD i'pX"}3tp% l812UVS(V= T+VOJ_^nreT2v.#B_pkђ) gn1OWq{N?S/g}KuKg lۀmeО9k~)Œ<{hTRaa$(Hq-LXe5{pD  ]$δuqdi΂evW%n<>(%q]{vj`:j3\@i 6h{V V:qx$=dQ^OZG^dώ LӔnZUQ]pE=Y"YΑ\oT<(e%p"."PJQzFF tBB%UI#,- ELԞf6 _N-.ߚ{3HYr }~%Ĩ/Y8:(؛Lf#!RѠF=9І,4p nF4TcfP KJ7P#0 ) >VH)mH6BK,/:#NZ7nodN9dz%Fτ\g5` HqB~&,>Å8K6` 6MZV Gl"9.P{W"@b!XO;5wFR%"5 <. .zh p@4.s/䅐SDA%b@VfDE>%$\14b1豫!b jS@RkPA?MDlz˲K{G~z+EJj2Au|%jELɰEՅ]Yd5tSxj@ڛtq̱9Ӌ<"a@i  z  9,Ӕ:zʍCV$M ̐@8@$/fgBT,B  X0᳙* Yx"D "PfQ{R@W2i}9;j$ՈRF>W0quF #A-11[`"#F ! 9#:?}xyk(mN@-qn@jcф}vm0_. ϙ/ap)ᯧ300B?*}4C}^1y/)dOzjj,' ˢ*,D dd\G~0u'@5ZhM ⋋>-ź;$͂Ro{_4{W5񣸔SlI"RL]Jԃ$=w+⯁dY]1c Kwr Bme~z "EqD1">[MZQ@'a$ pN>w1z$LGA b1iHu*V.w什[K4ykj`,?*M5 ,h/vA8CeGmQz}y*/M^[N4a\R|b}"k QLcC B);LhWD1t6h v. )K\%Nu"",,NW"C F m$__/?,Js ۆ c0 E}S4ooxnhBY4"/uùچ豼<ށ%pQb4}d܈2a31t e=-H,Ls bӕQd)l"X)v ˁCkKj4v8E E 3GX5UZO@eEA${zFr nlu@2 r(I6mSY(yj3őٞX#tc*.c }ǫo:v Z",89fi"3D&YeB^Ʉ&޷f>UQ&DDBu/ȫia6 `5WM{QJO &1hqjC,E^k8w'KqڰDwxr_S%^hk_~-~ ~ /l (f-?DR`X{{>/)lv: "Ph\"Exh5 HITTeT;F{Vk>J]oeZ& rp 4~1%OϴʍF I =SqkTѪ}rv4[V |U/~9ȟl_>Ǔ~]c=/tKɭ\^4N;:G(Um!Uz?!pG '`;bIy6 Dme@_ S` szV6wie,])SeD0DTBfcH!~OPw ]?P:*D2QG (Z[FJhN9yhF6Խ"lkEkD=&j f!%['.[ҎX|:Y;/By_,zYǦVr_(%S)RKWBa;nZP[b_eDؠ\'&)%+Etu5rz+ɜ]z!+3к5*qT ]y:m!Ұ<Էh#@cam즖9\ZTP4F DkF^ǗmU_/pXe Z=GyNF#!$+%̩Jd zl_wT ZG:K"c*ۚtŒ{Q,BC;?Z W,Q0PZ6qX*+4NZ s6>$R/VZiN+ SehLJS554n$8E?I TV?1uV"oK;s"(c&k߶ R&q #0UBZ 'HfgI<(5:8t>((%%~ 2+tNHD}^)YEOM10Rq@tV&#U͹>d`lQrW\an?)_:vHJK` 2 )UX0{~wؾc.fjoFٸ ioBF#\ѕs ڭIڮ'tv)È6n86;婼cD*?vWL`6>?Ep_ Nuӟ)]Jo+dE Y WVƆۍn7~ g&7LnB>he(*Egcc:"fCKXMg䩎~;.S&x(*!;ѹ@.( 1pBVߟhOㄅ2j9k'``ʜJbzٞ'I SH]em &P<9i숰 2.ܞp2Kk 0Fh(dֈJh/%EWzL[DϏQu@xh!DJ;=֝* &)vG,ߩçIJ/!sr:V3}&2!PvW:ZTUh6k corǖ`Y\ezb&A5m.]a߸a Na12N@êҳOۘ>TWG;84]TDyޚbDK\PU)@vS\~eï oe9H2%B0/"Ǵs_HIo졖( E]lz#({a/,'řXx$y,4c>[TC0)ˆ~};6Pq/d%q@,s\יz-Sʇ9m$J V;WƯa &m?aJ:jL' F~hmñYu , Esl Fɂ&*Q]\pR&c0PJk*гrlBX/\|ΖRfbHdt/ VWyԚڠ \G%6[}ېu@E8cAZ @#<)gwf!$eQt $ lbNnD#;NǂN@!N"Ԙ- [O$3CYR< j []M49-͖@%Q>>o՗&.h$1VEyVu5WyFQhsfQPtb˺~Yg%M.g&@nrd'!&%3"(3B.z=c03CHΛnw߄1g)E_Bj v7wg^_asꝼ.ޒ̑c&ՁI5t6?8H Qkgbs(CH/~+%$΋5Au,>־Akbo$@`{BHJ=*lKĂ;:5RݐGOk# @AB?mF#b$9 ۀlj "qL\T^d{miwLDDCQBآ0H:Y@dcnrȉ02"kO@ظHidN ؄V(""B@"bN!3 h#7;^4߱u;Jsa4x$L؞ʐp0x~SS)pOJ]K7@Vqca"L\M;uiBGwl؊E+ң?1/or<0P0h%RnXb1H8a[wR䡦Y CY B_č:_} Fb, wnDHHXF/h'Ӧ(g;Vb^'ر,#.TWU-<Z$~Kkz)Ȗ&Ǥ0]8g t[qRQ5)iF~,F]<D({+ B!*ͥ{@1IYg;NYUԍ ոLP"}` DGNN.0 ""] 0ZW  ߢ*Ҡ1If^}KB] ̵.9k(/N6VC;*,ivTZя?Mߣlx#9_,?lr\caxYꚴMA"{G|jS PmlcaqA* !deSWg[N܉UDۘʼ%mP'1$*0˴{™|!wm.P  Rڪ NSYJ#|Iո}HYF09@>ۥ Ds0",2n eYH<ɣ?y%dȅ_ o%&D 3`-H((fGhFrA_ lj;.\{/,Y=k?e+%(:r?eiP6xĒx)c{*'}L)^ԯ)ICu iAlum`kF$#wd's5@I!n&.OG-x`_h>TLX|el9-ZpHw<:Sݬa  y +Ҏ:t(ûG{9($@8<,r[rN ng>?&G%ʷ®V/S F9+ě(tqx#Fc&hg=mnj^j$DX Ud4!c6rAYv@dA5yv{zWkFNDк^+p@@R ̟Vhx褬r/Ύ;fc!!} DŽaN9+}a^*Ǧub\2BkJ:I(vm@0umEZn@P |UQDƢ ?~QRWI&kW#"]%ƆBbP\\Ta2Gʟ ;Q ?ct灈sJ^B?2'1S~in -/UŰkoݳ ~Ucxxݷ,9k~7C`__ DŽ-:}¶VhlnmykgY $w u01!@MKDhmHߒ3'8GOEJZ t@onoD{8c?}v:d Ogap^L$lF#~0g/ep]Vo:HD@{ k[=0"bW ^r)l>^S.a'bXN(2 MI:.P b,AG2y;yDySCUOs_| ݍb\2^d/j{POµUX,q-"1A=*Q'Mͱqj@ȝS.2KJ?70''IaEIr͐R/iaRc{^DB?%ԀM0&x)l\Dl VξIeL6jIhTfDp/<G9]k_ X03dH<ԸTp"q<S5G ^)=~D69n +Ʀ Tdnr.9" ]P@e:=G4hxp,r Q\O<[c3Ig "ضV1*ajmAkRRDxz@렡9Db/K\uQ*6 ~տCQmLOp۴6}4b>](Eowx My,.8&ȇ-KSx m6m۶mApXZ BȃUxl RP"h*6!Y&BBM@}NꆎJ`tڧA 66m#"D؏}_oz;®=@>Ē; ps8[qND̈PڃHNPP5,!J% TUqΐNz2ηX=(1R;[ Sd%1aAf ^mx"4CQe֏?gKsb"z.30c4Hr&TOYbwfkC р$ Ӥ;e .')VEMnT/s9| R"ϥe학'Nh*g|Ǩw?7"TjX`D;C.q鋗jyh TrZ;q8zz!nU)9\". }S`0ps11@5-2' le0s.)vkIiTE ʪ/+vjsqTyHMzդab9U}o~J0(pJsQURnioO< k;zy O @ blo7]wom6d*ch6Cj)<#16h Dnd]0 NdTK$I/JIHqS6` IDATHܚ 6!>`En'2]ί$Gn p$ sq2n6zooA2 тHZˤ `2Amia]DFf 2ԦX;kq@02+T/|EO“lSd=JșA%93P·!RBRq϶@r/j;H#Ar;T URvH^Nfi0)+l+n1۞h:K=k1Yh/:E]Eë $۬&% LzS)"νhs"5SQ4U¬b%WJB]řӐtruPIR.*aÙfUH.r\u''xb~˴uI dd$ D픙c\z ޳.j^*Řyn-)ẏDKm14ȧ=\+Y}2Q| ę?u6!go}oEL CVnv )Yd@}oq$IJsι~lDÔDDcΝmZ:Cd4u_k^Scu|*/6Jq7 nʹc"٨ 9xt8[Fzz#;UX>A6bTpL`@s@3cKccowi, dv!k@?YdO(%A YP*g;0Ͼ1X{s"!?ݷv} "Ǿ?||>x6^oc?Q["Ξ~ߡkKYх* 2偗bI4 X%>l^a"0m53R쌦 h1/ QVWA`XFjnj՛*H8ʆ {%OT58$$%YA]7[I K1:7{M,IB$JS{8).V 3)Kvq뒪cc/kβuKd^ӏpd)ee*]3$x)U0ڵaf4% DεysNi}aag;,awo̩Dgܺ V|)%B l\ܘ3O+s],":[idtj" eL|HN h֚R]8]0='x*YBrEvE٠S$={UwĻL߱yͫT._*Q|J ”%RQP =DDDclt۶Foc|j<>߫ >ssۆ Dpcza(T+q l m“\_~Mȯ$HЅ[]Q`f˷aݚU.YKSJ?Sn 7mp` QN-ISJMbe q_k?}hq=dH  % +I{]uńXۖ Аqj0p߿{oc#2m|<>>x|>o빿uq81dsj N$4; (OD5=sB@V2+ 1paj:2 e"qԉ#gZg{kF4c "(e &B6#RcqEV8- r@LcmIfs乕 L0Q)"~P \uo;s),,:i>t/eTΞ`K$gb!0\"D`h@#3WQ*ZF`\JQz Mt1yL2F*Zs^e݃'^AїҀg6vM` КF˧6 tH+7)ŝ,NZ/PX1`2CC5չdh?sc闈\@r+KKj@PF.g! T>6ݠ:KlQނlH,Vv^ (d.e:0h*iy @fCgmxmol <X(⟢i_L'͍K@cS5`Iˊ0+V+5+Ψ†^jO{J<;۬ٲq om~}vۈP|X|~~>z=_kڭ؏0E`&!H9@ʊXve' "!vmmû:SkP9 >p)lJn̩ t)OhZ< 9;O4|VRP5UVAWn*E*AAjT,.^ܐE/Sp7Ӗ:\Ě;9 L,n,Yf #էEP-ҖHEN(H,+$N#)6"ƿMAmVS_˶.CE|jsd4#ވmoomH<|<>|>_/mTk^kc㐩vdB 78M]&U4W6moc ${Tys~c}?1}0(" m#ڈƸqb~l =ĹoEpSY DDM]qcmmoضmCۅPl1iN?)uNgU۟ʝepo.m@W(U$p\ ^|>x<|>zc 8'4 )kw6g2%Dpkv޿~ojry~}k_:^_sΰ'P1L"ZK l ibI?Zv ^1k :D6l1Sm'qj,0" O?HfŠ8GPuVR$ :qX8:ԲJ~pheh{"!pݥnHw)^=ϋE٪;\t 7MI\bgQNqFwJQHG5x,`[q&ާ8ao3܏b?MH )-6Wo[G %*XQ?6k7J+!袥L'miC2}2TA'1^5`&[s`zQEHREyLMBbw`qa{1 pX]0%^D.=E!JYm1.fHSq"c16U7|1{4Ei18n۸nov&`X@]Ϗ?T>MG[tK<  TmߔC`Sd&o`m. xL蹫@HA8\[eXՑv('*Hc_oo~@ 8q~}~ϧ/^OwHk{d[G<"r+!͡FX3 ϴ/b<_W1.+<2o^4:Lɜ闾5 'T?CB%S$t^/AkL@LY>ޏɸ>'DȅF?(_'jZs0{ZE( )%IJ[Oh *J fS_|v۷qxdhncw~sc\ϏϏϏSk8csN bd A7<Ec1a 2 `ᩱ'r&)Oh%4`aQ`Ji7B`w4y)}IBo,7Tj#̫+@a6*(ATgr?P03T@qa r݁Kgt츿B&G\(0eᒚqf7PjY͟a LkNW}P6t k3bPμbM@L5`VաBkNC@r0$63É`hv&HVe7V Dsryx%382e t;DɍR ̨{O8d+{}_,.BnVAymXaIzehb +I9iW6J!ƭ҈c1GnXg; .5OYtQdkc!ʚFe++ 0.VAces/\'mo߿}o|۷4)i=}3k.kzS9O.4!x???>TxO]xQ;OPjD8N$xy@=aiv?_o;9Y9E*ӗϏ|C٧g8} `>[O4JDbضZTI*{.pڥcd t褪Y&TA< 7O6[CR P;Vhpm74ap6?C#KdH=X^ŦƯCb]pJbLz !,6q "4)/ 'pK$rȗs_lbbUjw3뗊1ZbGϡ<zHtc+xn"7^HMЉN0?K?D4O##,q{KnU֗W,Ky(BCKÔ?Q[VX#)mФEXu?^1zfa3p靹ݪWW:qG` H6*T1AoU#ɭK0)fceb @oh$yfLMG?*JJ" mcm}lo~}~1,Q՟e~p{|צ7W'^Ť0i<}wg:Sa]'X>uKxILNFg!9E9|Ϗ*_O6.ƛO_Z ]Kzg/pYH/ʟ."[ )ɒC-„h u蘉TYd9܏c=z|j)-||>|>w19)08*cMAlv}{/oЅ.0}Lֹx:x?෣٦8-md|߅ 0bťR=ܽc*$rKF_O竻Up cu(!>֋]/ DR"ȅP woYUPXj})Yy }VR[ <9C:C#kn0^9SfEg7,Ir&=H/ZB>X9?F IDATvpq iUAhQA{sl{ 櫚oK#^,iϨU;>Zcm ͚U_|WHHF|/܎X8 _Aiic }9~qn_',G[t뇟]uUex$.,3 j/-RbcJdLi#ae@`’l"'05[G9}7ۢ+g̗/ 4&n(삆@^C4<9[G6d un Xd4p v]:jEuUA?|U?yN:\6RODDCs2"i4I}VK^e(8Ӵ^? uKfɸOy|?7mʱ w˙33 7").wWO|hYX|<>Zemh9JtXWqH+2`Y~z-7fT8%n;ҿM0ae/m_ K幼j^"-۾}i@I# #Ԁijy/v}||?~gTDnmx>`zQX5F}tl($%³(g7̗"1 !SN\s|>ϟ??嵬˺o۾w=ӱUf[/õ5R_@B?zugB'FބN}R s7^7vt QSQA5,߹2x ߣlA$q/"B'$uԖ>y:|>bՔQtHL\1ܑ|hLy s*cK=0tX^PlUܟ˧S(B(=&)طm_m^̗]f %Nm$η</1~_7ȜG>_Ig΍gO;]e{.|>??*<_Zuݷk6E?IJF-H?E9'*Ŀ% {-(d9 60tڡ' `_7(Yf󍀨,Bz{ <幬Zײ?u@/0˭z^~I"Y@>0ȷ*E:Id@|-/ײ-rз^0BjV-cV)dRE&'苩$w0à/aד=MQ53 QAwlM7 ZYEDI72; XYR0Ͻd-v8$uk;Ć\h=:0-'9RXuSޛxm-T`+Lnf ÓMjEpDݾ#W\ӗ@ Dh@\DEAD9 iBõ wKG2p -,v?8ډʮ)B$sCܠclnHt :vу54wOl*i&yZs3pr/{ :g ~)0Sx-L*k[:{\jts>Ca %d^xaE]nSC2eX? 5cfeçS-SSii {R!p]O!{U=~ S N;W.b^7/Zu{-|>_#>k]m]S'(㱲̣=T:--Qs8tQjG1VVr׫/Z2Qwc]@n 03хS*.zU-۲,Nu\ٖ4ˡ Ny\.zݮ7z\orLm jிlm]{}{.buu[wm]_OO!"ěBbC$DjP(7>4Av5^}.^i#m)zr6G=m J@ MQ$=ز\Ϡ?%S[Q; *tcXM5"wPWDpކuHf-[.QRhxX;9,hyc26pRК hZEbVlitNt!e5?vFfa\G4Liڙ2h7f]nmg\Yx32$҅MUpAR]Ĉק*l t)5kiǶKRy2W&%I VǮdpciMFDz ;0g`.j=ϟq';a+'Dwĵ CIR F7Ps\Q|wo}mɮo@sc;7?@WK?k28w16AD{_nkٞx>y<Oaiu6A&}o)EO@~/!@QPEM-y[~I &}Ly;Qi. 14S'0h߷]!SAzmv\o :_. Nsy4Hflvײ.뺬ۦ @8_P{]\;#tDiuԹDIwO5)thn$QE;jc&Lrjp=!%s>B%)m*ǵT\ɐȤ,`9F 9^yCZr7g>O~H.ljϪTXA@ X:݅X_$q`yц}.+B5 y^/`L٦/^ƍ33OB_tl{]{W_!^!w [N@F{}u}[w4&;@8Pax9EZu;ٳfR4ubMc6X/`%qFGT8܁I?P|ÔtIT #-L)q0Pa7ka u0 ^t7k3=n K@J"IYLϛ.U c;Psyַɬ`i4 j h}3z KmvO,yEa]Y~o28h8s{z_EZ|||xx>DlʲwSZW˯#+U5Fq*IMUyb k0Ƹ&-"l8)?{ߚd=i%ޗ1_nS,N^gvt, ]/MgY~ ZkϚu ),.x]nOᘫ[3Tc[yhË 2w%whW^~40z aވ {ꢆQ|\);sL\' a[1b8Ez 47ʣ;IG)-\"eQ9ME4y%"p(b%"'=*m\|Bc`0]{(dQ9y {9- r&O2L8pqqª4!i &n;#qџȚ{ R*&[ (5 2-ťyUf)uILyԥ*MN@n,{"0_h>D-]z)z 5ʺ(&3G)Zaz=ws`yIռ ѳJ̓l]i7)!Sߤ\w 1TjL:00 c$^+8dGU v7+FUy> JpR]c`Fy37rC@אi)r +񿽖)Og| Qߔi;pd>WBUϟ?=?;{3#_o OF)e<| A s,:찏3SR-/5<6=[d2 4 nگv\yFlӲ??yO<1!H;4]`$9淑ZF?VSq I̕φ$HwyeJ;^Z{}wgM#B.-OI4;흶݈e}Ϲ=zaN4,kd!@[}0[@,MqਉDKrv~|`p%Z=a-k8W=s&,ϵ@ #K3 E>x{ށv@87*4 &}&dWLИe9 paaZùQHJ#؂9ΐҮwȟIeqer]n$Rqo7!ĀfޕdVp`,L@k ?K)wSaO3K@M#L(!:y)J:ʦJ64& ׶,,U|fșߵ[Xx <j!iH Y3tB BW IDAT~Lq*KzT= p IF8Ϲ=ӿMklnCsZF{?zip<7|efIURa;/s0wKˈ1R? ٻ,ߣ~HnB+J'eWh$?A~Oӿ2X5V~fLB;3o><e)Ԃ5bzCDbڶv\ou.3! ٙ:k5$p}'TOˡ18!!r8=dT4X*;*ΤN%f3X&^x~~~~|spBh@H:~&2NX`JEI=@ B^ג &C"^pOXFXTċ>m*0 9M{,۱Al`1!l H?7ц_ MP D ІRqm!?tI%*=/iAoJki!mES5tZN{Vc ;y " 3OVOo8_Z~ __S>KO|U{ߥ1ZA+|fr*lNij Xt9C&o._֝$.IGKzyE9f.{#2_2KpgQN PKv6+bK$j*)ywjQeqyG Uqnh&^7j蚣*ɤ|>ϟ?~kkĦ Qip{K̉*\.*q gߞ->#4w?sQmzr.ajqMta˰95( a?]cD,2)nx?tQhc8 : v 7Osz FYX&gg0* ؐ'DW(߂ljGF'*Oldtj(|zBDIN}X@9˞xߢڻE)0 dҌ$`OBuZRc-zS"Q[ 33ǺNrxk<ϥ PY6V !`++ o[Cl%À9 >7N֤u?:2Ӿn߯q)S[XD! A]澞-N.ˬSP1 ?7]i@ha}]׺>_%|??'=z;^oʿ {)AO! -(ijS6'oBc-c/ vwX0cW`gy*P'o11>@a7AbZCrR%jJ@or/9`SuIgܸ 8ȀRT1 CHeϟ?>zשz"_hd|?W,W]J(k.TCآ =Wo\MK%t&`.TKquɋNXQl]@Dӯb0zG0g 2I@P8TLCHʧx:۶}]Ғ Tt#8yOD՗2?bb8C1ⷽ3o>.X6\l1KΉwt])/H1,QB׀ xqsL LUIIdW2#1X6,aH!*~o?nr[,T rfgq *xdFq0svpՊ^~`|p ;9<%f64$ѻ {Ӊ5\sRO |lW'!}Q@SXW~U)("s@THAi4AXA,%q*M /3O>l6[>6o5>ANu追~iz-m$ p`TD{lw #SdʌR@2;1GעeNu&x "u~[) 32)\np{f 0L4PQueu Zĕt˩Dմ-s bflNL^[}ݶo?*`,X&r*4Bnm@BdbIvq-cAO^PP 0TD͸OFItG+Ͽw]'<^o| 6pFiߚ{8AfF>s#4ێB U@7 uBl͙b+-bL),r5qCk?T֝RSQgmXK0k.8VҴ'lT@.Ȁ7{A{h̕^欹z( d4A@/c.Yx*˓0Q|oe/Dg*q-l&B&FW3WX$=u^%Xpøʹr t[ V˸'%1Uaȓ/YL89sx*Blqx$۾om~JDyi&)(tj ~giu˺ϗ/ :#1}tH.Z88(3wʖ P7 3ϷϭA{? "ʁX`sƜ2.MN||pd3%Oհi@t_Z6KZO໛/.Ou 8[iu\vugw[V%RU-,r7jʌ:AOLԅ# WEsTtcEb&I@@ ,6Nqg(a Ei\пGuέ'.,ɩvS9,ʐ#f G$IFyRt$KsL!ÓfKIWTU)ɝ1TM' e'HG Vp.cfDLKq!X'茝XNtp2ꞕGkgĭ1z^RL<|a_GjjjJIr֥ע<'~4,E'CT1 CdJ)G`BN%t铢]ă'gۈs[DqxW+<\" ]Tf4;$<>rWpGv/FDgo}ӍllAŔpOZ;5? 駱m֗-A"x=$Ts}$&= #'D( LQQ@fP1,l#/\5k ߯aC~fP @Y 'D=w,<^'A@L;㎹Si/ FFϣ01R CY2INzz]`ǪXGucr$2a.A-fM15q;QeX)qAcZ=jp~-˛ߞ~Rcektȩ-&?W?R/cW+j) 2_@lK%.Jhxe}?hN ͯ 0ڨOƌ^=ά"F;'cЭLl!H H)KG84*BjRANZJyռӭGH5+~siBx Dptx=*rxq V3#@wxfX{n7\/b nSӢ,A遉~N.PKQ9d&͏ky%I|eNe۶m7w9>-= SU2sa[UpÐQVR 9&Ɲ _ !`ŚHߪa*31@a2ɹd,OcZʗuMAC[ Ai9"O1p/=Q=m5CS#5J'ɫ։\+|umz'"hUX;L&KwzSWG!`zLLoʥ}_2zpP"72lo`"4@ѐ4^hOycVUrӌZxn p(ו.,'×?K22>CO ;rq”5^"sCVɳYP'?Ne97Kg/Xo8=nj w?b!|[39UW{Jةŀ彰@ T*)=̖)ȑ 8[i $=~*:X>E[Q#v #d9Ћ00ZVgY;'m!UJ6O&2H&mm]-wa9'YAcB:#).hM[ѫD|sTHe=0YV|[Kȹ֥qkX+vPI/6JWR^CyhJV1d}m)`۷wݮ+_i &pU mz?0dS'YmۗM"Y<|.ײ,|YyȫcX}VY`9ZHf,o4{rN .}WKh! mGڛHzzn6E1R{1Oh1[X S6%%;,ΎIZKb81;$ l `L""Y?~_?>u|\ӴbȄ g?a^L%W) ]B )W%)ȕ;D ͻ0n" D/0+yTm&4 @['-N>Aٿ@ڂճ6lx: q /3IC"&db"l(*H@fѵUg%-?Ess^'o53%)7ioV)!7NK$m ';4Hѩ`㠞QGϒ0mΤRjmrozԥqPa s?X'QB :dhuEFg"C'[_޴fW&>>'|'Ֆ|yl DegcU? fܜGr7ѯ8O+d"@Dҙza&M <޸=jϘ ~ $aUFKi5?EZ1R VTExq_#9<28mQ?bɩmyS*(N!"y6fKst6Ϟ #@sT0 {źĴl7(%9زNw^&rv?~??n2]6375Zy)n։\ g\fLa *Hd03|D[VGj,-dI@\"k7G48rq$x[Fؓ h!?ˬ$ГťyEkCk>o=#Pf&h*B,Q qCxRd&q0顬$(qlMzਭ<#=!MU`0tEp9oV0$x8jIc FlvڞTlT(J9*|xDу[!s x:~|zQ1@!27҈a&ܺEO5VUL &Hr 2C顫.nzmW3@i6ct0Լs{s0 ҁYR6S1 1r}%GIZvHKl,Ps7dCFR6/LӰ10f%}9Պ0Ia}arEvy48ĂSgLV̙CCq PzfNd8W2BsN_$O䫃R/PwtxB?PӘ~X IDATпhp6+4Q7[*J. >s W=vizEZ$)d,lȤP`w-XnvkȻؠB] m>zxND8i3#&Pe6|"(vYb0ﮕ2 j=C%97$2OAQfoA_ 9OQ$EܥkWkY_^ _ 3 A9<:!g6g9/fԎXDa^x*nͶįg)a &vsVBܡǬwJ6Z:ѝt/ܦG bI4@6634Erm3qޮ<<tdU' C(1Eh37|2sqOzDEL bN {u:y}ʗy^G9,-8 Ȣŕ=@ɞm]:cr\q~^/NC#&qRa3f(YUЁd#bN3'E!z{TKqsoX)Z$B̬Ꮝ %Ur@h\JDLJ2蕬m)P.;3aVuF“%̘eC 5vڡ0h v(*n \"LѬªir^+1e]zp hN pUb__ zopp>FRi@]jN/2$ 9خ$THV|7"("Yw VvyP;h"*tWlvpTIN ، IŋbiR( nv4tP1t^"-⤳.6Ae@t_FX -s) ڃxį2r Z ,1+]Gvt3#2R!"#`>H6`{ݮiU@C׌%Um6Jgb1bwsApjeP<ʜSKG̀uHÒb:9͹#TZ:t-ͩmwvzdI /iƟoM>]eOA$'UyC-@Hf%GPmᲧ:Wiɳ&;NO]VLFNņr="5ƒɃszM-o*3$6jq=LAL hzFn4w=@9^wP%<[8!˹ i$h,D_P߅^0A u'I+K8uf!Cӄmol<!,6낎yr *B7\a^R';->fIಟUfFdD`W8ewm W0}N4\ pg?͑h/_AgF˺-\R;}_]͌{zߛ0c)Z#-ZMs0 5*UBGhx"/l7)|6W161X\LD.k"Sgwqe"}dd b'FQߵ ,OZi̗v?~ݮ3ԙ5nevMfpRL4``>';tcɵ mX fbJS|;31uWQ\}l Og,S|pNf>tm@p:gVrfigmMCnBT೐T*lrXdJs:9<&zȩiGsImD&1f/>իF?^)ǒiN"凒qN֢e1:a'<7-͑mZ# y*D `Bl Dؙ¢P8V}٣ahǢYu/_Dq:[U6ħD&3"w626, t`ZVnGHgt3<d TDL;&W}ۭ_/Y65FlI 94t7Ɂ:费J3,'Aau{h/}=ey9M }!R>xKrSu#o+q?qmAX$Ya5>g<yo<yyÏ0;0o }Skdqro{/36%ESWx; @)j,!g̗ rvz^`B +NQͥ$&Z7)p^,O9 B2ec|DꌾSr؍1VI@[xiNHmZju_\TWY'-J/&˘j`E|V [-L8(Q78LeK./7ʊr:Muu8R" !D/֐Iw7'3^n-wh{K6 V{. <@;&g_<@8-n%|YkIu#lK\il i0e5&%):4j\,Rh8?>G К8Ĥ5ĩ `F@HHfJYv>^cVF$exqfG,XF< 4A4:gω2G\j%5ᬵFD!㩈=07vCB$TLwUZgvD<4Mj).-N o^ uKǠ{7OD/˲Yz/9U]PqvC?Dz撓-kJV߃ s)} b_txrxO8vaDgN,"_I}xmvms#&qˠFx+P$6O,%!U4 J~n]:;ND>{(=`#e 0u@`Jb)tsVץ HlQp3=d_jVMed '?EP& CEY*ݳJ-86GF0ڜp!Q(G5"7o>H8Rf~^Afcԗ R* x`o{ƀeT {P%_dlxR4l]F.5q,9 }Ձ!;th }!OV d4G?WςE #< *̡E>|/B>4X)a4Zȃ3VߛύmGl Tr .x' *k˚* ~tį} "mdjL1ud}auqv^yYk-}41Krm9MB пoz*u[P㹼^sS&{oY!ګQƺf˩Șbz g?SW ~b߬7p'VBqgLw{yC) beT5v[meU=zرcx@1cr}WP^h_ dn4 /n]:qu#]vN.))8f|T'Ng@^X)܆Cg_ͳ'>oat[$%$ q26Fe%"B"8dojZ~ I+Axܓnj;f7+wimy]7X udȞZc pr4 -0rcLצQ"&Eh}Br@vL@: 9~ ݏg5[efDNEgG-Hx}dQ6Y Z2MXjN:Pz'8BO٘3@Na>dZ%W0\"O1t1SȜt|k* ի3 |l {d' 7Lus21ke. eh]uVz\I65k}܏d.RD[4Z6nm˺/*!?">uxiϲ~%I֟p1`E\\G2S'đG,=~ Œ')jJt]r}EbIGGrԈ5eBs}0 i.e|^E~-ۭHd/o/Ʀ37t@edžN( iъc2Aa|(wCy' @P$lZ@cjH*u!jbDFBf`Bd&y8f=") \J- cC#934~(5[%9f-`6]R|+M;3'܀bp*P4ƣ#E9e5AnG>(rp(n䐰l8UP= ,z1˜UAT@;l[7Y^6N)l<23@9c HpXW%e[ҿ!4c #Bcv%]z\hIuA𶥎S{6ar̹E"~,3@sjx'~wtРSԈ OP~gngLnտlɪ_uY6ض~ov]扦iZ2gsIE<KאMo #HSy)|ZZu[U e\~7\uwhԲG2*L ~hLT`c ܏gW8I@DdԄi6nquݯԈ鵼^u]7B)VhFuq^i|WbH5QV>aZl|\4 fv|(('n1Ruò~ l\:+ .YK AsT.o@Ī> @/Z]5 cщEa;J,I?gԐ\"P .*a֥K+N:P $ DYh_Ȧj `Iᠢ,E7|&f(=V(B_gqVم̅sf3(Ň;dنW~>`8/Y˘*2stZ_]b(_n)5Ise +r'YӚ'L BbD<7=7Y ҥ}llTeQyFG1%m!64$9ȻP1:7~ɧ"B%C]kYm/~N 9MC/'p ? ~kt!q]ܘ1E ˚0%|z)osMVQ|˭X'Ӓxht07,'[]j6Gk m*iࠃS횎Z|9<5StIס&Ĭ>%7IQ/d@Gptŷ[r+Đ3bb#K*ߜ̉Ld\!21IvqtZ4e,4KWJ%X"ɣl{ ՛Ah~nM4B @Sٕ} Zs#8E)63O24Y}m6I\ 3&Tۆ"BϐnA5Pk#vԬ!xu#zweIE4Z,$WkZSfV[~Kt&QݤoTNovMrQΟdoLLCPi)i'XtM[NА@שA0n.f4˺.Ǫ_W op=,:| ol7p7qZ1$Sؾ[j}ײ˺,m*:}- ~ P|8s0ۓpkU~.0*~I#ZASw ph3>Uv% 16}w.3 |Ԙ8EId-l͊i7iDbPgUybfDl;1[pMe-kUƚ DaO+@IK-sxxJ1L;@ q[]'3{,Yz`ɟcMGUt6Z 6lТcΉr\/ x'@:ƬGG7Eȍ K"IͯpV1sv؂?tq$$gu/rLے8p~`D]}n?Y)S0Mm˪e]Rzݶ~<4--i`iҭq䯇")'A}_Z&?U=ۏφy?tCWOx?_6k'}Y$pHx6SxX|#~>7zpU<}YCWLZ[My}xSKOp|k=I-^$*ȴXm^ii2i2$ʱ!2D&v&H16߼zPP_2q]}En Cwq氪ƱYҴ\uTl`Gwi8C5TF^Elv72dKp{n#k 8Qkz \Tm_lFk-J7w e_D4J,B6/Fj@)y1i hny|nP&i6 7V=ԇle@{U,IV"(-E(V"8Z^B,U0M$MȭiR&}/؁w;%= 3B{4v=Mb0q魲Z)l+EP`Nn->헶hUsXtfK7@ eWQjnQ!b‹1ʼnyi뺺-vݮkymPJ 2 z6R9~7m+qkݷ Mͥ\E-.DN-Е"x3_  '^R&9B* PECJt٦?B-:u[=&)h$br h〫%d%_"f{FZ Wd {1&p˵PJ FÍ\-Dd5] ZaׇӄH$}Hںh@r*htحL;FXվZ<ӝ)&!7s*|kǬ>f&D7#̈Ձ7.FKiI(} r~ɆCprb@rZo-1"#a!-Ы

%$ {AN~=;NA_/\+G-[=l6,YbD2 ]qکpnGj ~¿z>8 YP7YQϮC[S9}YϟK J/ᕞO\kED],^+rR&Y ;HϰZi4'd^~ {z=Ӣ7&XwU]r8 pZ8GܮUxdr6e<,Ǖbh`Pzyl9=;V̀49F ؎Ia(kG'68l.-"VKkjߥjq& 1q  eY=zY2Ae0z7QEXAg@ }A;Uly {xCrUQ_˗AM!.o|pOkT@ U1¶-phmbwMf}Wdˏe( NJ2a)H$@9W3ǰ=-!Nĺߏ4Ll7aGX s !KQ!r;b@ 5AJYۯmmZNT%A';nr%/tALpy^*4<BmfMBPqYDs,-{-{~g*o0,Mo4x^wKyNED7 _K='MLPS@-)KTym^L4̳#("XŠj)Z_1IIblixI/0 W<ӿ :J~x7X+;WKW=+s]|ms.?o@g冬|tQ:T~ңNTHTPq_blߌ2 |912VRГSڌF@ƆIٱAV!"BXKK⠫¬iᩮo.z=Z"4*w!eVH4GG6zG箢F*DRdIBX \%W.'LWрs> s5]m#1{yvMZ'%wju/L%VD@5 6OGtECR Zb`L{EE@AiY^I#-Q?Mk KKpT8^EeHSlT@4ֿȿ4Tp*N1Ko!$n`@0o.@cMLqj5HglheAmYַv2lDdր6 ͙ېGYNI'yyjMQٶuݞc|.EG悟;Qٓ+NPÀy8L񏿓~AE}<5??hN(x>ǯ0'3,"mAYR  4My\J\w&&*{e=kZKHѣcABr@_ѯl+ I\\;o*Uo+ofk54 ͢42 8 w NO~.6}٦C!qIl Qa$*/69DT@t+ip2 @dfY5J ,)[HRpoYs7Q>QaR 4(Ip"*H6h4K4e4VL7q4krsR0K;1Dͫ$!B&U1P?Rh{$fJ PweKvBhq'X>$vL4 I0h07`әaԡDP  Eج&jf#"XB兘JLŤ,ywl4H@/CÐ!" z]m q\."R0ƒU]bW]tE:=6E97PCD{o 2"I23S M /ȉo4DHd|$ʲ\ȘYmJ 齯6kq@*dV>sڀz\狷*B:M)|/5y='mj,\Xn}}¿?sY_@fSClAW"26[w6Ye=. nN ;~h0t'g^Wu$n,R47RMDThBS uVm';KcaF(l^ə_] RIz䴴<9;1;QܯhUn붯uN^emmmm0຋I)n̡Nw;x.%6vE(^5,-ѩSAfHտ$"=n8h"9[!OQή H9+ HC6uiTHZRUn @j:MLE1xFEٔe1aJ b oK#_S`YBNrJJU/D@aZ=L:W\0žЮy@Xl P?uo?g2@RMHɕY9/=VygJgYìX?I"3 |Mhp1c4di,>2HK9L,7Wk!B<F RA$yM^5$hmRmЪ,>ܩ{EzuдWj ǵ!, @$:PȾ 8Dizubgh -5{T2zڤxz>z|[nUC. Pp8WCaC֨hQD?QCtmlYc}0}a#'wFZ&g$GvRƣo 7̋q9U HB"q<_g♨i.^RN JH)"\2]^eB=BS)SiSM*\H^(Zٓ9!!`ehCH7 1Mηl򼫷gu_}xպs8|6gaH/X*N!X[@}ӷsk<^c&~uRP/{S*H4v^Q^ %omj\}R恈? u_m}"^t/^~~Dٰ4A dq?1`}!'lS¶3MN$ hy]J[aI4DRAav#!pZْ*֩# 8Dp$Ow8&}d@jC'lN?}Z>/&.@Pґ(fK1S0ȿ[DnW-,|>ǯۯ_oooz6aƴB]v fXʿy|,`w$mwYq<c9{NKcVnPzB")SYK z3.Z@q'?l $+CeGE[7j{2ob @\Jʸ\}~taum 4yiOe F['Yk`WMݝjԪP)\F͹ y+"_NbuYx>ugHeQ}RM!m3I+gI isD 1mT0JRS0?"1Bt@LP@-\XwRG;; ͋C3O8M0Ozb ܵ>"*tNdX >n,hހvdRL.S$TwSmNB EHm66 :߇-6+% 3UHa 6RLry͍%0aD)E wK>F{[W*{@3MN_MS5J4tܪ6! mhcxF)"@%`BݱԌJe #S3ي|<`+cpk+ <% F0)|=n -l X#O)= r!N3h21kr!Y&2;5_ 'b&Yc7J\f'?[c&F1hj.dԸ n @|z 5& v gCuQDȐ25 FJeDkKkXFns$LG^DfS׬Fz{ެx{|6 y3e*kcpDkv-UO*Wc3}UrgT"+aTt?P:zG_u3@˞x.bvw~vpvʯCSzx#M{XI+P#Ug\l?u? MDB+* B&V'Ge\v_eL(W/RFa$}Y2&ȸmȏN_0B% \'-ت\+.[0B>WJO4S,gKmV #b-# I!li֭$PIRp*@n,&Sk~'#͒s;-*ViE0ZuR Ӷ "le_DBh]Hȉuk"$E`-0 6$%[㞄fYB+E\mPR9Ȟ HF1 u09/+ m J(*- PAtmwN-JaƝZFS ~H',uɼ} .’XB_P|!(Pz 4:F/b]$1C´RgDJIϱa4sr* NaS 8AN;M`DaaBBd5OEz\A: x6:6L6BvDd 4X;V}umu5ݿ׻:v=r |78yGp<( T͠{IA>} Ņ/8? !N 1' cCq@3^AKGλyl#ۓD3H@Eg&' DmT ;‚˲ޟ1sqQQ0]l# M5yS7\ BCJ@&30lbӅKn0HHq&&RkĈ{( 7n Ff xH_iU5@Fbƨ͡%l6 T(kAM ܛk* -X $–eLjS Ij v Uh6+y]RJ16Q,9yY,q9V2zUC|F6Lh G&v \@yfkL^2J}v(-Ь6,8rn +Jʉ(2e9,A'"i e0@m#+4﵈Ï-=-A犑֦]ݟn 5i` u|)3V9Mx6I4liƅy8A'egO B3m/ũ#F3n$uu;JcI"&u{سrY.x>no_7]n5hyj|X#?=0Ϯ=u]}W[yݕZG?f5qw ?{Eďx&9N?g,q(o93& 3ɚr't9s2𷆺8Xzr"z>ɑt8bbLj}ŵٔ*,*\rei2Te]mA2-ۻ]W-xݶeY+N8ҵ%|w^+osq5~5m`ۗy|~~~||?.˺-۶ޗ,e]4j,@ܟq`ȔN6MGQZ cDkI/A]PۯR=s< %HgDb`SccTDSƾ6r0;ɼFWGEC.jTxY7u8~E'("EP ZE%))vR*@f٪&Y:M!$SH!BkYQN?HJTn(EÞI":"i$70A_MEK,NpJ _K<.bAP#5D]gNϾ XIC'GhvOb?Ae샺,E'IEx%'f9KjˮHʖf+n +Hߘn ֍G0!.C<&ձZ >F(6Y 7"KZf csJqf/y꿫\BȊTF b~YSIc۫GWBQho(#h] |<vv I-lwq<:B )m"IdM#i$Ҫ@ \lu s}Fy2r&+IEɮ3>c8r5*= X'P|{25ĸ= x^7!.ugxl+E0W~"00Me*fbje~mOyz]nK$Vd9 _1_̪ˀmߴ0 Bb4Y]TBD("?q_纭n۲u{l}}fi`^GdIfKBu ޅ}pL#j75;%04S F BV.{ű"(E0hӃ'pSdl+}p BIJ#C=SKQ5`muO@i:\D*9=fN50!=8FQt} pF\ G( z S0ݵ5zZ)2i , D8ib0J!$bUL ]$1T[Վ#iQ$(+y׵!IСٔ|>Y}vڜOCs|iWl+ߜŇ6dޟK~9q'1ja軃\ÙX^i^f=:4m}m.p믷כV#xڑgcY {U/xhuy<粬˶:W+ތJtE7.gΠȾϟ?yx?sۖnZZ ʼ iq< YGxH'C\Q:IVB_3)a< =T+wu !!AKac[%$*X@mm(ɷ(쳽@!6sNdOoX7Q$ᯒ慑41®.y>x@@lm9Yte }E{n @l9,.Ă,VL=Yn>.CbiZ65q>0*ҘV"e  6Y@S %jߋ#{IHG2S'+S@ґC1Epͤij$Nhk"ܿTݜ䑈3,S^Be"i"hE_)YPL$h8U9ԀHJ$mI/NWU1=HR N|Us/ZfYNcQK0 I ҿaחí5ߟs2iPI33Bji/ۺ<-<>of xNڀH. {m۟?\W+þ㨣$~+裵?@(|SɕiAlhGuϳ|˩V X$}~. cwu ?8~JML'69%_Ֆm N 4MemBxZE-w2SXb* &?>>?GE B^5 oW!4Mzuׯsy>uٷ֝GÃtiHP T7Zm۶W;E/ BJx0|gMe]q(ch}..Nۮ8DO s (ZvO`H1%,Dmdk%Y!NDǁ\yюs%@2'=Y}_2DiZ@t;GQ0&pD8UHq@=o"*eRqe/UK'9 1-edpj+e߂\\֧6۶m~Htu2LSyLe\/;{o q TC }B95/).t0N~sA.uwn@Nc?s`"AthrGM~e<0nwଧ]S~UH,+/F.%`"|f4o݅8Mυ,ey˲a'v#'-TnAZyyUyyW"7 Mj:_u^40/W ->Ȗz?6_dkr!ka=6maQ-n/}OϨĮ(D4JM$($BL(B6w9E1`(>b"?.PT,ܷ *~05Ҏm!EGx ) ID+P?8{ةyx&N)2!ʯ O/}y*e2FOfm[d7 Db&WKE7DQCʵK3n{\1jvduz;D[+X YBQ  H44ux\QP*@d(-3+Y!C\LhI#wo9./^.o<_PlӢE5Xmb`a>f[J#l jð(*f%*W ]7#ߣbB)sAhS$'_ ōYFs%`";:="DE5Sɘ5brT {pVAs>Og8a.hwWBmˤAض( 7:p@ IDAT:S!dJLVY*A`ῃTd؟403Vmsh5 IR] C+e랹+NkGd$c \_ [݋IS<+9xմc6؇N\. B m`.TB|6h0 R+T*X 31 $\kֺX6 ݪSF As8p=߮VSiz_7{V?dٴdz,X|BS3>4'l23huA) 9o1-(#VK'IM+XvHGq0CeFԂ,@)H܅+"HG4i؃A$um :MMu.*%4VlC9Ӵ=t< m85l!~bS ":SiP- *XZ<&Ə bOHRh '$*3"n]p8{E$ nan4;Wd0O  2N{lwb(@eDd{("v/gv$ꆸLw ҄X~E)FE0lNr&t>0#iM2Vni*ۼ4iT䘾{Y HiT{(ȴ@ ޮuT nx>|߿??ޟ-7n\IX)R{Jt.-@de2AP~12/T= Cw]Z,9x 㹱XFtOAet&|<Zq(rh8dttb)r߿[H!xن^"`16( Ldn+,*|3DT@a֔޽rei}۸qRDi!;P3v[̗:%1mB'W):Ju[ fhNˊb36:-MO?0WQgK{ўy1قSἶrh`sag7͞,yB^[<SA;%,I㨌 $쪞*"+Ek:r< fG BBTav,#iM Ĩ'xd$fMU5ЁjRcmtr{KpYEpdt58EuaZu4hsɡ<t yfjOO#ᖀ5m# ;_]`Ґ$saHUe}6Bdb]\ E,]xE,wio$= P#%%눞DZ!/h"[XbY=\g i8= !LS ΍"6c-LqL4?B6(}?0 r*Nui+R BjB3?ۼiTT4ϗz^K&@\qߟ!#0aQbU۪OWrAlf,;ϡǯlg-qX<1_;L"u;2=̧sE sd@ϔ\#TNU9F$?J:?qaqgB,KRxO;3 ׺EV[S%@lj?x%{-ѫRD>1 TTr*!@,00KBeZѽ `U7'ҩ0VFGs7`ŒRr]kǑC)(X~("pܽX L1϶Tt5d2$Rkע[zd7'zT 7}A&($RPW)X( 5-ة`:[[!5$`ļ`UBeʻԈhHs2GVK$Ljq`KM>&,Q2ÁݪK+dU1jw;, VP t*mYbВ 3.}SɴzgðrI7bTܴa꿭TY2]MibAϦ? "Έ 4r:M0nTI3 ]X$˘N;n" KݥUu]E@Pe$|W+}Y3f5H䋟.O0ޢ41rDe/6xۼm9xP2)f2|\I/mߗey<>Ϗ}y l֩L2嫲h`j귞?TɩhI8@rZ98Ï5>m:~Xי-MI~ysҽ ެ;N_L> (AtӝI I>7ush@0Jf7@/[F-b) "@ iO*-m޶mg*D@$DSpRm*Q8&'!YJ̆IGR&K:\GW1t"NNtH7 l!lSD!w6Q< 3 %"$@ۇs@s+{kZ/׻RLH'Б#2 d>p(V#՝V~-ثmlD^Gci[$4=Ǝ*J29HBlfdHoaȟ{1 Sqt_?FX0ncɉ]MP 4!m )u p~B6J4JQdCzKҐs`_FtfFxHIijۤi kK(B<rWNui6ke&ɎlOP9dTPƄ}p5+ F h91kR⇅ZHa$&&jdhܹ<-eB=I͓ CN{d{a TDn<"kT u *B $!bcS IGI$jgo}6q04p] ؂υ9a,"

i8Ŵ1/o(q.|k3YclT98͊ 6$>N[0 ^WMd˶gXvE;T/z4ei#Պ rZј$3 ԫ'`~֬ZGKRK2V&FFDXп Piphz HʍU+]2L]u["!6&q&&Ӱͧ:vQHܳbWrh,hϰ\+/q b4`5-%k[wv c=LWC]h5*_&nتǺRR2dI_zdE8JY= Y+P[hO&ݾcoCGLh5%0/pIOOOr}.W9_|$։`H!D uDnoއۛ, PRCZ_ >P#L| v:=Ȭx> 4+⿺{E ,BՏ?F}M~peGMC?xdC[StH)",$[ŸCT &]v (ub)C "xu4\߾UKji?HUo#KtܶCdkY4 YH~ dz]&=ݾ>FњdeTGlkjG6PHӭ/4̓h1I9 czF9ݧg}P[徳$ぞ3eQ߸\TrZcc#TZ͈ )0D)ҋPDcQUS8*Y%oKAՔ^TXc_.b~[n >9ʺvz_]:mr"l-%x{C@1-bqyUN` f@@dh1ZM @1J"Ήb tTѭxw;R=臁ڷ;-fNܺ59#p#ĀSCtV0fy|ةzX~N[RD@-)+<=3<OUNV.OeǙb'$ǹ)V!{*_o){[_%%/ $d $2Y  R,9-c6d^}gG]r:"3ʩ@@|>_ͻJx* x]#а40h{k@F?[0MzžgZytE%i_AT \ƀD'F[Q蟢C X, w|P2F`bq*X ejKԨBᱢur [A5 +5]lJr).`Mi?L901ƴsŒIR=%?m%15OJ\4AE& % lE;&*Xp`1MR.M$-O";g#l'8p 2|_ZSee*Bx&ә{ޏKl{5\ 2ckF9)ư5lb"ҶJ'/kk2@u/~?ھמ'C=8x/TR=Ei5/LlC12rB`":Gfٌ݀6 (BbrqT2}%tC!gp! LlR0 E~9w?'X@$ܗNA#寸&f1Q9IBY(ՇpyJ+}U3|T; 0Ng8_)C/_>ϟYzEN'Ic!Zִp1 b!p9ٜ/dIO6ˇU/p6 ;w jEFzj_? COhVB9‹"ה?yq~Tp*PV`u~RiCJCmvS 71HzTQ}}>l*s JRڷh?u@VǺ+u~hʙ,jhvI4rf!NpĒԨO1&Vv 5"Q'0 1Z@rA#;Uapt q.P:De}dP<a|&N$!gbw9mx2,8+q,Fr$rzR+F.vt7LI>93w LZ!KV1Iu* ٺh9SWmۺRBIaR<,F\ѝZ\\)c0ȌE2yS* #U-2 ya6Q0DF"0J7 (T2<pB86"(HDE1k&.6϶t[kQSc:NX8 As?3v?S=Y5ծeWIU~/_?ӳ\/riZ1)Ya_O%&E\d)0mY.s.ʘA+,HK$g`D *$VDr %e&@%%Nm?EAV4Ҕ}f; @i#Y^lS)%Ø)3$;#dw~h7PAmp+G Zb4Đk00p@?WvrS~-pجͣ<)˾,7|Iyb%Q 3֪@;BʈbE"Dg F,# {">&Ql>h jW-2 C81@ A +"0Pvv@}_Q{U&;$i+Kц!B6&48% MihH4>v";JˇI; Η_8AoW5/9yqlH93^b,?ȑ,B !(1fSr a\.xB3, Z֦q F9G+ pNi@y^9e"HHNU]rK͏~d"%TO{CE,AzH-, >?FʠӇo1"i*d0[@Kn5#*VU S,%K[oe>EǼoIխ**B"~> Ж5CUum)AnLصATg!NAпTXQ*ˇ"@B~׬k2&)Xߪ1['r2bneRs~&mCs0pX4D!*(uP9#=@hRA0 D#s<O[|{8+Ӗ OAu?_H5Ft>󲐵`l4 30J^HQ,F 0à_$r^f:R+= /n?^fA%j'uexw(4?gB!b"!CB$"# %^EALA#k\4Z"RZO702Kdh7xLUC_i2'e-z!@rHFELWbr7LֽThbnNՆ󔏎$Ąa480@)UVcUdrUF7IК.K-G"M]}q_&du O"B&yXedLD엃J/.ܰj9DPw=P6-3= n'yx%o{ !Do6p=g)0qDBLm HI }( BQ%\BeE@JG΍0:-'p4߇‰zv0lHbFO5!p+ϊӋV~`돌ܣM8[ؚLcMØw1SȱHW:nU)r~Tn*unHn`f̵)Ns!y=k:ak1toSQ9ge 6; Nd">ֿEkX?@uhͯ[}~C4 H8n̺;9+<k}c"A,D#Āqm.O|in?On6 iQ{)%'O'.ظõ r28[ kI_}u}/ww>[XET!+p$Wzcs>?=? Ggz#!;   HdB Dbif?ke/=<a>!<CH,??Vx{j fe!B<]`RS1` X֢3h-XSj`(S1 h!_X~Ak` yyIfh8ވZCAz.kU3) 6UZ0$о!j_NԎKؖ-,"9M:Z"~fOP@\$bP@7[O&ͷ@ w.3x `{N+5jf֮A!F.1CDiNlN y /;vƜbzy1&U?KRbE)q@&E`$bcWXWYop^۫. c #ewU*G׷{Km.r<[=ISfQ+ Sfp'c-p3|_/~>/ƾ -7oޯ!!##!:zsOOOAX!&Bd{jIJ|rZVBG"Rń| w-D@P:uo/ èoAt"S^vF]lC@CL-23 ÝglCQ|~l?|pw5?S}`oxO_Uu&F~0O#1ՠ])YB3 %t"o|d)ܨ`bܯzMnC$)5%T?B(?1Ġ?gH(u ]C)h><vqȣR܏8fHv:-&zzÌ Cr{n- B@ kbiYq\6@;@=FaðѶwsוU1FJKm~NɹuKaSa $\v&_+Lܱ(ǚ3@+]8$>ׯ7o߶?6~ynn//yX!Y8ݞys$ƈ`-@zx&F'9FJ{l|}p}%@G;) ң!wcgUM/Hr2&kZr,0Ƥ @Q&3,b%/ak|;"-̥~QrKu[/nAϿdif_n)4ZW)"VӈX)}*"C  VaR#䋸!SPJ>@R2Z{IlPJk6YI g ?](!A+11aF6䞃h8lAAm[tl 7[8g|Ɗ, I>n{_ ;L|,8BZFh菪4$B~zi JŇ)Wu.sn'S;v)P݇Eqdd-umu[ۺVĚX{lxŻ] 1>@`b< FjmM0dk>Tj?ҧ[D"SU @ѓjÑY5FRXϥ;*?N SE~o߿_nK??~ϗom]~|)J* &T$1Nngcs, P$,Dox;+l!g?bߥD>B46F'|ӣ!omKڔ8Fܿ1h-ZKeit @mۡ{O9< JSU@R<\(V\y2E/Q706b">7__JeVhֹ`: [:Y15c0uO`56K4>0;FJ[Y /uh3)$R&ЂG-gXn{xY9R2Qt;]Gm Հ;{#v@fI.>GE *{C 귀nNÖjZywݢB ByuK]vQ1GDYnEA"6iѷ%В4 !D0)yJsm.YQP]w'hYcܑ}c&GGM" Jra`< %>agqW䧍/N|wdo2i`|%J3{q(z{ ^-1@#2s.jm<%{\Q N}IFSU ~ ?MdZ)|&&߾m9Yz??۶޷mKpދ1Ua~lfLiqc: b'19H%D +|;W 1" KBC/G9 8n"O!/? B?v_w' F,8{J30ALN9-fYbs&6a+)֟uT=s܎o\xwM44vY#/3ŠHO׵b?b`Z}[4r<(f_xE($ jN>`NKkKM]oM0X[}@+358pFH\:h]"06F\4͚0-Km6swn1{2g1ٯZy\æ|y}i(~u-Y^Myի`[n]Հ=11 TSVǕ~ܳvo턘c ;J{ bC9P-1O`#֒]TXjVS5?{۶ o}V~]ömM b%lO1>#?c|prw֒*b ABB i1cj C#Ĉ1u3= C!nm<< dĎ^I4z'C`M ϟW]ɷ˗p4d}??/?~`9kGuyFC1Ƥ%JFg{%'@X=v÷7x}7z̓Hz Gh9B@< .T njg c3;z=A8D!2J/,1 [r,N Yg2GQu ѯ|\/{R mbfh`T@ru# @Jb3$ꌅNT?^Pn7ҥ없)0O)o3wMCh0ӪPR/P (7%Տ)SNJo5m3rP_XZ/$K뛒:UZ_aԩfU5x{J=}&=kbY痵[*v_ڟ:e cX (M믢p`6.z L51=[ӜIg,$m"4?YXm[mrm &S^%nOh1~ `ϫYq1FQb0D c q ʏ8B?п3BeI)kNN\"ĿZGo:XNr'E~ooϟxYBx[ϗ?o716@k: 1@s-ιZG֠)ПH8 .Wy_^__vumH_/"ʯ ㅙiW@p*'K(@z{*ADLS ʟ@d?d-.bN.;iqK:]҉xJa R~)+Nߌ* QA} ]u;ь5oOg ܗӏ>E:+XW@:w>v5&>SmFߧ @^^fԡ4vfU9yOn/5c(cTGPPviO7FAߵ7qafj|ƀR(LϦR79%̨xBG]mmS0t Z#yPmZl졕7Z0qI*o*Zqo|U7<>r dwz䭭a"ZA)ڴ|^ XPEPMe\RzC+"0?R*֙z;-D}2埡?fEbcfh~!w} ٶm[ߒ KHr`88蓘'^lt"\-<@<1"G ܧ[F9(ryyߘ\+ւ[䜼R|.߾ׯ\ll!z-i۶<(-Rfƞ9B(/RG)ZeYiYNvYs,EW2`" +<3~zOOxyWnP,ُ_5w{}4Ƨ{hqnU;;{VrdZ7Z/7Fb`p7SbOd J[ڨ]襬Tf<&Q^ (33@6+^V$RݿZ0mA/``4 )1msSEޤOGaZP)%*M8ǿDFGe"evvk)5p+>ߪ)IvQRd^U_;UQ;נϱ7/ BZ\pDS s Es4E/|8ƻ# mǏډDlLJGT۱}Jp ؁$^X5'gƧgؒˉ̐mWJK*T:z5hG>wq HRՓWM}/_gyz)G[!T͎([lc,!LM`Nfp~ 䥜t^SYH5b0F4\$ϟ<= X^:0dNs`>v)I qUSz?9Zq-&Zŕ_IZ[F4Q(OdkC,MULwəՁ:5u7OT҆2H{veۙn>0 ޡ{rn* +#s҆NT_}a5W2Z{lH9,@;閦Fk "V4yocIĥ+P`QvuwۻYNo`},si\v`@aN휽&Dz"1ղ&P%mT@C\^%3ԅ@jCe)YӠ1VMqkNDQd?}*?$o1Qmsp,( x9>~MnBF ~RoY(ޱh~210Ա`r>3s +pp '~+_"J$F*3kxTsTs;ФK!h? OӜoaI'{7E>g\9`(u4Z;-).1HS~"@ !x}77њ|>Ntb)UcQRUENg\ O +/p:f(k԰uK3 rrHc/Y6WPBǪ̦JԮ,B%Fofb8g\>2_sֹ QQ)2ct,}jv]NϡѢ:P@ |mV'Tr_1'h+RQ:ҽ[I4q c.X.z Ӏ>nѨ^|pǎ"k%akr 9@}ΪkE@Ks cELU~lz*aP u,2pN0z\"s?]=v]i .-z=>+>Dx]~ (2x&?`kڇ1lڙ }ГhO]w_,e6}0V @D:?D=9ח8P>̭ɥcggr- `;Sxf~S5!"t;~sWEC%UM MK9 $.'=xp>O"'ZxsR'_klu4K5~`Ir90پ?3,'^Y>}/_"Or SNr>?1a3!N?jb+LmZ崜NtNYƤqSTBpNN'9_r^ .'t2*: _d>y,_aTVetSP9(SgR,=em)fYcq9gwYg]RvVdXE}V/nϝ*Z:il%f+wvm6AMEk78^;(կ(6,(RAcMQ)}mr -7|._8ub5@NYsߵX&.^ӳ5\l /() jNǨ;&c#)p 7riGMIbP wz02hAW3UTz[/N2O`]@dd)/U%iL!8 ʖ m"+1*/U:/9 ݳ(,?0@d-BKfF3[N-dYԫHBFrO't X8]/S m ⟨Rgh@;H+r$!7Y/--6)1QQDf&_]Z 0R}lR~k+ZokܾG)}U@&ɨӅ;~J)YKUb0D"KCid6ms@Wt]y[Z*Gkqf:ҩVJ}?Y$"aޟ2F'\6:I?e11 к}sbcRzpHxKL4\ߗˑ9Ѝ}_^ A% )AH\BzmoR{9xҢ w)xo l kez iѹ\XYbK?x-֝ʣ5k&kÞ}!>AIm6'^EE{W5xI{iiAk) !.Nغ.qtVf}$=_2_/rE|,,'8_`Y:DD`cr}z|_9DKzu1y/2$x_חWY~[t>/[h+O)JsV"p ({+Ḇ;\~@}7_'B[+IHj;\UTP5B~>}Z[{Q0XZ SDF77dog+0 A3#mg^w"rSYب -u8+nw3u?XWzWi76z_9| mw8L IDAT=}Ac4QGKnùC]+7[<>qMW5Jל+uM92yпr?&! An<`ts'pjc@=s[? q|S -̶r|{m'^t)R Dӷ1iI)Ζyh##7bHE{FiV**ôldVC=e쨣~'CȱַToiNzܷ6q#v3$$"93@W7('9xlKEΣä3>f$vz`+aiFd=R~U%OOU1Ls~Kj"'D,X-D`Q|>4&mY gT="EкRN?G~.,+gbyYqc]8vm>qsss~w%n\/ CVk\oz[rgEvX"v)ˊ>A]+ĞV/ރN @jiKeZNH0k(5N\q^/EhUQQQhL黮O161ٱ|cqfV n! ;>E-5? x4(}i.ff8R9\EZZyqi7lr2uZ2T]UD)o4[85/lS}Pql;X>5I4#SXNEbW먵h6ilJQSM[nN.*f0cVϏl 27.$cW0;ݛgۺ ËP6Õ7+QH]]k_+Ȯr/˷Hk@[C,fOZ+Ox'~VMj/@U*ր%%G)_ i,(۞vDZpD"y^.~]3. чbt /\s3 >yJ3zu4|%M~)WY/ 9lYE>n̗uoǾKDpugfxmѐ%@=B ,ưyF[ s#9]vq^zL4i&Tt֍Vdג}@3 t f7Jf!> 諗ٮb〚\y'!m/{_|(-IqM?K/-U=`]rʗ+l%b_¬K1v;LrVysl|C]o4xLq}\.tg%Ҿ96 4o>\ 3Л ^ 8QLJT+2)o^g!2uܳ+(/T#E.cF? @CBΝhb\1IԞ#Tѧ)N{~f5<b%:c[ d?]h?jvҖxJWv"YN6 0My"g[Ŷ`vfvmSY 9LF'o EkjmnL̗<]/; Tlzv!|ekaO;W[RS$?ET΁tKZAyS~#B/&jL}N.ܓjfY_We?nIdi/!$rs۞{)䧚E"$T!Z:/޹jMhɵ(aWh[(M4 7_V\?~Hz;wbvѲܮB%s.SC`؎RV%dW)%TwK3CjX וhFxg ]C_7PoTa`}W3l'5tgK2L^nr-stqGrK$e 3o?U@[#d?1"pK>/ \p: \⓺EfS=(пJ}2/?pI95 ?KyqtRAqSܯW2y@:Hy5t,J P22|dJ9/6֝DB#냞#zOvi Fm#%_d?jr/ >e5=7iMRݹ9A:P@ɯ t9t]>|SsV{R5S(gUXc[OT^ z jCOqiv #]=s;+j|%)﹪}L)BQ$Xs3>o}¾ ǩ v59v䐐)A"-ܞz9!" M0',X/r7;~&^^}PKxĔחEb,vI"mv oڎ4, ezIv^57d/f` -+-+ +- /v,i/ <2H޶ Tm]?Oy@mf/"ϔ˺&@% /zTp˿Q{&6jmkߛ /÷l]NbvD 2rDbpAZFA,)`1@,DȵRt͘~VB4و OTڱU7C$OkOO3E8I!A#AraJҢUxnpʶJ"ˌH )7\J Rl46*0VQ]lW#hOyV*򏫶Sou\ JjCoAfC% ?]~ULT~|LZŊv}k#Um͎%~\B眚EVnrXzO";3;W"cV)tqCu]ī& 2V(Fynw} h+}Y9x=OĤ&"&{ п% g5gOYSZ8ܞ5W=E !? SUqQʎi`:mN2h. ר:Ԁv Qm|$8H|?_{Ļf*^0w־fb^TDB|3PO1'S&n %Yъ뉙\zJ13(WJ:To}G-"ZلK ǒ眈h=b:O=75͔v{W_UV=)&&i5S-?Lљ 'iQQf =Ko?Z_&u@73c4(,tH[|8 !14^ĭ!akWA3$!Vֶm{>s>} c DfIB뒖޹H.:v3K= U H&JZNO_ &wŮ_j(L. .^!?nA!2QDFm3z<(C c^rY/5TPIV (/I zU8t5϶bKobpR uc ZH5@ NnƓD#ax/40{9OJt[0r6&kGiaAmuvÔQ=_Jy[y;0ɹSBOLeR.fZBKuaCMŸm'R 5[/$ES:+o?݉$*$lͅMA7)+yY 6S \R taYկy4L1:NuvKB.Y23}7//4Sn|]'·*^)Vi B *&!{N;SV }[ٷcߥ.ޱ_uuY9HkHmK̢*YxВ;@k'4nYVW\o(? `6v(ض|>mc%ŭY fy.SI^j,h:^!th,Fap&mF_\qtx UhMY)aB|%+o4.7['igE)L.]ֲIեm̽M2t5@P\MEe鮭N=ve0wff d:n3ql-R[5' ;)rAbZA N3iuEޢ.4m<i+=t_u*l1:@mwhͯ-޲UL>}=0gL7vg.FL53E zYtXT8lgjW+}2l0w_cb[cՐƭ}][z|\P-kUԶ(ƪj:tBG`WdPn"=eʟ\QKMIHŬ9"ދ'b8D"-ɳw,~]u]/knH@ʈܑ!B23O@*e k.n?p -JtUY+QBǑ|ܟG FL8Itnu\88ϩʘө4jx߶I9IEM#PR︁_o:LN_fYpCUyU^݈h)Q[U>=uZlޘsCE뮱!ݳ8c͘q 0ũzzJa 5:Z#@C&\k}3湧Ix74ȭ}* HT:4(-%byCNgMiYd=*/5P@ !{ؾJ<wN?s+3E!]<.ѣ_V:v s֋xͮ{PoD4izy1a hX}xHbEh1D `z&̅VggqZaOV\Y]pmLQU噙J/Ҍ0`oض RjJeȓJ[}e*O}^u 瘓ڇ3VHb !cݏm}19&ΥV/.K,l";'.,NNm\=`nr?߄r"Jz>1ﱬr&[z OtC.icx<ط`Tv^.r]g/|BIr˓m K9I|"7-1?l0w [G|#NK;MI AsD4pS5"b~zRy~#5 _&{z%%{E*Z*_D?BcߏGzx$H$sL[_x8RS^o5[RL6Z܀~e?]e"z5x eu5I>pM pY6R|uK%L*^o1벦 eIZ#Ts5$ ӜE}5D0P@FD{X,^?u&gvM(7i l POgfi.6ZlOn u0S *w`<=/swРBB5ŇP9)Dzp q0ك~%ds_)YRT¨8w4te41v)P_;(mÖ$ tc{8Aڞ QžQZ ,zr3'2zU{ؓ:OcPnib|=vIc'pyyngwĤDS/5zȭѤ@5[<Se6QW4_DZ.h 4%D0,nė=dN}fpvEƷ1bp 7yr}UK@Cb֧xF , Jy$6cl0cPkMrO, q^EͥA/#2FW9SʜaeZQT/]m1)s/9_TbYIV_qX_Jd/>C.гi~|7np1rjmƗNc]dy01WbSWRF.y;%N)ReɸY mD1V$R{'?##%"~G #zբ*bRex_/2ʹxaO<0)u;i^.!Oqy@_C7guprDrRADxG.꙼_z^z]/%;WzLm*0~5HYYBP;߀ z=g`6m+/>R_F6h5hܨiCMSU?twZw^ ̯ YFTzJ/"]Jd]M#<ۯgPnЏ01'mp_aP_ [oxi] Fw*0ϛM&1m86nQdO8Ɲp rtYK.OS[%eb̾<+hѲ5X6UEӴR&c`Ӷ5,7!@On Uߖy@8&Ꚇ'ɫ5E՚ؖb^ZrZSݰ[ۋ} )sIgeQu&!{ ^B:O-ȘwfK`]VՔ&/_;, $*ߞ8CE`cs)X-apaf*2\L┾_I^51պB$.^@%U/{mt6L=dnkJ6 PY< rQW g1ǩI剔Ltm5{>}pέr״b6DĈ#H1PfyDӯ: Ffr24{=Q4h(?o5E^p ks߰x=Tx78n YN |o}OR%GWZ~Elqnʬ75Z A,%y<Â#NEӷu-fpHdUekZMP=3dsQgx*_>芺X'g &>:v"SD-UEС3O^MQmĭ%jGO7PIfˆ 櫖9ЇNՠ\R$"S_jTZ%>_z_:sTJ_2Xi, u1Oh'J]jVT+~1Tb {fIT^jˈtH _XU~}3/Mq$?0=<={Ab"Y[D'TUXP*`Zމ|h}ȃ$ŖK6L^BɄΠq_X4D4,,^U#WHwK`8%7?H qߞϐ@ 5o5.~Ie٭BL 5FĈII R7 Y %_>.+6#llQlcfyfU{wݗ(ʾ"Um5D}s[He{cѪO3 nXQ)SrA^J5ͬĸsB׸BOt 0VVM3l֥q`@,ҩMꤶ,sjcHt#}?q"4Q2v`X]oK84ndIX4Jc˼-XO-|Sw.5%TPU5dѶ:0z|0ɟEgKp+*K/kj}I L-1]XPݟ_s7DocC^Fc6#ă ۆecW*\Q..FvK_i?j`@s,5 4J/<çc8FW?hUdB3[[<8B'D I!y@̩rILĄ0͆oqGU֪@_dYeYXWI瑽#T󘲵T^ܾSe>[2"y@ov\%2ˀ[R%@#:1PARYU 9E7`X/46/0hk'K3Bu>`ނ4_@ZS%|6lN-mH_((1f_W gWaK7Ne2]*ٯ"I{Tվ0̓\19-0qԖס玊vWwK5~i.GAKF 4JFvj0n'@?rTtwωVzO86jpOw[Z6k}H7qP=ᅑmp /j'%)l:"贔G۠%5>Q:9K_"_E9}u,xGrCzS*d{LQ>[;pñdݛ+TEuUmÀuCggck׵E; _iQZ 4HQ αϊX7Ôo#]'BO{ E@$B@%`7&i3Gzkk7)^o 9x'Dz`-c_}**ʿ%Qr^^.KI#m(Q'8;;@1H_ xsxq9|n-y&5)v.§l"fAf ۮ/m }/GoPœ$;S7`Q[ڞ{*q0p;{Oq IL܋kJ ?lx[p%i.LtM9=X5h\o<հj-@Pv¡Kj=x:ܨ' b7Oj K+ =K0j7i(V(&qX[3qt^Q =E' ~] l9˲,˲.K{TOILWʳDpM[)ѷeOv &L7zàjdKi"Mrٚ$խ_.*3;#<@7&$w.nYsDDzE ŵh6k-Ou֥-/k?~/WZ@H%- e [Bm~ 5辀_g/ zNT6g?ǀ:y WYx/ 34q,-M5n*Ղ}n 3;bd^vn-{SWJi#C_;;݅CbDWZ w>煈4 |a#W?S_u\i]ׯ,0674%]]D?#qn c Oa}.jw@šĦb$@MC-zRkcc`r10ieQ1f 6*fv:=3R+#KF \زFcL+EW12': C6c`ߚYCSVbxӁl}6< ârlqoT_$GЉ&_ԫE' $o&'F Kp քҴK@ōh f~>byE/˲ee?c:r2Fb B<?‘ /U 0ʖs.:F=CDb(&AR4_;9_~/;bM(.>)?g}ZmeB+O^k*>QR01xfZT>㫴vKJ?[hH$ i^G /A *ͥ$2K:%+B#_M+BM^8?bƤfql{q|>a+@rp3XxN=?C(8L#_A _ dEKg{,,}hXqDq!1L{Z琳l+I8* l:MGQEƙ)@oFmQ/iӤiP6pUGp#gȁq1iƬo,~mPX/ ИI*NcL*%k f  m{o_[z\o׋_|R8EE?2ǶѶѾѾqp ,K=0ٶzZR4{҉}CAϙ@ @mFkn*{66nH!] L+XdQA,'IdZ6K m1^䋧vDv2Czw$ʲ Vl\Re Q}dY<‰k5og{]~R!H8Y#1 se}jD۪53FP8QfA(lz9O)1>-> /yr9@A%ٓ?}‘@wsI.uY\'֟s9qJcfN7Vy5-pNȃ"Q1G$ 9HB%>uZLAZSE/=0|~p,ΉwY QUcINklm'|E46PcFis!@')إ93 ,j~C3@W%W-NALqFQ= b9IBW'dٓxy 4ʟ3n,OUWIg#$*'粌noКAX[7'I' 9bg.$PBK:.X$$ 'p ʵD'BOô S t?&+ 4Hl-7|cKR#hOٌc_X?[R?a$&x5ܮv[/eMΈ0 (G}Ǿa{ǃzbd_A3kOo\"?[?v?d/Luwa6D]ǻRI ij4|Wd&:ڽF5S' +If2GUly?lv IDAT e~pYnO֍gj^+Ok>Y7c*{FF #!4A=7C e,gNʆ;9bjoZ0 F6uXI0MlJJ22z#`4+~'`ߕ yBum>EjT-2ʰەMƔ1JS. 0.ғ߹ =l\J.LnК#Ir$Qʱ>Zm鞺rJq& ek^6yG쩋u";կ _rgz*j^OTH2X(BdB qsjj6ퟕ|dMs݉hK(X("K$1H\ip@쒑 m1f* S_ j/iOGd*,iʷ ʞB6a,+Ey>ߟ=C8 -_庮,y.-e5Ƕu]%? 9vlO<q烶'#ŀRI~K_kGΗ~#Q v fr;,#g䦙0U:مsʼnN-!|IM-ebv'VӉ'[)i*EWB&2%9:}Rbs4y v ԟF9? dҡ|w7LgZPV5ɤ< v#]E)O/f.Me39IsR|b3@, ͯƝw<;J*E!;i*ٽŊO1z&+ؗix2*[t{Lc=Ƕ kz]6;&JcRnz: b$qHBx7ڞO6 _!3'UL8mP @>U;S Z&"Ηr\X9q̝x]V\d5%C(hj!0iBn ];.7Y+8KC b@q 6 BlZ'V5f%ڦI:AGY2UzpJJwRʳ'ҺQ)sGM9 YZD |rf(PMVG<+kb©0n.k`JNC6mfw*kwUTXbj`(v$Ed"JI]6CڐL>tE)bԉNxrؒ-]hggƙ;狌J5\C~РJgA["3) @]HƬdX[v+rc64OR2O 2߂,Gt{q")Oy'u 5ڌY nLXZ;i]_KZvi BI,8`LJb؛~yc;znz]֋_2$*#"9'څQ HK$?@NuWLI5mHIJEmnC 8u #&ϒB*Q+Xi`lGz:1>rޒ$UUMU-Ō*3Tr C]؝Jq}zCy!8!1im?Gq>9طgqR?z\.IreE"QbC)?Sxi{bb#7ݽ,AoȽNߩ'C|Sg'5U5'4xON91}%e1;$/YӪNHA3  ]Fv1l*(9qz10+/l(c'uMs {+eǐr[0P~p+ N8rxPtv1"NL,Jz,_>-6O>O?fo6(& . "EmmuMv~T_*k2)?jZOv(<yR{ FxӃlUxB a9\MJZݺ?~QcLOcF۞('oznKpwp/m1gAX4̈́jH2|tqI޷}> }{/eY/%r_V. Dpjm8d )??_r}C8HNYK"4<3#Mq[dC6&삑!RJi4B|)ȱc6~3 3K!s:X BȟZPqU[ZN0Ms6נe$@_RX EсK֓5 f떇gP#Gj|T>4D.(+Dhb /'rSv q.j [鹰\]+MLzA}IeS=ޭMnhL4Obo]&6lwp2On樂R)^Zu*:XTͭ54ɓ:>?iC?ڞ%&?_ (D8CFi!LifO7ƍFt#nt44wD;B GKO;70:+*z(أyB"LD4*3c?pogweI^.˺z_X['Fcde{gWOOS>?|`p#wb|^g/҄=2hG}tRV֔V#g>NlJljŸ$OHX.{إ `)Gm),_˟ vA9T>Yb'ONC.,a-gMt:Q ЙgIqc**)Ա-j.jnXc\iU M}_S8`x\%^1)Ax4J|r֒齻z~;ن~2[Q>hGH,ey-ܥF:Pfȫ8h*:AQ7,1U_2_1H~ϷG { 76_F .<0)x\ʡZ} /_v f6OkdH-FW /uؓ' y#b\3%Z 0SAw1Bo6 $8[_ o1n+QD+ȗөoH4^5V$*&+o^hpVvvc"Ot&s2""b"tYu ۾~|?}ߟ!xeYz^/z]/>EdKA8oϟ?WS>SGf/=/2: &|λpBLG.ȗp; _LT馸 guzr޺*TPz8z3@H1c@HT#9Ƃk37y{ 5kj6MEP' ZUI2l}; d|V.2@T!kF^fhN 0T(U[՝{myѰ"*c@LP&#IM'cIAmX l?ڒ?9AL<8+YȈZ'J5 tکIٹd$D݄16Q)z0!JA]"Qq4ҮeI@r+7x>])-1C,9'eKTQo,Ї JQC^P ^*X _Ь܏,1gxV3{KWBD.'/-ޭ/K*/H'8R42J`<OPzB,p zH1U^D(\ uP[?>1 w߈~#AA~4L0^jV) +хJt)cSr84KڄjƸ"(!c7 Bn#mdz}{<¾K xeeu'PD"TmaAo-HB#.7_C'!eVo _`8_">Vt?N/~wH& wYw#;-jN:?y:1獴DD88無p1x6Ę &5ũ\f `z/jTk cŅ+fl4~=N'xjeձSԣT;ҿ颓r2? a_Ul)lпT$|",蟍L))H>uϣрzܩk cL=Yɞ}ǓϝYl?sQo^ Ltyof4R6Ӵ|oPYJȚSv7U^z CY'c|B S,}@SeODt*FW6i~#gOOtD{^{3M~aGHj9v޻D[jHs"HC [>PsDGq&@B58D`L@[Ej*aZI[ADt@6AxݝC1 2}݉e .Et+cR$mTM0RٌĀǀY(;"kBҲs#-~]r\/˚ /)"H^jX?9lOycȟ?S;BDw ;VG 0s1`O=cy܋L^+ c(w%s$5o8[q1M~cIfdu̜C\"$ӗ7/א1-ɕ\X9*zρ& "KJVVā/Xڂ"I ?w;7=t}XV`NfiB(i< Ct?>I auu_ՆS|bbFɚ[}::S[9DG_IA'lRD)/B0IG*+R'%?C 1S-O v0gSe2dgMJ9]'jm%YVXn^E;(7;}VgX$JqyȖZU$hj*V3:zG ` TˢV@Dhy"KŌ %@ LD0=)\a+(} i9"hSяvf1"}s~CV '$@b34DcL9U[U~?fϖuM%%_ΗtJ{C]->rS>q/V7|#d 0/ JYƭE$nge(/YkU6g`kmU`093m$.HNKǩA[ռvԹB3.%|Vy:R0 H{PY$n% M5Dp5zXm=XJWk;MH.:3\hBdPfÊ _ 9QPU:ֺx) @kL#j'c6ҩ.匥gWIg{>Sv<:0uzĘ"+SKMo6,]ϭN y3x(YqA} $L`#]0ZYB b\h"ξĝMhÊ[BKw0fZIpvL/5ۧw#[~Sjqbbi%B gId^[WyB|b(_3+|Sv%;ڱ''4V=: lDN]MTi7'$ Ӎ'$ژ4Tp7A28lEу'џD%A# v>xW3D;>$}@$e[yy.[ ㉓.f'B5=wŜ!ۖR/@~%{$p;_N3w:o4铫ظ$ gοX(Ǘ\/2&a!>.>X e*$0 ..)GNny8&Ak)t$gR&PC|d@L5\638 gz{yZJDp̢YujCrZE]Z513|s =3M af370W%IAW3%(ZHuiJx|5cCy UDM>jn~AfyaC!8hU]Pܸ̫͊ߛ F>1v:nJ$V1 J!DDH%tPBCmJ5Sʪ^aN7:DD/)E-Fm~w[I@R3{J$3D>#RgJfSI%3q172L ]#UoATn IDAT D6~\|GE>E>(OOP H+ _rU"S/wS"o"y (K[> Uؗ2ZO}~1`] B;J+>󵿞c=`J Bm۲gPRy*Ƀʞ^9#?LW?Y?wSK]]bЏqmYZ.R۩lX7R HKzI6 }DvV#Ԕ@}̵а&w5dX(ž ڤ@ig֦ Rc@b)ͮjAlg@< )ЪZ%:/AS ўtec TTQ#X{r 6(e4Բژv߶{? S2c5WHWA\8{O{M9z bAI`H2%*,3=1e RS5rW)su,Nb}'5W#Ce ڠ UC~ /(YYڌjIBf,!ol"] JXOZ{nXm^cUf@&H*UMD]zyl"le12O9 I$ѿtn_wC"Zl@NS{'k=L{UDI}b82s3=?c OWO3rQbQ'@dbOcv|o= 9k'u'Jv_ F1*L P)|D29$H ZD~B Az\4 P* KnFL&u2СPG(E8@7&M+ڸ&TˋR>M}*OI50o/vvSIrcdCE{u?Bex'Dk؃0c?Bԏ@x¡H F폾k o6}Ȕ؎.`HOo'$7J(Ż1uUO8*T H}m'%A$ I͐UV҉r|  bt@ְ:ΏpL -?Ust*AȰ5)C5b"%i~QGzxd}IB/Y K\[-LZ? ɁTHMN190zՐ{9j *Ltf Xs8$@^Sgކ(W^׋cg2  pk?|s=y nWIz#3癰Q摥O>?G.M??ϟx'_O9v'R~eNfHv82wǕ߷/jtZkHa)m(V7UN "BOCj^0(DZ/s#ooh*N&)TMc5 coPq8%k֚m@eV2G손p-16^F羆b:ȱTMTZ2 'nI&}H~:n_T8l@}L R ;^ 4K<O?bЊwwdZ݉TO6^mBgrr5gye*2}n6z{A BKv eͣ>/mu Ђ Rq+ Tz 2[.t>U{7Kā_Q6_%,+2_sW C@)矡Y=ʟgad H! QrٚL^x7Wo-_sl /TN2؝u(Qd[2Я*LwG6|I e~yvڞNW}N,qpד'_x”B p?3q<ϏϏ?y{:{mMy $cQ^?'㣣@,⟆q:?\j{os17):P Km_t!uWut8}}=EKd꧐7yR Ĝh!]Y^(œ*NVznkZf'; 24]B1ĿQY҈a='A*b n 6|ɶdZ2./N0okt?'ee}3h[W˄,'NqF5 `V DD>!DzjvK ~QCtU[an}rBGco|2ub8i^o ߱OCr:g&3^j4~üV?ꜟRY" 뚘td_%yns?aC!!R׋'??'7. %Њ??xǾ?~矟?_CRmc?Bȵ1FŒDt?Oy;??S)1!U@. {?r(Oz1g3hE{~+t {2[$&$I! u͗^dJVSxP(N$x,#ACneV[7WBB"P=;gmʼ-Q΂cG:k//Ww$R*m (ǜ6?cT5d+z0e ޶DNk0{pF '\ ۧ+R\I!#LZ1QLk! !{GkTp~ЧfuqػQ&I0:tSOGǧlxYkj)l)jOg(MQjN]}A36=(2FӶ,.؇6+!~3ֿCu]5ZJ,Ag<,>gQ%73ԒޖȘsŇi^0+nPiPB_[0py\ w:fG_m![o TVMX4}(I oM P>?3_d cx[G3rf7&ɶlN C>!x}Qfh{y4?βU={? iK^AXYso*G9䫯} HL׺LCb=ZDvM{E2N#wr-7j8w&01@tOwLgT;OhxTM~DlM7HL\13k/B'Fugy%|c n7yl*1$ߵ3GUH[6lB.0 }Xu7>UԹ Eu+z4~F>6}!;X)ӸAN"FSF^ŋ}29 fX8$ᴪjƨzXz=M#NLWtF[YW-뀒"+biAD4b*>UZ9`;.0@;3F¯/P!.b=7։WƀxrSg*3ԛt Wt:.yoE,A%R;_O~~dx?`$iYty|=???>z=cgJey֫Qc%řp첿zO,ox>}DZKS]ܫFd^7_$g4Bn+&Le7Md/:[[rWDXnI'kSRj$ԣD6u+iVRE_&! 09g: JL&i_dհ!FU5s-reoP G6cVCpz{֝3G84v\9]';) 5Є 88Z xsƴ` }\n=^Rk88ۧkq1EaEa|l fOT5@5f bR=YJ &=kkT?>>??}~{<~x{n5,"ߔ9923|COzɱqH<%dM3Y=n~H3_e-k_ F90BԠB BIJ^%W=#I I~JI~YQJ2An!X$TgHkTd֟ K6K/h›tq ǀ0Z݁%b(neaI7RwR) ,8B!}.@6;[nVYsRե{\F j:g+ ,j.Pj=D킾)|%tүDh!VMkK@{ v{<`>r2}Y Pf96}%rCP _]r)c^Bm}}+CdVCp2jWw88z?5eWyrRXsJ_cǑbud[oo?c{Qn/ |S^/?r#ϼ&˴/_4cM}3r&߲ !@R/&o3@dƿ(vjq | |NLZ B!, @ZNLR/ԡ(?;(AHB^T蟄i&\2o$)-j =lUF9K |4-k3Hc=u"i=Z6sTGڽ@ۡy'Mie:Ӑ #cⅠslUM&`)MXR\MҼ[Ǧ 3GAR]D5cۓ%UHMlq5 {([\EMԄ7`\IdC{G&Kw %׿A,ETD$k!r5rC뭾Ǟ_ǫ()% ~lK)]JOfAD$ !@2'XZ|2pM1.3 *}FcMZPf}ŗ_8-iVkN[Dиs."""[ar_~N#h+ p2޸n\Rv0ŘγUXYKY?~xl\/ϕd.KO>?!?G:1/Rs&|ERy#]mu&g 8j4 }R˿3zm=h~B( P5ZIBYlޛ'dQl# $u db yHDDR rl>JcU鄘:r$Ӵ֤;UnÔ糀j! Z..0^r,c4/*^d}WB?F÷Sh+uvSRUq9~џz|(兀Pj3҇mcyP0.peT5C[zZ!9J 6 Msc \D0V/*'DoLl>?zT4WJ!F&Uj۹z}3i.[x264k"l},U fC55*Z,U_۲=lUҿw=c@ySY)6um5丷2[{GV dTz(6]1 {@T:%Q<5(M NO6h FKܯٷ_OYW+UB %'tۘ@dL])  <- uYm{{<~x{{u]()Igz~OA'=G:sbn%^"yAyOBݿ+LJq{-[:靗2LcL2qk{3TKGA H~f_oR`F) $H yPdPDD0h@ںݷPE+6Wz8¯Υa΄ꤠRbfwrwo@6򆳠J$y~·-/k/bcO~`Ȟǽ78*`%f9 0:6d}{RVT~ '/VQROkec-2:trL(SqE/܊) OMwJQfg)SٖC]FZΤ ]RiJ;_ul󇲵D`C\5,۲!S o۲narN IDATP-rr<ϣz= W}d^ Ԓ3s)BV/u?e`W \OU A?b@ r 6u:_ r* Z[F'@Z)+;/8/Q#s짢e}m[ ?B"9|׫K#<3 ggɤ Dϲh?rЇۖx6AŬ5ɫOߙ ާV`M3ۭrm]3@`zb4@K6WLr1ċn*"nx0}T$󔷝m e ” .˺n.뺬KYC:HL#}|>?땎=G:ϘbL$#"-5@Td"[A_5-|6|_a^wQmjX/ (nL^6Sުrpv0epͱ He(IWrCiV|nn|b`k}auBktu''by+j%^T \Mf"@q3'4Ъ-⬦$gxmyZdb6ۀ'4p]kr_&VW} I iMZnFe#u"v%TKcMA)p"4 vv #+Fi Q6O L}c5{{:˜U$aЈPBhjC~ar5,KI廹ث(s3 ?gggL¤{9?gt+hd74 zA:C^ޮ&NǑ+Y%z8o]dT3u{m> rUe޼ zJ 'NQ΃{Od|8!oo=d]HB R.)ڎPY˲q;$RN!Sc:G??g}z3{cENrp?^tI[ h ~X7Y=G|qoǩ-w=#m>a !C"ϫ.iR(p_Y[@}Zڪv*A-$$ v/ Ih%w̯BᔴWvhAjvgxpп<@J Wз5̈* sv*'(Ky[gE b(VCbXˉyj`z:-—k(k0s5[ͬs#4L,U8Z=Vt ]m6ԳkpkFp <TTh4H͹xV 2O1ff7D !lիH`cH>=ϢB3+k~rWvE&&a\/&PQ_%x N "ŕ`vf*Š .81N?YdK.5j"3o$5;?LߩfqHH 76!2;DxAK'C!@ζ.RģZ{NCz/^uc& " @П`՟r3QEY]D4:gڻ `&+(_o%Ղod/uiƦZRe͜#޿|ә[Ұ8 MZ9o;!oX̾(NCƧ2ѷNT?De | m*L ^}4&/YK WNLih+NxH2O2<:)#Ws1mC6@ϧ`1 'DDz8635۲~tĂW"~jGvlˣ߫&TگŰ?WtKOyZWMYVb"I)SLFW?+<ʟN]2 !\ 5?tׯL`djPuTQ)j4S9ȻC̯R1`Kjƞ mK!PKJ h~4,İry*ƓH gybㇼMYJLӠD0梼x:v!]̲e?7\S gm8Gx%XD!_zc͚ A0T,liEJl, P,Q+EX$@"gV)VzĠrzl4k$u>Cho%tj'qQZ)Uʉ&{//19L0A~/bRfՉqާaa{W{ՒRL= ➫FZhNh1Z,ݿQG/H?Mh͋>¿ kg8aeN0qzZ0#7/hj~MtI,l I˱㲲&]VcjsRJ@׹$}Ucw++BjS=sYH!R kDgU@DZ33Gݪ[Wj%d av~Ъ@kɨ/p}BWeƝ՘; 8(FBohZg/E!E/L_m3;|?J,CJD0!żۛ #dYbI lhc.`:]ILFAJZ Mir=ppp"oƣSRYHƏhݲrmV4e;h3/Y'*OJ0+ϾfTł1@Rr!cJHzOvrQJ^k9nY~ɥ]Z[ 5(c}H&ϔ{Ycu{31F2BW䉼IJ4_!i[ ˱U2K_½̀l+{8qq"i8 Z+z,~Ӿ[==0*Wۣh:Q_N&Cy<=eaXR@2)O;,;mAySBfՒ/.迢]?m?6:NKKO޷;oYUY}Oh-P+S:Sa¦@9a̦]0ƅ1bA廴E1s:A/u:G7:#` ~Sb:a_oi!ϑ، M*?.6 w\(BA}%Gv_?ː~͍>\mYS+Д!RH%C\fE]Ѣ)Mݕ&Z{LF*IÀ Sϰ+&ҰYቨiӄ0]$V@/t6塙*4m+ꔯf,+]˙Jc*%C #gQg?ߤJH]n) 9aXL\W~ۘ/] 9 ̩-oZ ܄@Mc|-A[΍+7@ǀNH]5$Fl<665+%$.Re83}g,?1e}EW7 H^>Kme.>E{wQY\H}EA)$@P`BPܭDX0`Nyiq#Cĵ4b|Qc%g{ $ZM?5?&FU-=Ow2z%N--<]V#uO}[ 6_@^ӝ|!Ky2XdJO~_Th>I {3Ͽc-P $Jr͆l:`n:*e ^h`D^Jg%0Nίmv)h@?ItC)'4!w94␻bxyzX uM˒B!$ HF2KwΘb*྽׈?VO_G1 C:\Q .Bcff4!i 7|[]&5 0諀 RTV0 8 l6ȇQXYEb-@ Jt+St]9Y +`|-x`(Mzy'/)PI;18E62}LXYWڤ pl{z Ŀ_=I .֛m+Ku^)Ԙ?Y=? ybLHqtEÍw/ ?3H6CAjV2b˯^ӱeR }8Y9]'/UY1eoҸʿ(y I>a>˂" 5)Sd翨L1琟RI ,!,7,HܫE4:UFfrٗ^^b~M|C&CY?Zc]wf|k zu˷IL~u'\ |*ڮʌt.\iYⲤea!]DFcbJ1/̊'XF n2w/O\Auu+OL@9vh߾L#o=kt'(.FqE@L%/=pqu"\ݵCKaK)|~" m;a &:r-S*=a0._|rE,Qubh[w3 eq]^/a=뺬[@ Y'b~WVZH?`{'V%#zߋ!S~[37 j%>X#%<Rg (=sMF(DMeEA/ukEXR[6;o\\JZT@]U\?JƂh2g 7:|`7ܟ? {K}SKs\hlX $Q`).`cwXoNcʮWK񴂊8|C̿"@7IKgmhl?#)b @&Ӧӯ)%B)B gfp}YDj>)dHs{/fG6(_.C x1v1#9 ZKYԘq2>ƨrL!_TIE"r]&BB]:\ue{v{GI}%/noT$ A% X*9#W/&Ly7;qA^2V1Ot6hE1~c/۶nc{l۶n,˺] Fۄ 2 WyG8YVV'C*`KMlS,o35a4FCEUa_0P@ci2'p~xqXb:mm.mV+%85߬)eJ/kX໅u[7k%Q)ILl?JgG1fSb&s*iԵ~)oyƒ{ Th-F7ibG5R]v`O_@6ܡ09p!OPuYWTz4GI*G'@Kp=<]kxEW%W9* ")"‰J'$ Om². 4QSR~o2ag%vq 45g36CJq;THQW |oZ>4mᥖ]kLj3Me`K0:f h15#7v[D~: IDATj㒢'OlK' :م XmYm붮)< UԮ:H)gb[Ch˲VR- X#xg Ct8ͮ9el31 ob|o.@~}0?.%sT377C5}BxaX=u+;a1\qHbg=G2뀢Bd2 u kaeFGy[;p)_9DCb퉖Y蘾>S0G$hCM?Py{s@zp3d^AVqL yqD_&>D|CJ5o7om?b>A7`U PW% @+-lG}u3Ks#]t 7  jl?tAx 66.4: HŦ^ cL fpScjh{mD]tjz~\7^̣Mô ]*+:)Ն3- dK]rғ * awI>fqwkx֟RdTo4%$b[m* .ba-YP|c)Ս XXmfNcThtIsZ״Mu#p0=pSӳڣե('P@%TYuku{,cݪgYCٽX?e yJF?jA&An59, t ŅGě[gB0QcN5vwBCh/a81HqNK+5)> hE>p@.=ߌᴊg:0ENB5W=٦Wizث1bkD;r-O +2NσIVƉrl.i=\nQyEGqT>ΞRKGJPEKqrǾ 1JJ*bP&Z} z 29ֆd)åZXMEv{=59kwr݈tcӤNK~Ekµw{Yr~g-<[X%_r,rbTTj?8M!;Ж:z-(肁r׽snk$:4ǾL*g=w3reMp>%f(Ūi׿cb V/5tBp^,য়aE 4+ysE>e_Bח1g2hcJFrv7m!X$}D sI;}z%Foj0x, =44Gu4E^,͛6ρ!Sl)z˴\8tײOS.g,]X%k@+U.JO=(Woz)6 d1wp9uG.Ac:׸.gd*S-jWֲm 5&cHMm}۶ۏc۶u]B`J)M~ڏ^˺} pD$je\)TvsWc|3(F[' ݕ,ozY%0ILﳪz~GΨQ3$QV^`if_d迭- Wa-6/}k/@)!yq5\js9%iTzVv8HFK9^S#T0@|! %XRHV=п\6~Hgvk*~ӷ{ݚa `=%R@9 ށRHkqcG,|S|q1b?6?@`bxM]ʐwAu կw[Kj~GD3IɮZ':"'U)ԸL VyuiLЏR!ڴdoqækZOV7]/!eR*˾,M`-?Cƅըl*jcj L"!ضxlk^"y<}_.ۺTE!k1i+55n?ʭqnD_L2gy',[^& =w uՖ#CN WGHQA)7lXO` UȘ+'Y*{jrm=cW5ͤt [ ڜ h%Ǧfp>^Z-/,C5e5W0Ib@quvG | ?S7BO;j_\oMDK4;lB&H{_: *bA9*/+O+|o/AW9^/:_|ʚM>na<"p]{ &}MI):sV2mZ5,lh:f$4_G.@n[eit(*S+\LpeF=bǗRU[ZLʛE:m}`Q3$_Łگ+gkjfsFIXJ1](9I@JIFiylTY&VV}|:\17 q,H> Y,?Sig\cR^/3ub?UݼAʟM˥܅zC/JGb?aݠ^Sma頬7,aпװN_]_Z欩;ZW(=qxLdJd2Hj"$R"1, swz_)A]#-F OY9"Fً}G vh~s.)ߍծ=tU,_ͷ+.Jy п|BEIc<פ4zĭ&M]5wBKr9PP*YU8;7,>ؙ55诸>7(YëҞ_{#`WZ gA-I0|Pn_:JL~蟢{x'N&fln?WzT@`PaU;-^K%)Nևa'.L,/f)}s۩KqX+tQ-)/ͩ@ ! cҎ8<3Pz% Fm,kgv)E~U 1D|qs [58fjB_KH C鲮ﰔY*m|tO BCWbuYmP'/ MswSzɡf"L!6#t+-x-+yhI-!jE;-}4iZ{sB`W9izwoыRjBHnovc+8-Fƀ \2&8͸XzTNso, 5NRr\}dEi!Nd4q“VLSBmI6 .Q]&srCd+P3.vOt0\7X/7Х,Ԟʙ"A8M~~:fzCkZYOr_Rjoyqu};@t!/1Cׅ䲬)eؖc]eY= '&ŨKIdd^O>'a<.F_Mo">`_1)I  g(_(XkW,!)?bU""}^ 3fܟRT?r_^Z%kRɚ]y5yF5Wb#L4F)76tt`c3ɣZ@4],{RK8ZtCz?7;k5]FĢ9aҖAn`:¡Q(6%!o6$$ lx GEK<nrn.ݮچu7%(ez762؄Ar)(D|+{LOԱC]꺱L'|*e+VœSU]=S5 :C *iJ oY_q@_c&fhr/|9JdZ-9tf.K.` Km$(#TIJMPhR1 rmt7f ?<i+GCu̠3I|n[xĞe 5%ا`ҐkhGvg )2%ɡַd;fc2*Sťb^fG'C#,p{ c8n:6x|h4#R+2VCr5*8,[^ʾ_rME;N7^6S| :*i@""ZBaaWL}~) !ɕLua0 7KE?R.jo3MСrQ}ד@8 ЗVcE;Is?tn bE[tvl,1A rP^wW(B'UNM&?(@ [ДKǺw& wP +kOY8_g7խ؄s~qPaC*4'/wwnn`eҊGUT*3w @r IDATڨv5Iޏ v}|mgCĔ#UVoUhCo&ZPtWp{~҄e]m[m{<ַm]րק3e) (?f-9%.9 kCa+B&r>=Pg숂-GWuU(1i մbL-A ~0m_~&&׸(+nKF۶e+^UVOd" ?sgi{g:0V'ROE`$U`W/kR9̌qݴdk*^d>J^,^C[%:+T Ŧzr J&_d g KmKnJ?#&01z:A(^]'p5l7^\44E(]3lZlGEHs*z]?1՚S86 M 4e9MqT89ci3)+ Jl bN+E_2"MFg9ҰF|q`k%j,ޙ 8[fdZ#ktojSQڻ ڮU-_ RVK"B(X ?Li$U.PT@˲m˶YGĘڝ*kz:yp{ē7ַ*Cw'!,sy<8} b"bbw%"\,%GMc(B/H"nnXI쁨 .ӿ,uHDu/䊯$;>W TOb/<ߌj~p '>UkuM-0yQEWl:h -%bl?3\įHo h rAzWޣ46VC)oNFjs!-wZɚvjUm[/3cR%p}""*~žބ\$yʫLD{^d^/c|i0:O䏅eoTf_N9۝0I@E\5L4L)càt%ıɹҸR<6$#ZV7#^E"Sl4ZkZS92# 'Ԟ#{Cr_u^Z>͹_!wk"h$=N}k}]܈TEJcSsg2Z;-m¶!H60A£{.w= xV)y QAfFdI?w(>Z9~R4yMO=_1~RT"B>3WLjS6 s =\;lTsÅx"t!%v| D8g%[pS4 ~V=е"Hf\䪜φc)3mtD?q=fD8H_(?Z9bԸΘ5Sv:X[dD\bseR3䤨^\JG/^`[) (55q̲\ASg^f~re|pXhɖ+;)m5U;m\ٜޟI1qN|Z!x0S3?mR(ؗ)cQ#=C?TM  TP$pfIQK. 0ƿ4R464swWEẑ4KOq2 yYe )1cfbjT-XoQZozܹSIMM;/p!dzx͏'E#E^}v!7*H}p(AoĠZz$D܈7##z%407#PHD@c_Ee~sC&ku.ء ºpЏk5XFA^}Zi$`5ay#M:YԸm^pLl*TRB,|:$XMz; vedž6zemfD nY "4ʣDA8}U¦J_j|$q9f% f}.+-;tnc*[k3uۃKk~Rnc@y?@E1:&g/sx6$Gܧ2F?ߛNc"P,DʺjCQڋ)x*bHZ]Ӻt {ɲG-rS&Va$IܜC JgE4N=PMa לqά .EZ}{(}=}6zk$Y/dғ䫄v g-f(д ]}C4solܾ2Vzz]59}½#V>Jm>:c' HbI|ߋ9 Q_`6\K*-Kb1DpZ͢LvTU gC^~ Drֻ弗聏3U Q$5LJN-.ݿ6߲mHC^,Y4{%g+%B"&*' )xot2^b<nW9TS<9{iX]QS,T);JjBobEAܑԁN($iEES2H-QZ:GdŘ:wt!ƫu邂~F&8CÈP|~΅bhvȸlq hm]z;1swm28u߼ KD{vw}HԳe^'OԂzs^yx9ƝkmfrtN˿9 qU]sJCZ&??`P}Ugw)пqQ#!e<î"1+ KC*>[{7z^:}ڑka\D/H ' #PIInlj tԺqYxA>gN8߃4-Կ+19SW`;2Ap.? bb>pI)A޾\Fgy2a zc&<}Hb(R+~$0-j!ȾU@>9^)A33"a ?nk|aSW/D~:'yܲZEـěnW%@xXUSgAKgn(qq4x7#ioXc|[b=QA7u`E}͌թn 0xFrZNMI{Q5B$c8 癨~MQ8MN ok('+h  ;0"ϓ nC9l|Si3?xٜ ?'(~izd:{ָݽ 7pq> M!=ɤYj:3Gһ]{=}#~H&{ydF。QK/wqM֎Hk<k{K{CfӜ|ZǺ:9 `QN@.ʝ:ifL?NX< ^8Hy@?`UZF~"e<@G9zU"]4%{|_`ݺl`IxpcXcgܿriM=#޷BSC7oh̅GdSѿ1C,*z$aKtz;oM I)%ԆClj>J'2%cuGoV.77@kލ_‚ *}mI]2%KVuE_9sebEhO3_jRD3)Êv]Tv' x\̵֙_x/!Q.i!ͥWJ;~eS$/$òWtM{\g{\Fa&`Mso !Bc'dGhj$@R@ c/7-/$]{Ǔ*>(}_R.R\~Q mk-P)e Kmk.F/( B3&ߦ< )6Ywn1@vn2Du)Dhq:4gXӦlk%֬ d߻!asXi%TO, |c4Pɂbª7cr`Mik_7s)gn X1?:.+@à \@p#v*4P Z8}\8p:*-YDʟfAB7otmIɀ.Y=N`}'EhS^/؁&a Dm@!DJvMK}@Kd:-:BsM(h[է73oټకCvh3?r` ߤ=w#%/nMR1_!S*ؐmH'91OYU!%f#V*?eCPu2{ƒ .Bm +Kn#Z@wG>zmJc?{+ǔ0i[Jl!]Hnn`ܤ*<УERJ)ջ7U~Y0uѩ&ܔv߯:MJ2drX ,%zՍ%H'hOStĝ}0XMzx(7\4+={oyl8l`a<c2c?KB]ŕD2RJyTZg4.ۤKUr~K*C"~6`ZSCXNN@DcN'@)#Ѩ]Zp\e(PBFBdnNy}a]}/8L_~g%_Kf}~5}zk2Hp<]ssKRj\.Ixl@NڻWba*vW wMd" M&US9C t^.txoi^hØ5@tǵg<&a-D'uﭟn{_~]?zSa#pZJ1;.2^}k{{Wk7;tx˵+@}FB r+Pd WC9D+9o|@Ez:K^.3`7<ygFde IDAT0`-"ke^rI8c A_)8 ZE1puΧe r Ďvtay1eN.7Y a¥SZT(ѫh_[;ť$-~QƸsNi2ֆ` M.T.Ka\/)fuxM}Y 3s' M'krou]%Ft UԘ4S-@#gtoxҸO^c+=CJX;7٦Gt5(l0pT[T^8<07~<ͣ$gE8wy]x|xϏЏQ$@QU U=_ C,#EDN-^b~^w옄BPqm")  z'5POV diŊ?yOT"zoq\MG@wn]Zkkp(T7bkTZE.@t~eBpWVJ)Kw>SgK6Yz0gA ftBR=/[&x~6: aESI)J]Ncp[IҟH!01\{_ @1i,-S5݃< qc:J( 8~!v4?gj>Xb^.ð,&G!oeݷ.s [g"rFUvKэzM/\j lk4};@nwjNG9D~"RaU:4vdm5fYi%%&s o pjr P)AY(S/5~|^_u^(>Hnܸ{D8wk4k(Kq>OCZUݎdKەҮs_X,tɉZC0w.Ŵ7s4ԣG=ڹXkbz!*YzmZ P@%q[i5j5]&yWY!?S"; jAEŠ!?~B'`V169yܕ.懑=y_T9xuϨGtN"@|L՘R~Ϟ{ 3G#ߩ]N7H 1r`hY_ K~Fxr:q x|Fs<' rFR!;k֎()hVM75~Qx[Ѵ?gPBJ'\c49&'m>[i,F%␛ի:dCU?уeG,Z;/nv# Ln6It'ER9nZT8zAq1_'.rN YopK*d~\{OFn ٺƊ[Em9?gdw&c!b}zUb;PyW@lm ^_g5531笷(^`Lq^_?^_:2u%57ÒKSl)Hf\ZU@{1j>FrKjԢZΣzw;ZKwQD03 \+Ba/u@+ݾ;z5_o{{Uy\U)K aEHQ6 d(j`dKD{؟F4 (;NLaN )hdkhi$my7k@ՂEW#~V잕d tnڳߓ?3l"蚖7Rn]g/)hybĺzoY=B;hiLsqՑ9nY#l [B7$( #Y&+2?qt"6q*'T:4ک:3٤ivph _:M@w Ϗ_ztŀ;<=+-IVvfA; :qUǔ{:o\:bq%eb<rle\ܵ08~+>23lrB!+Ka &L(ϙ6APOj_w4Rqs #h]"p~@+) ADoe)JS>b052ؿyvbnmW`$/Fcx~uʣDpä  YTO 2cȝT  cw|C9b9G|KG.k>w[<7.ۙv&\! }N FsKg=5&RYN 8b皦^̞(5@ ZޤPdSSJVu0adه,D|)nAxK4l+'$Ȩ:z}~u4GYq`(U-QEs~pOx;0[qQ\rN4E+?dHXl񩊡-6tO{)NI}=>6:qC!Bg܌fn \{ghR.j9.smn_R~5);Ļȥ ^/fxvh}FG)**\*їQ'hznI(AV\Tm.{7gqN9c|Rj=|~?sx}}MyIo>{5xoeDg6`k.눌^em I-%iۡ2 OG(͸I1w Иn6ݿ' (#ٞSH,_8 j!R opI+nH|8xZ3^5H ^q b(%['a{_1:_P궇F❃mըB|u!X{Ez`;piHD5Nƀ{lE͗,e؎u,dٗR+<5MLV0`IXc||hguʹu(U 3ʿI%j$;ޭ[]Wh)rJD,^ZEKn~?p=g셩E]IxIW;("4L?<g"d}/<^g%gY]]1ѮBy`a6c \{kf.UsT&M} >ڗk2 \p/lZglwϦBǣ:+&!n`yIq5AnB?LUj9j=:~ۏo{z^9 !ܹwj}]?~|,{ur}mLBZ[Wu =!i(@=TN*69ȖSgjLc hL2yi~߷C1s!*e927I2zd>i0=)0v3X"+Ȥix(&4>QysakQ#gm:[2K_]:o%4yh zu8"s|^4?OɞYlCN0Hzؠ q%% oF1vFpQ\_'7hE*ր"""RZ9iix JXi "̏R8P5XBxq!|nm@O`UAKl FkCKKx5&Dhrح3OU\$[nM}>".i7|~aQ#4a;[4Ϫ9x~.WIP ۍ4`U߃4<Ͷ*JVݮ׭c:m ([>x Ϸvpw|uw-W){t&4G\Sx_?^?~fg=zshZQ!~u\}̣xG>_CnȢn.W44XyZ*ǫrpxq9;F1`PGA{F_uGz}" 01~_kjJnP`WrṈu~SĜg,/`,{e(M6zTd'3vMC=@5|%5^֣J_w)kiWiJ8yXY-N\|68B6Y9Nw(+6Z{G0sQfeꋺǩ }\ TPۼD33J^-%h kQ5qX ٨`4$l2!7|\}U˻C/ =BC|FF<a_<^:Qeu63GϿ?~_n#^ڥ! t~dw v~qzN|}fI]gB\Q^U^?EyJex?hwFT,T4'ޙ#sǸ/CJoxCUoxwn9:.*&;S{r^_ IDAT1y8o$j7; PmFbD1Nr#!텉Ik g+_]}eE ncXw»&xFDMA~]W6fX<'QCj*Ŭ'5$hV&%ڿjgQsQu}M-]Oz.YwfuchAobqqiq~AP$ѫF ^Dž_qǎp\͈r$Ŏ 2üe,"'@槽yQ /`.* b-/~ފ򄵿]g'UxH{(f"E6hk譗pMP(=2-&%Lȥ *3zEo *BruzV][-VJ)0#6µC}cUTkQϣ_7Vc`)F^l7 qrHwqx~(8 tuT=~6yz=o^&1+1 =Vr̟;#uP|?0&o elj)^ %pڮ5z8DQ+L A=*nS7wهp3ifo 94 9T &:)KMsW0%\or( ?/D;ϮKwj6.6FP;(_kZwQ_ftȩ'+.e-r r@0vAMɋBCN#gcPޯP7L\BՅ p]/K[d W6 8$aXو`FnI\EwRO+'2;(~VUe\]fu.b9 PVmU֯: 4 18 K@/F#P L3գ?h%?B"$ ݡ5䛕}a ?GYg}k~ m媻g`?4D O;~g-3TɺƬnHjT<.57݉=owa|%Mf?ow1@-34.)È)\DY, D PoIoNmDS)zBb@>C ~SRG-0 nNE2Ķ!%AnԮIɘgF(_|iy:4T 2EUt2(KFqoɝat^%(|pc{EB<(sk*ݲ{[sCa U _Ux-b#9}&% K>GP:^U_qR=:Gk#9tunKo[z5>^WF!' H?K;c\9Ѱ/l[y񏖙HP4\ӯ|>yx5K A. @82i9(ML'Zo&r+4Sy+ě~^s#碲:dz5VU?4=dY\k~^j 3z4VZ̼qj>xa *VWT+ ,hS0ZU@RΠgPA= @Ij1-ܿLo$s4Z%}OqEܵeRԶ2[| 5h$e=P-݊S&[]wlxVKlx 0]ⴴ4Pl9DK_r7|B*UdÇ#WgZO@M3A"ap9zSaTޑ@4 <";=vof<3cRu ]%z enUg@À4,6V<4csX:Kc[\!r4oD˻ibƀMXϧR$秒}g9rxq8k=P+@\=]=4BkL]?S3()OLc\Ue9'!C~x PQmJ*?eP3z}Jex2"j]vpm=ĺM'yCRs~'@~+5N*~.LiH4q&wPmK}s=GP\!`uOg/\1mdȱ,{ٷe9ZQS8L#shjEJ;#whJ_׃o 9cf 0;*7'ݳ< W9J? d=Kw)wyA(z2{ͲQwaבD, T+}΃!3i}U%QX˝'NT%?+'9Ivi㯧n6wTז\isua:a5-y)XbWjTYz\b8deI"hX[j}:i=Ҙ8%dJ(ch3CP֜-==h< P%c[+;-DZVƥ9/q(ǡ3Թ_Kf;vDM0gܘgtIؘF}TGtM0[Cs0mU<砠k%U8$O䌪tB~2B]RbL@2--w*eSpnkG.Ǫxl vLGAak)fyXף}S sHsZmA! `uG`7t!P[@&Jb{W$u߁:|a9$]fw'^ژ ¼y%BO uA4$dp/1};=d:}Q2bϳbYgK6{Ռ&,0?%_ڕ힯# B4w-c}d:bx޴:ly0vsd2nڦXl0B]O# ~, wix,S@+4μb^M0p=<^Ү}Ď'??;&NϔCqMS|rO>)%pw]˷JlnI. ^XxWڋ&-!@o; 0 2d'Y?+71lV{qzRԡgf\2o%a 3$8vb: (ɧr%j(cobIeԺbNd`pZjYkܧ8~p/PgCsQۂz`IRO:|mH@?X7L:=&h"V=O-hp%i!Rg9!# -ؘH;)2TuZJѦ2~/m"ٸ.%!ե\wW +(0t&g0:̫ }XD"SlHj~sƢ`΃wNJRP?ʄS3AO9ᤔŝu->l3n3Bns4Vވزy^ 8&1 ?`}CMӭ2‹h癗 |A8~UK$_Q۾2ibzr!Bww?~}hIVI?#53IADpR |^dXG8m(S"ʔFX=gGt~ŋV9t-ߩz$YUk`,B&A qi RY ӺŔl#\j^^ pXYi~Έ.uE>5NX4!Yk= .a'@5; 'iz23iNHjQ2^;[_b!f4 COIi^8Fml2WX)Ug$N0S60uAv6ٻ"^Ț1wKI~.y,+ >F?Z{-}dP ay pu{a&tqi۲ @Q޲6Ay&9[O909&_s•Iγ<ʷomN 5S3M ڻih);&'A嬋o*qt5]q$9k1݀"aҩxRALR]=mr [ݴ=r-wT+dFel>_kqfn>]#;e땭iby7n3^@9 ~lXMp;w~A/[,^ ˠ8'PDi 7. \ "?jf`u̧IM MZ;CR-mF)ϗة>ℴMC1 wm]!Ô%N)-}uiXl*L`jعf[[ܩ5nwow3-Q:T*DTل#N̹ZmbPfb4j蘹gpyK 0!8ylLOH凍<63k_؊w:_ 4U2Ujcd)-su,sژ_=Ǩ2}n7B -Kw8'YneZTb^C-/> &Q \n {Ӳq2`63N2]ĪPh](Pߒ;?@|K:&'Q?Cg \]*w ʭ0R28:bZW/ SO7 (YN-ޕSѮ;!-p4,}IׂKPxbtW0 ߰-&ιtzAD6P@ a{̰/LʧfM *\6eSh(o'uೋeu_1%+7nAwWt1%<UeƉ8j]BURcx>묨@*TKV:lХe [㈸ZC"5fs6ɶC!#~GZ[KϜe^l}IOj0YV?B3>MX*M8Ayg'G:NI(_'?sӜ₸u) @1q,Lg0'ZZ0pOJ2?v!U`~gu+\")/ST0U ȳGQuW3ju"6eK'SIt>cm8~7v;yO(Mz*bL!S}V=?)DvHA|c!Iҵ% mN %,n*7_4 Α%4rVRٝ]se^X eI#[~OG&9;(|ηU{/Jyh}v;~4U É._CB$1yv}yOPiZ6x \K yܜ~|[0p9+q##N,{#E%ܻuAѐǀ)SxVgqgUl.~s,l|\M#x([pqmXz48#l9& 9C>Pa`m|cvLV!@6i"* f^{GO5YEL(<&TiZ6sI+7v_Mr#pV;m4S} Yo;g7@!,f7g3u-,* " ;ze=yG+ FhR48k4jn-WQ- e ZϋfS(N9RXn,BHwo>lAֱ{~'<Їïl@* tM'dݣf@0?sZ+B\C&1z)\.~#[v3[ {K n!iֹotzk }׷c곐G8 rzG dܿJ-u wk :cV{PRs>6^W+Y95ST MΏ*~Q;?J﹭MFQLw?ub!)[8_$UX zIs&kkKgI I_xl`;\mE{'TUÛ`oyEpt»%B|tqC^_ wތ k} :7 6/ªXnNs^<&V"tm$kΐS#H3zT$ +Ρ4gMK]-lh IDAT3)"ݨNDg[oZW)\Řm'hq&B cJi<_B b^NYK7õ+DXG,SF6w+uIQFO~+GeO0W αLh'o+s=쵭$ռ mF{%)EtqgtߤERܲ9龛By/t^\4gG>5\ ؕN*->@oůvL(2=U#ɞ>Tz'g ӿ{pNz˫b6@dA-/XsJIMjEfsqHa~~pi# KxPr@c1#ǒ bϵ~_ CO-Yd *Ղ;>w:z^^wk^c\."Z)^} Dnzwu0ġ5s+"NiA0/2A$۷;;4GTB+FV}(bL:DRLF=-PMa(j3>݋˻D -^ (ZeI.{$flIN6*npY,yJMNdÔܴ 3KIeL/4VqqB֘5.Gc}?¥G&Xyj Hrd,vш㜑>?'?s>w[դZY!Uo< ߯7@F3Gy [-Éaa8@bvvT̻'5, ~-M᦬c , 5?e9k&]JD:GȲ _C힗kNv-+jD oj>^Aa4yQ!ٳ_Dz9z]ߋpjg.s 3@PwM-Ӏ|s}MlNK1_ Gd3N(ug:2{8Ol r kH g zelBV|:7H_r,3c RҬ JgE IeO6m拂t((y!=ۢ"KQJ X]SBzIdgU˷Į,K$+f 'T,qT*!H[k%@D<Ƭ;b2L-[c2YD:띃7BtڀSL4z#x}:2؅)յhJVG@/T^v22YHfL faϒ+Z B_r~FK>z:o)]ka}A_mLpjW`Gt R5i3BF5p%@D|Yg8 م@Zڒ"vozL[<Ɏ~춝p+.`ZA 6-YODeÈC!m­eCj]c??F.'C/Yi*&@+0I,=\ VqNQ[^#gvkW{.r=wF4_es[3連Rl3(z qw#W|tr iygXNDs[E&u7d|H`Ձ'|L7?c2/(zua?^6sY|-~7L yۄr#V쭰׃S]n<>]EVIV̟GV;:ѷZ=P\p'g} o)8hyxK;DW2hzv uug͐x*PK9J饞ZR`*H (U7Jk\9[A.EJ"!PF@VxrR5_\'?@6?>IrIǛ>BGyVQlH ҴSI?^FkH9+RB1[ R"k^^_vU1K8~WMeTEmöȄ7g 5i(Cfrda(t56.8 C@N.i?j'r0uhhpqGUMTRJ 5㛕:g@YRcaSZ01IRG)Dr]FDdاD<:M1D%^"ew魎&Ma= BNZ9bc@ͯ3vȼs<_^ 8Yf/rٜ:J)bg­ߞZ6<c$Lz#/LB,lYʇp(u[!rWJg̎mgD 7-*eEp y=8n }_:YZc:c=<&=LGxڣy0 4{ȭ I /JE9hZ 5 ˃2?9]l{?*Oz#GBӹÑ]I| 9䕑#msmP8$c}=tsKm>F ?<4Gr'cSO3 ](n=NcytM|X*Bg@I/(0͙Q; @V_YM<=8<<8<$!a$v/z_v4O+6+OL̉z-bq:YSL:_|Awܿ36}-4ov"Ljxܯ*~hJ$ --BC#ƒ\uc}Wغïʋ\ݖ/Xt&-V&:|$φ%ϻnV׻YL:_z_/uqWEPz]Ӷor|^=9UyqJ" =^A. <#覨S)\zWլ(U:H^~HqHDgp>xGq,rqjz5A"C)^ǐcUfs[ǯYót:w2a8i:8C=k+ckz~ޟ^z5oϻjt?4KbGRfv/2&Cvtj7%"S6NNy:!`q/r3m\3mG=>'~Ť?VmSWV*N}&o.4\~ 'U.ހqj 48wg,9vC]~9nu7,@eL`6G o 3EV Zr)l @y*+7A\wV;߼T>U'5rP/ v`-o6}yDPц~2J,_Ƞč$f7k%3`S ֬RaaU !8%ŁJe7sag#4?eF[XN'[  #iJ1S:pkM=9Yu7_74̌5pC!M.dPk*.St \c%yMοW\,~2zuYpraR2` 0-|"oϔrJX{FĞFn쨐vC:g&MK3ޗq|Affl[;ozK>}uGjw3Hc2I^w6~5{Z:-B*r46T*.Z@Vw>Ky<ٷQ-ƝR\zjouV+K6K@$vy诧y\]akJnvC緃3;SSO, F73" 0ٳp5 o'wK[^w7U`I(lBHR]vOE>%^XY"khRa97P-' W @aQb7?~{O{s17 $W}Tew\70!uVa (;5sUl|>~?~7\q>D~p|e#)LxܰRڅ\_h[O +M0Npn>ԝ:U^?Z)GC6cW9hy PSܖ1 W C` /з..8i|T/;S"vCg\|xRe(?-_$ N⬎KA^b\:L9B} KPy ! Y|RDY{MqV -Dӣ`֒m?KgC ՅGOz=9{8~'\Ű5W[ ϱaz,T\%Z$4ZTx5nڤ.n lk;Z)}ϓ&&kܤ˻;[H 4Rdc^f CT{ p UM̻-ZC2"o{(2 $@юheo{\Yo,N=[xMvLR3,'13=1JOM Y5+k%th3$4 \WWrЀq<ǯ|>_ Q`9v^[ 0(X V[(hZZ3do5yޣ~??tgʭ]J1|4J^Z26t ? tR$=X%r `֮)wt{>NDo>ukm#`('i2Tɀ+ V\b1nBemncά<Ȓ#>snz/>_%?"ܿ*}dŘys9@_B/G_ǹ:0ٷ8[ ߫P;B-p8F3f >tޒՔi0 5 Uo2 hLu-U)-Ĩ->/9O oiO@Ev8$xxRHo;_ ߧwO/ԥRRm?ܽOUpAe^>^81:'¿.~a\#|rlZJNcNmŒt[df9[zuQjނӂˌhFә'gyfZ \":qMC<`Ǟ'?^Uu aPCyq7oZ2mkm#A1Ol oiyKfC_m7T>xR(y+̴R ǎwceu?vZ%dn\FH$VpW [qWIؐj^Îb,bX?M-'5D]lcK8Oo}otOW^Ϩ~^_??&xu4<׶~)Ge'Zw0KB6EǤqgFYN\ۈ=aDkVVW Ӈ\Żv-t Z@n湬"m}I@$r3`Y1T,3,˧O=wh>k 䛛cO DXV}A$H)eau#]/\:Zy}qҰ/5;={Cᛄx9j~]pR2wU0Mں > xfL>V#2.%8 One#$Y'"` 7C6Tۓ 9/ 7gN@OT.&`aՊ\zcpHZ{ݰbsT ^_lM`= 2)$I '7YSbDVs|ts*ZxuI\CICv]kFYuOC+ZkB&5uR4NuϿ?Fz^ܳ6/-<4oT_?NC"u6Yf0xW +nyہ|.5pW2KeN~ 9A[;OR:jDt^VXڴ$X R-gYPO9@9?wIT8;.2Z:F @ >W> ߨ'Y٤ѓwF5#/vveu]uhy^mF{\U9ixi] OpcN1̈~O|-KôO J)h-S8_3fT#xo?s5 'ߊ/.uolߧ\@[.eL T0 _>v`5a[Xu\PA2P3#j;gy3{n;z62To.ohXlS]kK2:n"1\ IDAT>ái<~j pNj@\X/y]xz(C^0fm(GemA9J7i0+fJTj YUkЯ@H]|ޟ~5Ϗ/[37_rSLnߞ( H ~8]FyFw R JXB MGt\քred,{н^b>gbi7C@ne>Kie?/[(D뢛Î:`l; z xޱ"{0r׺$ַ`&U_~V)vt#4)!p>`jV^O%Qx%O$oܥn5]`i'Y-!γ_<=l5ss<ĝ9zٍ㨅ĆϜb57+\ջ(u#!$`ܰX P03\A.GNEj%HeT]&+pC:uNqvJf܏Iji)/}D(6UM,4.!!U/'FoGgAoI~rش }1im7Y.( f ٌ?yeȏZ_edu8?F<& }PigdQW3y~5Fޔhu ԜvoVr\;^7#PHD/m9}*qzylfb \8Op0;ĵMr3X7#P 1ػbf cܹTRh?|iFүǻN]?j3 U fbC [-S-ϼK•ji5 Iز a9 *Up4^eKf!pYNJ5ZZ.]"H #RM{ =T u*2!Yqn$o{ (2ڊBhr:G`'XEM kfUS(]ژY VT2Þ఺fj lSYL"ֿepPEɌ0MH#7Dx&zBѩHTlԧ2Eǘk7$j[P9ڟ usO k#fBt988D@sW86q|qG|y|$<>,hYfr[~?Yɫv3myϻDz}^݆꿍(Fs'$#1e٪N`g"B+\OƊ=QuzüȄ =NH#s{`ݽ0>[8c +1EhС;I)c)2ŇZbrx]!ڱ0kbyD9 iҮ \ٮ03|<|@Ŗj":n _ m֠plb&1dj MH2?x?1Zj_o# 4fV KN|f:uEd<]߿LUVr][LJG棬[}&ݽ]RE,uQ֨VƠLYQީey MFcŔ|l;M-x{Nt]p@' +Hʻ"WVӫ_O`j[ \^^1x*H 6)pV-G;M]f)PEu'o-j|Gx^LG6T?GR5Mbjh n-P *J <ũ'YKW JTEB(G)-{?tqls s G~"_<]..Kڙ9;NWԿL=MكI'b j$-!qi=v<| On_`rIX}fRg4]w36V4*Ti~;9@ٚ1]TЬz15Z7hiP&|uwj iX)m5|L/qKv@ʌEPd~r⩇?8jUdƀa;q>x<,堕Z DBYY:vͧ "T:"`f.5y 8r\MFjunl8K ҞjAY[Bet.PR,X6bKU44m\@/O}'断& ̾;w$Vvia<-PuSj~nL-?5O.9)3m7W\~wwC߯SOWv`W1`0Kf]sJg sj0 `n7|#nJc9Kq|<xfO%|uYNug{;[swwN^M)[(M tcN]^|h& 6#s"CtPpsXp$V5k0 ' :WuBZ$>*汭6!FKF(*@c4}4 ]6Z* |% ꧽ(_)錧 < J˂YO0D סOr,|'?8,Սolv3yip)q_ȈXmÿs|Ą, ؘ-Q&dM)\8ᖼX[9E c < ~d^?mndYto*y#rsGTCid(v,Վj'q'qZ{kbGL˱jY _\y>mb|4(evARh_lNL:{$axie1_G˞$VۊoePT딹+;Yu$ c1ltۡeJ 7SYÝ3 ?a.l@x r_X+}Gaq;O 2FO [_Ij3 @"?~IX)vN{KMrrH[Oa.\5.U' Pg3R$εk/k!kO>Ғ,ל1*U.Y!73R{9I|1IcR\w=ovm"Qn f?fI<7?sev) @WthrtVCSap@Ddbtle02Oh+]j<}B9\<=i[ge$r)fE5ܒzXxB> 9gBv'UwwLͳ1fXt}%?cJ$"7>݇^V1&1~G'^ɧSQZՓcxr:ۤb}WJYsߟ۽>pV ڀ 1& >ts#&W!L1iR*"b u8}\Mx [ή >,bY}uw\ XN]޾P Phi=IYJHjWmwj^&Z#M^U;>|(qӜ/ZNx9#/NNrT$qL+Q7(.jA EBKx;7A }OB׌ëQ:iX&*k-a:A/2tZ2BChIe(r3#4!GΕ9R(Rojf(@mFA%rU!r ~l)v.z[/ANkn3FՐ oCp"x~~=<۹uҢ9%b,Dܾj)˽”tCTm5&Ev;>P08}xP4o?l_a 4 Xe&8^A*,PtkGc"8gy<<<>Qγg9+G Y?!ע_??V_0AVh)e36g=a4^!6ym1h)Oy/+(_Ϟ-Gh 6S+X݁wzU e ܞLOݝ>ixvU~>vP^{d\Z/֋~}^>^^m@OMoR6 *x>mx AJc2N2 S>E Hi8DGk\{I*a *: 6 4 7qg;B(x:ݚBVTX)oM)p|Z&fR;@bn6{ rT*mʲow{p%RО/Ho+x)7ae?7 v6{gqŁl,sos&ɍ%5|x07ؓ*:>"( <%$0}>(mte7i 78QwX89 z?0DL7ʌ&\a~FJVN:~_ۋ}݇ZYnIrU:x&NIXv Fp$﯐:aomSWQ5m¨zd6ܤpܛCJkabO*CU/FR%TC @y^?uχej-r1D7Jr`zwsU&: gn$^iB%d{3]WZJ/3>vyn̰ȴX/pe54!եu&fe=y[woꗤ3K>Hn S{vVz«R؅iC&qxܤ4zM;ɨCg+ fE#ۙQqM)܆_ D^ҏ#>=9<ÔM-0aAa\Ӽ׭#=EvO!lu<磽xyg&ȴ^>wK'Z7v^fgS7?fY^% *JxUjJͭ0 QTUΞboy{f_5{* 17U`_6Aʥ*޴˪aViK-9m*0Fd)\gC#I##':1ȨťWZ1^iWVVuj yOƕA:!k]S, G& ͖?[&LS +Naxxv5s>@`$שfVfݮHP4#:{Y?1,Y> @ Z-Z)#a\P83Bh~-*dHZO8{)a0n2e<#W.,Rg0GX_lWP= Ѕ0^Pޗw`հM]VKgRw.d8NH_%G_.taGoQE<?G'-+*=n?ſto?-zY{ 8Q(4u O<rlZ!t iK:hh_%xLV@VYA ZtTgͤ7Bv*I@9$nΙ~= yܹe:_,{möH8שWa(!VZnTxS%]Dc((oq8m \p%j\I-b^LŠxGTlGX޳eU3_٢ @eNdd 5Rlqq8(ZSFc!ky *c3'@ۅM0 vrN{1Lq+ڃe)ZkMdnwﶅ/#BB ed|tGtqu5^o2tM,11uua( ~Gn|JLo ay 7}F]<,4p@lAPpS)pnH]?Oz)njoP jPGX;q9|7q<?ritA&b9s}oxu1V?u lg+ 7;Ѡ@r{d"ݶOCDӹڝm㖼 kjZj y8<3`nx9 QF8`19Ӭ 69!-r!iAl#0l`/nٖSp#V"Ļ1 9'ADG$.wY4+i"GuiNWanj2 ,7p c QŔCp{j w $CcKf9,oѷB־W;V*0t(Tت0V?K&o{usR4iU=oHYs)rSAZ'- WmCJ\i'pdU; H ^=%ey!(L>* iɊٵ(94#ز,vZmf5+Ț(L}0 :U>r8y?DZpvliVڤ{}O3\ o6|+@cA[w{32_VCh[\l6燉 |Ts7-/ߗ>3~xa#~DJ/iFb" |}x+ق?K=[HNMPろוQb8K-x bGRc &P}>fHe>&Fv?8s1|Xj{Jp㔦f3A"LS^H[ nf=Y#- x\Mfw6~ޣVKG_,h * 5tMBR!D -4kPVx$N!zLfKEEnFpX 50&=[܉Ab&4T = j̬F/h( o.o/y?j!@uQGOMm5KL~ݿ~ <z5m{sX=yi"VjD?%7=ti6i1~KZJnV3ʑ*+Xwl9?cYV?4#Be gZ9#C̕.XdV _pN.tnf :#˞/m]dO+vePbϡD&mi jhZ夓lw*qcڅ;•~'Oo@`K/ {lB[ 1 ѡ32CڳֿBlf-"@;{\PuYVSf]w2dE%F8J8ѱ*UP>vBFuYsDpo,x+Ǹ!Yet 2leLBZ3CL в}#nY5Ф8tq|ʟYQwiI?ΕYPsի3wh?jS0,>K~-{O_*p@ŶOk8E_b "Av[M"('> 4$EKyhB p-V8"DQAo%ldEl\l3n̿hѐޘo-Z Ō QJ9`+<8PTڰ,h ?u8{ pH`%Vh~Ɛ gTr Ǻ*Y|D;Hp]L>LSMcѪ'Nd`p\s -f/u^9Jɺޔ5mۨ^:3WsjB; [L& 641㻛8Ge'C2C3Cs8?{̦Įlgr y@X2Ε$1aWW3(>%#UD_7ҹ!z7<]eRp $'W8;X'l) [ō@ѕ(4?PQew־ljf8Q]A]u `.-k4gDtdNУO)@+DJHw.]|idT &xxb G γ:y n(AK&M-V4id˰0 M9Q ]s2ǎJm&5Y]K+c1X9pR`qZ :]tCpb>+̩G(h.>߲1"z@^P3!ϣUs #Ye>ف_?<soFW%KZ`P&#h=AJ8 eZH$ߑ;.s%N^"%ȨY3xyS&HKYvm+76|q$p:m ni" t";pbh%t LJ WX>\NzfF< a(b4+fW5TbRp8ǣqpl™ Z>X,XޏxW!nwn N;z4"cm;J%t\cqJ&CRʊ:=q=`JFABtGzB^1A0 )S`WY JJ+boDZu(G}b@~<:Qc>=y{QxGZD-{]|ӝV.р#{>^72\vGxa+gHul@{Ab6(_py$S?sέ|-Ie (H ï,Y\0-Z+ *%gŠ*,r,`(st|߆gU0!D. m@ x@$8 h!vsOeV4 tV/ٌ}ui9jYT{HF9@S\㓮LgOH p}gԿF{*scjց'bJzȁ^ҩef iV:@R٪ʟav,>p8"+7\ð$Z;{2g04:2&;q-'aXKhFT4ŎxqBu>z/f?{: b,s[`ݖ{tm]g#}ľc#=̥=vNgDӳ+eƌQso @Qljk]" oiΨh]GU{e̊T!T I7UݫАr`[PMMk}]DwM%4`<1fkVFo8XEUndw ry. B-D=2 C,O򷏖${8c\,=L?!~'|MukCZfpK1H$[fF6ConPDt̹.Ɗn`|S;RA[Z ",v9|?[sǪA|=}|`a^ved{zmg径͵-qh͛pOYv.w[| s)gQDot4?{# dgHw B$^r;\9`::f7oJ2'r|ñ6@my|<8 Ҭ֊ Ǯ_Îcޏl> 4K@QwZzpb މ6&{tP8sm\&`/&4ifs\ @NjL\NZTOYm8!X w+d]7vndK{JKsӘX!vbo**\2czYpS}?W$:o&Zrں~>64yufѕ.B+c%ӖP :dL἗Pg/ث'faO|,Cw|4quXQP"|7qӼ+?z>L#{"eن^֭y`t2x7?Aa-[)fٖr"gfM?J1t#jmfmLZQ wdyFI&7t gЍϳ4q,X$vr9 xρ(|7^=tYiC/[_pN܄h "2t-g~! oZkO)H`MzԪLjR$n璳u,5Ɩ!"pƼ۠B\-YxQnIHRNCB1{/y6 ah #P P% 7fRQyyN(Rh-V-9X>p[\Ef!AaKjjpyX(IWS`j%"@F14/!Ru_TOE[VC14cԁW2Ɠ-ѹ W =Sd$ހJT'Y."'3h )6#yIW|6 mRыgr1h.VmD My'p'FHnFꎽ}/})L0 TF\C~lՎ X/n*yB5S)`nHKF8h,e1t"X!Q?_~/yY6ny՜ӲFX]}gbp4M cvh-2<{ՊPRŬM y9~k<5dM]o80 t'ZQoZ*!  [ @F[NȱXT V/BK%I 2;ox!Op[~[U~ѣ yV[ՋԂ ^,&$†8(W+ft_(m[dA-BBiD7-kK|(U,ۂ;eF0!m]Ҫ1inJ~n)+0ik,ʂ.S,=JL1DS0F~f)<5צ"z΅01 @>ˋTp%5ikު֜Cq$G %I"wEmeK5Wf8Hc#ff!/ipzR3|UpS :HQ@5ʨ܄C3JcyxaX~.8w)Z޳sA]db'nlk֘?`95Ow`TM<(ǁ4Ą}~F~x:s(WzsɧvG|e&}V˓K_U&$~HBF{o_& EEb<'ob=[F1v8s[ZmTؽF! ̒ɓwk\U)+xhmgI0i{nws2g}|zwޏMi4i_  ӣ]@0v~:T ޾nK758J :1*s"<-u$! IDATMb4g~4ٝ'cs Rl!XyxRCfxnlQ*%B$Tfi!Qa{3QnN>doe}lnX${fQǭL&sg8^?ߏ<~?<k`|JkUK{Wo|KOC'h TsUa?v uL0vXsn>WgM'7UJU3~0-D sG|Pv찅n3jA6n?nXG*Kg m&V-3CݾwG(4b#ziq=Ջ3[3L} >fFb/ZkmvX1:fpiv5Y rƺ_d"a;&(""ezm = X\)Ea,0s2[ \MQ ȱzF۷k|98Ϳg\g@1˙jap&оRjcƱrz4a^O3Jbh4yIؿ0^}e%wH]:k7]S$vea7>ӊ(AR4^Fزw"o+lDXiܖe\N败<"GR~u80Y]>Vegs0_d^${@ 'F#T>Εh?{,g!Z>g(=,X=d(#g2Ύ?yr=*oz߯zӦts: 5WWSPz4CvM?dĚ ?Eͯ _vdykDs.*@Q,xE3~#}bi$^$nY3a$U [MlHzD,n]^pMJ{[k2T+<:4kTC+?~JK3xbl:h /Uo(dun]ϢA ,N4s;X'J!)/HjXX,U%k&Qt%)#U\4in2lȊ:6y܂/A;οApPn5B:JK =3N(31$Αh;v26sTh#ŸX4"sۇ".{^ɯ%=0TjOz^~ޯkV/z 7pJ5fUQ9ؚ3YhxI? w; ]9WHq ]\aM\,;Ÿӕ)Le"]PIdԾA7j6#@Bc,u1=-V=AߝrVZ >X{}DvG F֦^׿am`$_[~Fjz uwhF~~~^4K1A8*Bc:&]3)k??Ah7>[ScE aܫ.QQEI>dT|ĒyomyŜl RuV68g4A蒣X4oֽ}s1&/C@O\HWE/phmw {>$&!4@9YoߖYN:ʵz nS5-EM8|/E9qNn^HD"Nbt(:‰#͢6{w9V0b]47q;wmabT᎙'J8ES$S>y\dH@}zPݤs]qOHef3kPf c<"ݤ5,磴|__g6fy}ޟϿ@W7+1 ɻ+/VWrK$QD, NpRj /qE_hBi2,̈́ܺ 䟗P:N|7]QnV–W&}1v11ڥ e[꣖5ݺ+lꨳs9T#O[O-*Wק֋*U8 ++yX/֏]o^y}MBNK{NJ~F!ak.Mޝk$ wmAƕp|@`yz ʒ%NHWEM9sN(T6l!lqݭ pT=RӰ+qǸ-z;;%$cwDZ,RJ9qpG$+`T{KiS@,cfєAHcɰ"?SM2LAky&mBRő"(<0nʮw> Q^="R!@wj厣gyW([c\>h ԋ*z&3rNĠ+\'/9+_ yFXày QHH>CzeGzk_s08l”Y_EڧWu`%FC ^3+)7a#(!6Vs{Od\yAͤhެZ™{ڋ?a=?4:;&ld;gBMZ4e9(C\ۚTU~,!--ds;S/7 4f+О /upWiF:'~9R9 84@jPtxh8ǮX͘b:F~m {üHHU)$(ٗq: xJg: :!2ROn=u>=~~Ӱ)%u]W^?????GY?OeCݾ*juhrjer`; yO]76G~A3j~LىvJŰP_Y:J֋8+1y2n:ńqC \D="{aNǶ$e؎'@8pI7I&G)l{zgթ֫[z`.;9bb U#O3O1LNdS4Sf H6cFuADVn"1PQ)il 8j.5V6Yx6'^ \F|t@C azL4rVc5YAL5$ P>}EϚ9u(M "n3tnPdD=@c7$]_>88KGbK} 8ZOmݫmw)@e/MTD 1$F@ħGcsv FP`iwle}Jsu,Ϭxsp/??j}ϥap R{ c޸k8N{=Yؘӽ`u{Eq,&9]L:*f'*-nNyQ"Y ؟HzgZ9ͽRSnY{D.\~G:PE%YvCuquc\2[sRaZcw lB8B ^ jKT[c )gI6OօIf>}7k[C1D,{m!*!% <:oUMewKVH< 4$=L瞲+JGse!=֦jDNg,( 5fV9ܭ;Sa'' gFfe,YFװ-*'-ů>HtQ9dQ&Ig'pW.VOUھf؆*p/Z{_g8N4fNXFP,0C)S|뷕E?V>S7]Q 4+]fs1 Õk%Jݣ}O\Sk|wy-?{[K/6_#q땉'}2"889kVH<}mwK?)?}\ͻy2zS}9Ëy V T.2BLRfuҞS;RnE13J]`˹70+JaI5g|eDŏKgE?{,JQ5q:;Oʁoow~5G3dIToZ,=lKft5?ME:i;4J\x ]sΑ`ez~/`6b"4O7Z>3mEkgHA OE! s[4l tjk* ۀ{oС `VZCo${`BSwWC~w`욨^P6‹:wW̔Sϝ5"Cμ.do>G 5>mH%x%ĜOSjX'rIT_m6/d /!TQ6ʢ æh"]*TR.@u%*u_?Ө[Ѭy>V>5n___u)qGSFpΟ>\YwkO\J1cpI⌮d=ݥ64I@0M$P4]+{HP.9Wl§3\ALJG37o ߶Pr=|ܞ>os pJ+KafhuzJsw\??j&g9Bgw.YPI"^0=v{A0Jzlz#/ (9,]/L=΂(*B1j HF2#3 xvtABإ YW¦CQ37v,J\4w0 P[ )R_Um>4 LJu!E26O>HTsן -\U-`{h h駖" )#HKNmqv?!RP6䱓իLDHݎ7TDG5GXmg$]3{Clb-r 3X[dDI$V̦S,+Ql)oqΊ ZPjܡy̵/:?{]up ;/U6d߻w⺋q 1.n?,g Nc爱5ߧelǪv?nMhTOiՕƮ#U+}"ϯoq;mbBhnVlzD,%6'Ʋެop1v4#=cQpnYY$PRh:h%Є}rif9_?L1cDi_CHxGnY\DZ,0rr:3U[;5~Fr~V`^:zR* i!(awdvuB0,W#Rw=/w]w[[y&ujQ^=:_tf/s/+D98=ّ=}wy#6{5ɍ޵.I OJqy( ?M0J5 YN[zO>:2&|&.++3LkmpCp?t3o3<',{U1: _Lf}k#Z? >\NhCW3ƴ7Bo(}IuTW<ئ}EZP3VrӬ f!U@kOY;60EmN$4~6!`|+I* cڹW41u* ^&%!23,UȺE0A{X$u-D-EJp>,tK >v%J5VKK-v"%Cs( {b/{jwZC5`_5R-z+?C /k{YbPOP0MMgFL+6TN) cP)U,2ϭ7qʟ{_lD3@!~^S pL{ҙfĪG1F%@bUu(C+spF,c?j6B;oصN!MC~>FGV,jdiŸJhD!-ftC& H_eҞ30>Sy|;Xؘ66j KE2q0UD Z$Ȧm3 \-Qҹ;<6?.(Τ'2gh]]bC[씧NM"\_yx; NֽZ>HO"56)7yJ#sK}; @@)C+d_ug)ڑJw0 15)e5KX+!V@4<CgdN"u<@66Xsc7-1@FI#2h-h*<ѻ@CR4d]bC(6ԉ*oc`=YԊlL> Ho㺣2 J:!"QQQ=5ku'A D{_zvv/~ݕ#ZuJY'M ;D3*v<awcK*LHg#Vb2 HB;/L4 ZA & *ӞXV~E:5E ۂq[dF>9y|.Qi~%=˲Yܞ^J@;?t . \D?`r+r&A @TZwKq_Ox#Q !\Wҽx R$=a Kk)|g:HQׅVGK9G$=v.N&^݆`Ŋ4ҡk" ->wKFǁk:^8nD߹ ?/j?va^߫ $ba  /y:Ḝ݃ I8&5vGsb>U|NSoې]ex3MQKe^Xѵr_<%oǧDR ځ(nO' q H+,)HEM;TXdwD3e-N3 #LoF+wL B`|bM;HAgEjf 9t%|L|Ju4ڝ6 /G|:3Ţ 7"Fº#-=iUn mMWPy#=>*#(j`N׫$V~H|Ln]0} iQ ;O6=7}>H f82'Tճi|>ӽ^QD3M(9 t"$[wrFE+ɮX@ZZS)>3iVa!nUH*n'r2xUGS,suX?_K8f.Om9ߟVϿ^1GcNJ޵Ig. 5mOwkG=C"9Y]oPoJ.$sbU%{ Oyr^,~&!TyѴ>NwDiXlR"i^Mː/Ѥ"ۛ@a#,ƴG AüU$@U ±XU twXr r3(2WXA!vF7gpfQ&TV8TtI /kNe-QarM"MgPӬC)}0\|JFTbM'p`&Dϱ_krܺRK\cDZiazB.0Mw4v lD£>@;.I)Hނ}5 au 7tLKw)F8r_wr (J_b=V͹a?śɭl| )~Hɞ>C& $V ╤ʀ&s tڥ4=>s}yiЗ(N %p7S!% y!5qu+¯szW] 3u#9T݅N"=Ij;x*ҒԽkpyK#gg(c!Ҳ{ ɇNHM$6旹=Vϒt\Z/3_gxoY+%|R1TKVqDг&ɚ67{oС_?mc0`kY+u`Z|`Sؔ&磟EnPDi?%TI]v$>S:MUdkgŃԾ,!%{߱i{\<A CoeR-I(S~P'p'};|[GR[kqш5'cS<R.]I gyyi]Zn}x]Zy'gו/Wy@!Q?pa@RFn25ah4DH=\\DY( lNoEu= ݁0IWT\oSlhl#jDWo?Z8BUSk~4v I[iLNn'#:l6_JDӉaRNzk`/ȝ$DFog)X;EQ0' DnP MnV,xy~ md=X/Mf3kodOUuVQO7$d3(YM zi\ӳw%yH/YMfI{hQ7mzۇlnR 摞FNO%vU?__!?2=g71xڄIXh Gfrn9?\_Qջ:[ ieONHs<7?'nT p]&rcUڳw_H:?xp4 (ttz ݶ#UP^_^Yfpb=s,IXY畫P96JhS6 5@)]ˤL{մZk :$S'Џ^Eٮɻ2Жrũ jv0핤!_dSOʾ[i Np+Vq^!we[Z:CB5(Ahe<$ϥ0 HfgJHvuA@ʳtv {ޤ[*6!F WR/ w5.(?° uaBQx1jQJ]-_/a<M@a5}AT1RmiU\?OD;vaኲ.h;GQXf?C#:Rɺ{t@΃L$:F4hޢuҴ{1Ǎt H^&5XOݷÖ0SĂ~̫:_n}]GefaUn)[L]dK2YR8r]知!Of@AXG"jo 'yvTV)QܧYέ'm[.ϊTܥn1C:nڸ_E ~uڊv'G-zeqB `Σeoʥ7m,p>.8pb^_߯5q_?3#b`/8ƅ /Sܚ)jV"TNԍ`ˆ!\xAg / M%G/o*)?-#3j9!y▲SL]Q] YW)2I×'x$IoIx1\I|w(+(``wgN4rIX9u_k x51[ W{MWoine>-oWlB?ԙ&%w$3P<]ƚtXE:. +Дgm(}| seZA^Cx{ڶG2Y7Ly7*0Vso9}էBg:(H'^pj߇@Q<\`jrV:GNժnE-Rg{Ƚ?kS*P%/N VoqHTr>bꇊ@{-ڌ:L I:b?4(efY-ݧv#RY%F`U7<4Lܒ9 vA3$iT/aбjԬvU)/_Qy |?3"! yX>*i| T5~=In^, G_IcH. &7"c%{JwVΚL /I9bI*@-CT)?|*:}JS!0E{D+ӎ1^?Kmb@.>3"~b\U*Sllaµ,|0~TXl$K3 yk(BrDzϋ@gf:G5k5U2/llfq$ǮNb.)S ۔ƕ rUݝ() la>v3]ViK'?4GKUA(+yJ+fB0f6ȠKO @JPkFc$wa%yDvhc"ړ%Pc-UK uT;@|d2{I-ϊ惸 NiknUv[E؛>DN*\AWE# IDAT`1tNij2J(i3ӮpN&HI:4"Ơly+Rܖ:o`v&^4"9SX $htfo,9-qN))3ziBvF$蒄n0O(lnHE>*fzsX!]Mz32ule*Rw1k?q2t PP๠}y3jLD|aaM+R90WfLn$tߍlO 䝡UE_c4jXdp;lfh&3 (I1?[(T?"@\ͥ8N[f†Ǭx.?a \1Qx8 cR"AծcXDMe#;Lb_.~z넱["C4pQr#sYuHd_ǜ߈93n}n`Vag!!77PB #V\OniH ꝲ4Gﶸ͔FRaM$ 5k5lvo~~yWvqLŋNiU/g )9zk Щ0ic"~8ɓ0lnd[Sq.J|FT/J]1u\x?T&kp̧thqOᖀ*D@\$z]dڜ fͱ oqhEGk`i^J.G\-#C X v1*fe\2}|I@_ ~;yx`=94`DZGd#RX< .!z4@HӐ+̾k6nR;땛Z tm%Ae;/â BڡY~,wKtփY$Vž "C LS |`Ёy aND|1gȺWԨAp /ݸig>uVrͧ齔76Ҩȫe8:_ߗ5+Q;'0ooD\_r3D<㠟u϶y <'ɸON 9 h<8O5)ée1-stkSOJ寁(&F :r7l.a(4!=SL*Ty[yV*bnrO>I[iοnҹH Oy’t".楖5owĞ_GT %.CYj }(f FxfxC, |W)N^H<&/@<~l)rpGgV)ڔ9l_ `Fgk[$yk 3( =2ء}Vg=44';1A~̆=Sg ،篚!YIs/)1U*7~?O Y!jieY7voq} t+.ԾKӄ%+V8zp$IϜw㞠iFo|?%JQ R[趒l/(Kn#kfaA09^ M\ԭbϖUdiscQ.aWUh$i'߫{qM$?ԅLZMD( ׇDPE:U4C#+)aX%軒Iwj]CNV6=mWT=_|NkV凕9pJ;2c6MZ]6~H RSɜfH4PH}p@O ]t̽`'p'9O'cepZˑhjFǸg [T)OF@N6xq>R~Mi ˱ Xpc܉@&γpro9#&f6Ȇ$yԔ$o}{γpXuN>fOT &uUE /MBSqU1wԵbٵ[cdh"hԄ>F?$8,ѷ6$g8090+a3,@\;LMԝFA`)۰oJW nn/Sh--fnrDjmfbIxEa\V3KWYivD4MMFߠ1&nU3s $|wFTPLXĬҨ{u@좓umEO#s 3U4hHesCZEbQ8Myc8] ZfAޭ, ؉P"eL~᣿}y]v)Lf^]8znåp%t2^fǕkqM56EY2Xv):woJ C$a)r^9Q'U^DiBsby!x;P<wlѴ#v˓o FH7,r=n]WL^ru&Pc-_?jd&5c%Uը $/js!kD}#E_BjSF.8OFTP؃(وƞS6RkzMK$w#?=-]"~+jXɉVy*j45Ӭ;|%wǘ"JڛEHZ*FIq82OjO p\%[+W|ߙM|fg8I5p0RPe4tEal>+\j`n XC?:vEXr1!Z]5L"$:4/G%٧%Y4 ]iH⾈1R2\w$7D].d6W'#^f<\Hkv_Z"x $%F~xcmJ^5H_!y&ސu$꜍+.kp{$DFICl劈LX{N+ +4 Ȗ'?FtVjӲ@$JEt.;MD{u%shbcB| OT"?Ikh>]gfޯD*w[* t(z]Q4HRwN `_%g^5v4 gK|qijY{_9BQ:Z;MwGdaKQ~Dq^إQQc ̼N"꦳'u5qۦ)@RRqĸw3||yȲl,+4 x蟝;^AEfٸH:N&<10GȈO-K7Ց3/(!D$tؕ2ѓ8@c .T2|6i^s] ՟t=xl#]Ya/*{P }<#xBrYUwuرJ?_?%\sǙ2{ΓuqEQ/bVjΖ0|X^]&L4`e\?Uw&l {זli=kIH!)53=ex ҉咝 p_:wB;*1I¨XrrgS:1!+/2)$/&u+]oڄô#+¶Ycv}xޭ>G3wZ4uG8?r/AXwЃ]NnLpשS>el{{%0= a[JY=J1 '*/><,,gdYDT)‹ë14P8m_M&F.V,3 =x7z H)|γ`-\+h]"Df&Zqڟ  JP[U!o*P涱4@DmӎƒH-k厩X*D)wM3[@ lEG h 4e8l1ƣK]m82+t^]">7Ĉ ̑Uee#1q[WjK yBr۳m[J77pϔ4+12[ Y W7彭flA[$$uX9AY{xJH[O ż䀳6ZWz@p!Ǥ0YkLfV+ ry#D͟ULdEo@ aB!@kJ̅+"?[ZB@mKOjSSfokvw+oU D*OJɓ'g T_/[daj@R-+UN&&X>fhe31tǢoᑼωeEM }x =H - 3Q}Ґ0өn˺DR>#%  HIBw0UnF}ˋ) {{e(3H)יʦU_EH/cV#\8؆gS4ym~HyXmPWXE`ANc,p%Id5 y)m6|̜62=_UȲ=f -и`Xt7Z%aؙv+ȼpĶ* Mktn IB19efgL/.` |xewݖ.d>їJ.1|ܑ?nH֛/&ŏJT~y-H4+_™?{ 8 MOmme+? ?=%҇ue %?I 6p@B3'bDx-AVrH(%hqUW ԋ[I~IBc2-]'gl㐹$$x ߺ*E|zFi\6'hGƹE54pmW!\c&b F#aVB` p3"LJ&q>~Ƨ^_L&LK x8Jt×%aThS>Ǿt4]6= nKo 2DCh=c]Dqԁ =:ȵCܦ)zΛK&3k[.rЯjɯ &Fez@z7tI(==uY?M^r1;3;TosYSmYcTSزSqqkg;b"?¡K{NGq)iU) 35'-F<(W cX?)" _(ccʪe[M禖HG}~+3*h &iu7L|]*x|6wA9r8c>Mk8r<'N^_/V\,) DDq|.7 A2nJs3T_ ̙IUQ:$9hI@q@gAS_ EETN fWFS>6PGᾝf*FԌ: {F݈R^[Bݿ-8l-g@eXJ2KRz!*'}EWa]4vZ%jȕ25ڥzJt-v,Rx2 rOsrnU^$iQX:ZNn\=B^G3AGn7ɉN-W"7?wMmKGz?%)'ԽLL+ZM$3N+<{ , o0M=;OBp<>R)HM=Ӌ~J3dL"mH>PYNv6K0ͬ-6OH Q}2¸?qOAR)el_pl >N赉rw2r3JoU6 WױR)}I%1"b11x:< #ҳx)N;#88X\U;xGN@ 0h%ha}[a)""Eee[}4G]3.n3i.}bVZKԛeP*P$}$ғL (l^#DQ=Ʃw8kMl dmE`;}p癊BR4e!"-mJjlm 4X)oԲ)U{"MHR;H+$>dO0m,?O0js.. cYY*HaW\Dg?@Me|_YYԬy@soe8 uIk@;*('DS͘yQ'́4K>?6'zo`5O}!Mǥh+*6#4Ϸs\u? NN8[K 06=-\h4JeZ"ݾlvk;$i]4ҰԄicOc8q81~ fRvvD1uq588_y i/{"vTJν ᖙva!C)ROXԕd%,D b& ]=vH:,R@չJAt2WZ@N=+޶mz"j.r {yqM\K`x fM'JDciR$djtePz`҄Gr%@lVHs]ٟwy]jgiQ(fdvu(#A#`U7WKd2bB\`T݀&N"۹QiI|o6O|RH3 9& $WU۪-Fc萐WL=O8Hu76G'$EPW?D<Ɣزі0LFuk3z}AnI{_;dy +EN v y^hjrC.Ws֭ /~x^G(J$vGy*tSR߯Y 4tL:S a$d0:"nKW PE$QZQ@Hzq?0h̆ VgQ4X-6>e!wX!i=e`e]k<τSF+,SdXb'-Cƽi:"]66̲S(YQi3Y:@J`a|e۝I\yvcyDh?` -rhH=M6icd/:0gsy<ծz_#LH86Ƅ\ń7 å1&Õ`ŸtB j:ƤO\>: ckcѹn dk>T6Rjc⓻ ,έ%>< BZFg~et\RV1mcȵH`xI__ ɟz8~NM1UuK35 }7@3¨V:O`\ΉdE褟AHnHkR~US4fi>t{ (V[Xh;3)\%S.MhB9lo6`IN5SPVLʝa\ +DwΨ2Ū5aFNq;9±g[ WnK,҅.cCw*OVM`;uЯP? DOm8.ۙ$eH" g/& 8advţi3d'a?0y8hIw)ΞͬȜEgٛeF &뻕,ipl &ڹ:Uex7j־4-b' RWXO\e`m}*e73o%[d̺$P^}Ќ1:x{dY[2Oe!dĸew ؞XVԮt{ڸۄOEsµozijrˠP])5H6QT'Si wUB8>rqUy>\꺝 G<]PT\ٝ< <ؕ-Xj֡oAFȚU_/= \? T2䷎kյr˲b>tGev6dA-?Iq_xQt]<lz (G]F*l$S`.{ XF @)A1S;OeɥiD !udT{{T~X;[3߿wV [hj=!i!o{X*ab ğ[j3݇mjjH=#(reOc透sՃqTdoc W۔)Ù]=d6|^@W:N SI^_^_1>5kG[nP(B&iq}Ge!G rha4Ҥ!tء6jڣc[oGuF6JGhbZD ־z K#tlpf=ñ E)*]JoUN ],Ϝ:- B1&a&HQFbྜdkTcK*rE0#%БeeEF"b+4g [Rꩠ!.EXr6)KKK{G.{ܔfs@Fm誙;$cSiOI(|II$S,sHm),l2r,nK&*;r`w\Xp(^RNNq|?~/OqRK*ɀhy˰He7^122. /I'I+]$=~w"{D|-*1:R]fE\oٝ꛴>$a3 ui>6(ġX3z'=S ?p0311ެu%,,zK!08pQ)r~)|d1x^_^c g8f.qm"'6ap_<.i??yK qSgTߤk]Twc$Q3,onSȩ~,HBWhI%KBoăk=2ꃓU"y{礍A~#rxDcNpU^&}?SngWG!%GF4ZSf>H*,@8:מ:Xg?il Z ~ި$4jF7nbw|{DCE6%غPx8 -JEO.W63O#\Es nR|F>5 ˽Pr~ VnY5:>%{Y;[1Pu(:2wB%%aAT4ZC]\ur pcDţ'0vDlj`oM] F,&^5&K+_T0ևx6W.%P![{76+݆ (':xE;^$\ qeVTh~cu~9~^8 pUD&7Zʓ]ǘpSA (!=C$э_MfceJW5[XHFäb|2s sj1TmR6]أ%&枛2V\( H`sZciIET dzt%˶m ]̋CO\Yqo!` S2j%]~\Z"{+'^O$NK %h9Py匣8GU20-N^hD0y3u׽A<0#K>znbHڅ\8լL;l3E+ BDo}#p` 8nBiZ %3<:b^fR4YYmiEt4y-ț!NFfт\1u@^zFK.rxSgN|8i19/[ 6!w7J7}Zq/̚j7nhʊ{,?l1{o9C>q_{}qb^p`8^8 Kܹ`arȃ ]@ٌq߭VRnIҀ:ha)&aIm>C}QtH7&kOEn}w6Zu+?ۜuЧH k TuYZhtїl|xvfJ߭4Y_Hu+VԸZmBq1F5~9Kq f=G#E FՏ괊h]"5bZ+G5^D)7Dqkh 3߶}^q|o 15Ex&~k>VC&Hh$r'Sh!:R=jQB꣫Ŋ:]p]RQgv/]:j׀^ŀ}SU+(%Nlz P:hu|H;^*+'qt wܰXYdJJvp]7; A}+ $${DK$}gaC[8b!jf)~'Ra+̧<#\G}wZӦ$y|ٜ=h`7P {ȵxWDw'İ [4ǍY5w:~?{#xyD#+w*8>!]ك ˩|D0M7 "NLMي]>Fvڻ"p[a(QP[bëj1qq^85 wux}b`|]@aYTxNk(`8Y8,x3?wD0 l:@ 0FMe~s?ٗ.1AM]Z>aխS'FP 4N#F zQZ֛)ʅ.ͬZP-sJh$͑l)G噳ē G4tM6yô*t߃)R дF[V9TBAs4md=}jC{²pΒB}it_hfh*ACjOer9O ^O7]%>(HjQ 5m7.\բ#Hj'1- 3}gK ": NBVo4I)ee;K$[څW>{Ti:qjo\=#,>O"lXbvd}sqQ; tI'ti[e.l 9Hw85ߒEl?'I|/q$xp:yI߫>}>U>4y{;"CRth$~Ty 5c=Pٛ%L~? `y~@n?*ЬDb@}d#FĹ)g"DfBd.|6՝^#"xZ]'` 2%[/m [7xC"Wrlj>M@4QBCBP=uNUFCD.4єYؽ,:`;Iqc___8^c0A0^^1.wTg zc2@&(5uhL*J`&VsFٔ^5z.JT.n&v-9$ GGMm>%Ա);16d2aX4 &bȷǣ|{C?0o'a{(8 UI(ܽ"i~ 4Ƈ*] ן`} 48BYlʔ&.nH/dOI6شr9K@Ŭ] >ߥVj{4?uKFEU-L",-Y[#+I \uCBپZ2fCx͍kIòPׄ!\}< ze':,ѤMIh8R:T$ $:_x0Krpw6Ff 10TLA-;@'BߧxEϧFC@{&T{}9y3j9֯ð-UCBeajeZ>)4!>-7kZq%f$݀  B"W5grJWX:8:^|8}t0VIWR$59}w+BS*9!K0E!"1l!J,F`VV"R2K]Ő,&Z~\GlCI֌Qq iKښ0BO/8qK6NH]u5)S 4׹*ע#2?s ѥ>1h*HƑ\N2x'd>; $Œ B&=I1 'm㾅a㨞2m졶 jƯ9ptOB?u#!1*= gx_,3Ձ[#u7kv",%/ٍ-0ԥk [~! Db&X3!* .+0}}s0HF5s0DF룄KazZ;'ʙB;Ƨ൨yhJz44RQ0lmmfiC1൴Lo2U@یO@ qbKTv;qF6yvIMǶh:'4V:Ke fK!,iH! ~':Z½Y\^Òoqp.kNmX ":Se5ԮwzːJ29٧?c?nq4&*]c7E2sZAI0`F=PY#?n aCC){fQ|CWբ$V$6b+~-DH nȩq.(R8?R2B7\|6Q1nNҠ>5؇vpYC8Pu@2߉ C&=N=^y׿ zOb9L"vG$ȂlP"elO3:K-%b$(QBmם>˾ېij˶ ̨?DR"va4y'Rw/ U8bC;]ӯ1;Pǰhō5o W[gx坼^xT04"/㳠,FLz-Akݮ^3g[E\k 5oLn0p}|*^>Wec#}I6nUl:Y(* v^AG7vxj #_ e -ڸγ- p}*JkFR\S9wXbzw+/uhW_௅1&ԡG驚>F;&eJ?n .wfnЈQv-Z*诮yX .c-bO4fl?L3} u㍻ddjb[P=;)I#{|Az]8EyV2īwӫ.{mJ5 /1! 9Ӆz$ɩ|R)6AXdUw67Q!yX%N>W_^q__~8TOd)f̷ݷ$I1QNʛcz 2VN1X^sZ' V;/\2^ƛH㇊AJ3%0HZ/oOhL{.b.YU FDx' n#R\/*G0NT8%\Ul1'NaoYKN" y tLK$^>M3bg8%V20!Iqe' 2WՄ1ɵ.+U'}OV¾Ѻ':'|D'~Y'TTs|s0m rΗ{565 ֐ 33Qj5X{v.a-F=˽tjAfLT މhi( $qO#]ń_38ubFSn fbҏa|Sv73(7W6 N.ۼBUL|_????^?^?x Bff3;ߗ D9,ȷv* l̤E&eoy-Lj*&R\Ėnki1m0:$7$dedS(?2[b# ͺ4ΎErI!R _BjC%>N.m3q80vdNZv: r2G N<;NA> o?gg=Rzu_0 N+'jW-1ő}ϓs P^HQPOGLmPW^a7Os&V0 ,ơ!k2eC#_v47G*0D)UqmK&8[ }DǤr0* s^`krOb}{ ADlZ&(L@T %RJ~~?^|kz)d|}uWR`,GJv+_D,Fe܆p!S2ڥT pԃ`:Sb)10TS̊8 dլUr*  RRHp² PLIͤ`ҵe *RSըU02˱,5}{:9.}i1ro 0`>- mi\,E)neh"nGvE;h9NjN2O\ue_g^@ {c/)Fg Fton‘&aiqhKca/ sb.R&/+.͈BeNL7aw |13}v{3[#[~N`?^@>w1#?4܉C(.^dj&kEuW1*4^L :M^o싿eQA,ڏ7lfDI[19ndehlOUb&l0a܆K1`9 qҬ`VO)U|]}ɂk;KD3fhTo]uŮ-Fǩ~ǖAz{"X 23交"` EPQS)a~c6f\f)^e]VUGgƖfs㙆|n;+]G: 6Xx 1zznV@䤪*Pi?Bx=1$Io,;L..m?1S7IM]"[d'?4p6s:- *QzxtB|3_~{_|_ vv$3{ו.uH"<~__2򉤢(ZZM>+Wʕ"rbP*@S&$R@QXMvnӣ Ph!:* @;3V2Ga3TqP;Վ^ԺHPjPsgf!׏R JJ J=d90?ɻ)1e:XS'rb|09cŧD_3Ue\_$c3}uhY1̋u^hF|/2wi :f>e|Mo@F7aVo;,^!!0 IDAT&zFb10".+D)R QH jYHj=,1I6Z.f1"RKjadg#* ȬqYoÕyeLlwUET{ h"V}ೋ'l8Hf26]]MW=LE Ά,02O]>572`.W}J*p,o"}Ǩ!P>qzms.QlW4ݏ687oX̋t2G]=k>0*U#\jp@^V@6GhcR؆wI^``8Onu[}_}̮$ vB@7?!q]B3+t;~Y=83 &pUB[bt#bTq9wz(o\W+v'q54p̼*СaFF9_d)c/h7&}g؟xȼ~L`zXˡo%ҽj %E3ShN.dQ9/fd  + ;pd 8憂#z4qy@ kRHzxU N zMo~>+!Lp)?|a9%Z$2Q%$a9e;nIK>稴&-B3/?_\T{7oK$R+Uf$HP؞ax+Kea Hi!1v:uؙxX3Oʼ,~3.Ý%W>AAv^Zd}p*pL&dSgy\S~_HBF bun%"Nٌa 9z]A`A0@3YLMSQxbڎ1] "\/ sSCS \nfC?؋z ,{WPX,GA h 8&IU׌v^4|m5%rM`=sg6 _G4 YLKa(8XqҥZS>ϝf2-^ ֣61SljMwÛ{{j ~c 1N/$D}P;uY[,g+⽠@S9[E&[*11;h()x~v}=IN=Wf?SG/BxE%3if2oO6621ɅRs-B¤goU?{)9DGcicCdjZjJ$NC7CV5H`kML' Cʚc y^d()Fi rGatM`x>O q,%~%.zMV |wXfB0uSD2taS6DֈZX$3k1)SO%O(T1ۃ e#k< b"쒟yoa 9fn ^?V̊iNX5er+HGk>@! Mtqy+_y]s}~>< GbB\ǡ_XMʪmIF p>Dq3ɕRR.IPtS^?^zDCq%ʭr!zzeoZ!(f%DE d6/s9(!d!Ǽ22<`R tgOo=CWrjs-DEB'=V;}7:ndvP-$YαŕW[{̇LO)э$jɏ\C>^x{pE/gke3_pceXC9i~Fh8g>D=MƀDl6~82N˳._eⓍfc"=úP v7sL~of<@Rw.viq^ Iz fEdwOy3@Mm/W ĉk>cqﮘm#M הq83S(|~~1BnM4Z@Zw G$őpEu$ R+ Ϣ3PN*f䥔Z<s;Jvn1QSPԐdGÒ"@iDfZeo @M0ʦm?9T|nAh`L0,NDό&]xI?cbjOTBn)v{C*x%E7u6qI]Tl܇4A婪+?[hfIA-#tV7qƼ6^yLۗSbnGu RoV#:H9/ MĂ1 w@bo*ݙ}p~n\Wb@ ]ԑ A`//p(N}Ŏ* .PpKh(lYq:nlؾyZs lγ'&Yd'% g~h[d)dp\c9}xP浅3tfTeጥzXtFδ\sFuv53;FJ ?૸g JlTQKԽKUT(GJGJ(V|XBnU+Pf;Tָj-x8Xw%p)I:xYBϨ (E3 'Ĭ* v(*I.4iɣm5[ aK"HФQƒ(n(& $\\IR0o!THh(0,Dzuc?5?1Lt[/PЕrM8 hF1E g6}hN3hڝ|]df1P9{'vO/s,ô#=4m0V>S[St-MH)-?|?"ޚrJrz+q@˞~JÝJ/eylDP J($H6! F&#N*ƉZ L4;IRCӷ$X6,"$*Ju+m?R 'Pr/> ?8SpJ) 2PESt_+sɝIR'DdA=,/d DZ Y6ӜMoS˖_R Prܥ );@!L`RD[HckʿWùJ` `gƭ3d#?ueO`9d. qi8 _<_Yz(.}qhA^c8븵 ?>k4Wcw[S̃uOs~DX€|ۿɝ? Wq,wbZgT-e,! E*Z7*רXrNoow]@Xn ӟej93DFe#D eO\c ͛ ݾ;vS{g pKSh7>~5i1=4fxklu IeIA?fGnxqIXڅ뵸9|rVB +f@Fqrqo.K`I bY0 B(zcuERMI:ڧ|\}jVyL?:^)%Y2HITjỴblyCT.QHIn Db8 AJJLjIVJN JZݯ<T38ZaT3AR )k2!_x@{0M PM_狿|oGJ,~麀/茚VT2*\-g;ʥ֠4I)66+ftTK%˨&Vך^ zkQ`Es-P)e $CS(I.W(*T)ѿ0-B_4ZQzUPh")4).'^ʠEQl̒e%j G5I* RRK7>Rg>;(T`gX - J unv(|h=>_ (ømI*M7a\D?x:1^ 4T@N)AM%+fj Ɓp <.C7iCVL%X0+:ESeIB7`{bzxd}u.JkPc>& Ě`2p$6MKg50΋ܫ7$b2N Ih.,&w$$"U*6BZ (6?$z2{ܶ, ӰSo (ٸle9mTAWA6eIʯ}T(3i^i5t]ͅ @\w?vE0(('h56dqm>jb>6-ӚI,19}!~ ഔ0 3C9+ڧ#gJg:NMjsy}~K$~t<>~~ΟybW#5B Q:p)_B7* jbB}__;T-Dֱ|}@ mD!ɑ4k_KX@ z>Yz)Q넽!%9N9IRj_sж\=q I2IÐ5}Hv&{<Kj̾Xs Ф 9lw|܆lF5":r Jt2ݭ <ÑD\5|x GN;q3/B§ǰSfeI013iw3jS-:b 0Rَ3yCLtBظEm:/t[G1v1`\ ޯ} *f7aj%t. y(ekEQʏTwB'Ru@yE˘m ʟo(L?'1&"KT$e[^j7{75HI "Cn؍u8hƌUv^XRJitU_>/c2d6˴lbL4(Sia'e ł\ ɕyjeH Ihk@7ʌRq53,\U݊C&DReP_xjzıf2pB;Q*jm=f %<:_Ж T6IRmyݭEt =* |f "+㒫偻oF"6xJ%+>4+$9'BRd kL^Ud\!s#F_ዉc)\66A*e uj6'ڊ̶f$P:߶\z4G#Lc-})A  {f4t@pS&^ȑ+z=G$ $[_krsN8Yo$ `k6Voxwa0(H8ZYg`T2&p?^sXCt3IaåxZ ,+\XC:\pj IDATW~ xy|;j?4AJa|uۦ X3Y8Tlb)Z$/Hj uWaMq[mt,5|mݰdFu@0Rsh*H*I2-Wc%k4 $ݦ2ߖ'ʯUJ KW7^'h&sW t-lT|DZG\tZ*;L`z||U15`T bY;n0\l|BRePR"X $}U_ =f {pbV&ןHW@uywÝeO6ꯉ5>;6TlIag6.VḰm<>/h$yY)gA'h)d!`ˈH? ra3}%Q|F2O>6Ly.pm;Vr4}xACm7rw9sScS·;͙ӦYa,gkУ[A`r=N&Enţ4`%CF61'+:TLZ',@l9KΆ@Y /.xJ>D8(=ɶVC@~)-Y ltbfZoͻaoݍg*:}WH+^.u_(u1,3j 5~HCo͙.e(b6V19_o=^%5+<^]~A2on㪪uˊbAK!PLFWf] c Y0 iPb3׬%J1ȉw2&TG-DM;$cҝ53Q@IV^?zsYT,h땨Y$xB: ls6,93ihvLX-лj͗AKblR5\ :ZrܪKQh0z@v9kZ%b^rP90|uz,vW87wGt5꡽A8\r< ^^[1ErSrQ0ѣe7iC lP1x8wdN ," @I1S( **G#@Kwno{C BI*aSe9 G8GϝRld7 )(2φvP*I,3`F˖o+7]f֤xNg見w)C` >;2Lt':3 4 CglB\}lX|_rx%qQs+îuZ IZΒ.R:RB*^89Hq 0C=T8r\0,Ko|ߴH[1{ɹ*Hi+?6p5Yc-?t;>e {iN-<ϺlXbs&N.㿂O~ zhg%hE(a5'RB 6PŁoT*A.tbmm- 3}-]pšHq~~ޯqt$3LZμ,39_}],¬#B}IB5Q1Q Kw%!0Wzqg9 _UH9ŨRF*NdW HʇԨf% tXTEZhq4A$LJC.K ;Q19ɕHwJZɒBB-@Ͼh9衲, lقb[T(NQTy%JܰPTL^WXCdHaG*T@+5kYZp1d@]ZY&lм(;@QC`f:Ft6DU#f;?{|_ORp*??G PJ蟠_RgběU4=7EnΉrcO|q1OM)w-@rw'[1V?7VΓ*/Cט##w΀e%MŚB>yꈽ>zTPyý녽[) dJH]) tJ卂Y)זi򗝄T^MBw3;Z*TIt"~/T *PePCʑg^z#E4VB}^  '2ZYPk}\d$Qn\-''@ҹpk4ڊ=.OMz:xhiv )o{GsΎm{8\0CCX>!"!C% mPT(ߪpRє8^g_|8ETnu|}u]R?ϟzS,)%tL)% /+el^.,֮Z^c !)wd )h;xYu~!Qj/2SIJUK̒J+&hMR~Q͒@T|\`zÈLdÝ6C%I䀨Hr 7$%+[>?`2D9d*jb]0-sa#AK!eU X1"cZ GR0AJ -ںN$C܆T1Z}*#yHG6Ȑ%c4W:GyXt7E_YJN@xS*d7+eJSc/TE=Uajq&yz+8)9M~~?^_q@`BKVzĎ6Ϟ#˰AqN~E, 9%G0|H`+p. ]4Q;3\h4\{ P~M ɨPkUEA*, z%A& h$" P Џ4e56- 9(ELr+)@LMT4U6\Y7?\7o3*xP[T2QA1\ Z˼3-ٴ1%Yڪ.{B#[ZlQ$ *6!SX@M43')h G8|96X8{/bה3WC/ u<+"8<ψ9rmR·x z.܍~d-VktyY*NK)rܼX!}9'{j|ŵf͑cȪ.τaLyNӣp9ӲDi/\ BL_ ;֟w;H/|NAF!-w}/\*Elyޯ:^L)%!|o|ݴ $+ƃr[ {=pjrOe6ÞQ/~d-{x\\ز ~T\8Vűa!'ש?P=ޛzf|HAҿ}+jw^>iz tQ %||QҘ3eu]^ZK~6y)4iIKg8'$mFO<f&/֑]3d:2]5;m tD~!mR^{I&@R Jcڲ$Lu`) ol muhjLMoC6Ca/ ɰ%TbD-CR 2޸\%A$&y0&T3Ig!PZPݵ_X7JW1Lsm !RhflɹrF˨e1xjelYZԦ3"[Sttn_ L iKH hnqqxqc4wQv=_oa䜦N|uۅ3`26bܕʧ8HP20({!|E`T u\SB{=LR= a x[woJgI ݛ!v:Zlnv6_, >4 kGsh=R\U@Хǡ^~??~9.UOnV@yeS]*9)NwB?<0lQ&MlA0olÅե0_!?n)g$]OA34_ǡG|^/ S~__;V;|yPȁha̍Fm %pc0Ë鞁S%~V9?Kʬh#kA *\Ifhf"Ԛ$wDV]tq\W@JrVeDPt:Ρ?-SA7Vݑ. l90`/6yk,%%Ȯ^HůYXCR=$ݭ8hqmC]HbQ22ѰN9I]KI<-Z+6j ,R91u^1R*ʩ,IGg\4uW-[Q$YV{&Z~;3YcF+ʄ/=!`˨rFb`3-XF̀cm2luǮő" P4|.Nޱn'bf|,gm ^lm?mB~Zi$NGN>XR)z.7$tu:?*]٥yMҌCϗ7g7ޥvfsf%sȎ.J-NJc FinCU(CmJ=ƠW<}tm`#B #1HI(qTInd!tmC*m5 +JO|k F`Q8+'ZSJXYQn*4e,MlJ@Mf0DƵTOR-= L ֡ji.eA7N= 6{P t~`tɈ7.q7XE/=;z~AAo$no?*|[3_ lδo?w|s\ gNEg 0M% tL?|=t&(`LjD23%8q|H jUC.zz |^ϟz$dLS)K>s9k-PRϝtmˡDH1gM,Ju7< fEFɈw2y{h/o较k {cM?{<g^K7^xPoxlBDUdv Oc| sZ8$]q}`Do:lԗ$5O>$Sr-Z>~U9ˀ_N+|Sad --d{7|䉟M'+yIٌBĻƃI;E0Y['@蒛[:BzpQ- )D9):.чPkQ n1Jub\G1+Wa`{~k)eV[)L,"`q=ٹOK8QP[.@jo&P*)  QEURMc@Œ*K%QZ+_hjf3 rՙ{~n1 u?Ѧ>!w$eD`UfI5h-J 9tu]?ϟ?.\qGJ9?J MT%bhIrqK!Edh]ɞڈaކ'ZI?ZLw#eLZ*KTu2c|ɭ'0D_3, C=6#+pc EswFBSwwٜWM#QzJZe'ڋiq:J`NkE~}oߍH9yu:^:s;ALe^v9ЗM2^= Ae>''/Z1hL#&ׇ4NKA.mph}b`eVК;T*Rd]+f1$XSZCHXbA;SƮg-\,L.05~=Ldp-ؔlN+TB6Cf$" ȠLH] (+|cA (UT}(Z(\j&C>" eSi F hE!5W axV-6:YKh`=mNZHHu/|k{ `g}=&~<2Yڐ2w9HnE9'ỹoF3vs<>a w5y!cn i.KzB]{͵TX>_T[%%w?)d}fUTߗJWI%u~Ο?y[(X$B9[MZSn"܃.ۓ*;&_ ӕK]xQ#0 5ċ̆Wc[#)%{uKW(-X˦Xhxz} 3 eىx0HF!r *Q< L,{uZ0,Ǒ:/tHl=VE-"UYB(sNy^ϏU~sdDR0cJsHB6 fUSS2,fT* yZ,iW MpN"s9ƆJjd7W5 ܖUOʲTٜMdYC/=8BUlmF~9"5LmPyɃ8kx$¿8KfJTw?QߵUo*L)ɑٜ=~sJIzԶ]ʹN璋P{V܏g^L1f TSDXf3a'u/}ļKɌ5HXQ>C N'A%Jx\7,=$v1%钭o3(.%yz{1 yY'0; Q݀TIT! e~U-(EP3Wz45grC`鈽%PуMOʭDVƊE֛طjX5C$xi5"0ԆB䟵;/0ꍊYNmA'4 >bwp ξ`37rp hR +Mo!ĺrXq=DQ#:x_#|HtZ~^xgm:a౅WQ;BQUpq ~g6ҝ>Kt =4l ¢B7'vgxڪH-9iʒ;rLJbxW!ۈv8s\~$I|3tR:_w9WJ~ߟ߿?M[뇩 #-ֵ;b|^qJ>%e W%(jRP*J]`QD8t ȏU9GN)1'S99wTۜTX91U$T&qDT A~}69Щ|5ܓW4oh7on5OynoR,RիlQj'Ϋ&\sd`\OŔ羶ɀ{Lóy<@Moeb.\c mj>Ck6߬?P3g>|!7NPtgyfdHEnt,Ooɋ7 u6G 6OۑysD⍭;lWv?dߌa o:B,dL!sCP|Jv$DI(3%ĔD&0mnDuFihmkS*jAس_L$NX6lOf% Vs>|C)y1'''u[x9ȑ|D̼u]u ?\ەkӄ2 v O:|Cf0l'2w`OHzGY ap&\eCyhOAL<-cQ:)x4KAKLG+_|qJ:HVE)zs]TUmzG3x]:^u?dUBf_fy;D$RTHrHT> hz0WdƇn݈CG:ײtcG1_PZ)/`Di| zxD<_!75򾥛Śmvp3P;^erA3Ы~<^϶iJNvI'(W|QϧEtCe}HO4&̡٩lJy7G.2yiNg@ ֩CY%"sHc0)r4Yc Yb=j E0XɅ-جH m!=⍅9 Q"7FWmn087 b^L=a)Lgrv( h݂)8$i q$baTpqMXڱ:V-\D\B-*<\'d^E/6U|=@ك1Co4ܝ,س)7\pVP\A ( Ixbt.֙/F,IO0Dz5&$[ p-᷐ܓ rjIi] <4];sh>GXPc nv6+ d3GohO:֕& $Lb u~y|rBX,뮟[M 0Hz:_?׏]^:3g #aMۈd\-]YY42Y΢P/imb k^/Q,3+l ~p}~R 9^У;":kÊk;cU>4mP3W kTCQD|g;/j2w2ӛlC{Yv?s^;UzʇZ>cۨ|To"$g>꿛&_6o,x-ِ0'7|l,> `DNα_ysW }]qJٳ!^vQ vs{<ԩn7h$.$ D'⮙;+r;~fھN"eNZjFƋ"föwǸ9QƍEVE3!<4\S1@/Gݯ0CQTZ*m D+*jij&$JbFc%i+H =P7'OZ\&F 6K6+ XK.]]m ' Qa#ffhC'jI_, 0| ;2hv#+-T$GJ9'oA2lYץ:nHirar?ę2Tlb6w檸hc_}N-[pw<b úc ιyFۜʊ$:s^)b?NOZ*z:s={v* 5}8?똤HTas8>հ/,ѩYbhi~hfʴxg#dqad&ϟ}3 KAUpGӜa, _m&`I`m'sؿnpkР֦6@~WF{ FyZZKOUpnkJva7l)QpK!dCp$:%,j*4T!^ 7(nŭTePfM$YTDEڦޭB\VYu-֠P㮂Aӳh M=2xxPkl<ۄ'z>lj;H{6:[NX }y=c8F3D!)"ӳᩥX!z :&6 At!busznzb)/ E8fI#% cMXP+Y%rVCύ6$9~?^?~\yl_\-mh-j Mf꓿m, uZ5*Zo؂OA箎 ^DO))-8o)3fG7Ğ+R߈CkI\s9'OFiš/69nA_mji s f3+V%<Ā#Xє$u%S3hƁz|sh¤)ё^a&ǑO&@܅fjI[VzÞfh'RnN0Zw!V}3Fu gA R|KJ ax@E̺Fk-a>nmdT+ƞ9ng1vv1lX D "ILK"8WD8Ͷһ!BqS+^ZsGeOնtX͝oR^nɔ{f[p@@$#)k.[6ַHfS~uаjEu=@>f#m.M . /2y"#y\z)Af◮IraAZT60jW /- S0,BͨJ^z*  (+&nXJ<,,q\z9Η(2U*@Պzs|jѫC3_=&Ϝ7SeOl2%|Brsq1|8ݎiQ}6d﫷ulLy'Ms" {“97QJO{vnnΨbԏLthPҢ Vç$~R _0PH'p/ rim].cvV̳,ZE-,kZA$26㟻ܟ*izE$矟2Ody J[A VFFFmkZ]y,rW{x'c6<3TmܻEvCz8geO 3[HcE/ eʈ zT~sK n1SPF66:MWp 0!ߴfт>J[AR&K1n1u 6 Mt?y\<Ĩp5W0߸ m`(}԰Z@o[?]O͏Z@mu}*5(W{C'^K gU`N-:ORX31~.|ŧ3+3B@uAT`%oxKhR}ha' k['6ms`>0 <2IER[pWJ'SRJjѿz[k@ &!+_q'9eCL7jCPDXZqwラIowţ O,hidMa>&AΥr>Y2Tj-F}zKIV::_qy )x#2 Un۷4Crhx.ft gE8تefߨZB%!#Qzx>cA#o% nfu1CGB$ecˬ;ث8xW0@ (pN`m*)>3ױT,|9VM$@u<_ZG $0o#\R&l 9cʐ$N@;qT&"NQLae6efEB*j* k|K#\PU%O6`gl1Ғx0 G.*c6VI{Ǧ SFBϽ|H/a2= fpo5j_v$V;Q'{>yâwIρFlG aNjIbf`'ՋZ}̥G27) ^zi׫qRFQ6RQ*jAh{Uoo.c)v2w0S3y<|g pw$ڋͼ`P>"nLb^hfy6.(ջãT8@($Ύ|oJk߱yC'Mm[=~4C5[x͓Hny!쨧0P>,:^z8_9"(UE}xF'c_y]uG$jN_5g]+) sdl.qرs6nP z!%xV̿@r8f`(>}sxe ~Ua [ ?x.TEoaPyɝi$8Vm{*Ux+mbN)䜏~^????s:X-R)jkm9UU7oy{ޟ}}꿵Ƙ@9~V ܘy!f:G^aC[JZ%$ą ܼS/|ڞ{*}^!a!,콙AQWF,rRUi@Bn{U\BH7'a"$鸮e509VE]]||>H癯뼮9~,G f5u\IZo XvC~2a溎2 L1)y ϴ&^c'b 1{8G]ll{1C:!}1=A` ]}iA&&S-,6phzT<Phή쵝vNd04]ԪUv],̙M3$8:f70S4. GkUy{vB $V+F[Z.#3SBrƽc*̞D.35ՅVpeP[;g]Ȏ z{[p~ HWA,SNGxږ`/^^u#V'܎ SVwy_ ֘{pشcSpU٧x o$)K>yg+_R:|>Vߟ܃cļ-3r IDATBI |ON4 U-&ZUsHω8C6ʥxgZ( 1*_o@ h뼱Y.K8cdВVh5~NFg,džɑiJs)Z)ib"sz#}?ˉa3 E&]6MB_aQBN65iq]4T}-`L9'+Ioy"'8sBMD 5FTFj/DN+Du>}y+V=/G?"?~WkLo'?* f:3ք'IY!锔YiJvFW,%6^A?ԓ7`Z:3XPfaY(D$,yrg·*,> hmE?lFPyU_E׻c혜*-ދ"u]VrvǴfgsy&C͎6?X|WTSB@^I_+z|Gl4{f޵_N 9iA&[Θi"Lw" 'f4*`? ?_qtZJym}7eϑs `2I8 ~dN=s!V_ %Z"od1bkkjY ڔk0W>Dh;6O/`'>Rç/DTuY/2ܵX#_YSG>`fqĈ$t 6u69'Ơ!;GQ۵y95K 5 u{c2Pް%~qB^b|lTjd'$N)qt$ʉR",cF*b )Ys:>V{fa ^8؍1҅D'jBcKӇYܥ(n4Gup=|Hw8АaŽY:1%pS3KHc{ʢ @a=21p:~M|Lnpjswaf ciDfq=Ir4&q59{mRNL+/*Q*4ܳژczvWCuhea%V4 Z$8yeCl6 )1'bi 6<3:jA||oz^[>rki~:ܽ61JijͨEnX>LÑ8fd[8DE|0w!0e{._;[sDHwë8"jym'>,v _mlfS>M/ehhoi{LlY-İG1wb^ %`.yWFȑw߆CB%'_pYFR3Wqqp]l&əMUPIy8:3ϋcyPIhv$taqh^'IJ~O|_+~L`3?2C< qG9:/bf-iiXA 8#Osߧg'c_Jb=;QGIВvc(8Euezt =BÝy3]q}\ " $]ssW)vϬy<^gJȢG8sI5eښeѯ QcG =WDc0Ʀt@P`O`}[` >D#,oL}Ql҇ L$HHj~b HT<{K.Z?TRH\ e6%i⷟Dg%N'#mc#5qwS 6mp͝K#BZVT 23P)rt)p :w@TT\^h K1c_g[!O:H3UUC`j|_%wo?ܵIDVVJ% o˴Q^2I\ilȫ[ /B-i11۶/Dѩ,iVšG %J6NڷٳD.`cP@;lc naebfT"pHz%L%&k* ɊI=ܘ؄DZPn|>x7}>TnJ U2$~t;XZ騿f}Lѽag44I !$ʂ$I LJ\ۘcNhZM-Pz?GtS)(UKVEՒ>W"6`KRA-s!l3&G_ fgO,%] 1b4JհO/~= h|y(a⿰oC \_>T S]Jۉ^Z`LhՉJopLNRd/19.-*$uNSԜj5Hqvmc;σ1Ieo^Cq*a2Dc,1گ5*Z˜UWpS0bo)A stT6jZŸ2O*Pl)YJvF;4٢̢ldCSs-$ dRu ;;O#b6/?~?Mߕ, #tJp9CDE2o7 .6Q´PqawsYOB @6˙9YLvFs0sRfQ 4DL{O\6~-3+r ؈=Yl1UB\!mUd3^]PR#G Y5F[%Lؒ\zPS UCI )jLXbOYw! k_۶Ւ]Y<]TqϢ?{zǫI-/ rs-}3&e^Q${83SZ&>l\`,19G f{2H̳',Qt{+znҗa5`6(7iT8(d<sJDŽA ~[w&84IbI=x); ^w¾\^;ޕ/SZ|-W_mc'Z2Հ_} c9t|ͬB<繸ǖKڽE*4ywQq{F/&Z $[[sտ yTE9oKeJ=i&UWo'E'Cy䡝dr+ip_r\Bx%nr VrqNOc8>Z <*oF(&.,8uNo_թsN:JP&e9O;~m$fZ>.l΅?48Rhg{]-!MS@(|qy-KNfOLT|S@W[3jnEo19)MhƜL4U™ [霨X l.}UtMҙ=2i`NNhQ ߏԩZexQ|ːzpJt[YSaە9BT#bLaF=I4"/ʟ_}VfwJ$iI!+vS?>KsN5#:b6%@`%s0UX7 8e:ӳ͹4!|VdYt,K"L4m se[OcxD ^̗Jy9.rnUNC[?sNTGZ֥qs4Kdwk߫q󉚙Lȗ겫ԻE(2y^/,AZ7g@*㽪w]8v~18uSƤoe1+qZ=W}ݰ"i&ήj̭GO~2Y;pn6_.1M mtjlpLbXtx>lz3p$Mx2J>Gldb{ё5d3ɉ;zrqt#P=Mֹr0zEP5 f]EiTJ .2!M/]nZO` YrFw;ϝ2{T2LQZm6G OtO34"$ ujW 3I gcyH<%G ?#8^Y[ (LI-3hQEH$ 4 IDATLSSa (E#act* }.'P2~.^V&TB%2%aDKR9kYriIm_~PBdDhת Qdn;/se;^n7b6tv!dQ-s L5$r32v6Z|[LJ920P-˃G|>aYP᜶%@'>S$-ǎ%gX FL@$g$9Ϊzw""pe{RJJ3DOO#D RAĔ /E=d*3RZ%$ ϔK̋|SadX9ptb\/K!^My;15uxn~u|\>B,x+qsu<g1\wJaZaqOk6!\B=u8#.9A)%x"R $fI)z{N9 n-9%f A%SrI6,ӁRZ7$Jʔdd2$?kF0i)[&"NDž4?Er`s3ļp+^>׾$@p΋!G@}.M/XN\@"j%0Cr! WjK>a=:gъOy|by-%ZMԲ-w3d<(Lqx(p)~&#\NLEԠps0#lGՍaL*n1kiԙǜS4Y/i(t/fL<q&- 62BDXgY"CXփ*߫IL̔c ?R%JjWxmckK4(.,#,)=lPBTf"("o gx\GV$6\+VZ;pOwӼoQXz4HQ/xj؈ׄZ|T&o۸+7'P?։\ΉLmV>-?vpzH }b5ٓ-'z舗^—y&I\&oӋrDZLmaH6oc`06m/YvT+Cm·{528P TV'[C߂)$}\xi~+RJK)*k4!~ϫ}/ S4paJUe S)SDDjF" O)k{<13$0Y|׬2riE!sI"ynTQ&+ls?"nKKY ˓o_)W:NC# a cJ׬4E v*3U;HL²CT}Y i_e> RfSC[sQmeƅl' 9/xi7Yp%^Lqg@41"Ѥ/!hK @Cr* cD/EA80լg$Rv@<O QBK-T3wF}m 3I(1IJ[צ 6xFQ~7o{=J"age-HAlZJP U8yqEhUu7ȲHV$8fBd5;MIhݑܙ])1Qخa_Kÿ~ڊG 8M Yb1YNyq zh &@qRA^)3 ɖr>rR{߼|ؼ1iDjrL5c?SŏT/59.l" ɑ'2V'YАW0qa kN%. o=2FˬB-vj2FguƷoyo UJ50[|ax?q;L.e ԃy(?2`LX p;|xmzl?UVFXl٪{?*+yH>O1xy12)Jp/MQYJP7 Q/1Uu>h4l9%$(|_Y>hq9Q_LӪd_Y>}?c|>x8x)V`[҆edӝӼW4ܨu^=E&Dfqp_{a&6 z(y@MJvHLƈj>;i@NM {6Z>n&EUbe7|Ac 0jXekv[):woꭙ`|Յ"٪/W^oPO1 -[b:X?))W xmF}P%@ci7jQ`P(w\_ſ$I=)0=L#՟&z}UE>h k9NQcK־s3w~<U} OM/?.ݹb.4?5dMٯ5;A9{ʌW¥™:]cK;};pEqg3hڳ]/3O$s|sdzg/dWTiCc_5@~_CWǰEkk4 yw 2J ղ(-^&XV3 _o=lV@bbHVD oݬAۻ ]JRujLrFIIRgKM6yU5^G~˙U < )3\{Vzy$lAu-:G=4,)IL2u ^@%؛dld4;s`28}?8}؏s/C֫5Gk}mʸʝ_sxX;\i]>E α F]dGt>5SEW$>I蓾k|*'//߶(Ѽ"\}+̘onwdS%7-gcֺJY5lg`#}rdsEQ¶Uϯ' ⌐Ě-j3- h&(y|ohZъ\ )mcME o/r19'a­y~ ]z̲a9r%6ls"V ,!PX ;,}+Wavqf)88&m='mmqy^i/Boi/N>&|r[O[_eD1a=Tf )msdO֥M*Uvnl Xn+h D VPaPSo0A?CJ#,i<;cvK)1KR3Eon(g]7rr& 9Q]"dd+ c ۆmC*W6t nPQ<&Ws> '.TKDZBAo3$Ehz4+#W 8ePuۉ 1{r۷ƗU:QrBLR@Z2ŋx +T5S7Q)TrpmIpl^^A73xGZ 4Sg܎3lG8331O ^$dlZ-L*gbuuC) pgΉWn^'I¶m_a{9A}yS#AY)ǒ9S5pG.Q)*xr3E&z2H.tWqO6&0^RH`i4,nF]$f:Z tkyEK9]Nmq$2-  Ä4@cd/$a&VG 0t*jYU@6I*jrú"9MQөѻRyS4'.,TjF6Ճ 0H\"3@b'XVfHVhYdZ҇szΡ|TT~L`MݣgpYJdmM[9jAHBTAc|Q9iqZ% ǘ?O(G z50EH9dE]KsZ'6'?A<| a{Dž!e²Us|syg:SL)ǔSN)dX \s~~a:Z4#D*(;z)N)#hy1kPf@K8:19,,[L˹m MTlڧ5 uXbu#lf#|3 N`YQ 7'y)}7l|fEy3+D 8ESӪM]zJ|yNbJg]sho=*ܶUO^aۂ# IDATം4)qXhIN! $$ "4z& >ZsnQHwyV8GμIĘv5̐Ump?O3 Gӓ-rtRr$ׅn-1x 0%pťv55(|v"wCD4scL6 ռăђu0}Ϻm&U ߱=\u?W7z\.5k$4~ᚗߏ6s3<-;Ϋ97Iu$RsP^#7!>ɁjLrFRgʐ@9)X$,5PPi_DLjQJdÙ$OJ=%HD U4SK^A6 Iv&dED$Yk:EĈ@aA2\F&Y-Fل%KwꜨSl(ҢL*(4c(ٜ~FJ7u&.%uj0`fv̨8S AB HkR"mۏ:/P^E{|?}9Jr%OJ퀘Xc>Ku® ,i@5cJh?Q@Z]tD4esQAլ820P@ˆlH2g\v=& 1nvxqXJ|2_JR> ^P̊ae3s-G2@k/Jwqyv UT@?W3l^E!咼㌍cw﯃oX&i"+X7Wjΐa܈#4JGG0,,lgF΀gҍf yC4H&Z%lS Y7e/Ӽv㕏1;[Y"]dn37]f]r9Lt e?m> |s=f6eʒ@.-tD-#c5mW@l{Bqy#muSc%dp|//o_zڦ/aa,..qVey,kH \HC|iZ *)d5Zr%6S`֬;Ģ SIn^dzuT5@δSŒJjȊ&UH'(9!HYSF2|VMN f)3g( Nޫ'Q)[iMФ9MIplN!dj*TwWuc2v0f5W:,$x'<`F4 P<^/r+3@2-3|ߟ?}{ն`K>X־<}~eAd'| m0׺`,S;ǦdR߬m\D)_ӽ؞sܹ̅rg2M)Z8VIpR_h^8Ey}rBp`P\ 1os2 }˥$P2UBU4l Ïw4on3٬@s뭶\Cɸ E5LYzZ %*p-9% ĊsY"VeHA XaT/@:@*{?ז;QE:A1>A ^Π([ ě U!4 BBLiȆd TkmsJoNRh”R%9ZM_oJWx'yUZ-.-%B,E$NM!+>aafEvj^ͫ9s'"NLԋxmg|S.WH|:@Lr9x~~޿sGL1ḽ" ru=1\Wex`@VTcf?ć {wlaFl'q)YS d={Kf)" DFlq6?HyxNSAikFg^ d3LNr'#=ZɅ7@Jq7mk{\jij!}?O<2)"=BЭs?mʡTΥpvMiǐ'ir?>I#K"&jG}iY؞GTQ&_>)Wm巿ﻮ*VE}۱ s!86Ο\u?&|VL<3i(j i;'חu\g~w!<_~*̡x$gW!v]OU Ã}ý~C^=+C|W=!p45.$2|/8$.ro~>h.}"weݐdʧU9n%XwjkÁE(Kcv:X\ !Y  }gU$j ԰dGxq"A~mL40@)RPY ju@ٲ'8fQg0j35bxdWm Aǁ[0[x-l̗m:Ru~~8bLT/՛4hɮ.OI6de+e t.P} .X%!--gfY&F˴S8yg?ϔ k5z7Iΐ>sY o6K&V&L&cq ̕:aVG븛{XBYlӨ_SbJ$0tNcp6ukMI*|v@Y~,Nf?.Hyi/S@uj͹8'y/,|ZN1UŕBpz-_\%XfPnNMBec$J"əeϲ'ٳY̳4zWnd;98J1w-Y98/y$`eqzX^hggm %X\Ne99R&̷k)4v۷B8X`y_ঁ宅E /HnDO1}a訷:w5څxnK_qR^:>~24Yrޒ7;dNee^(f\?7E`d3PUo׈w8N |~hܟӆ{lpzrot:;Sǘ|~_U?4%Tiu7Ko%K'Nn:iIM(j`"g B'j BE"S T㙓 GU涗^>G6HNYq-bYET;Zׯ~2K9s:xQ'.ђ卮)}j5bf9[Q $!ɖ̋WWV9""^^չl)[Ζ?Iޟy~#-+8KM)ۆCSbqsIG8{uX4m>1́`EDr0'H ۫vDR`?뻜騽`WeU":>Cb\OےL?X]5ڄ5Ԟ"n{m[ }?a)YW{ 8Y?̠ pg+2pUJZyfHəfPCǍGY&lL&Qp(x$93-fS3o}U"T6on `QSt3-OUq%DˤP6W`+&ʖqCus)Ҟ nH_p#p@1Jͬ7K@ {׫䁬x864M)K{ 1ǐ\]|{<<&DzO%'eTz>LF)Ql꿮Ds/wyS'dIH)QQQnΈqְ2Y(w6p=69BiQr٤2ǐM].aU>ɳ@-:(&Y,4 =@7;,sJLvlҴjd , R͍~/ 8dT)ImW;QIrjeż2;-ssqsQ]&'w7tch^moay_O̜-d8}93L硛h #QG2siCCM1X !_Uti+,3ղd1UHL8ϳK??X5oKm=xFwʹ\XW|r:enh)Əo0n(݈VʊcuVȏ%73N8&0fO#N5ͅ?4j t,9&*N`D5WFH7F|)60L'7&tk|ضJ^_c?2cIܫ_SXy8{wιS+-R9 f J-%Kf 8dO'٣I̘s%hLfZ&Lkb([ML PG\H% o,9$zbnOq8Rk|7LrV.^>AFbAVM`|NaE,p˛\)xo|Jm=y6T]4J7 lIk2-,ͤS&ZMMc28AnBml9^ulC:A Ȅ' CWw?[^<y119EHES uPcKZu?ujf Ęs:fhV[lјp=xD="Ęs,,eK)[0K;Zֿ1 {vQ+ `QJ$$>?La.X_0s'{29+0p5x `]`k^l㤪{xz?ե4cPьR*EpjW8/uqY?cEKwK!pKW_PbʘG+k由غaB>MߍS]: `IiS3V#ewSW؜ WXN \#((]wC7s3?т!8Xɂۢ>*z3$Tt+Y2(S r$}h1Ba;oɤC7\ ƗrRRm Ex NSx 0(v0--Nx|1,FG+YΚ-EQ?qH(A4<ś8&TNSp о-N?Kyԏ!kW]XEd $yߩ2*OuGPuهL[*hYrSKzo?X}[{M֘K~bDl3*<_[)6~:a򚘊%:( @Za\^MUv@ ax(mhk]0Re{ Pdhj(*mo3LsHQ,ܠ"b6-.D @IJUV^;Wh̙5}>Nr"3e{itUP?dJR#EA$F-(ZJf %F"[upPwӷwvG%SD:Yf3,%2 +'D0/UiHZ>ȬƷxZ2,tmbԩNږH,Sd&nKp E)?>>B* pqYԀħ3EpOG *-m @7zྏk K@\1FQtU5P".k"Tb#':iwgu17'أM^u=3_N=/x?`n3Ä6|Q3E᮫yV'v1p'i8^ȿ-ݸ?l!v|T?\_$ԙQ8㶝m\ ʴʸ9/ <~"|}5jTyj+W1,>h7L!QɁI4;UOQf1"b^JZ[TɠTorcvJh~ZEC': bq,d@&P'娇Գ֟s?h;F"3tR'tx+9(EAb.ի]ߵ[En?L;aA철#qXFq L]D[֚@gFQV/jT B U r@M\Li%Lbzb7huu%wۖpJiT2Njc==ei%#^L>/y+[O>#s! aYԹ@>YᑁfgV#HV<:Ʈpͯ2G1Y'0 .n.χKF<ʖ `B6*u߮&}?m-&ԭ"ݻo*E'M[Z֓դeq;vӾC(= sF-f:&m*^7$m&MӶ t~³ǖ:g6~}j֘FL0w50٢N)`EӮƱ>|:ŏ6*j[5vO)!cq;ЌݸTnD}kM! GIDAT[??T䓽z_뾮ZC7*=߷>|[< 0}vSx8R>}xUS2Ln/FG| ݖxQ{riϭytuG:jDݩlGoݿ9z'>7:8|:_xtߟk?pݢ*znH :tNLC1M؅AzI-Z:CkJєmC/׆2S? :A9M /ktNm֢lX (]( ȣ*b@̚h H$ĀoI /)"G>nY2*+*i98`8lU`l#bgXyǝE.D ~[1: S^~_nGOQT3 v0 CA2s)<,h?\N*Q鮃y8MU/Я6*MT5nNe2R;轹 =io>U5cl~LfdA.EAcA1pIU .:u8-Ya{!- @7⩡?lC-y s{"iaJƮB\&x3=o]WV``1˥d|$`پUX ]ɢQ{|.sHs&XWB qfPA]GFB^^AFbDJIw~I3ij:]kv>`ciRsb'9j&Gh̅"*7DYXT3:\[:_Ɨvj`nEjzդ62~'Is%H3Ϗsx+JW_ g[yڼI5";{32##r,C5m΅_v U'(Mh}Gp 18w[ ~3$A),]-r+׸Y19|%:N!h{x!TBL`Z3..k :ٵdMqgxC^"L~?Mv_\( vD%dx7_Hqf#hq {>L1Sg [  -(Al?xd>| aAmaџhSi5G(*\Jx CQUȇpP{Tei4 k˰%QXH܇4,4ʊ1WgMl/2nBr.pVŦjy)Gw|~뮭< 4Q;Z;7f+}_րO0%k䈎dD}'=EM~D%bU&Wvڪ81{h y)0qK[8'OxN#?F.T %=8;Q_msW'xҢO=Usڻ7u,>-@DÚ2vԻ%`X=Ws( ᶒ{R*GL؝B$0Bdh1RmUTUв &fDkbk$I]нd϶զ՘W)d ?H"^ͨ{ VF>4*"Ώ!8"ŋ:i,s$=*zd+Ihk+'̃QX} ,K|#Ux0LpECb ]}ZwίmSC KT6cB]Th!qo=:^.W&&fCX6+q/3}-GIENDB`DustRacing2D-2.0.5/data/images/pit.png000066400000000000000000000035061360473665400174510ustar00rootroot00000000000000PNG  IHDR15#wsBIT|d pHYs `atEXtSoftwarewww.inkscape.org<IDATxsEoL$(AA,*<}ѿIв,T@( QQ9P`ȱ=LfGvvߧjgпc Ӌs&h/ )s-媅s1p;g T6HX;R3؀pf@N^`>SZsP)H XTǀF.*}Z>WG GNr;$X Ee 86d,R"n%0J^d&V`ڍF*U&R,Ɓ0C%sin,8dF%=a`[6uL!=AtIC0ti^N _{HZ'Љ+G`q`S+R$ˀ}%q"DZM~ s0R*'i 拂s+<H x!=rdR6:`#10_Ka@ v9TȍRS%KWαy6a'wʇt QbZq-`wJ*3H *"R`fSJ%n79ZQ-aRJ)Uf$t'c(+Uz^=n|F0z(NϭߴԌ| ~BTl7@pn ?|R3ouwawc:Tl3؝:=ϑkKDf+Ȕ:p= ˀgK,JU-6j?rƛu{M=l&w9]l@Y #Pgcy&K9\;)5ӌyvlXm? w_/z{g®uI;~bW i;Npxo)e dvNhsGc{ 9GA@M2,! n'RU*HjWlnw@v .%u@+۠T-6z=vl7w 4H3N mAk@I#JՒ:&?`/vo?l6%nN L܂8.@7v@p//m%t/Ax(`G.&tslN(ԤL۽𵤁yNvdG>ZhtXv(i;Д&w/l9 xi^~q;Pl4vjyl?MvH,16P//paDC%IIIu{{`nஜ>F;Hw*AU'jO 0 X+w2v[y,WRo4wz'ݵ0+ JbH1S|.H! FE|1 [DHwnu_tKvi6F Zn[(((]Z3"a;23"!fDk@re [l#s^VRNH% ((=2$c1;5i$f21Cjk1]jJx]Jϡ-Jؾo^?0~kMkt;1`^VNhOb:]Y3ve4㐈i_X1KYϊ-1kr4v{NXe'T>w]/ +7Y+|ر5مYC.%#veF-4ShN3q{ HPڇk_rAÊk&4m)ёDD U+o ,2Oз2r bB 8ԬSډ,ZT8瀀V[U(OJHʀg#䚀 b n,< SY-'QQx$*oVuN0ALěl-Ӌ Oh#$% wYK^dLC BJ*X1PgH 0FI !$aLĐ%)LXCH^Si|OzU%|ԑnL`+4@A;Oez]xֵgxB"zHYc#%1!ۙFz&if]qBEcD̠%J#bYh 8v(4RIGĽ@ZuP^r35,V]?ȇ'BIrUcQ㹯BveTܧfKI:' 9 uDGDHFDD9pgp*#e %=k,!gEɂOω!d!+}s a֗'4< ;՞UH$aբaѭu̡!㷉tGH*'"rvI5 TTTY&z I 1##fG„!7H'UbSsVjO6 S' *#萡?S<psrP GHk\0q)+>-(9GIFkVdM 5$cR0]8"jbJI9 vI5}1bxŖQeD5^'1AyXTot !!O !5TBHXS(%gEZJsvcm{Gd,YsDKxb`JH%695/ Qc"vpe XVD;D\rcF ZҡLN%*^fp4 XR?ڂ~cȖVTӣj`7 p䯽Xa#aBNRoVX`x%C[XJ8# b5s1 2 ," B}]PK2N(}v-U5[}*cɇ-3A4T4, X$Eћt荗6uڳRCNBSPXb1 "rr*hkfb2NJSk,PxFFG7Y`2ǔsj<{D4,<g8fMKmYɟM_~*aM} GT88rNIxƈ@EȇDadV.k#b! wĄ$ԬhaY61$ԡlabACHKb>& ʴBOfVk)ENy޷.l a"Szuol(3Q%7mmf}mfTd# =D` X l %đg!RVXJ2- F )9) ?1r3rEk9a`)kx9bΕ-l RB^C*Z[H1b"Jq-hR]ZFb%Hq@"(pjUem\,x-um%%D7离8s6 sf bwI8kk6(`n/%zDԒ `jw8&h VmXmg&V(ͼbsfe/3 alGbRerзň! CZ9x%lj<%)Ҕ7X3ae]) τ]eJ-0Rjqgvn!W<FjtmvPvHV3mIM32N,!2G@BHcFąl %35%u%%1Rph}56!xLk5veP6q)meBNmOoK'U"SŴ1sf5O3r&hcsZa{%+CٙRvT++9<(٣Ϛu?.lnKeDC?3""Um\ѿeodG='ÿ+?U"'U-3o b.t+ {1R]ٔ Q{fbNb%C~F1!29Sm8~!OX* ; q WkJ{b +oqfl|wcsŎ8wk,-"JzDT,Y OCWwk"! cmѲa#o0.%aJK[;~&Gc&@3G4TD4KkIҎj5Rw҇OVy ˟-dP:ZSY?c "foQ Փ,p\K6MR2v)IP 81 '攙ډRHT -"%"&hM CD@DFNScaWЀ"yLυ睇--% Đ!=m! +RDHX,OixJÂȹkb3Ul;= YN\YaK֤c$U|Fݲڭ{;DH'_ ; T85c<ͬa qc>phv͂kr.HcE9rr.S Cr-%gqk \iieZXe"(# "#'R 9ra?m$s HQr'5i.N12rTw!#>N NH8!ᚇ-BKg¦AcUS1 XSRhO m)οxKOsCt=(3gLU2YfUB! =f ;T E@G Ҧ6QG>9*[ҬeꩢG KqbU2=M;7 >jkjq : +>1}>PdXܖV朑-,aƀSЕsut;:mŧ;s{6wtGFM~i1!kj.)sM9MmmSC[Hڷ=S+ mڗbܰ3$f_7F3 u_PsD #ѝPǚ wOcDeKY)Sp3a7ֆ>\ۣ_}eyvn}D4]m[ӛN8 !Cѐ&-jgj4:v0ְtwh;yah(Ft3G`GT &veF@ENhDFT\QROmS?]sܺ @E V7znL;)u-LE$hln%5nm,1]O͜_Ұ =b)LBRB(&/u#_ߚCٻK𶰚s.HmgEDU[WR˂ v1BJVkr76s{7؅TGx*{~01“SgŐHHGSkn_u7%W@Tѩ$&LݍrdMANEDLEיi,[r-pʙV_Bx}cAAJ66_Ӵq[p ػs{R&t7MQf4z=~k:wݭӲSխXn_e;k_?n6E-J}՝_X~bh_oL[ K B=dpaIENDB`DustRacing2D-2.0.5/data/images/right.png000066400000000000000000000135251360473665400177740ustar00rootroot00000000000000PNG  IHDR@sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxw|ǿgfv6PE*H(ARD++ z/ \E`AEA@Dx)bHzIvgg&!$awf}>fɞps~r#"΅}P0-4&E:6HJPO9/XmkKɁ6hPR߇D-CT./448 eS _vć0%7)AV(YECi?Bs땗;n8y&uyM1dCM:ቆʗ#Y>8\"DR߄#߿Cr"׼@` OXS |V %{22vN0}v<2ĉ&'B FcDd Сì NƏC|󥚴=gTcBj 7~١QdoBbĶcDd Xcơ[Z$A' rsp਷ !MRbD`1ϱ,ظMJU$ocv}ǐ>jT$>-3KBD&a^YO6 T{7@R:y'@/Yϵ8xLpiy0XE3t:4uo/ݹNGI^h΁#pD<* %fdƞ91|D|^u(r$: |k5f Nƌ u)&zYJO?Xcy; 5C:$?r.W1JboaK~& 1bѓٸ>3C2n: ~ '/fx3%5,ICJb Ņ( ^yo~6ٌj '{OVIb@ ѪCtɗ+tq?fPd\#YSg)nepR?4FrA5cN}Ԫ"yjU%wGS M1>tomǽXal'F5Y2oKh6EP> $)\lXq6hqUk~l©V@뽭Z&AḤ8% p]3+c۽'4{Pz5e\aM8xL3}q6Bj%Ąݫu[4Z7rh$B!Bm֐FY/FQz_H6nӸgRV+ppFM>>Lȍi 0 ۶ `:u.T@f(lܦaofD8y\n! 1##bBiB|iUbzNf.r3f? FUJЮ, qΛoRx)ئVwu"4hʭ]ɐNԱӢ#B,CnH) R;A;`aFo_Q]j6QYd> q(DbvJz!x]z%m]S>W-pMDeY"~?(2s! 6GtIJ /ssKT> .ZU$߮8P肍P,n&4~ 4dA|`]ױm<(Ag7<reu&[#^y#P"G|5Ը<=1 `IRR"5p8͂/@v/H0aͻMt8hiJRh~$:ٮ 8 Pꑜ_ @ B]}>Žn4 MJTӾ-;a|8vRUE4IN@к$A}WZ𛧩x= cӢZ▬ SgaH*M,߉IOUz̒ơo}'i KIHM{X~i=I6)0}w^:Iv/'(heS%*K׉;u1hmb:}tm4B@iHKQqYkC9Xԛˡ +d'ڱ**Bn\H_ ̟ V«<<[WQ3 \؋Y8~ 6T Aycns mtaKu4xn7;f:uIY"TH0Lz37qE* ;J<%yHh'0ٶKwf% TnC"2Qo2ɐRdAQz[ǣlz?he!@dPб9,˺ c|;,\^lyELUb  XA6,~-4Ԩzk+_4OJ #UAKS+` o̠ lFJ˒05\? z( ߧ5:5lL4;[w1oA&huCm~ܦ1oEdKN&zP<]:ɉJN /> =lH(]4 j_Eǖ U4 \)e W5uaCߣݾG/ 1>JuYﵑIH ͆]d b\? Zm2w4yٴD[O*Q괸t& oQ/VѺdo vu[7MK.RI:ٲc/LKy3Aڌ:cݫ`HޑD.6h<qHAQ dbne%|sTR+5NfPz>B68%D(ICкwnﰠnuSBniصw_-~H"%nuuÔ9:5z*E@Tΐ1P/ @̈oө׼O3", 0"6~`zH '{QAFTqR7_^}IJ:#hqI2bF|P9wT x\T`OO \-YaG%d^)X3nݼ,I#[l)؛)HC% Èؗ$m 9Y}VCr5( K "89÷D|`%P*l:9¼I*X,Aih2/K%i=X?4)CTvjʲE ۶mUຫ 9K $SQGd]8y\P'JY k <tTpa>*upHeS!kEEXJh_~}az a}K5:~ kC+\b+t`j-:6(h~+t}.Cgcc)!@B|CWrUTnoЫeSZ g~8\𛪀UJD}vEMXܱW>m IIV WU4G ysN|_R(5dۣ'SRoeS%k6iT,;Es)΃I0@rϱlb4rmiN.;ԠMLR'T1LAʒLXT[EA-V O(BbG 1h~dM"|0V+ƝHÉӂ{jB!7~(=aloF՞Rw+kQc:vWK^pI?ݔ. ި`H_8~*%BQ-(q 1c$ٱWG:HFbļdؘ _ց-&p?lBg<2P}SSzwody6rOxvtjvЩ~bbM$Mïx߼'Ϫׄz~[;4o}[WosO0[2tRhX cpJէ;lP>Iyn}fRJe=\v$8#jN$b=0wlOY5UQh/<½z#&߮xu.CcMP~j^hMswD=R7?fsl|R7)|2Az{2-6z+ܨxsVG5~%\76{ ݢ1? kK^{  yb~Jf`~ؘ4t7XVH7G_znիW7vXIn5Ɏc>̚x}}vԼ~|J Kް8*9̛ϊ4bŤSV8S'`HUrre`Lv_Α^7/)vun`;AsC4I \ez[v!ؗ I~d=! 7Z 4vmpc{0\^tvٹW:歵m;LVlx5vENr_"XEU+a$[c_'ʟFoN䁛mέ pMuy:l=zp.>>d aaTDҨd˖89.t{Ԥ͕N\[F#&I'm39yF-;c"/ &v U׊Ы-vJz4yiǧ,(xm+$WT^4{u|0mL(̇($@>*J$3;h;wOhߤM#i1OD5B'D\=eSryɻτ5smuZ0#ċI6)H0v|PƢ߄CyW\t%;HFb~Xש&:]uQ0hgՆ@v}$7wv;v` Wk:h되άVlHK: /ZzO\&Pc|4vO* ႚg#L)wm|Hڥ֩&>f剳V -5uʥš8Ϡ@WyZ84+Y>ڷ| D` Wg?9}h"u]<;ǎ݂$IIhNpםwjc=ʿ8{>)Q9vz177L)%>Qw^p2> <{"îͿSF(>_җh`pR-F2C>&'_:9s惑ǎǞx "u yGH#"frLz 'Ne%A"‘Gc_6Qbk U^^$xui& Jf*I BT*x=/g 8Jy \ǡp2LK`Fmmk+K`kQ.n3TTJ9 J#,|}8?0\>\.%V<3[$bzmO["B_6R.{OBJJx~O?2?wWO=4 $L?+ IDDD0oxNI hs*UT͊;cc$_}|>e +.c㐌1T,w\.C6P 6z5&DBԮBL>ӿΝ;IR_y3-ψ)tCnb,R8+ ֖(\_v`fdO@XĮA5GX"=ἸZXkVJAJI2 .V9#s8{ZkۻϳW)%*#P3NS\.u";ǁHfNT4 $ILD00GN$Z%{H>ك$2Y쮌qypL3 eXoldJQؠvxKb`x/gE J4334:sgL&|{8{ 1B051k7 ׉PRRԉnE&]HDcaeDsu9C78y\o9sFb7\QAJI8IfHU!G 8v~:0;7sssjIԩgt\Ll!$@XnV8LRLD̨5Bc)8R6/'N8= Me070/ӿy~w߽VmVZ6V7J^>:m{? ABѣ7`hh`5AāpsLl”RqUf: 7A!(qK&1VY(Jxs.~7Rtu "!З1`iZLp9p6ZMFfZ3 їl&GA {j`7[+#+"8q\L0vi 6!1AZe}N !Dp!%Gq#cXk2wT,c\D03:ȗ O>7zC)J>Q$1=f8\) S' aal rw~[U<'pc^c![ ZOܝ0(C9-K 6lafFHźy6.C]Z z-|dBH )hOQ mݕT\Fc$6"A _,ZR%4I$1i 1[8ijC K !0=3si;s]HA$ %I!(!1U3B x!j=`fh2!˲R@_>05)'qb1]bj#b:6p'?hjF$[^ (%{jg= H&)°54Rs)ms ٬kGc1BJ)|Q ^I$N)>^ZZr[S$]3^c13[)g.Qh 86բ'JM U+: IjP,P㨝Ps=v^( h[ !SoG6X[F`m}r] "DIlWV6mOÄ6~r))ɶ |,--|rj,QH0Qqr9{mYOS k-1n 22FP.HDk$F^#c QHq&q2`yyj cZ(/Uctduȶou^eQs493ϵz2T\& <03͒FvbiiWWWie40ff.o"t''Q!!ˌF߃ "xX7`a"tÁ/5QSI5i8,j%C./.."mw~[+q$:}zH/ˋ8p`?ͮqP^?OKMo!=>6¥bicR]%8JvRE(Ea5+ۼka)hzvp5'䗪Mfqv`ۡ(aZH)qy>sv:}{1P.n}C a~q1dF}m h˼neuA|g)kO1͊(۩OoyMw BB "8L.˙l:M?8@\\|n\.Ak:-j Z)Ѽz<5(5\Ѩ6sp\* ?crj06>C<:K cl&"VG:)ҽr)/Qv-O?DW,:s &y AHSR~3T¤)bè'Q# C=wNMMR6*r)8!N5K!&/Lw|a=*^z per F*V#q ~P=+|$*J7y.@^' v0Hֽ`nr_Vla ZsNP{bh.p8jD9'ʵsXAҒ`T l^ W9#G=Zawh1 g kNX]\|s;ʣ.o 7+u:"Άsjp;qNHIἤpe?Z= > {(Gw N b=K}tbШ@Zcv6 8!ĵjo qADNmPEFAXvDRKd~cL":1)'yWeOg}+m蕥 ,bN%:BW+> Z=tOcȻDQ %x"SڗPuZĊj͕ icQ}_5\_x4ReՓWzs%ԛˌ%=e˖s*N pôhߍj/" Qnf*׷o1issqE&*J#y Lo=q0ɜ'Ô1f'w^,ăr)o]ߛ+ spewc/N`6ǷQGOyO_;SrWK{ >_NNȟ|*U NC>nJs9rUczPlPTB| t:NE"5Vzdv@] H7"`1b"l 0%=";@T rSCwX{F%b^ׂh"Y2{tr"A+(L~.y;L>oT[ZpŐO֔ \(~HI5s1?.)5zUE̋}n߹FAg[~~RG[4k9xHu)q~&3)|i#<N5|`Q;'\(i#>=Ek2a~6~?݊|"~xJ(S7UGHYՐ /-Wd:"W㝵V❁.ɯZaݶe Fy=?!aPǐSs^v*u0 _0qw^3KZiDDn3+kLc#ml Vpg#[\&ĺ>@9О+6FO YlQާPv9 z ^tT//e#Ue䓖Kؿ!/`(Y7FTipe'ygRdo 6lwqځ:Ν+ fIHlK=:Rрh7,п1%*{1( _mN@6q؀r/fW7l%5tryKEdu5W.{+N(g*;G-Z 4؍eul-UƲԢ=ZKQNJ:hXrp-"t$0xK=URxcM I!s,IglCL< o$-h,5qvd`}߬C嚥X\ H,l,])S#q 6:g8QQiԋrur=uPcRk6` 1JG%Gl,.i~mfnQnwz4]G'=׷{;Dt4З :Wݲ*}5n73qD'qqos_l?q}0CC]xjs[Vy8ӏyTlVuصJZO'35f8&PY:PmoYGI\.ugt v`cqMsNj:npi`s?ue6,rw_URCTg K%VNk8q>a /6=51tϫD`6>}5~-ݸ̚9PCܔRKߏiٚ[:b*9PgCGν6O F>vgS:J}qNkN5R1 I+AIE|SsOi,K/'+Ҩ.X,&V_5ѦEvQ)C/T!ێg5n,.|ux۶_+kmj/x/u4ӷd00H:ʦ gFhlc@dyoq1.֙YTiM)u<@I:f+T#: 3ք| ckVn?n*p5z.n .mZ+NT$"C+TPaL5y뭥C.-E,ĖvPum}d< ]cS܊הsJv`-i:*E7&BqN5R@Yg6O[tm>]rMqCv~z{7\d,6S]&Fc*mFp~3b- ` oEK! jj _xg;"ݿ vEB鱐6:dw>2'aJ)Ho~; uᵝШ 1g+7։uW&bU଩,ڒrDf{wȷ0hoVWf=jo"?ߒ%+_^o3MɋD dv)k?gnN<؏ڄIAF>ETDYl |$7^9a0)BϘޟ[P{87q#,ͨpßc?i鋈SgQ(^k# <|CͻCq-=Aq3]t]е&(qWJ#0"uP}9@[:=jq6Qt.@>V^Qz.n|ON:*r5x4ޗk1yP|mC(mF[IP4sKv&o \WfnQRQx3OݜCgyC* J(ە315蝂y 2fZ"9q郰^NHUb|pl{5A0ZFl\[/΀??/(w\L 3%n@>TNh$) Ԃ%Hc?-#ecwAR+9 "щVB`t1&PW,!$┙:B϶ w/"+V6A Bbsb֞& 'ׄQw"tX(g1yHKPpHv*ۑl/z6ϙt++Ɛ" )qZuVTDq!^@~?S&ACFsf by| Cp}+A:SrvӃjoڵYT=&MnWf9;@v냸V:'pnUKܚ1*s4g[^O{]ʍ0wi7|IWX\al`ި ?_FZg{s%K#0b=Оemr\ra82M3 EQ_)Ff8 + (x&щl0A`$c_76`!hb"@"μM{&㡠%S?A֎p}\`1zD`UY :eQ3jGH£-pw_;ewjg-sGRߍ ?{ͽ N'pc8}+¨V̵5Tgv|2;)|L̮7# M5Gh\A7" 򜼗 1ΜC jh²rWcn*TAmMMBJV0/mRF"if]3ciUZhtq?.o0GB*u.%{N#zRFa:/\Gcݑ6]5x960f'FWI Ɍ>+Eڡ"ζgW A=ؑuN?CzU~SX>;}g:)i뢑Yŏ d5Q4iW?9bf( e+$lʏNIvDBM8:/q#ገhٺmt vZ[g+dwB [.@"O+ * Op=(p*p?}IL,]s^xLehkT; ge0TUUbKu= <}>r ÊZj9`}p\'-Ur5`áso4|Y]2G;+ߖ-t*"^D!,2ѡ> ̿(jHF=?Q X{-[F%eVb ̏僘!o '72tvW]@ Ҡdr%Do҉3wM9h2!i21 d o1JDMĉΐYlrvoŽbo6YZ䫳2M'M)ZۓJb!U\E$B c(=o@ED#21R_%Ɠ0MT.6 vH{r{\\dx܎u xw-&I*) 39 ɹG[+!)х]>=Ax;U| ^WóQ-gt0pBJt7S{GC.Yg5Q4ArgRT1ՙ Ofxp ˫`z0 )=i9/c`i_HdbkUmr0ӊ{ -3Fx]Ȼ6v6IGICH2rkGu߀gTXtӟpӸ?f*ǟOoPޯ5 Ql[k%TuQQ($1֥zfuҖc1:ȆSr_~^ZW|ÈjzN79k0S2X]CLg8zx`Sa]Kkowߚrܿ0-$%>׎~,vwgMK0BBSt.5/ӺdvvI^x_E{ lKF/(7_ޘ⦺1#+ŝ1n&ChaZuَ>w%-lX(W@RF1~s>!d, ( J;c@5  -į@ IO'c<uRz8hxRKHsGX4ӔMNh]w.IUg^ў\X~c\eRlⰳ}LTȟH} c:9.%*8NXr)S#=߃½,@AJ>bSzk-7./D%dX^),]Y]o Chwܓ_36LR|I8[m+ ;7e4Uљ{KiTHLDzGqWzZv{ioN"uݓ7xfKdgM~1˄dϓqSRHO#9gaoDfdM/p OLiuzOb٦5o8L=ccmr\%2a|:]bࢯ&g%ai0 y > x;tHw6aKZa{Rg.=SC#~/9._nߑX;0 - &^-6Hc_oY6RV=Ylў [oOd4B$V*\ ^ᔃ%O4ΚwinJ0I2kI[Y,0ٍ5Jlk ׶@`JC МRvbf7HӀp }\te^ئc -6D+On[!y^Ի'B5Rls$_̕Tk.hV% _[Ẹ <,#B0Ri8n.uLz&[},ƾ̶k1H (MJ;DO,qK8Q' /JARwd 7IC/ĺzZnD?lp.ӆ=``ѹYTepc=_{^TXg I]1{Kgŵ\eTVdې<;)nuk.ዌ{j n,Z賵yݻ ,zOk:΂_ZI$-z %bٵri͌}VՉ4C%`eԅCMx͑dd4Ko_/)lA}H*#5lCS' sW[t@,?-L?̺^*0셩J>_{Nc_[\@?}c$4O~hQ" &5FPu-fE>]Y)@dPL8Ҡ$..12Qm{MPFf{Öe7ibGwU΂Xoow~bչ]˓(b~#v3ɂ}Fyya7Ё6xX({ *vl!Z|}{sxt֯ZTzOBԻ,M沊ܐmBI\QlGld~|ca nE*Jm6ezCx e/q wd})*]LäpV j[ﺷݞQS$Wۯ\ƢG)׀D߆v.<9g\W"gYgp>8ާ<sפk4<͇{ٗNݻSkKy8[!,07G3ۡKu<^R9Lkow}Q%~׏*mL&L"D9u_GNXU hS *lZpKʝڜ|,a}ͣA]U_L=“=i1A'mtvN'x|Qk|- y"}j8֯tO¯0o0 x+ЖKtz(tBMGm[=aZFBE6Rz*wS<3Ȁ^ qL\*00Y3ؚba-=wSIƨ\~k[CT#F&Ϙ՚qe/|/<B^y`_4Zqj+7gC1Wmnqm}K5:]ӴI6'6\nQ1V1_Tpa u Yހ'kud Vf́>\Y4VP:'L3~|c6x@ōfUk7kty$%J{ O|cs9r C;f]ģB?(&Exfd}{NfL@͖qlM։AUM$q6 g4ʺd7@leᒃ$>*؟n,mzn<nG #{cr{eʉd9O1p;ِ0`+n}QIf.EM ?A$Ib 57YYޛ3=fgg#H`0y~)/QRGȠNgx.v;.}UVJ|%H/`P{}?k;-YC]r‡7; )CRQ 7laEG6cP@F.9 ݪBS*z ܞ&}6@*r qXUf7W>_7lS=DSj,ʅ{S$;zv*;Z!79VO*gqBπnq0g`D2Q4ߏ0"pyV[#] Y/3/ҡ20Nh2}LC=KNh*OQ`|?W|@BL^gt x\2oʋAC%8gu|)}zIq>L,BZAd[Htw=l|yѯ;Gd7 mpjWbB-xjˆ1[3I;g. zNMF(c<ˌ+M٩ G{J< .:OF%tHcgs[!]bZo_z?h",WB&;F^vw<_:et5x$LPOb&εS0=< ,~,o)Ge EM3:/ ?)bQ/17mxסOX14*/#z:a|Bo#a㫉˧Վ7Y%o=87A?aW=)9QOF~Oε/if:߈$ d0Y!EoPU 1t!p%:z"QcaBo"Tr& |S["xG{,7j".-䆬pe>[<'!^B2[ln5 J,ݮN˾az1-EӨJӽ4Al2X@k?iyx?r|NSGI9Z9(`v8Glx'GS%zJ,6AH}9G(;ѲqoJBh:Mv7t@ RvC1$-\-9JJ&$Q+0#WS&|e?aK&f.y|A*[nzѠӍ^>S҂GB>c8>N%f cLr @ [%Kps4UyRoa:(:,T,4nSV->sW.Kf d "̵tC^*<գE[F t,^xZpb{!JB$͢U|=> &A`{4QTnn  ݠj˽GOykGKIoa#p ȹKp1E2hL4 yߨ_u핓D-ٸh?s QN|Zm42&:;SoܞrR[x[HIJT0gFWx\.3;QE9ީBfrM&Љ>;Z$˻IIh@aAXݼ u>yw6WQKX|BISI2F ,Cy n4S!.تcg=÷4$MwLj@!)H|\`7(xP03c5vK\*GB":h_IBYW@F$כ$E{ZXL52RM@n\adks,K#d|;!q3ILP 3;'[;w7g\!r^Y$C;'KȪQBiR\*µЋ587[|-=xB턂NYk[b ǟ(;tMs/eKR#8Fp:k$$K%QA}D2)90oSܦX?;9`'k^x.[q~doE<]\J{`̍KDwL@,Ʌ\MXoh "5rԘ'A8%δ1\;#ӈ-{% G=#e-T"@fe'F#c .4a30<9TߊhhLx[&.cԡd.Yޖ|GB(zx8|ۍS5w$GzN:}-tI +o61μ'?DGh*P^*VRnW.IAOt3"JF3'!+Xk{byЛxxCEt\VGpjB=-M4O'bT2{׃Lzl{,W"5bCXj5r~Gl<&.b\ںKTeA*@WD:ZxAyztH`uG$X{֤W+eO*#'K/$cczw_fcֆN7!A0îi+v"FF+W3RJ.R%Wp˃q iv\Kk1*@;O)Gj+7*`Xvςzh߾W>+4:/r!N~#B,puVMk{@{qv1QJ-Z0pkٙo ޥR1[`Ԕ$v0,_dz[OF[ ό)9A n!-~[ ~x;u,F,^Yb)D [>ф[$ORH[X<8B"dINkYjoCŅ'E!ll4 =a(Y& ׃_ /h{Ri9>~~nԯE|;i!T|z6ӥhd=j^4s*R'F||͖B4a\  g ovlxՀ]7gg^z}Di#v 'ew Oᇧ)f8</A*ǙV ¯߻z2CF@&s/+X,}-} N1$z=V{O|YiK@ fwY]daD3M'NA?N* m[vOOsҏl Cr!双ؘwR|%(RXڵ7o^2rљF ju\L%B2A.dVJ,^eEO89"'T)=a$[?Ӑ;r.m n IO]/>};"siro*=d`S 0d0Oߗ.UƢqm^FӚhgm/7dH$!`C:&d5of仿8\;B~;4\,-(7w@.j_|3)B#|J η0bmʧy,X\Y~73M^2 :3S4C==$_<-$O.z,I}EΖm0ZHX:ޣ/(~dnŗw*0pf蝓Iqv@|CV`0jP)( xr91 0OနCϴ[9}ݽ790IPb9/Ոzdזo,Lf+'k>$bJtCTCz@umD6l63ߍ{b|5}Hko39OKdN^ʼoWyHV4ݕ I(Z^zu䕳SH1 TKhѢӫ;'[,nUAbBM?R.Υc@9nݥ?l_u5\j:ݸZؓ q1,bC'$^fe3ټtѾ60/Xӵ2CЉ֮2X`WO@B՛$ :ebN|?isd%ڍn0T{>6:k֚j`AZ7;yW?6;D #ƯIvXIMHzfIzS1:t8Xho`v;/'zo{VvԀDd@KLyjU0HB .jYX._Y[^f&OmLW$ @Z8v쭙Z1*|}vkD֎rdN[܎NP{Rb. AnGi1M\͌?86ch8%.R(Oŀ|: ?aPJǏ0 N&TDn7UH yNг GdS$7mJ- [7ԁ̱sE5ƻ©I4D8a&"V~nc/)[!/<2R2a-+ $du U˦.k;fGvYgZ B•V_v8ƎLp Zh>MLq._}_7KVqKWe#"P%+< b c\R ?Q,h0PX|\ڑ /x= 6TG ^C$Q2MHDn] 3n| K X{"ӛL 0 I֠9ax_,Cs<nx1)yb<3n)@ !E:j^F7FH_UM;Bk,"|N,vV J)3;")zrK}p+Yz3 vg=0,\wPd%ڏо'#(db& LQDZ݁og¾Be휇rXSn6`&HzVf8-g&{_:ƙE A Fn_g4M[|#-[uWc`M? b,;7Ia?o"z ;P:R-vITidЩo-O' u3,_քYQ]ƻ ѹQ|(&_W?9]ކ=RQpDۣڭ_U!F"ϋV1(l߼_k?t|YJ].S U 5 EVf'Ht-*8ECŐc4SmvǧX-)3HݹVx>l3K벅8SʜؙTSkjMhYχ-v#BufXz_;TTӹYX-FֆUVi6P4˟y6]'Ik:/o;zMR(/aGZT)!Q/r< wc(rr^R4.>?$<58:x:t3o;$>' }{;}LsM7U QiW;z/\X g윌%&{8X ~޳*.WZ7G.!wP.#340ԇ&ʹ ( l 9~H lgj0ߣ5y֝PK~k{8Dbv_űpSHL0^sn{p1iQT{e DϡL=>WHLzO*<RSB}v>*T,w&[VRĻE Q2XL?S;@L[<Ҹ]mK>A=DzC_ee\] !pXq%WnCުD(ݴ*L_Oɦ\u[B!epq+ℝMAHPnP/Šz.0wI8YtnYSqcsL$TUș~[Kx " }$զ%,r(6ڔdKt_f^h R qBsVKKWLho1۷Sqɯ˹ە(VbWӠfDhN&Ў3I zS_tnmN'tw$>HނĖ7}-|M_8VJ},q+F5?S0E]n12k ( Uى Ȩ,Ksp4$= ,z;MidT |ҽ7wdb?WR7c幜6?"蒫ĤB ͍J[IcWd-mwG@)ⱁJ!jo2'7hjab,ٙrǷ9EA/2kiʧbN%5 P"$z&)%f*.W $U>Q#ޟßJj!:Ur9]#O跃To䠎0!?;o}w,pEjo#Ƨ}Xz`yt<rw2 z-?6G#R՟OzJx.Pļ;t9:!/بaݖ!c Rϱ%*D!Z|mgSp3 |ea*9n:!O΀Ҕ,02vT+s6}bh夽d=0sډ]JWeq3ۑ9j"lsn_f[l4YH%G5SG{_cv;c`B~X=]HҰ5qkml$҉vщ뛃GDqWEzehq:r0% R kyB>/]eDySl_gv?@ YaX-i,һ>$UK$򥿸GG6 la~>TDюLC<߁ӧœƝ'bNK *Knt9nr(x)^ պX "T[H٘F!~7\Tsw;@OPq%{ J$֥2pgLAb Ru::X~`ouuҧr<Hbx$Bbj"JszbX,xLɃYn2lOhWz=Cn$u.đ=luArp`Uol@L.fW/绑IG)ۢ~TpT皳Kn ,ޓ3Jlڟٕڷ.I =^0IdIX|;N43rJW:icsoZ&/!Mp-cPY5Aue1Ϧ|aK1<:Dj01SW(C IDATOĴYc\r 'H`4DlnB]nw|@ZC=ytW[L'[I5'afSxP@Fߐ{t.GwتXˉXi)0!Pc6=#FǷ?kzde%rk _aKw^ݐx!sQ $ǀ\gccq]2X%DZ`+0ӟixRk<@FPsLW*lm6hϡgIVIl,uz>@/ssT*ފHP1O.SNG!lPГ([37iHQQ1Wh-3LsgA [ÐlG!#G0/ɖ<'6̏<$qB@~ڃVeI50]R ʐ| `>mz@+XE{yLЄ)pOͽ1@]/po$̔2XpgMf!2mh&)^gЋ7`7yz?]Q;m@ÌJ GDaD"֨{8BOցՂ©Ԭو3xy)_5Kc"KR押02$l&~jn,7%xa#081`bIv;yig4t$=.k2%os J>:ENNb/:Gy< Z@@:#ϖZn =u ψI`ЋS,D5ݺG˽"? b ؜SE_K0> Hl7kY )h0kT7m]шP  vý^bqŜq[5)uC@~u]{ueuT6ᕆUd۸瞀Ѐ7Ph KTGw=ҷGP "'\ܧs*P " !7,ˠE30|m2q Qdd9ߺig3$rTNxV"5F;s14/µȨ~s.Y"(?ZX'v52BA,ԭO>J+ LĺߙT3Y2]@#US1҉ىbs8xnwgwiRaum/%% Sg/=&H*<&T׊1yd9H?sl?:W^ŖHDz(n)\oMk p!2`C8f4Culld~ǟ%r6dKn@QVҨ ǽ:oRiaxZ; m׳0PB WqA Y"mLp.u֒3NvTG]Ww-??N˜bP+ֈC1<7WB"[f6%b[\]㹸45G t<Ŋ??~Qay()(aRρdbN[7<СFeT}>ټ /ns zG}\D:-a p)"e9,P <.u:T=r$>i|/ 7kڛyܸt w(sMpS^|Z-j嗽B:ɾ*oi{B-so(dsC6 5 VX=}שܲ+uDgِACE0E!fNulϨQa+D\ylaWrzl=Cok#]|ӆ )8 SYY1n*3O>~ t@zDWEI0ӈ(\fv|hҝr2.Şɐ,}:a"3/zu{*Z+ kf@y)Ŵjʠ#;Nj;NF?doPLy1}ӗ}A'; m{Kt,:˹Ws&{;;x P_iqz}qVVߑUai|GLCFֈ  m2s71},|l/0]vfH @j\+'KAiZkB`s6 LFPĩB4'<JSADw̍JPEqh 횉#! YJ!UT ス 3{`+V݉?ģP7T0oX> fd&X/ + |֭ "jvB B'kl'0PvQD 姿;qg@o"ɲJ[b(cRv20En22%au&Gi9@1]e1M}~5+B{KHg;A>^}z=ͽMj-^~KgJȠąW_j U}6b0Ϝ|oYKeUwb/oNFr6H-mGJW6#sŻ? /i)z` H_?QܯrvxqK]m9UDFp6])'b;ݔy,ϛj@ ,PKګOrqfP1E+mJp7d@o | }M UPA38q<{KTDlw ڷˆhvJhcL?ޱX\cK}S`#C=?* @A#oʻ~d" qdA \9WX96;őA+Y'|-l؆ ˿d=I+}o_7ysfd,+O-{ *pY%s'܉c[<tB:xƷ e8HcX$ݏ7gfFҳFLZ4,}rQm;My$2Ka*dKq\' $pGB~=O`?#>F&m ]`%unNY?YL!|y{!ru #{6'8tY)w9hd*ɬڑI(d=&i.r>_v?JEV "f#N)6O͉15|jzPtyy,$p,ܮjV8\`Zx6b߇ƺݯtXIyzV[S`5O"0UI1"7Lͮ(hb^#z.tQWFuث78LV(J՝2~+ZBn*>- 8i*k&ΰ2$' \wIZp0̱Fw?Y^'mj,z*N2@<Kf?/Q{WH(hSb]|CKA@>YbB~mi_Pl36ϧ̟ ;ngV՜W~dݍoI4zwŰj?_w7QM`Egi`%OlQ,+B%e`^ NjiP`ȯ&E[ 4>E9Z}za<ޝF6|n6B#L9azX֛`paܶGk܃g c{f%Ɣ9KIg$=7 7}ΙwE`z4lJj84mcLԻhcc5O4O:kM?k3pygfZgu4eGn_n;1tHVV׍Й:D5鬈H7V:e|C[m'wRq!PK9Se*r˩pp4hM=%d얨~g. *oӽsMB4k'Qg0hEԣbh _F)poR befu< KV o?/5Xx:HF.AFmܫ,5 %2pX vΐDe)U(Sjf+M4%8xTl帯_a"CxKoq2RYS0BA3s 0q@s&50*2XLƙ\//f=~<|(M(.>͒ɘ/9943bt2Kaxۘ ?a9V0lK5A uHΒj4:نi\hv!Yhqf+b`:00KZ3n` T9f+09ҭl >\]QDl;sn"ft8?i<0s}L_[D;!@}*wi~LX}+pB-RjUÚPR4LB &p^&Hc֒c_7D${[Y-%u &o=ߎ5DxJv[>\{;k+󎐿L z4V50ѫ~`=M:3E)@e?& $;%c a|{Y6~{̼Ǘȓ "^O7G@GMs6n@phO+FpΤ'CR S@BMrQ.4}길_?cRoM@(cI{<ٴO i_gW0 ~ $)*!s7fů46uca}cD(UI,pcFN⃖/C^cOsTx~sJ=\?5=<lը ,]5;{ёFjD)G z|\˪ir%{VO~_>?Y*x by mi7ڪ6&V(es0'̵[fK#A5OX7AIU;&#%Ed=?] c`kuՋVEXo^l鹔vM&Rack4qC~}qZj8Hs?i15У=ʚ~6/ZsI_${Y\Y;gE T+-~yT2B3N)ߒO?t$큮R:KRgp{]L?֒%srVȥM  m)9xq9^op`̀0#Bsm?x=E#oW]>n6¶o:4 [7m x@A`bIuC[i75T6,q.MnoG}VsZu.povY*XO{LgA-FZ1L_Wyt8I%."ӅZu+'ny4|gYp5yWezwf^B.4?mP.ցzf¶ǁ[cJrkG4nz IDAT- Uf堇IݜI{HnzpW`z,ñ`A>&W3 zAvc+lw3ڰ2q߿p g9FVڷdb-8N4LEr5 >2 xG5`Z桰^~(utAwi\JD@00-ffbqW6g k8qi9D݄atL:GPҗ3wc~5#4x;| +p}+ .7Iw}`Nmj]C ۖWda㯻Q ҷWs*OeBx-0җ( bm~}ĸ+%/4k湗IC}h"1<)}6eZňh?VVo7 [1M)W nU5Sy]``500LjlU]uS rG~/k=E߿q57/b!=qO*/< UZRss {3L:b,d6{ 3<8|2^؞%v6A (V|5Nel7wrb0r.Uԁ|ַBngm̦n{oy(䁏-kӳ0 : N=.eSLtF^ZP_$'XUàs=(,H~(.Bڰ_ۑ"s?K$iF[pVe4Хr-S˵I㔣!TL(ގ+V5g/o[%Y߫廦;H^/xA .~V 1T–'sqT'za{ذg3pTݣBYZZS_^߁xZQ3_ikdE>>h:aƬ0Չ*yʒFG`(|tYTP{h,㩚3j\!aPvRɕQr#~JX#h,Asx庿{f 7/ve-3 |5-H+x fмh3c3*̉H;jr:*cn}KS3|MA E!YKG~oΛ,v<%0 "C\} HTo^# 3%n[d-@:%=4dXpD'X6s(DѡQ>A,i#C Y~b"S`i1 ۙ*}n9mc.D!ojIW"T3+L}6QIAPhFqo1@3ޤ)ZX`s>5Jf+1oYUPk@5Rpv\6}f\6W{>*E;tU#͗J2??=xNKPm^5zȇWTQ(dDkԔp= [@֊r~DCVEzxt3]/IGo3UE؉hqqjx9bzjlnOiRD-_cFD=20Dʸe [[:oaݧ)UWxc+դ6ǝ^NY{L E]RFMDJ`=W=4Qt׎!1i k0c"{POКNJ߃S_8B%_.V%p\+LZY,Rđ0VMA ?po<]ԙ+ﮁ4vp c1X>ՑA{}( B7 dЗ2 lc$VlŐ3Npm`45VnѮ&6s C`+>"u&$#ׯ^ "@4{= 0Jb%w}@[5 7m\_: OԣnxȚ "%'RLE {1wE嶈QsHpa:uZIBG{`v6/dO׼fCx>wESAq S5srH[/F#:)7csgƠ =y^\V :H>}ZDkf9A^Fo|5^vPlwB׌$Y_ =t$4 A{r4ѧ~cvZ* W欿?qy/h P{F7iU gGۡEɔ^|0o>/Ӵ:3U8] =ŵ{(AW#g )!Kgb3[F޲ywFkYP^W#8/fãUsx|]ތ x%ݚzМ_G5'_(C2BbN]O!B|eRs/nT4t%L)=bbBR<_[DjrMW#LՖP@Z*5UY,xwCi$̟r|H!$ YӅZQt- -;Zq CWYrٲ/Z-lڽhiU*1?C2:P [MsWe?*1L N8ҤVe`_ԋ~Nb'!{Up {>Eq6;Ch.}s0oqS v䝅;Z'˫^dA$"g%3,{]۰_db$^D$GAY: .*]tvqR=db0 PYl|@4EĢ]U:2\IumXih^|bX|Md`)(K4r =JA} ˜VUX>_/㳕SڿDV =IR6z\U)Ȭ2.kWՈq]bk@}M ZgcيljRk͛; C͡fzGt <_pp*$@4}hun?V=/t)f+j;`WoTN~s tPq\GBQ΍4XoLI1p;`K߫.{|] ǥr耼ʷكՠJģOjꚔ5mKXy8 @(5eǩ~ 7b\oBzk %1w).( %NnQW~AuJÐJ- 4yfT-P Px[Fhe|0C0&aj`zb*?K"V9AVXx3b]A`}(W<}vFvH eb=.+x;71C5'ry"IgxLdgjZn;lsP Ԟ1G a\0JQKP$Yb:kkɓ`alPWQ8]8\n/WU!,Y8ԯOa7F H=!?q9?7BfӖ+߻h5;Kܲ@ t_.;hHD"7UKQgHL 5^kEPy|_lvY`E<O]p'A;.:nuPDw ~ᣆJqNY$;Gf6C}ΨKS0cYD]UTĴW~<¬ $Xl\VګVĔxNxVq?Hl/q]S =G~yyJ_agXTd$ȟ&pY=?Nx|ע_3nϻޜv&Tybzbqʯ_+,|.oYbzx&EMƏf HjA#\iFIe&' uĿʱAb3x2(Mcf+\L/MxAAKE9ॷI Ǭ ,EK/^sv7WfF+ F]‡ <*;vaXOs*5,b,^(TRhpz317CJ1`iz!p@ D iqq) q0FB _3C6N(\:ȱ/g #P]۟+5"Y8؂=pؙl@ n\%V~81g[s7&r7B t\ޱcϣM\mtmK wm()Hbz=jSjzg{7 jL@9xX 6# *g/DZC3z"Pj l8F4z{f{gHtrOxsz#RT]myч|H,^~xm-u lϩ (V_1Ӧ<6@#NN &c"ɍ`1xйU8gYQ3Kz(@םz ֳVM_ʨME1 `+~gg@'B6ڍ!vԡNOY}7H@P7Ko"J-L,p&nSNb @oAG zk=73DIrCjH9 L?9d.Tw=;QRا~_U&I:f)t^ t/3 1ɽ˸Le˿脀l|#rg>vgv_RUgg}^3(!Kp"!cd8玘W91pխnu@*C& ʼKö>Ȝ23ZSz:o q8Kk$w_JS5\`% vi`>O}ı<وd${4#I`(2#yK53VŎ~C$.K(r/V.5j l`dv⫩1G_xWovYkޏc\yii!# +uC(uEE~M9O3Ϻ7Wv5 Kmet1&Ge+=<4ٶCɕyKMS1>N S !G@fߊA%Zc]睺t+o ?GJKQcE'fR_?y}o ڣ;'g9TXT ϻK ~Lq&A\gaji2FCn,8cCE|v v-k~C~ wV=M؋J(4T8%166˱aŒP^'\)Iګ FHd`zkH|mRM}86 c:ѨZq|mmG?M#Y TGaO=[R/؈ (=ηa̎B7w@g(ܮǧ;~B姲q(ϰV\n8V~^W?I P$Yl~(ox.0Fj6BB _G͠_Ɠq!cOsH`A;8,X ,w>8TU}1݃D(uׯFytz L(p3+eSUH)b9kIXC.Xcw;_2pV ̘2xΦ -] _aYM E,D]o<~k݌VOc`5TjSOivR ZGKG/ ƞd|hO?^ct7B80/hdv#4C(BN_3=y F(1w%@oyVL2@7Oa MOA"ʑN*^/f(J>laL'̉˃ܪag 5;ScM k-uLx]n0`z}94 +ٌq/)Y|@wN{EV(+ }(w֤=.L@sl,:Jz䅩Y IDATNn_?pSFITY΁gsGC5ܚRPfi䚟gM W1]`xlâ@Mu7RU?멊ؽٹ($'vk"7Vw==&NRzBs|C~Su~'m!}%,M1&ڃp_kh)m@᫤k"r!&/;p}h^CTo{!~$mF6|c~m&$ .?zgЂBP",6.ew{q/.Aɩ.b֕HSD8LRX$#ŮB* {[n]:H]vOW!4 ! ÆiecWޙuH|j)0;Fdv2t%h#wnը5C:@BO B۸Hy+MV ^rNzrLJƒc|YQszSf'5Y}A wĠLiT>~h5S~+vT#eEgAa0 |JzO7֑T|g5#&"'$#ۨ9:\1ǭ%(l0=Y1}9̭x%DL>MLr=Ȳ d*,Ar{Bޓw+ `C< CwZ7W*B|&3fwb8pnpK/~Ϧ̂SLח2`&gTK_[{{AI3plLhIDjЎDU>Yufz0ei;.44""[h ,V IW[J|>ΝHd fBnOAXB*oMiR# cLxFo ڈ"L$ŊhS5H(M@+|Snb.d~.,MWUxN<[Isxt!X*t=S&X([yZأ"/?R=E"ց4[y;UvpqDBj5\ NcTfv? JAkپܔW4AY1f5[c>A}f3ܨޙiT7!K"3Vc&DD>NOhP#.h}~zǴ˨YU0otVW Lhȧіu]oFXlx{6iwvELlh߻d(un鉳}PSվ^Z\Kat@#8 vHc_r0_oHDi 6&AC43w1P|ݟepfIԤXcnڗHfVۨ05|S:C!w/A22K YaDu_3{x57s\G{M:`+X> ; R7vc vsk֎ZtbWm;-cnKueNQƾaʸ?'ͧHV&ޯ5UYD,Stё cdgYh})JڶKc$EFtS©p.\J']pIa8!{@,~j8%>(`ǃbS #hl.p< Nfp{>^L,Lhα7ju\Q!JϯU'+ +xPxRcwz2VS3$birVZ<>)0t*LO;f Пfc czfe%b['OJd|`WUqrB߈P$Nsp)lAc', x AXA4Y~379PnKEz|ÝngCZ&*)Gc>b4(U'vK(tPU -_:^|q@5"پQxn59+ M}%33F|Nmg_m~=7(/VSS&˟:ߏދmnx%A甂A}K PH 8z2H. Zo2_to 9mtQ#=9:> )_YP_rnC#EL=&@8yK㧊¹Z1ԃGmu]M| <}bFGp$;9";K} PwK3|\u3cS rgLgڲ }\+,F lV![»2|Ϡ/)7|g5(RXju0uahК_*+'"=l0ػX҆hD֌JTz5anP^7(%2c9+lS^'Z Gc޻.06 fN 1-EEs+{o`{غ F|J*pj4__?R~3nfZ_JcEN⣍0``W{1!6=]?lN5ߜV3:xCx<B{kEc+1)N*ÝY-+ay_tY Ӡ~-v~e/k2|u$z)ZqB'Tec+ ,e+AMz=w\H/A4*dB4bmnX'N,dpr5B 8EbQ$ܔM./Wv2Q/;91gT/QK <xsHƨ 5:'dS; , !$KވtКz]5Y!7onQn\LKQd9BB֌S_+)ZÁhϽN$6!V씘sYՎ$С!Gm򒟜 M>-속Ε/c6R ^#7Ԥ8(],P,>Z\`YXy^Q[7;|Ù/M wFGAgnzZQ G:ˉ tCR4T7kuז٠mpsGCC23s-CCbAjb#FkAd{,!>/ MVܽ* \ckx\@utTc?6v]IRC~w ?)= ')X3Bj(?7'xygn6:Ŧ?X-PDH-p_,2t}a{nAHrƊya|X.y3Ԑm{0@'͟}ip @gm[}vP|MHBY T=g7B̳HE'>CR͗p5R v=sHY|YM7ţBY6 FN,>waS[V*^}f\J[_/K(3ɟkwL*DZg:D@rt264.&gW,. o;~$I>Vv/#Z#ZApEmzӠa R5Nx=d<+"ʱOr К!>jiƖѸ~7w}2B}f*ƗJ!5»""_RY' qQ"ea^Qܹeih茥!h'CFXu͗^=KTo- fyUۄj|p8?o/g8Pͻk \f"Lj9_oE$Ҿ^Up ]z(.{o6{0hqW[laa5 `=ix"؂TɌ@Q$D08qwj^n`b6iԳC0戏xl>B7 ^:GX6`(oJv=Ә Ll'd @>G3`qh F 7:@RsJ3F:ڷkP a(έ+ 6^ .̱FJQgi/lUƼLk>eK ={ rEęxr7kdKTߎFt:S[长E%x-A*H n^fe:c%@LX oR,ϰySsȻNCݜϢ/e}5zCD.7wFscg(3bJpbV|K3fAcT2BYfYuXRb?ҕq4_)#ҋ/zN&)uڷWyo<&G:1}etڷ!zBH( w-.52*q`zglG*Zg<3sr+3"9KsH/k|Sx9z8H W!g\? ~s]^ϖ׸/!(2xFJ;[Mʲw1OA^V5>_2`&Dec/*. rc$u+vޓ/C6FR p}B#.V3e[ ȭx^>K)Bo_o8i#Q&0=Z1zϐQ޽@*U<\̂N_ r05wԗeoTyx=?`<:8VRxnⶾ&ӓ~pń 49'p!C#JP/5~j^a}5 /jf7wܻ|fpւ)v+jI寈mOݤOuj%Es᧰ ϭ7[%/}_-]f _}]fzi6b؅ΞlQnw:cLZ[0 =NZ1(X\Þsϫ%:`m;p) {(˧TLGKr-'љ}k!|}^lLFDS^pYEСm&A|T׽nqIRI%ym~h o;2 $} n|̇ia {W>h|8G5pQ'Q/𶢶~ۚQh0[I޸wLP!d_FꩇN5U8u?bh?xm\KQu黳E+|} IDATD`6 +;{;i[_-h)&QIM;M[p-tjD1ʐjR(HԟcSͱS$6(][BU`)!0)궉tah'rf@M lN102JMZ'ObiXBF4VP:3⧠i&ٯf&kȃUS^wEvJH]GMk iL\po:I1_{(:d[9>$ڜB\^t[r&UAټ#)$-_fg |VڿYV#ADM!1P|Oq6,í>Y*_©A!w_ {  .Zuכ3gL Adba> BNp;0G|sZ/篐Fxng|OZw\ùzWmvǪYfop֋̎~ IqK5%"mKi,jNNI]Ŕ(;M[h[C_J\J{<.V x3 np?e`^o%S )F (YՖZ;#f)k#.x:^{k+_>I%l+<()DzjzyXOb:^&U~y}m.ri?0 goM6J%Wu3-Rݏ !?>yy< hwM:qCCH]VkO59/.bXV2^S5dK~L\ԧHl`'7&tjWufPTq3MWfEo.^x6UD9Al`VvLhymi2%|Ĉ9p2_^Y ~% 0RtO?K4`7*$7qh'|Ox=UՉjυD,EsmG90 ??[ѪW +n16~ nP`p:{ӝ̀dshl0S,KK̷bU(+T5%Tl_.wc,5=:_{k qq+r8=vj5hTy I#Ɨڏ{i+3<9Nԋ WG ^E6p!9kTAz$p],mͦ9T"ݹ7 C*Nn'<کJ4*&b:dt"|tY; Zs6E:>i0K;0S41 )a8ruNC5ý/qF\C#*Gw7Dؔ p:|}5lң:f0:7]oǥ6at=,vMt)Tʟd}#c?e/gt}Z TEZZ h5xz}ʲ9C,0ShzSh'q!6V۾Y Jס486Xuv xdֳǙD`}0^;:C ?礞Ɍs>$ggl\5nn,J!B 2rap|Vn8ܷ >$4_' }K֥Eϯ=}Ppn`: e)'}LWWN&3ӫ|ә 2t _qG;O1:z_%yzKavQ( /Mw.O@[24MMgZ7ћXjrdgOdp96#CE~kq n؝k}B~V|=cz/}Es '+R؈ԗֲ2nlܸVJwil&~ @@44sX1z+mp uϹ; MFOv;,S߄+R_{s-cUF61:;ƻc,BT]O }'Yp y D%x!;0cU?h-Ia3Ć( h=ۨ-^m-iJzM΃\ "MM/1pOgqyF}e{xD0&btdG_cy'p W#GQcX8 woxyU"W$Wx=44^dcɁڧoɗf '1RV.z' օk$]cPb^|G=s5gf0  92,P9F;^c/P,&W:ܡ GTkbpeqX "WL3 ۥy0ߊ{{Xoۺdr9^j& stcu-l4;y31g?*3)a?˺ !1(Lt;%6pru #J2 .t9TΖ\z!,$#Oɮ)3j$& cjtzҷ .KEA0^#2CfIZf" MY5<[խ1?|RcXnRY Iе2 HTROΆG@)Gouf1~5蚩 2um5j(L Sf^)\%-՗}S7VCi*>nc/DWzj'1m/\Nj/6*wz'шf^iݣ=]yh(lGw?H#T,(CvV}c|`yb-,[2[EMbл7y ~'ݣ};6뢷û4*Aڸndʹtrk3aY |fjXNsv\V1n>ǵr֍@H7[Y(@? ypLyNgA&W %ޔ-!dWխמ68_|'U?ʞH?0BYU,?#߾$^5'=1q\NLu]+f49jv9?"K! |. ⾎xC?qJּq!wT?S@X\35q&“"F#w @oUP\ƣ.TsMԜt~0dV;[B`{% qݛ*Nͱq3@Si,U4' -='p< }/Tг#:{1/|.߳vC-w@sp|y-eBX lN2>ud,^S2x_MtKz$T \17^&sܮgVxQ1g}٧fvX}O yZS^sȧ;8}M,jˋ5-a^eWKؚ~Ǻ<,1&;┦Z,}E$a+IcOFuQ2:ErE=$NH>砊 ^U p3,of![yt+Þ=aq]%Lxc=B_S<@^}f&g*}S@BK8ՋX8Ļ;M$r6p2zB>.F8A~xS?g+;rfV8U%- {oѪ[w }u"[X*SR IIO\j~[eIaۑyu}çDwfa} }T]S齆ifCrMt~+W6y؟15}A9Rd2P)m3"G0C^ѫ!ġ!eQPgRX&[ls 򿌥xj1VX4G*Dr~q @-E{]-a-Me2`0%=Vi^-1 i ȅ3imq* VߟH%Ukv@;d4%87Fp(12K{S8wp4KŨM=cGؑKw_̫MT9A׏%vi  *|!=izlrX SilsvSK?s&e] b3bdjsy6Ծs:{KP+=V5'e`hVaM!,#Iޝ35Q/r'=\ml;/ǧh]2}:[&؄y $~qmX[I~E?НIKDѫ/C1(!2g9w:4n`D W8l›u> 1PY3{s [w [M|3D}cޤXh?jSkgf5ڧ=K;cDkSMV^ߊ2 Ⴥi Ćڙy@s#/zE0%y$tRx-/Go["wMw8타o[>eX6-@l쭞I' rez;~ a ˮl?g/GLJ=ƒ<mv}uQIiV y(*jw;O ;dU.+윆ai!?DMB@n͝.s|v9!_ATO]_բiu&kK=Cz1D%,%>䯽>Xw,UR P/#K\'DZ RӠ :+8` ~|ز},EGGoTume ꯗ'V'%`nhFeet䡨_i<-^;4^@E&܅w'@9~">On.}Y! .u?@A\dh|a>kÆ`=Kzuet•qL¥ i5mF# Qgc^=>ZxL.\hB}BAu=1HI>e%{vnOSZxrLWK!UK>"&5] Ma@H#H~Pϗq/BQ+豤 j<`>ȑ' ȸ`O4 eu>dz#ߒN`L2Kend`/##v ea>dL]Tp1O$(}J;~oζ66V]`l-Eu| AE(h@`a7(,~\o.|ءFB0jdʑ.{8km0P^Q nWoc-zM0\/QܙDݠXOrY 媏5L1x ]N}r(?ap[Ob@_&B75Mz@oC7 2ʶZ 0/N蝸Ƿ ;y%_v yZK*m4߬r>PAn̑-J 669X<755bO'-xPսeMrGOfpQН2R2b>݋B1qx̓%ƽ +}3 rdۘ TQq؀mU)H& WzBж|4Sa|' q"ۭ Hb}ӘbVٷչK~p՟Q``A^Z9; $-W$-r l\]LŌ w׀1w>x;|V&6['UzgdBfϘ8Iz_uƒԿ(-~u_w'HVx͟C>:$.}VmЂXQY+LhƂ'mX-gX iJg: 7.kROKC~}1B3:kpOQw#?ԄG ,N7>(g #f0O`PqqIWT?ɛ5ئ&Py~ri@~ŒMT>.\)puM&Նv@/2<|Ah{ڗL]i ̣~j7b6;;![RxL` p.y+ÁˌWTk!PMM7GAr"t3~ӡ^t6J_*3yqS纱} -qJCqDC} P ݻL-^B9/l%!@LYSQT]W&1yҡFSiSP`rJ -3l|6yF=_x:4guJSfmyvX/*e'jು{'a%,ͧ$KE;6̵,{!#he9&]vy c%:~A(dDXjh֩בaE,}cO\0HmMАqڟ%}ty<߇)N/#_i<}:x=XŪ̗jnMBlz?+ A<`[;v=9 : s7g׍[Ӡ>AQu6Y"T{p0c370xO4CקI2DQ\?~U#tMܫg4Oq+@x`Aƒ{!i6Wd-y`pA S6ޙT}ߧAcAF_Za TxcSOd~2x/u7h/l|GAqp1Nf֧yn^4fC!M vJ0н?E>SzQUK1\4 V!Eʯ;4up 3ъCIa, 8+`+BcTzd:^2JN* Nz^P'OV!3+i+A\ڸbI[񸩶X. d5X|nipen:u6=CK-$nbN }4g \BK;jᄷC̪A8@.wċZFL=yDpͧMۖ# J0EmͲ-j|#9,PaPVUC ¦7 5׃zKw{tڀRMVC5❥n qzZRRp̓"6pomRE!&kR6͵G2jD>,+W'7@Y4J_DTNYup M #Vnk{WfD8Am0QŰɡ~@Sm:j{v)߇cؚg GWv?Dgb0lfBzI,l3dzIJnzOh~v#$.¾ 84FljiY ̝vWWW1[BU:w&/ӗsy ]Vւv^';*AM8HϠ 3c!yW,q$7 W\WiXGh͸xBc^hc%0+5BsaPk^(-yr#2h)" AIEFqfro6F+jZеdfbr~A9~JR'XzX. %di-,$T$,ͧ A}\=QP58׽WoiuSނj(1핾U  AVz*fRj_$T;j6QC'Ќ4D쿈7[B(E r_WMvjE'w=x D/ ],+?pj*.O c!6&dP/ɤFRp0_ZMLNHLy\Uꗂt5MB XW>k"|{1U5r%mݍCÅ8&9c`h'[_zKd?]s=+u=e>Rc/ Ak AV!=:W jzq;ˍRˈ5>TXaeN]ijL. -tOgZ,S\t_i%-QSSjIWQoe'H]6h ]1{H(㒓v‏SNaBr'vƲa@~K}p.: s˜BgD*NJ#̥IU?FMTKWA;FgUzAє5^< +-]/rkHpҡ? dg8%rͽ+A|vQw\$/4*1 F`e==&`ZJY}Lϯ#h.== p2ֵY\$&kշ5iQ'`Yf718/:AA,nrR@%}tNIInPS 7 ~;uA^TG̞nXQ91iL\h3!h>o-39fA1(U؈hH,3$t9GZ" ÖHv VM_&i4K+JDL!w: ECi/!Y!̵'=tr.dG*dE9x gsDv߄(3ۡT&!Re4Sh0zOD `U:tmіeI8KFGl: Z)!;cz?Mv>y+]%MC;/J9ONB lQ2aQNE\ ͑pU$+gWnt2Gx 8M H(V6\OdM`H24|zFTMKC˱|Nܵ4t>m{&)'ȩo˕Z~|hk  9#8[ajMة3*9ؽr!M.]Q^pk&yhj5_VZˢ@ԗqb d1Tr缃]d˾mBA"VΗvS0% x'3OnL[E#̆c۬}`lbԟ9;>>1~b;.ɬ#Sapuoa3!I//TZw˸ HwfO#r h ,aDw8ZK+1Bd eXM 5 ֖ˁYg6r0Js.럇[(~J"|i5;PkEPŦ3$#7?LGda- 0$7`JF@zwI#R׺tr |$=G_\a0p-o i=}%!osbva,._[Q%Q^3P޺5 8zSvϘyUڹp"8dظ;IPݺ4u4IEE*8/VA|\`rS!FLۭ)[{?;#2:o09?n; g^wh=+GYni^¦oIa]0yg1f\]ôP7zߘ/o/s8]/L;h0E<%k{0tvF3fVND˅qSȍ?O:45rϯD5}&ׯyğM/@`&6]3 Y&}D)]x0_aRF9{/8 ܯgGl4 ϋy .uS~_%e܁?SQ& ,>zljSva\rj[D:6nsγ bs{Ie ,88iRkN. ߭|.*M|!<_1ԝG k(?l~L8s H9`k~?y}^CKߥuTߏ~ZbKl?B=RO5Ĕ\70O#gǭ?_#W`bhƸ%>N~P/g{g`XO@] 3 }J$ L\,m}#Qу %zVb2Øek_!l!f.)Ҥr3Fyo& ѱʑ) ~~93g5KiUh5Ldmrzkvx::FN 3ur/f UP?,x٠@L5Ԓ 9q&:/~Yd>~,!n|2{dFșd2NJ>iDeRMC,M,@$GO2i5a i.]f߆`Q2]Or_֌ XL8 #w"e} 9ZS>@6h_$ؽ=8o>ѩrDW53ܼ`C;4i1zΙ&N$E`8WqYlj8 /VAiH+`'*lmBIixC}y#A$1/R-BA=˱ʉ<'6 k_GدmGfPxjW&ޜM/]NFXθD߂2@4 ^UMՅNMW׏ çp?}rCA,y7!S7GII+G 3l*NEM7#U&̘·"A܄Pv-+ʉدr]QÃc?MOVWw 8ӏfhBإ>eϥ̏[W}O痺I}yFxD9zr#s< ~e,Z4tktw-Lܾwof1=}_N7߬]tK[N܁1_ӶHw>KDХgn ?zQ,fސke$UܠZ&0L߆|BCĿjӂuf f65e!5xo$\EC{+8Uxsֽ&Gy9Z+:> %֮GBEЖqj(rwDlJ3w39n2W#IMS \|7ӾRæoUsúCk<cOћ,I`BofT*ե"fV}ki{p*E,*{Z׮ ߪډܶ9X/Tusb3Af&b^8zQ^:bŸ &o4Bw4"3zo'lm%M IDATI[0+(2>X~C^lLS re. zEb<`/rq/3ڈ,;S{y Rg%{.hkC,ہ\  Vygw7}M8}k<){CKxA;n?KM=o#O9dg`# &c +0]p* 78.,zb ?O/'R:od* I4B0Y:pk1oT,6yb#6.g s#@|CH=a4G]OG7ZG=OpޮsSkƉu6^,HNa|sź p~vATNz6Ÿz;ϬIM84v fNZ蓧p .QXwra7?m#QhrB)=T>mHJP}RT w/MUOƿ% ;X%v\b-s3|3yDf/Ibc>Uݰ׫}7DFGP(ZU/+@QE%*M8ǡ|`kH?| "R@KVy}/ul \_t^фq.^:i.#b!H"k$ wg Juk hQ9³뿆mxCyA;'&/1<|'q| \wրUN^KA#*SU" h0k+8,ρW%.%fM^Ir :fM{%=ϊ՛A1jb+Kh餗嵐%ŗ]oFܘ,i4یgyeSSӜšnm Q(zޭAĤf|ߔÙךA}@P{5ක)#ջ8,-ROc/%0cV׶ujlh>awg*жp5G蝩"7E̓[Gj=SP,nB2Er}\Cţ gZ|cuFzk_+9n:FG{otEz`/p!|Ex4q&E9:%zwTZanv1;h; a3k]FFxW mg(D"B< .$Owft_etX4# ȿovѣr7.vr򣟉hn,J<<xi9]Qۡ&HJ| J ?&Z߿*(s{uZ* n%36e#9oΚz?-q-1\x. &< CۗKۮJ^WS8xȼA-:!N2 -)R7YXfVoQF8]@["-MAd_-jk8^G/Y;,^PbzCàӴ*}xҦ7ճS?{-;H͕W+}[oޥ#c.o^G.-eɤhg%x%P|*'z<ФWjZʣݮYk?? $?=a\ت[eZ=:%*{BoJY$1Fo1\ykW.8&]W:w\z2V}z#@{6.[S)iy@z&NG&OЮkJ5e[E9*}ն"KPc쇋̲CśGkq[x }tN:M+slGs"<>c񯋗hu.{ˣ33 fW7'{ { TOOEKY{<{7N{fmRW(%G5}n;E~]9 hhyZl<:d' 9*ȣX$NxI \+R5iJQ{&ߛC3mNd#-p;LD1|6bvUs>KY ~:I >Ϋh/Edn]ϓYY[#]5)Ř~rtgt0zZȮS:=# V۽7FJ dW0?DG2._0W|B.k8k&eŔA0x\OB</K7ֽwyNHIǽ:@cTkZ 0s~oɗm!y?q=xN(~hrz#4Y =zJm*†ŎEW1?z|8$;NP(+pz/Co!jhb0Y __[I+ kMۥ&uΔ%pr)d D_ =0x~(HՓ{@ W<xf0EJŦ+%z=W> o渂l w Ekzs4Hĉe~pATOrPCs=6<#]6]@~a FX$08,Avbaˠ9t Sɷ G`V}zl]7kym]:Ӎ z4H‹xu|+3>CH6<,-e{{OT{ݔơ|k=1AOЏ-E 1xdڢgZ ~3Wn nSiq>T˪_ZiL5Pg~ ?7܍(_n7Ư0DLoB6\.M-Հphwxf5Pw(@ƎgXByO$7v1H."xn?5 N TEf8r`^ɾ)ȍ&R+Z?@X O|31P8Mkf f71oϜ_N0 o%\޲ژ|EoBK CHZ],|hˁ=\o:IOQfޑe87ոW`5k:;#H\ ǍS:XB>S^<C@5s{Gn;\rF|G2P;>jUBxxѽg0fu'7~j*.갾9W.=a ~7Q*cew:B9D\r=pb \-,> 9dfmNE#J I ]Lk] lj\^Vp=OuMk;pSttշK\ω=g.-vYͼ4QEd+nt1?Nc2Ț(Ժ7»bt?d3—_O G6^#&+xu{{i-j!mzE:=VF662 _@+ʗAؙ!0K&p5w/}3W7I'U`vLVˀu{kf7O#\ws}N==`ofdiK"o`O1[b2%yx"]WV^bo]"ɥڦ gzƗ\oyF3 ¡XGYF E{2\{)cIBwJN#}ϓ`5t]hIY;jpU~EW(5/C8 HM09lg;aL%tV(=Y“tבlnzKR5eL%c:[A?kAezg#U@/-=|xS2 k߫F[m6C3^k / _y buBZA.gZ{0Z2 Uh~ W!a;s+Ki,T:]&nMYGjNad5:KNp7zN-d^ǹAV$)%!:3+}T`qp,kb*V&r\g8,qPmO4y'M@K W})7!aOUm[vcZ.1#f+Gg quGY=qX&F><'+\6 @vzǀQai>(ܬx! &>pBL /k!lN" <+Rj*)+ xtݧU~5g(H^tnA&1ejR[X"BΌʀ5':6'z ˇ!kӍIcRp g2}~ KD>(]؇{i'ĎO XX-AFm.Ti3_C써m jϖeݪ!^֊̭RE%H#V))bUD 87q_U nmd젼v }T\ÊEÏZ2mn6},Xjnt1~rM\s='7e%™P^x7uϥE*Eb>D{v*OGhӓ6)ychYX3YtN@Ed6QܓHo0A;DJk9a qO `;SYu*"~t~~?w`Rl(K?A$gb9vsɃ&pH*u(1iInX,3=s9[^"J/;]Dn#vC, 7$% % aT»э_̂G揽>OڠJڟAhRH6OݍNPp8CWF[!0oLMg״T  xzzq:c8Ε61tc~h yo9 C8SRv1D]j^9EװȷƆ:o'Zߔ~(\zGWm>eXHȪMS)˧R5S xJ a PPp F<#{s{? P^)h:j$1[=N8!{YzQ۷E.EkFH~nkITzP^v*?{Q^&(4XX}G<Dx_D7jypg<7Lc6.@Xsk&1.p<_-Ԧz_8k6ZO^_ix943>cCUf֮ f!pL t <6%nHci\ǚq9]ހs{p{lT H^l)4D*~~O!d~+e-Î,5K>=o]CVn -{pqxg_E٭(KLYLvIF ך&-5'\͒VqhڂNopb gMίɹvY惍7 NPٛx gȪ03+Ԅ7)mBCcfuul^n@KfvӉ7tDmJMnX=5 |bVA\Jj^|ɁK˿.ϓTK!`5VuHz?gs@ЯIXhL֟,`W ~[oWܶf+ޛHcӅPDrN2}rWH 0@RL5cf'J7r*a $JjM]Y~'1ͭ~69(cڛQ YeMS^2M"'7CZ65?X =/(!ͭYQEG Eӫmf'gPR?["c'' ;>9} Rm|pY%5b*{"Zy-ܗе|gc )&ϐw^炌$U om=c7St`az5N>? bӊKs ~`Q7f܊**fgu_ǶOd.sy7_{l+ǃ]$+5DnłxKE͐vg={CXYY{6n_LKgZXҋ q`Ż}NE~̆CDs4*W;]rv0JsdބJ UQ:Vc/ɂKuvC x m3/'Ys{~<ߨՁ9F BZ4dk<> $9?yubmF4Uvginj-f}_[XK H$6s8JC;S]8m ,xR r<>kKEc0|Ǎ`x!T6v }k>:BRm*UtLord ;oDOpVʻelws!-w^\"?B淰5s9} H}Pɚk%% R\${&[Ȓ3$Ni)7,wo!CZ*AKL@v2`$-y7@J8/acZC:yB2@aS>&C() hYwOHOz}oi$MoiL~Rn@=&s_}UU"MI&̦*c(`aI,)Aiug!?E0{TU*KxJ/X!7.7\\E `^J sT;<wҗiZrDfb:Tf4e g.ˍ˂$\ yf55qawZUU6 %B◾U=Xu`p[c=x:t 8I߲c₎*SBFe w_gߞ AFi T Bi>i^Kʡ a_Ǖщ8;z!f,>m)j OYnNݽ;.:F)諙h#aE~ЙW.54?Μ.x1`M\!x[ pD؍rە_Sf<%t@P4=Felr7դV.5fUJ]tLo; !B+GAtPpwط-E;9Ag^~Pj85a" ",4sNj}+Pnj7+7+N±S|}CJKRr&ݻq¡E'=nz J9Iբc|ch>NI_ސ&.R\v<ՍafsɩbPQ!RF]|'^ Iۿ- V7ˀb=);WUS^T&1+6xGc.I.r oZeK jݼAv{'y|0{iPK@yn'Pq38+l Ұ&H&co4Aw Īӫ8 ~yzz~9sD~Y;X"C!ޭ/= E[ ۻjߟK[؅EhE`|#"U9JG[GIlܙ^ 8cpޭ [=,`ܕ}A`ksx" z e` h.[ĝ˃4בuxVO~eyxi p9G\_/\hؽQ?LJozdG^fp *7'Fֶp9YZLӳ' ZQTF-E;[@6IxOݺɴmc-~_3 LeVmc L3}sv/)#+?]gsFKk`)T Ѣx}9JWUB +r.ib}]+B&=`\;3n(cdNs{PcOb,ބz1HJ79*ə{RKN}jkY8m?1zcōqcǑ qt.zlx:髚R*I}kAq|ǧ|p\6lVKU.+H(j bIe<>> vR!z)rtt||D\~ёH5@ue3H,;ZHhxeJpm4[ kδgfi } {kGK#w`dD!.q UZl2R u:yC.^w*۷!ׇ[RԁP\ˢowک[~kĽa/#vR:n=u+#Vaޅ)ŴpsKg(Mp"h&^ J_/cd+@^N\">׍ws* Nc.N&P3T%=Odxݨ|!@v*ȷF z(jn:;ˡef-}|^Um]P8i8|/?}k?[ Y0åa2.00XT>T# :t$5;W-"-x&HfV6Ƨdb:{z잯IZKpdjckU3ts{BD2 H㏮< i SYwW^WH`2=F]s:li˞H .J3wIV(懻aj ݩK$o]"*TOaLxuHl@SHM/nɛ1sS:f>gr}w~ ӥ)dʿC;aGd3߉<m~ƻ/ pW“,W$rk@>-M8TX\zu[7\/6aX@⊡r^W0=A{58-4C`SŤuJ聯WiIйsսqBJTFK-HN[CZ/ŠEKZ@mw}wW m~TΏV%8ϧyT3H 7H:sWi@PD0Y $őeÝVXO/O_-xqUKpQ;ݛFNhbXR=??p جw|v!(JD2?y?SBS49R)<~Ob3 _vyc5@F["kYj^(ma5л|~5ͦ:>(x휚dE(j!K4QMcr@- կdyoL_j!9k/NnʱA4 i<<<gcd6hg{-}$PA(8 OzeOmx:q;7^Y+ӱXGDh?ò`d K>/Ydhj|g{ w3ZF2> c·YOB$  HYSn8 OL5˒|kNj˅&P OdI7Gm.yl5pĽ/צo#3)/=~ imfZ}Ӊ=B3~^]ڰzL}kr"NukiQ(\zd ~C1@t#e*oR0ȕMe[1F~RTP-?O(p$xԬU 8y׽[`없f)Y!G~7ɯ]?;!f" t5̌8O(r[YwOͣJO$LJp^UoY{ItS!UkzltɘIdige<^>{lUdJ~X`9 逃0yf&"^u#j(HmSz w MI9uB.Pvπ9ʰ-O+?l@fK6ƿ7ZtܱY17\d`Et w3tyy! ۖ-+}9hlNMI @4` w] >oEj>44BUAM^U P{5o( _Th<N zo*8YZ= ϲ}h"SO^ЍZs:xSejրW4*uE{7#kL.{mlWLgc#_4D'ϴc 2 \jpw xcя7/fDݛ3rOF]bחYf$/z gq{uo?BU59nkK 8V<=rbpiY)EZL)%6Ĵ0vl B]"jb^;eX'кZk_\nVCɛ> s{Ț9$Āz3٥R9@NdO6O!ϟ$dDWThCi#)'V 긙Jn ԧCMfӑ6WMĜΩ lZS׷kf!|$:߭<=ߌb:/.en/L}b%soگ &!a9O5]w᱀:_}Jl#jG7WSc/_uF' ylg!@c *`6{D^-brL *}m5 H< 6̫O-~b9\l|բ;bN/l-ϕJ WrXwFoOg6[ 6<u @3'iW"Il#Y| Gz J$}xh@t ׶WtiuL1A_>~7~=ՌL92Hs0tО#XtQkL,<=Ǡ~j;;}EB_ӡjiet'hx7ZIs5"`v9$0 u ӈtπo0dFWmc/=~:ƛc߸s^IYhX*A[SoW }/$TxEE'Ket - nxٝ5mhn B.Ip}:OqNvc ^])] k{Q1T!.FRؘ^v'KBV%*(6@&B :Y"Ʌ~vdlWpq_-'^X_=Q⋲iN~ ;d=?ԳY=R VoW^"iz/O/6gEֿGgW1~Lb&nȂ@L-RZ^?vBM)<:Y]x3_?]ql~s4K{7z+z_Ȥu I_!vQ^'ȵ1߆?l/'U4``5w#{OO}3L@ڹ/c A²R|a"7%)O}2Xէ nMrxR[BVDsUW{ս/l.u+J w%'ͧ)hvFվwV0(̮.#d'gZtq7݄Ͻr#|u (S#-ZP| MWپ򴃳:$ IJPs^F>]g=в#kwX7DQK0Cp:?[}AǓj3Q(rw3[Ԩq=Xn ,X['cpU) \3Xq@gAH%kNEfFXߖȮY;ZV$>MÄ2awkOEm6M=I(mDH,!k1e9r)+C=E?h2ZdMmځMnd^aAbfR9%|tz0$djw )6U]{dZOm4Z` #Ùzų^;X7ёN%.(s]bq M;0 mL/r"Lol/OB,Q G&=<hp.=F"ܣ3?#`B֮u [uӁl!(|aj"0w%<1,'Ăxn^@ljwn8@--/[uP.d=auP|EmO975סJ uf; )@t>lH盁.>_yKڙI."*ks#3 6g F3 f=M2sWbST{\bc tH@]7_z+;^n"$She/pXx,5;mO#ΐC_f5!1h9zlK {ܴE<+Lu*Ř߸)J/neO匽eR^W%ZΰLJ9)f6L@Bx 0!Ak=j;aFJ4ҭ:1pB_l6rF4`22ЅN߄Ax~\rn 98k؝k,&;iP!#*C|+DMHӥ;z QıgK9lOEυwT.{8JJ'N-f1_,jymA҇ReȐ$Rf@k}nGDc|bSh뤏;dlF%h(N*h8A$ gY.M:"oelq?= U"XAcZ]Wh^PߒԽhn![:ӅfL\XPrbG/_7oU3c=T. R[GY{>i8;tjpu}}iL '(@|'Wdʿ.g6I\r*s>1J$UERiC2$Rݜ6PC8GLdVnWn:w9+h*r4UV`Vl/.t(e%'m2 F5y{{)'Ӳ֏mP żm)/=I.ppU]H+N92b̿8! $9f9X[`q@G3?>}7Fdya\65A|) l W{ yca2D tNTwB0WYfuTqąY^{`Rw<-f<^L-ɬ^yY{sy$U,1Ezc^a7b.%23E;)ϵ83Ҫ2KaZ_\o ih '.Vr"J ,v /=ڦzgw}MO':QOhesIF#v/|?•5 z2#9Gs!gu hrMEPxqγ8Cx+i/gguE,J15Vꙭ>~-8l0댓 ZOOƩJw-I^/ F8v.Gw/:  ϵo.ba;w߽3C,$&Ԩ ƺ_L-EvO?6; UKĀCy {6fܲR HHq3F; ׁw\"&{^FrP QEgOHa~G꾫>fzٝ.$E,(%(V~'p ?F @ dž)CR$wgٹg:W}k')rU '$&?DQ V&Cɾ3!Vd^l-c5?Xޘ(0T7mE~jO!'9Hv̯+ݨQ §wn: յs?SO:" Vƽ{CUI> _l\bLq2MfoA'Z nTx3ΗA.-W~mbhxD֧\觙dD2y\ qYR K}bFĜчpkB,sQO&ȝ!ƄW?k膱Ӫ˺ [ 2J_ ɍlumh/lcF V_0&Pć{:cG}v9p' ,_Va<\h7>YzYH^`g)lf֢Ú/- 95xzx#X6g{a͓QJ|C2j/}2oRRk_X|ZXe`8i@G\j[}Ṟ.| &z &?IjWb ow{;bh"A~ٸmMb9hi=:ZN I9ҕ j$MD@@ciߕI`ځF==q\g[`EpNǡB;UHwFN%cGLma~N,"-H&m7¥pj: >2e %s"l,@"aϏpK R8=z5ߛTm"6$?vai߯~`oi-_Xekffeka,i.N°`.ouz'h-CGpyV"(>.' N;n0(+~CWh93C(Q7\8 }oǃ PF5hH~[{g j6PǾ6A_]r;\ Csr!赉HR"{yLmK C~q^nN o#c> *273^жry=tKbOqI*po\ u!ݱ29rJr_JӼ} ?SM!0%'xG3]̼M@fҗ[ILh̞l0ۻOsl1a&>{vҗ_ZPQi,6arMs/ZD{vp{$R3YHh蝓6ccSbvn+cg9QF/DXW;kg+ƘNa<+]zFMW3nK폐p{m.}R0ځl+:[#P9<@#Bx*aJ/ r9*1C\g F%^{+Q.x , ,պFm|ʺ hЏ VkUL2#!{N= c #Xts`6 {?,@Һ?p{;\LOo.B+^ {幰Zp]>tԙجw7k,lpv3J|WCzUanWݕ?%VL/ v k< w~m54l?ўm6hr"`/壓~tg`FK^n "Lٰ{0_IUq3ƽX-\(9"AMƘ-%p9.d<[ {$C,HiMQY$6@# nZ1(, -N<ez€Mw}usylu!hg ckVZb= ƂhQ{o7ؚ ͑}0;.?z։Ddf3݈|4ěTY|$U"kGr¾ Y =H N4=rGWfXo6taj UWkF)9rQ}hfIj|W\|"<dǁ5a߰v]O;6f;tT)>[hg,w>\EC6rFؓ FV2vȁ+hƂ=,7vGZmO]`'RN[:P$m-S~k&* 0qg^Rl+['7B.<2Dޚr7zf!!|1S*fh-$$զG 6hp2cUU -n{Q:Eіkku18{;~e[>R)2xF_>M;AzJ: #V_&8!秒[~/>f pL^\\TNmU\:]:"> 7jpWBIA/VGx> +&@9'AbnelW@7 DNt00Hm`㦩+ƙ܊0R!J bc4 5O0ݦ[)tש;wvES, ļrJa3X p4)Y 4Hd+zEG4x, V< sD2L\Y ]8M(]]0PVˢ"8zB4?\~p|};=ȟEQjo]>;;p }#yq%Xcr$!}Wi\)KË7廩U=~Z~n깫[M )֭8LN86~'WPToHKymcM f /07E#!IA6lxS 5͕5X6CVe}Z T(avuܟ%_ ,ςN:]~yh&y1K)Őq;-( 20;m0dls͌J^ /;FMXPzcS e &S6v'U-8jF0~YJ#+r4΃_Zk9p=@)4&[a"X̯1 o2ˈ|!,q?`^tïCΨ'̝b`Ԍ q6sn  tF=4UnlyY@y5R&!Bׁ `).gsoFk?fJ Gn9Um}YTG1 xMLCMVT9/N^Bp (_O^1_8 ҌM}t)|/]DQ8I6! 0C 'hg-Mj 7$> 9e KE kHIF 9ԝ5ໝG(@ X˥琾hx-#m^5Uchi)? S1? %{Ǭ2zQ"W{0vg, XM. 1U'u\t|o͖JWפ/q"~J͡gϟ\gx1;a4Hn&ˋ)t'C {0lW:tJv"yItmK'waU}E {1v嵳 IԥVǻG5:4}iCrv&!O+ IDATioRlo'KjTP։M jf^NTU`yIYxBng uI6PZĐ~VdP %E9#>FGS$&Oz? ~PlFS໛oF^x+y%~+ 3:COuv~{wTF8t7Uǥ1)t8kom ':6/elC,hnJd{S"?K 3@z!mR| ?a 9@%"ꡡk&%]42~s7 mD$ 1m8w (q 1:P>G fJ:6L=GhHN'ofi|u^FAy l Y;3obIZE\ԗwpeLWxhnRlku3`VxC xI-E̊r.w"oZ_uڍE8w%b͆֘iBڨr,`U,x'B!щ1e"45WN5 5Bjn+J/G%^\rzw҄)esI&[͏f.eΛ%X=Sդ?;}8w& ͚qH]d~M  +, t$^oJ]FUb6,A#nc[ lǕZ@f*C* |QdDdiNK]mr;mP]ÑEh1B5\y@ R ;G`aS_vegɻ8J$b:I\K>OJkŷQ4~Gw*V=|S$Aasd.*(U4%`ev\&5q.F tP"h|B=K#vWhѦ;;-+l JcN?T?7B[pe~:[>B 6dBUgKʄ h1M: /謬|y6Y+EmLjqU"#/Ay! D~)+=Y <}0eU>BDn>&=E8ce˓8ڑnS5 ܘ;BU~}Zͪ_ngXQvײIR[yWwMoIa'9Zij J2N^[fjg$akjKJȳVD։(.J Sz.u\5jWsbyjyzm˃땣~Ui^x)D8iĖ6"W6FGA_7Cwx.utc Ycqx<Vg6ZƉWm@Kc]6Sg^ci$Pބ\buy{g.[ }w'J;!v6n34͔̂[qpZ'#>5\YxQf}Bo*(ԆGfY5>NUZUOi'ip&a,i` k2o z -][g]Ρ ӎrˮO}5'!+y|&0Vsݚ.Cz֫{~(:D(ec54|f.(e"1x^sZVrLt䮦tx@\ %ScXޤ;wa ز ~CRنOzAO( K%?{ԷS)N'&s6<;#gN1!,-Ga |쳞3I6b( IvM/ʰ#"Wgg3ڪMU(M- ${.5 Js0Z艱Byޢ[#v RhhUDGiB)uDI,_.voyHF@z7tyVf+L|\F#/ҳ3 e$M [/ISܹhLAD#\vDN^_ aT l¹d -scb;ʥ5tOZ=o5\< |hcr#esv/ #AsCN*tչwʙK~7٢F]\m7ma?IL@8,CF#Y83܃|ãUgi(Ww\[zWB={mmn26ͣVD7FCnCKؕHZ\-5$0 BN$m&]cP/BzS*όzh'㴌_H$Yūx/bqO1נ)x33ޠ"!\vj*} a&i%\ɔCrgy6iScbO}52W. i]R~Ckk<';Tή1K8Y??7NWcxmrhmi-!6DW733!Ό^:g+Xq&s=࣠vt%%~tCwܯ+RaKB262 6TB`6$Ru[W~\9dR/ XqmRX kdx|6#ݾI*}gv%C&6nBѽ '_u[rI VΈ('rhlB8~[k"|ӓYb yJPos_uo U?WK/oےW=\?4󁹷fKgbPS1;tfc7r/IZS,ULQ׹JS\.:g"1B?"n,^؏@ke=hc=rgV&ɽro R&/E(W0HerjeL-InQO\,ݛxwݢpfy f:|~„Bމq% :zhbySD-FxU{5n;_DfJJ9&Z,TX8raX:ޫ8;C䟿 M8A|t'7IU@_at=0_dtH7685<tUY|?|eӮF:"_ JM#VѕTGR6PS]Zn}:wG< kb^bm; w _I\cTGVSyt|mqY< 3mU+~wr-OzfW(ao0m&7:kX)Πp؀^ )wN`5mH@$ e#mo58;Iu{P:"+A&_&3!g_9r v5mZsc ȼ+3HD+(>T[W@HMq&T/%JY~dt2*g!k?\sU(k0:F1?sѩ =oGRpͻ[ ,7itXoHxeA{T,J؊1K'b6mv2O4's_(Y0G H <^qAMMwрw5hWajc,׿EL/޷F=l HՂ$)͎ u,# *0åZ?M'G$3ſ |-Q#.Ŷ1ngҷ Y˅\B} Hzy`'@kIj{67s~4X`z6ɮFfnl8sz`Mf5$8{b]_, H>kőg=0Z{T_vk=G&G.IrټD?<t@ubѦp :>DCVZlNB{ݝqs\AOFA1`h]^Lzh]P?i 5-zk9;|q̞}uxupetbze cf&_;ӉgB|lohUџOs?Qyz^IBlZ̘հ{fDedq6f-Yy A-`!nzm ]HVsZj-bUJ|C9i;OPy"-!3O$qbv8 A2 Pj/@9zEf#TGD27=[ȌBPEdP KeDm8[T߹;B#VGKԋ}'ʨQ=4հ:,D\{R]?/Cvl w{ЋAEiyl.Nkwۤ/%Ǻ%Jʕ3<&v@VxV4;Վ`}K\؁/S_]aQ 颗!%ވ,CUc_ r(S 瓛5/v ٽskЍ`Z, 8{A"4nޝ*!O7kwpiNnqkg.;3d(IiɃOFɮA|Q"56䬡7C47ڛd]|^O#c*;@̇gb#! ?.y GjjН<&-N E4J/f^q,=z'?'ާjl|ۯc9T<"3TlcR cw[Te;U 5S&4I v$pЉj]̲ i Mj-rt|R)'( B(V;}x4_upߒ'6fVJvjP"0ev3f~_//ق ճ~s+\,kMsCK$݁χzzYs[[;GJ{$e;f TWTls8{cS yU% ! IDAT-7Sx9+ju1k,^_vfp`?S" @3o Q{eqwp}-!po[` E&>H(R eVv8Y[<lܹx~t٧q6>`Bs{ڷv' t=˹>`wۇ37, =;ˀO|~ [1臩>I>{k=D/A= 41=,p!8쳡1[=ѡuؓ[K=%͒G"4{uܭvPFy8]Ǖ;/ ?1'Sn_fڤGF2*ufnQmpVd3<)x<O ,M hZ@Ӧ8N{q$8+G(  il&BI Aϰ׻Lfi|mWi{p"Q> l?[8׃z[:`|1A13 (2q"HUCq(nRoJl?D q:Sg~6%v2:NGڕK=M (Cc>~aw܄"Sv*|c Jȷ_~!zc1s]űjX鶝^u#v쎇,vr}ҿ~'1 xTb-whnG\t~ټ$T^z?DV砭}ɝ[=`1F]bUI;Gd'|#,3)Zi :F(`jZfݍ( ȌիjAΞ/f$w~Eybchʀ#)rǖ"*bC5RHy7FBFf1oպ($i@ú ӂb}2@2O)&A9yQSX`M#EpJJE%BKg[@M!,Vf/sk +og3/3W^ ٟaN]Oubx-+^]W FG+}KevJ#Fc0"ehG^Ӷ4*rk`^%QQOdYB3Z;t~9-nQc?Kl1y_ohzΠy4~%1|F18ӊz֦zڬFvk#b('YEJ`Q&臔W-فEcs3^%+DIf6*ˋ }s<4`O7ׂ2\۴ ;ȁ=O]:巏_7|jsnHhD6M0pzH6gZXlQYsty&xS&2BDA"/suadt!5r{HC}%O0&lU:}eZUTRRqSn]ݛL+\*{֕x?x"_ivC ;u;OzLKMN굣8z V#qof5gX0ʍ ɣle^ZN|mA؀! lClC%Hw:\&]]]9z*u1(n\?Z>OK`>K ,7[[|ؓyuqM/.nF9P}WWgFjM3}R$Ydfĵ_'\Juw@%gKapț44ؽ̯ R'u_]*'w"10tGb@~5d?|ŸMW"2)5xtD$|  F#ۓ:$gwՠP5XŒ'Bzb#^0am[̳R@b\xY=d0 ׶(U,azҴM&}gC# N0^T%TuIj7ىŋUF-w툗Kѭo5B"\sfV ǚ 7'0cJHU+Ub n{zٮƓ_ģK8^{Yۺ[_~sG{bq:S@StF~h zݪo5jF𼓺+oSx9/iNu15|!! vwx W{u.E7xa ߴoB>|@J Vt3EL3WIj`FRSiW$'yҺp-LJF햅+lV>NM9%0F[nmD6u~\r:Gys0\EZm#밨zirqWYG>k!X`QG̓."#!.:XaL `S垡xϦ :|1v]Y#u Y\끘S=%YY w+MN0ר%y?_H_ dn +jx4x<İF4\^F](KHmf1ZYbaĝV~QqUa =+e H2iZM9'coI)128ǽ96S鑴t$R&ZsҎ%V)g9ÈaFI<`KikrȞѝ0pSW3)<,$wmI~Ņ{:0pf W/JgQ6m5ZhǼC"Q X kb8}gU5JiCmrź cWz=i DU!1%N YDF~{lbe ^|z/hAerx?&W]2V\ \lS6{QvNyz;Y ۱G=Fٔ-"e:wyf#|?o2Vt)E:#Jꍇ**`͓e7ɵL#=XLE> ߤQ]$U E<4^*Vsjd]eu[ek%í)r՝Ŏ#7 #?<=6" ӮÎNe~5 @7?.=FY{UtrLr0gé \h06h"i,^0 /(~c*)xO3/}AjΌFY&}XfBdn%Þ%zJ'(SՔZ'YŠ Ϭcl^GIJ- 8P7[ls9Ko?uV-LNB#Rf}j]CU4^">u$Cz|]>w7/[uFMQ#FpɇU-Ǡ* O~p# P.vN=9`Wɼt:mxiO {fV}M Q$GݵB:4Q`L, E"r04mϷ\{{7՛ ޻/ȰNЌ1GjTn* wYE |I=Zu Y,uBXVԥasJ#yH':[ibn^9ne3 Ԏh"+ŪBx/CL3a TEv^5IO&,ܔ򏢴ux81랡Sˏ`- @@XNUM&׳W!e!6|ŮBOa|xU7R[JWuNZ;ϭ ۞-q+u#Lkbɞ6U{ɞ<\e: 󪽘u4 TeN$G.o魺Wqq!wG.0&__GRc`wHr'y#fcnHWh; ̡s.?a/1le2 U.r#U+aD)F@cu8ܴWUcNm&"Eb Nco[!9}BS$^,e?ܛyh> ؏q0 [S%~Zt[p0؊|ѭ)0vV[! &^ `1a.-q2  ְ6^K({^b890nݑSBdը}Q4Av EqKUxp޿@) : W??j)H:_i0maͅs6rf9=f=yS_wB#X^~;_X!tIftzBZ "P}J,2{+kGeo(r"?Fk`'ו畞(qXot|SYw7xsm?{6XH'z9/5FTeF" QTʕu% INb{Fm13mڑ^ڱӺE?7_׳ʆi曥'kz5xN_S?>uF|z֮OӥA-u^S9͒O">}ׯ+vtHv~Cq `듳cJk뢧\', $_Bc 1ZKFudlR3(<*s7UN㰝oAՔrĿHs1\FAs~?+x8b`:a_?%'fkP E&؃4^2*o=U͏bA=I<?;j|=3f}Q~kC.Ҿ'c8Y܌yYI/S=K||4}ܘ,(ՐdFAt.ݒ>}!ӭ__7=kr6(,"rVl3 >H u. ?q$?*To Tv1\wE× 7Г1 H(Wj xJԬ&5FqZT&O ή8Q >Jʔ@MzᅓB9jS9Qæaǣ`tnF}-zƎ^(-T؍ ݒݻo/g']7Am c֛,m§Mo_ 5ãy#:?E!u(Z VBV%˕6k4|QO|9W%! ~-ۆzt[ GQ_x[$,zܽv,u Fz%X=rNԁ*SO3wS(]OY~.#*_ZUL|`F\K(E ;6p,/B+> 93 s]=/1dlT+ <> &cxY""a;AH4 w@8l|K׋RMtOH Q փ0 *7uHGn( (#7+`G%քX^Hݯ$uBT;N.t3y~W<"#? a_ix楁ھrvGW!5$pZ.ū $t1{m*# Y:~P^W+ho/țw7JHլ4 0 كa ~Wh _ۆ _5N"'ƥ?koq%jxq IDAT$@Tf<_7iBw1:;1Of|5[>m1ey.<޲>:}Hr_ˑj6W'i /HtI@ AsRźG~hIvbګ."%`ўpI:ܴι]7Y8Kߏflҳui.?L$=/ğj Qy?y8dul:KVꤽ>2 {!n%ON)v.$PC[|+*L5\@K6 f%Zi Esm# s]K%ƎYx/e[^LE0;U F/]7s_ړHo)4kT™7hߞ!?2-; P 4Dk8T&˺̾ŕ 6ݝ5nQ_E;LnnRCZrªÓuO #tBCnz#0WK?<*lA \~uRbwiLۯcvǨ!%E`aE 0lxZL^IG^= Lyشr~n;LQSkѧuۯNIT(Ħ^s f[̯/(2rg-5Þ'UwcOZ`"u˯VR5olZG*| wy˕uRVy 2뽱ӄwNޭAm$rO=ӝ܁DSqzmP.o 'ޒJDd]wz.V?NJM}%ܐ0w:!疻K33_:G2?x" a'W 5mh׾r16azO u~0xy\3iVSKhxLyx 4$?'Hq~ Bdq ŌR_ZF$D#yrFxڳek+<ִ*3Oo$̼PL' ?mb/A`R&-k؂CS(G\%f%&  p@%LRoj$PyB|tzz6&-mJ.H No]  zӵi =quD X-'*mo(V#@CoOq|3λ8 2ZZpUR6m-Lo{662Uj"Eń9UZy@FL9jE(ȹj.\>2GZ)hI^e=w1ۇsq!Fw:~Dn>-KOCE;pV6y܂ <<X|^o%1ٚ<,gh-G‸|zF*ՒC2|Ź)p'7T~Փ t_AC\HQcK 2~JӨ=fAQ{~+-+3 3s~A0^. R|6Xbã1wC^)NBfoNwjhAI͠'ŧQ0@%S_jB yTb0qiB.п6@NNO]kC }ݭ0?^3U:L4ԋcr b^R~Cܙj2fH (O7:nmɼ{vw#lG/w,dz[h7UTf(hPl}`9_gpZ@KjC]jEL#w7LRC2?qr%͇x>`lĸp+nSSKSoĢ'8\xy˫$^#|8YtF@!N[yO)o},o^cZ:[bT2E~ {=hګ#\fzF# '; :ֹ;4Y,)LK&&_mM@k>>Bcf~?{|ױZ!ou`@šHͧAhNӃ͚掋UC1rmv)?)"$ {=@:힃i]"XD)a DXsl'GąFx?b_ED#K -9ܿX]Г-iBwRǀtAǺ;)Yz0r i<}jW 7AYmZz'Q=:Qf;zAd*BC | ?=:0I *䯦ƛWRtBp cJ r%S SYs(c℃#@N2 u6GM& Oh."j{0~I;kQPcG|g?Mͳ!Y,|Y_Wrѯn@)Om8Ċ}J$x [̛aȔ=F28X.L#aOQʶ|ۑތz?(ؽ'kdiEܭU^BbPyՌ1l0@k ɅcJZyzBuvFDÝ1 @%RKgEfyyT\eqH mُ[~a#P+ YV|Ioeۀy/g$ۭwCH/ݸөM&[@ʽ!M^F", \8ԴܼH)`^x&~~BGA:VS&Kƌn3gօ,~ y4t$\!F)$+f;J4Ϻ|gg4{M'zO(?NKv 4k\mCpLV0 U]?VA"ş\ou;< OnYg/N n\z^|ڢ&|<,(X;ӸuHFn-H d{<]X݈>1BW*x;k8jIsbTB$jzln'݀yVο#Fg`wQe^yyhhGa +S8>"ܭlx@(y.ha<_ؼvd#HRi681 }t{y &($aWo4Դ8`&$hRWv&?Slb1DžY)urz|7ϵZkukPdc+>Ay'WYLc|{포6 ߀L|v`nfDJ  c+0*_ NxZ^邮]@@٤䙔i:mğ/.L` uHޤ0oL&ƲY$:5!O+km=9U޹|1-k90%;=*N LIe0}܈'-|8aAc~o `>_h˙"6xGYzmYzSϲ7s3HzՂ^Jx Fbr'%&tgy! 3.$ 3ǡ1C?]$z cE$r<51: zV#Si!wljcFq5'AZ_[˧i8 N \nj) G1wƎ<0?f z 4"˙3< Γys~X?(wȶL6c03#5'XOߣ?toU@yVPDpA>2Q l -?`gx5 .kOǾs-ފ2i7 |qcg A}2qt͹O*umc 1$Y+ik!:ۮSoQFLs;FXT܌S5 of wo > w<7q_WRVz+Rf1zG oꃅ[o\i@*&Vl/=q'((=>Eq(<#nr Yz2AL]O' 87ˋ1SgnjD5l j3nPk.0I\:V(n,V~Njt]0o)m\nB;to~Ȍ^X W?We!uuW0k䤗bEVl fGq[}]NPxjjP\Yzƽ@x_ `wr—"Av8BQw,5l\ҨoEꃝm$7uǻ.ٶ`>_xYހ.x_*J>LdJ̃2KC&%W SQ>r>?H;s(B|?ɖ.'Nb -<4okǷ<: x玝qu" sn '\O\,ŀgjjH18Y{ -bi7J)}uؗe0T>dF0,+#Vv*Ty6dPZc8 !ҀEFF>mh Gl &T0xO;8N})x9$dF>mF2{̮Rŗ3AuJqh不ܶ+ȥ^~%T^G/"#s[ Z6g\ M?kO^S`W_06QlvJoYUgA΅>Um a/O&(F!r¯֡AgJg@V솜mf.g/w cwc^a.њ,-:sb&MF޺kޜt.ʚwx '^o'-M>;lq2S̡Ͻ!Ruj{Qq߄Q)] oɝd%BpZG%Vi\>~0:xͮx`Q)8jϧ0xs]ˋ\b) if$Էpu*utΆE~񬭙t~Zo#C?@ *Ν@|iU3 :0}f!Cͬ5z&)Bk~OhR)`4ԍʏo.@(lIRDDAE"mXn'=i!=UrD#]BجZ/54 ea}#zRr)=iʾfď0=2I?_ Il ֱaȇlwA<։pn|ṝX3u.nU Kf~(7x]tw L `es'Tފ^߹3MZ9?$ހSLlY9gɓ/ƪue(en?IxEYahEp@+Q8Ci&Pc}#M,η9F& ܚ׉x)E8;AH[| =ĤaFk[Jdoxܜx%8U%(Z3ޭ т)LxU)jwhHv( //f킈neK@UǠʪ' )u!w2ŻzE_],JuVS;;Zx-@*EA^bSAi!WN0ڼ4yǖ?8?d"], YD ՏA  w){'lTkL.Dáy PűqQ0XRbTw%}n [o ӿߓ ]@E'd1p WDOTiG:m4٥xA98U; <`G"-Kp(0u-.+ߌ7}6{Dmnfj T/-u/bjR%:\^j^apVl=Jw+@ 齟{IJjrIa!F@$  a `&k;ՊDQ$!s9|3'~@[isXن'{GL!{h.8 Mb4B7JSD];S *~^tCn_XS?Bb颖H2$nJRV Xn.2_ IDATū_? `EmSc\\ +c Al*a[u oLp5l`8 jCBuב񛋅;~G?E7C'H9+:gN"B:h0`9Z6E`|a!dPmbEHs:BRtDwWy}e"r&=zN+ϱ>ؕD?2Nƃ9unM`Wg%?m U MkЮxAE?v`W wv B#U|.^cQvPifם y`pӹ] 7SHnGST/%MUGG*.04OEhOZ][,Kv=M9 Pڲ" &1_bl}ٶ.WC^W)rO ]YBotG+}xdc(GBF^ ͞d2qc` $$9=Wg602롬ۭޥGWߧ3gre1o|_:uV0o]\Az)iEmbd:`bphj}ؿwbBN%-ګ/)sIzmUL$`j"@T=sE*| Wl1NӋrK@CKlɗg-9C)0:PP3\jp}+ݴC:)!F'58alԎVvhؒ + 8䍶̆~"g^}14ç^pOy*2S}T\ds9OxWn"k؛.ͩ^O>4𵹸/kMrBC#H۲DOR Rͤ 3 a~dq'BƼUАkRj/9׹ɄC خiNv$6/uakF9 ٨&cv91{ZKQ$svS.ΎjG|߇V%/e;_$IZm嵥fSkǫ62.2(;:: {LE|DT&B?r .ydM!z9b$=85]Mgu8X&3%G+׭Ds}/RA˽aAr?XŰ?9{x:{>F%(ԯNzøFw%@Bˤ4n6=V7ߵd"m183fbn*[1ﺮFP= O|OL$0fꍅwvvO7T?*7Ot 9/+?+x~B.|]^=aX}(k *>%'8Dñ2O1I{4p9Nak`mםiΧlhB޹#R,e_s@6>Orjt0F޷N=SL6g4v(l}t+ӫC#+.t;qf42p|0ԴB: uժHbh6TiܯiX_x,ԯx)Yɩ6heMRFBԬ1}[10.o$k$Y \B9~f, I+8Q+ 8_C6ٌ7eb Xi:Nl&f hOϏf Ԯ V_@|-ߩP$;:}uF87NMSB_O((LJ0IB8RqAȥ5J;뱛z14~-Veb Hψ=a59u/XM!>5 ='q9]]Kh;iK&QYVF j ]{>a$MJ |oվ>D١.|oAZNG.ahÞ]+[#SߒԮcQc;R@=T &1zKȃˏ  `t)E^LN[fWG(9,)t8 [l.VR2z9$ǔ e0 ˍG|˱lyz{wфO.uu){"[ciS34I}홖%%?rUFZ#\W¢ [CgZ]ŔuY( ]УdB' f+ݩYHY+%Rc΍2Nou` BND{1ЏlӞ?/_.?v_lC@ZkÅ0BvY`f7@|f֒ѭ٢oI7,"((ɼ{֑lTȋŒ9hW`S?֐Cx4 5: 55oDrj-rk.W֤y)J뎧 Ml+Mo趌]̩  p>bH%NJ\ftT?H|ٿcvC}-d1qpqTzR=  .&0p2O)ә;ϯJ~Ǥ8ю,@-; ,e"Q/gtMxPJ7veA,*͒Sdʘ-)ww" a^BgC-d->>[Ӹ7V_4C/&+6%imE<!, 4W Z<vd?QGBQ(T&I9Xhp 8t (-FXxJF!nCZf#:.kb8`'Ytya~2pc t\=n}t㫀JV,!yҪ=EoF$Uqq r _qy#Q0m8*!MZ' 4ی4@{94#FA0OʮZ]wu&v&-;mO.m`d\LiF:e`ؽ{":Z/x=Fs?Al1z-Cյ'Rdd_, d(I2Yd{خ;V0ꑍn@E/VzDD͊/b"vۯ=ij![+D{&!mP_9 | аXMWM|m?Α=rЉ4^qtZS TkE;ivft\TCE *͌vUvhABhˀ`-)R4 S@!U8}¼5nM&et|Z4DڞC>;9'm@j8-.~4*3tT~{d%ΩH8:ǡ6f$MvX97bFƕagPIT}O̚%z<)>oYg[Bۯ =Yj@Akͦ>{kqlVM̃j  Pbo n!S0-4 o*ͺu- jTBý  ,Ϋ(f,FZab`U9@nA"BƩb RJ+̈́.2l3a *5M/Vvf.p@n+PLR ,:WOz)s<0|̎fK3A]n)刽2+Mo Pݎ\uJ3A6,1+jix]qXB 6 e'Mȩo<3F}ގ:p9PG6@D$s=i7*BefoG )кTǒ, _0CǑb$3{tz5a]'o ꕺ @ 4+VbB[λi ԡD[ӕZal2r#3WbG8~ǷAOe`;ѓ߾)scx1o_y-.,_- x4*>=W}B4VIZ]<+Ro}{o!nQ_-m Yb%0>@kzg<. "_'mS|̾aeL.וFc—,@jshj9 ٭uǩ 'rMLm'Y__Jg'1Op>g(5F6#z4{Rȼ#Qc= {YgHk$ka#Fp7rfhPKD%.{'<8K׳ɣ0Y "pmGmm."A*ںļO9ean|}q <Սd$@z2mOX*ܩJ@*؄Y>dӉ219 ]&5WNDlԯ> Bj|jLB!| ̮Ub[P1fԓ `b"!D넅l]^X{vsi+Gf}k 1lebjڍJ{TIRŃ?nVϜ*M 6EAT'kWo+P<,N/ה:@JؽE]EOڗ|yuRWg-7ԗgT֜}z'M4Z tJ1/nD.sXyOu#MONOz{! BcPI EԊVE=  i;kjR/t<L tϯ2p=Mmb@)aT;H/MW g˥[aH=Z4=HC_qZB[cv62Xt0nIӡ֐F|}R/3;Vاr]%'z0)k鐦M?ZV3$OǁWH>$/=^PX+j\k=-Z~zw?SE|E!k7'Tfy&-5BLDȴh6GFT) RW٣kov:6S p F!a4u5%`9>^pw9pSkކُkw^Zr#)YI۞R7|_ՀW" m7=#$Q Rxuw^z.?5WUφ~_L]*tg=p8y kzV q?Ɂw(S,p3'kdذr )^ @Qp( =O+`eM).<j1RpZKOwn9H>|ʞpBE ̍n5${ }^:I$9Jj #gF7एžOsC/lEi;hat'Ŧk%L w@h5uijκ˘(ځNtnnL\z?fΆ.͙@ʴňB%lv&pfz7mpŽנZ+<]u)7c;aͷDb Wh=Q*~-g{YIp [jO\%w Fǁ>Dmy(!]*_mEٸǿO=OEi-<6_n\<|Y-HA[M'α {I(Y}z,}.w$G9BuPy\ #~rHqZ:$H#z X=pǾ7..!M, X^ Qhsk{H}"mK\"ݸCScY4'r[K}ngf`gx^2щįپAҘDPӝO/a0"9 zb {R-#Ĵ"O>d5NJ|yvfoA+7bm|9\kz%N7n]7#'ܺ6a8|P !E_mWKdjQ1d"5f+4.*1|]HdT2ZS,ys* J,= p[īDE"\m?IInogK h@WżoH61w!0yZ7䉛gMk@ ̬w4_m/d:S$5 IDAToօ4EMsgt33ra|Sde hjsxK`[QYcܡ}-] {>ꃘ_\NcQPiQeƂUp|ľW5麧^{`+0,MhBeX&yrV_׾ѽ!6Nìxb6w#:{*z•7[l%ܼщ8i8KTw Yb N9!9 Bs䐪Ziw/Ɂ_9;%)3rxh ذͦtURQha1m]ʫbϿ=%오ok }@}Xǝ;ޱS4T(}rW" sBSeA6~`̀%A}Mr8.`tVxO u5Ndkj7}rRT-p-;p6FWViuXnO$7 ɞ&.Fgm Ux{u#]?|HX]7L%!Jڡ:3=Klfao+5ټ(sSk>Y1أyՙtNݻ@F߱%_@ww]Rt&deeCql+^dW^2@ƀ08"-ӪehkQnEACO%͏z l.c%EXTkMu6_YAm#n[ i.3΄\~r]VglgO=iGh;ogےD-N<= ᤸ3^.NT[>o~K)"YۺྋT{y*W7J;att CgZ^:3My] +}}tޓA5X[Q7F&$f. 5U\腅 Qҳ89?_i C"t%CF휄1Vn[($-!Q,G\i']rL͒SQTK S};G`Q\kpNA^XI9DA_fWFbxI 8%i0zVog@KLἮ`ᮨ6[aZ;4XSM St^X6x.vH0>)QH%[7I/$wIJ|nhBwTwb=`k9؝le3d_NnNfm-YPՏD.`̇u}_M臁fv+{dõ C\k=9_ ˼8׆w5 ]V/@L{DVm}J<ή i ټTLI1m[6vf Yur+n s-m%Gxd ?GnlqH$Co QlKtseJh 8 btJej 9§(pL <iIS>Jm%Ézc/~<^RW1{ӻZTv;e"]-jlV>{6VM9 { ˇV³s=BnLƧȽwZyk憥 n(ǺebvB\Ʉu#C7U1#'%QU`Poh譅&@[c4ZlS?UCЅ3P2$K&F2u9`?w>~Ciʁg@ E-A WQ4YObA:3 vA>izfII~WҐaΨMp#6)3bG,[ZbsvUԛ K[QF/}C#0+Zy[\&&%qϻwp8A9bJ9sSC7O=8{Xp%}P ǡ>@?B,15؍Բ[U[13C~szt(JV7va#Ln/}*5s{VǾ,AA~u9I14O?G,k‘ͱ_r`ܜgo.)(ݴ!_Ƴ ܥWڑ| Rtt8 #p&R ~Ybk-iID{ݮv$U*xoǁU`K]Di? CX@Gi{ Ċtp4lG#ajԹ< r+k}u]2d*LwHa2ދL5K 2َ]C6-F.N:G}p)RʪJ8vEf bx .F,Oq4t9=yVt|~U7WvrÊOehsh38!ϩvsW}݁hf<7o?~T.[9ܱcl.]5/!uw~.KŚ_.Mf?A76il_[7DON4׽re[c8py%8)/ǫw!K>Xe󸄠%}& V0> ɆrԊܿ@ ꎓjTey `y8[$3otfky [xf~تp$hQBlakWB@5 O¡ID{rqaa]Gוg`냙ugH`#oKz#bv3Q']kH7CCm@=v0](ݽ$5Z3dw00I\1ovB?;83~*wԩUzI_E85}:( Oz?E-3p N'sow;T ?m4_i x;,h#2˒4!YHP:Bݯ!Y-['$KT7 '@Շ$U t)䬕qy uQRr1( 7M 1S,L"?(&(/dC>,Rco # @7eޒY29"RNDΘѝ٥aɦspU7D`N3XƥvP'_R7%bUA׾٘M9|E jl~ nJ/F<`/f=<*d)ަ~: 7}dMr PH&+>Gio)Hnҏ@aa׀ԏn#te5ȳLVQ)Nȗ FJ[j㈽?AdN}[ybno RZZ&Qj\jzJ;-FcF39cMmcty 8 DrgmR,;Z#]cUI\|EMA_ɳlj@j_4]CZV/OWCW`7Og*\,M<5j%C %p\?fii;o@rn̼sK80FRqei_*XSYcV y<8mWXОN@ JYlbXJE=_Vm!w^׸8r?9FԗMʰЫ~FWmTn lq}:`y+뷠5Lda%+=+beΖYkķn0wso=IKLSkaGL|zFS#&izw:s/)e, o[ )b3b9zXk΄ws{0XE$Oe*B@ 깯L22+ϥp p.3$K*Tw-ͼN@:p;_,UuoUlOM5D S<Kt PVέ߭n\"v=O*;.S< {<qnhE~< O)G5kEP|5JLxAާ2Xbt3K!j)k%= B.LO>ko7!-:,ROB!+(n@6lpf-c߶W; :B7XhvT4~E yA"v?ݒ,Du&ebTIB~<}^"<ЛC}?(*޷eD B0f&5FfM۳fmd*ꛄvJc%f95feg:~p?Vvz&@Si@,{+\cK!FÂ#/o+8T|ݾ.z@z܂v_zk G;wV6-hف)Ң ǔfF[|Q]\L-/Z 6>h{|[W b1z0Pr|)X?6"_< VirkO栾O{zvFƫhi6gn Ŋ %>IFEwJ08U;k53Fru| udg?άeOmԱ ,Peۙ3~(ZUQ2"v-ЙXLj~!)1BVۀ 6Fc1g+  tA}r?blp\4Š#_{߄>o-KgviAAR&{GY0s>>~V@(Ɍ脭= 1-ݫ@RU>z[ &Vt0ߏiE[E@j~ /(7T AkH+|s>d7 XI1̕sUWuuư;%ytq'A l6 A>6,Ò}w\[n<˱sΩ+Wu|Pk\K5Gcp*F'IC^s@wsB@]+dH\"'k';CP4]or nшБb!t4G":D{$`w xR0K!7.= (D*5q2{7rKZ~D?ݍ*D6FJ66aaFS<\!ǘ߇x!l/)j[N#jaCySb=0k^Iј?%8( wuǥ> =Z !~ ӲE;-Snjgz>0i}/ ,H]ziJ5؁˾IP";_Si4 oU!:+1xRc~Yj! 0b'TOcXKc,Cwz&DF,MBJ85=|zSbǛQu`$&w|Sp1hióHtUb9jq v &2x,|^ nz J[pCBWOͪ1ׇ?VUaa[awҹ_?U,a x |;R~%F _Z݇v)$Ez|˰N.%Erۓ{X[c}Hȃ9YW,1`PNb gs8|,7nYPmzp˓>~?fHSMfZ]b[gJ=*D{ L"0jBy 'Ztܿ$VH}6UIknW`6hyW[4C/I,WlJSFt[7ooOe/b/ x&ÆK78&c0 L`{ 72`57o.ХO k:"i|&n,~s $guwsy.0wZ]r`\Aϙߜt-M0 $&`,;zg%aAKW*unO/Lc}q NɎ-|4﵎Lo[q< I$O6+'E79whr bH}+ΰ IC_6Lu“z&$৏'qşghnPר:GNG 7cs6uh~| zz VRk4/\(Ffh>}trj@^" 8XӷQr:ћ s c+ဵSOc {^T{Bث=3M8̖CV2'(>ڑO4OMf.3O Cvqەzpc|D5㶼<T3gZ,ؿ}8h{ pW2/dQ ;c6%ynwGc!>6OGv?R - RλcCZӯgo-^Z2.1m #8ܵ*8y51)٤|c(o3dl&׃Rݔ& x6X?z) ,5*}|L drjlڭp%";1Jx©@n[*8Yf'ݣ6pR}*q]={t /) B⻖W'{ v)_7lmf="J yar=&k?ϵC{f/NC#;2DߊfÞBOcMuoN:CV?afS IDATIkzPT7ZiQ *x48S_ zz.qЛ-LXCLQF؍Dܞ ZX pMP%wDO/$;Lp,rxsUfʫw;r"¤5q$wߍ.6>"2Oh᯻Xc}\j3C/jw'ٸ!uHmJCoz@Z^y9#yFUZ%+mOuS9'd/:gƕѽ#Pb꺸S% <ۏUą]M.ʟS&S)r"/ST'tYr$ǿl w6rPC~Upt΋pۜ|yZ :L ]^+6#J<"%-a ;((/M&Z־"u yIF]'t7LЍKI|>v5~uv=;vee).ߏ n.tm )rj9ɹ5Tufl A0mg<~..J"bq(\wϞ7ӆmؙ4H\v5V.5Q[qFf5(O;>7Hu u0M-M|J5~oq2]z:LY\TY!IQx JyZf""0 \"ۊbm0AMLR w=[p>=cލk^s(naƶ|0=~XYQ1]|,߂>7aX 4Jh-S(i^WG#p̿]@6(KI빺X=Pa L W.\=P)5u-?i[@q8K!4JZ٠Ȋ>?YEE`wRl[39>UIͧ0 DŚ5Ȫ:9E!T3_A{; [ƚ:4yY*T|_;[k8~a q}zo{n,IץLjh֛89RPy/ְ:ͮg{%,Kіh| {}SGL]?W᷍ u|W4ݐ9x,mNk|!Ez/&=0'ȾZa4uֆ:э7%gcY\PvF 9;pܞ8傤MTc:O.h?2UPECRi8s녊v4bNZs7{5gy L^|.˵+Gn шВ[׏/{;:<i#MZ/˧^_bu\zBDbkp6p m<`wYs/pW4k$=8fņ*st:R9烶g}njÈ)NnZNX`Hctz{1!ؚ zgQ ^Zv,w*Ý@iuNp^n՘k(;y 10DS5/'zRZ_a25T1ZF(T3{6tG#fL0o),;1K_L,aDLb~\=LcdRjT3ΎN"ӆ6,6B'm^63)rk0Է)o'@5 ҃3`bs|rBNkpldI5bxޣZpS M8kQFrTt %/7.f!c#\GMYE(L%zz8F]=.waȄ^$Bl { H[mЉ{} \v4eGu&uvb(kɽ3'@/ oF_^u}=Q}9 $^+-\$f u^ŋIק;LTlU aoĤx^G6M2dw@_1kKO`ĵW 6G F c qu`Oд_Z}#~p}$bS^\8x^(hǠOj58LA7 DxZ3SqtYk~˾J^F6}ݯ;o[S €:AW\.x2J1L$vH>/N0OQ7'>.G} im?3KFGJ_R:>54dTasH ;w*H]fuw/O{ 0z 1JCj?*Y603"MрVqfd~`y!MN!Z0u\ ~5Xf--,K=niڵlϵ5eNu\n, /&^.̸; apA)7;3A+5r6`J,b5&Քnv:hXAaО_ngb %zj-4yX) a->n8-sp:FzM`:1?*iJ_=.mZc$1]zQ,SEr7[Ouú7a̵F"xNWwͫ}UzT`PM2DԉW?>QRv"[l "I0 ๯10z/R MtiOpu7og P鯢Ñ7.\c,+yYǿ7ք͉^ (5{hu+cO>-WK7p2th챮3e"d\|1:{d?cVl FZ4 ?=ʫ}adQCU*M72b{#@M"O.U\/#tRjd~-"Y$u(*y+O?ﱩk`wuחZuzRKu/*[:004~jd p#.5rLܗ=RQ[Z* З.R3?WbOp}?j1-ˑhA eL(q;GW趏ґa HjmP&$duEu:6: p/Ba%` zAѺS\ Vfkp[1S.8咑VxsùzȘ8go}TE r[k߱'sFcW<љ1]A`5LW`E46)vUIO—ȴ쁀7*H_} 2dC%l>吪PO6=ogK(q@@"(2 aSz'b~kx̎IQEt` mjG4{gfCSIXCHr cT\" WbϑqpxiuY0zy|aZՏ-iAt>$Vb+Tq&nDqU=WA7 8S/c2yN5 Uz/|Ne}ƪVp},~_?MMR_5H 6/5I !J\A FDGL!5H~:/nvDSPcݯ!x,Khf %ƽKdg'5MlHl8Wi1@勡A ,|}aXÒK^*h^{%exv-(dxK4o*| W{;Ž.a ߩl2~̷̐wJa\8 k!Wʡe=ҕx] ug}M]g .FO>#lykt v"m9R'&R 3p6zU6ʗC3_ s{==x9&{E`ʃ ·h 26Bj;h>JwL\Rc^x͌N2hhlRݨ?l~=5(-!u]*1lkG/S^ 5!ko`r8v3Mj h_I?ʎF&*4 oB_E]2VxLJϭ5QbmZ8 d:Í1HgمӧY|{9 +%I'b'{⳺uvW=&wU&m"" V[ o8ЏYoF~tY 5-!nOon?S.,iYݘ͹] 5nuC]灥t"O6\vl;`j\ <5;;(ۻfmӣCϚAbэW{TeЍ=uF͏rѫ.,!f8d9;)&.fIJz9旲S}-΍BPZA9ܚ,{ ga\'ޚ{ٱq(:gB`Ar1oסEwQmrZ$BmB>Y7*-^n}o d .Ϳ<]杋t2͌-@򡗽s0UvX3\'T\M4ʔ͟O[t1]قv__,Qt0c+YK\{rɸq|[s<g`Jen @x^B@CuZ1ȥJEt،l_C;Ð< ?Zi$8jq7;%ߘz/i 8Ĕ_T-SЗAW6slmNS퓣."%d%XF9eCU?@@ XxF2=)Q0{řr{BPţ 6D}>&Ν̧]prR*_]X9 *cxT"bVfO' [s6v/D<[9j=ap>ut."KR 8@ ̮n E0#*D?tWs@+w|2B>"c;fnӃlDMjST{-Hi%9Blϙص6e ysFb3 %Sk*Yx4%{Qͫ7,p0fC&V ,ao] nWt`hf (wc5 \m#n7Ι/}9 [[Nj$=)<9t.^|rg}e?&tδC͆ntyyRf?gU7Q.\;R u_[P|P7m\K"“0=0$=[.PՒ m/αΗϰ@aGOaLؗW{U-'{*{U:g{7fY3VbCʌ?I-ioR hx ~Ipǣ@u,i#I/Zy$>Dl{.(s>'B1u$?*():S'&߲i Ų2uEb4: }LD[hl K( XoװȃfdDsl/НDq͉qnxQ"'20\C"z#7MXB9@7d{% KE_.s/IwE]Ul![ VhCN,'-. MQɷȃ+`im/K& 7\䪣8ANЇeo6 搾 Aw2.G8AKr墒I;Ƞq)"FE砈\U]A>n6Dl&$}c ʺx0P=;c~"Ϡr:>M>U;^?UE|3j!y2/w}amNc:ޗ!U7Ɩ<<+#:_Std,Fz/H F%)J IDATǟwpxu{?4o 'f$9sez:k=ɵݰɰ݌58*aX0ـIh(Mm8yLExM.͕=X͠9ϡY* q}ae悗ѻu&!NT!ƪ]f[twv%{]-ぇrf2xXݸwSA?ќN|>,o5<[EB6(?zk)#ZĵW :7Ao@@Xܵ6wrw]=ZԇQaza4dpKG(XVKũZKx`}W_i+ Udi[!ZRCa+mkT)N/G杻|Dx!p^cҢ0.{oB,IE00JygS_^m `9Uɣ\5$%uSzp96[,@N/'U-oKG?fK4&'1] }lYRGZ5_ PsC84Rכ~υ7^!C_g yGou,Wl?9 R0#x̙QUd^KzgbvЭ9%޵%*Z)—"5cc!U?)`o yXŒ2! ?dxޡJ!='fCѩ3]9銙}u9I;s=iK)cYQRx1u3m 'U 7Pblx97Khs-j<@ӅAm+zT |cmѺJWBS\)/{K<1HXW!y#*Irt1|ߞN}L/n%Ћ @d^<5?6?wH'YaFqh ?,N\'V /箺[[`a8W"n9ܩ61/kmH==%P{"#$Ym$(0 ^tkc̎ Q_fbM`PAg $eYO8|>"㱸bg>/SƖ(c({a2)< "cc=h~=J sTB7^"QAˮOPN%siWFӚŦl,p_, FYIEl2c8K߯&eOk?CS`dR qc f$cҡV*qN-gJH#Q 5a[HAC,V(*ǮBg[xvPfa'>uȾ3߸xK *>Դrs .*.fѿ8:%WG鑳1u)!;.f&fᔍ'Je/+;AMv&WEO-qjY_ P't,34H(P[6%q+:c89j C ̦M.R94>i߈X= pO&~"8@p@!ܦV-Bis4={^r%6,OqwBVynWfw17;˸*_d K*[ػx*-a72vhÆXLzՃH ~-;{ᑮ-?msP~|$ h0ѧK猿yc`7Z6BNfabceٞMDHQSp{(_vOR:YSO1wS"V=B+m֚hw5MM-lɷq)vQd&MqX-A5|zPZNagݷ?P~ +dߔ!G;9~nmн0j>;lz%n6*@3~|Go Dx:qU.{fs_\{i1VzfV75xw|Aϫ$S: N!ɳG?{zǻ w"jrB1^p=Zα,,TnA6됬4:×jYJqIecE}؉بǓ9gOw\=BĜ\8:V=!3u}zd9%.Xjtظ;S@x< A[Q"i`q[%4PUI${ Ctkbžuei^bli!gn,10qw,O3 DU}ʢ-~*@ vQ $dC}CGNZn.?Uz:8noQ@:{ܜ&n1cP7^_Awg񉑘qUf9E=!FcT.UsQ?B/ tԗjl 8]W85pDZ6y#fuMpm6W\7W h0io: [ -)eez8]ù8o9]/IĆf06=v˸u B$ x>I."7Do}Q s|Ǒ[IN(q jӰoYԥnceߔ 0+c e=&:}`r,Atv-dgtOTO =.d˴8uKr8~1nx)&n4tAQ{!9#7MCb 0gӠ'QGӱ*#^i-95f;!'J5V,;2a2eמ?Ph5lZN?@kk&V6,bQ1EɎb]c~I7Võ>|D+D LG`XH=W|`[bL.X tCn q|@}KGG HxD#nT?=2 hijVk$M tAG,ʈ;}XVWf>ICq/ܗ1XYM(uoQ8r@:5~ܔ:&N^bx1z;=]y-o*5{=9Z:MH` !-AaGⲱ`P^Gd.oiKFgG|߮Deƿzhen]wDƣ $A \990om@(Qe[dYmA AOaM@ h'<oo9uιRW pzD{9":7{C{Ԥu;y]=VNe:ә2]6K _ |j"þC+L/@'X'aw^r&F<-5blZնKx=pۂ 84+5ۀ$@[۽%^H}{sܿ3-@-~kV Tf]{WY^sMgb lRQˮ;0qu~'hB*ژz"):<ÝF<(>Cyn.ȝNțLCQ MNP $@-:u'p({줙Om<1\Œjd@Fw ,Zc&_^d;-# Ͽ琉H|?G\0WU?8)etol<_t8r&@hٗ,wCa~hp49ڟ8 j'vwydU!L'NڋkHlCNTJP3ouX}}2H,3Ғ@n}ě(#+_GսAD-I*_yݪ{>/,tFo.iK>nB^"ִ[w!ԹT'reUx9>DىUuQiDZx0!r=4̻#S4moZ yn/Y:ʵo\AuTނ 6߂,J@a (\;o[PZ]W8U _܎n"nhЊ;9wko6q*X 3 Xz_r*R“ bq~vORZ7i*86b  '2ыOXE;wBLsMhR4BQ)£[^pS5ȴ~Uߩ|sg>zg4@{N{ VՍĽhC=벂?Y1oZϴI2Gc>{-}j\T;H]}SoJUS)jNbՖcs EW27-u(c9{!M0c&K;,3]%J&yH#Q`4Cۖ}qK~6YJ <zq5b ;3>H4)fmJ {"$6_N޺ϪE߫Uʓ3 2G\š8tox-%۳a"jxKAki=ev䗆 39_~WxK"/+ȤܶK"YY߰{KnnUB{/'ufKS/cy,H$Tuq2핥jhGj}nge䰆Oz GJ54h.a z}) @<K3 7^+釅R":GD6Eנ+z9j)Q:'DΉ"KJ8A3*n%Д'+N׸#Lw;e' x ?W$7.oή }pdh+ @vu!&ʃ[QduU}D7D&`׿N )B_Wʅ#n}rjrHCR׏R,jnBvPL)-׻#^):0I ;LoAJj$#K~Ow Mtqi{uv* a^[ ɭ;pA!DYYޘ 5ZN°dQƬ?CsG/J,d\Rg$C!+d&2mcA狣[=*Iں$>ڐ&5MPM"q ֈ*U$86;".ڦ'r&V7m/C \i}m]u. yō-`D^-o>}ْpAs*ORt͐C3_:WN;8zݺEfuCG>ŀWp8o'ʓ&9;܆`* MO5?[cs0\TF!=zpS-M Rգs/֞a`e܅KݯΨQɀ>O8ڴh(|eu~R~Z咜O0+sIӨYǃ|<ʏ8>=)&NB UIV7|y̶<4Wî#IItM+:_X _O31qE/7CY0nyŘ:'8Ob @$Kw&Nɧsm}X*zDGs$wnQYv4C3H4}#q^T5)* #^zӽD9?Zy~ڙ]'o'bq[li)#S dS3wKUO_湝U+Qe8ug&O|Vvj+{+a4">gtdE߱-|Yis*b9!G^rr ,=u~ 8 1c`3v3gg{ tyְ~3Ut )#%Ecx"Ύ^'{MfwZYTh2uGěMңG~ݮ,3)%+h # ?꽜HDdq+:TZk5Yw ~$s.? 1 :q{KUgY*fܴ*Sc3O8>ȴK\߿2$ᰕb *O\ޙ=('yo mU*q'<~ '7@Ok9QXіI3_c̜} anfXŰ2&Bwvݹ%nK"'5 R!=L"S(}KX>*$=0LE j`?7l> IDATk_ҿ7//c2Mdc@$ޣ)L a" f/ZkԻG ;4y ϤMזh}qhbksfF6?~g%faqK!F\ G{rX6PC@Ds-/_y㫫u,fV5[%;B<7? Pp_x8`N`R8mRo2@9A2[ }ir~58,8+MB!^8BfF6L8?;7H7B@?)]&˿(3&}?ϓuO;a@6_lVD3kзn^V)AFsR17ܬnYC$Z;5\{ 6\&i֞ :z& QבiSZmPi*![Z5+\$q>8lh!&r`u/l[ߣ;Uu륮ef> 9lԜ'PXnqDv[BԀͶqOs\yYW.(sQ¿Ј<nJ2V[ 4v&OHtx>f @zP".sKu%˲T aVxYQu:b ރ~o$V֟O>/:h;&Sn'eMv=X lw:\jyfeo޾qG0쇡~?y$>N-B\5LD;>f99 O &W7pz݁Gl۪ZDE|(/>MmJ?NO7۞cO)Cgd}p= bЍԱ["1+љ;24;k\N!a4oܒ7s[ŞP\84@79j[]HJ?.b˓Õc0YtH]MއSW k"bt1--!pWL(ϫ/0kWYa*3%v&8k#( fӡԚ;>i_ [Lie֊3&;c QD&{ R3&Gp,(4]s"3>ܜ3DTumҡoŠ^ 0R'#n#U.2kT Gn$J0Z]Ф>nljg!7cOC82z;8#"dhaT翅1A̘5vCd {YFshKzm'ں_sgN& 2ʻ)8rxG_k]u""_DbZw{1W{_9~ 䞗_; j~^\E5Zu8rы/~j# ['77:}8<fWpo%k8%&#.jwD ևAC)nrt:4#Z\L(M@b[OOFөmK͑xzR#_5_)czW\ߖs\MUi?fzKY_|[^$jOqpAE BAs4;+IX*xb@,Q0u<#`+IK%'kV M9+k~=ZX`M}##=ijYO-==h<]QJ %kұҏW|M<"Ȩ"0m{P ˭ǰ ƹFm vPF1ۅ%pdN@ ˣ.2_ƠvG&:5Ȼ FՌ?/DcN>Z崍I͌X D3fNJm]"0OrWڭxp"qߓ%HMXO- ?`v%-pK:'@{ŷ3k}f\V<$ cpYrzv+EŅ8O[5ܷ|5g~ R:$z|vb$8*}k&xM 7hkZ|>rZo&q˯}|*Wv O:?p-jw05+@Ah3V&3&@`Ѐۿvx$f(|`Yiػ]Q,w m)-m{b}lȬԤqh>meME_ȵ7/N 0ﴷc H3VoT/|~YM>P.:gMkZW )f BcY*Wv̭~™aY&¢67m+Lۏk<,8jpϨ*V umƃ,Æa= <ͰmUV]j Oa$:gy2u3]G'Zy_8S҂%ILSe8#sAS,ϤN ˝ǍWS4'##*b8P, IpAhd4O ǶG nPfrfN% f 8xc?kY8_ŝaMQTyq>czz髇as̐vgO77}wwc9}׊Xʟ>]WJKi* 8x\Yț[YⶵVH?{?bCcpXޥ'?q=H@ </Ζd㊴ bOL@tEMģ*5Mo||*.G#c\IkYK8&%ˎ$#X-ǼOu%:&'؂=4DЪK~΍>?}f[*F S]a.7Z<%Y7h@mJ-Nڔ#)3kIXOGms8N ;-h<>EKCn:QqUܴ%-UJ}h0OøA Pm'^)Uc: _cCԐ? N*B_4!{']PWwҖYu._^G]g1PZai v4b[s Xa|Zў~j($3y, 9;"unPWrE~x6ΕٙGp<׹e@ch fg:F;/rNXs;当!)B=5 ;N[4`ǛҰܞ K8K>䪰*L}sA"NǪtpH'F*8I)8]BryuKcz^~(^q$x vboG/F>9:|Q=\^F<O#_{oФ?bUmbs JU3B[=Zv`G-Aǿc@U\Y 6e}>:):938aҧ&XR:AStMRa\;7Aq G'7"B?:6/щX@hSI$!#ע\!o=BQơvAkjڡPKZSwܑs]OBm>kAŸ#TIHbw+T-n#KsUuE= )O ]:A &OChMb>C13Y~y}gOC'<>Iʱ PNqqZY~Ha7}Oqn}e,=|E~RL(6z4] S/XGL[a{r>f/ &igt%Zx{|tĐ#\Q_}߷{5}Փk:N3YYu^lkwȍ 6-ƒqh*ɉOVz^tU D %x@6` CoFo+n7,>.S]\]t$ݽv)f"{r+IR=k֎;$?>^(sjG輪` >\|)Mg9湎С$}l[E Pyt +gKvmJYx- (bSXw¼YZIX0}fD}[μ3dr Lm|9k2+# I.뙣M}ܝ>LZ)hKFሊv0 $dpjz7ݫ :/|`[ =@j_asz"V9˜zNj]雥5]*_ QM m] ۛmn?lsJKJxl|K,DV&caxudj Mj ByLy>굒NZ<()0lr o<0v>-66P{ZG cydC?l(׻WKn!Ǝ"+7E!zi%{+=n; ?{g nk}㔷2PLd/:>9 ;@ȧŽmZgCg&-ZX8 +;Q`a{%k38Im@%uf..P)HG@!]:Ef|3~ 64x$lҰ6`)(ʃ\088N "Cg-+(fi P1Utdxښ:] :Gf : woW)ncoto]bOD9 q`֮⸑.NVeǞױc޸.ly*[h[}]_;5O,ᙨ֏]p.e\wU4jy>Y,6 ̋F|tfȿ-oW! [5!#NAkm&s0ERPP#e#)!A매Bo'i7^P-bMKw:؞^@ƱzI✜&*9K>_^w/4 >pGZP(doCjyB2Œ`hY֩`!aS/5HLk𒴾n; 5;y,AM+gy)kcе4tPU)R3^E-ЬqB@/~RkGWJV^JVl] i4 e[o[oqxlFE#`ڭ>T>Lra8%L޸n .%D'W.$PvH{R"Aq*Cq.p8\T?~q/RBޡKZQsÍ;[Y`liFny/u^\8 V36k.]MMɫ5xZ%gswнjAd԰S8f1OɓfDy6e W)UH%Xy9Od/̨k6̓޴Wavߍ* (]3_y6!$q=7vAX}?"X)F_/+"XfrϜ v|1 4JfWiAs{=\]JE=f,R~X~TK! 6'gSzp|dk}%gC\mS{d<p\ܪmk3܆k+7űQF,JLL%hB AmB#$' d\ɓǡ9 ͮrftNܰ^,{ڀ9~S]a1|JzQ\ro4L=ODGOFx&GHL ϸRę4|O4I$s%N0A_snl\9}03ABӬ3iM30r$خAo݋G\ 0lTk7w N`#_Џ6DfÖk7tp{2͖ZON&$jN~ Rs}vsDzFԫo{(40Z ]޼N1 D"oUc&w%ڋ94Iy1h'b+Z+ifHQoo%u`8z@0'w{ކ5)[&⾇fH+b"8޸!RKDZsE J㛮/:$XcڦftnpEK77){P1M1Jmplh(7ѳk pZVMO3凄3mFX勯I!?, *Zd.j3?[^qk0!_演C4eʽʊ/R*:6*[q_DZ`~By#6Ԯ!ryg??եc-+ܘҟe~T"+PZ֡jet݂B*żRT =Ld -v̽E"tV?vl0GR(|un9_Dt'#kX : ֝9ؔcZ{IC VbUySfZlL_-?X/Bpén-f&P-:+`l",rQf|c<&#dQ!ABby0"&*pBr)["z۶ psu_?944Ħ-jk%DI._ vP{^p3;nak'LŃ2Ҋ&*&Eb͔?9);/_BCeKV^&2BcŪ_P=ԐRa4m ';5 IDATlk u6k~h:Zcvgi?(ݪ+ѽ&r>NéKC\DkwĀ5g6+ 4̀̉v8I.XTGG98J72'-U6Jl Q> |ͅH,{'g)Gp .w߭@$z sl+$ꖳ%W]Q#'Ժ:o!nuaֽ$*jWo<9կmj  9-[yZ/'CP*N3g~CӢ"< k84n4M6(OͳvCJߒf:h't^E{.-~fy3-G*a~c[sSKKaaDukr <ԙכ$A0yRͳ]F B) D/2׹o_M sj @>q#I,>|9bw2ep;MltVn2 _;tk y0N^gp_"D%|n =8aVnߌC`:s:F*\m_p2Jt8I?W̫>|v)1ՓƉ~mc]6|hQ参+_si+CHVkf`0f Wn lkwg$ǝ*ŋ+FnsW[@w?Gۉ`$C^x%' zű{&j&-(A˶%U߄+]L3wGUbU{/| j?0+z$9X8^:02?:)uX2#f2+˫/q3D!Xvp+'vi0.twp_;@{*$8Wq;0vkgr*+V }rO+$wPe)U&܊J r1uAXQ^58gAQ&AK?ݞE}ZEUvh^wKۆ,/M]8L|PĶI&;yDe3,k.ϛIwe37#f2 As\CeQ|+G{lkz@o~'E$ő5K `7"Y['6~q r9Z`@#Ss> VdpUe R]}DVv?jl/ܠt`$a"jWK\Q1y}?QVƈwF]ќ=o;(l|'4IP,1ǁnue(80N`TTK)]||U3`,P7[u}.)߽=V~Mv"q=IyMh VJ49|:o;Q-1 2Uͭ%4pM"8kdI e7=0@Z=Y#OGnrmi}< ,}6iw`~Wc9fi>"9Adtt-;^4_Rn)zL4kpW\-5<8aj^nk-Jy񍱎u971jܳ~dϵV& E/_J͜pXk3sk,o)cRXypS%D iԆOT')_jr؛$;~Ju\;/M)}a\~x τ!3.Rj5CӜۃyo"03eSK2; k4߽+]@P,`Cz^jUE z/87-z"lwl#j3贋GaÓf}w3>tu@Oqa:}]o#5f0gkِWA tbF$\ocGz*ƈF*X,]&l.fNJ*b å7sH?KM&>ׅIطCayohDR8Rq \2`|3z(G~]?01ܞa QܞZ'ս {7_箑QPJ=[RO*yT&$O7lG[ -=cY$4ia9]JPl4Ij =\ۜ7҄v^tl/2\(PMs~{~zɑnaqm}=5-%z"l: \1[+%J9r*: ^V>rdO[&/i2Y(]ݻΔwSWFvʜG v@S6sՈ1߃3ԱVh$Fm4%gT53y]Rc+}˛UC۴x|Le{";dD+$fX7wɊ6cV9 M֋MxLWE v G47y(qKӻ)! .k`s SN46' !~ٛEn-xPP\\rIlgN5Μ>qߞM· RZskEsZii%Pj)賹PLk?&Sz ަ- &@w4ֹ[B xb][8, atYXy,littU&o1C-fb0SUwOέuq`35 @0npz ߴZ7HΦ)x9B3.%Z#h.4фJ%XjMz`z.4)\4;8`;Jcm]p'Qg0" s{N\ϟdD| R:5;Pn܂ky/uEzܹY1y :4tݛSCutrŅe-fd=Fuf9Ğ}NwbܜKxai+Wp"‘Ɂ;& tn\ V, RՑ @jٝ5ً # J/CACD[TZ:fx|K5ӠozctӅ.ƾ߿*ܖ6#J4q&?%S %66 N$ ]2Ȇ< &¢d2Xg\DͦB4fR$F⦸׀_~7#[|#mt߿yg)16$@c3vF NVvZŠ9%Ka;$ T>P PxL4Lh]̗ c@yauWX4\5n&b('֌jiÊ>[ 3h^?Ҫ[?.rˡxW ~V,-ؑ](o!cң=*.)q掣P?_l?VD{6r3m\{y,ulA[쒀4fUg ÄpmpaE0tQztyWFGDvP!6<ؕgb1 F㌯FfW׽NM9 "βn[m10)tp;F>@ PV,nbH?a2 6)!c0Vsjmz)8\)1jcTRa y-c5(r=A>m-ly(!A`R5"P 羱WWB>TD6"a97'q<||ՉA.cMؒ$rL5k<v b`Չ? -u֝t!7|t<~lF}.::d]/ڽ~G;;`vS0VxƖ͋hDFZd\C`Ei͝&,6iHy\ f4]xum 3k, jH1.qw~,\>ɟs m6S [ՉsAb(E+bӳiŜޜ(U]y 6/ L."ۙq 3(sqc{3:Z_5^:]![Fzz i=?'O>qc+3b2,TP6[$;E i^s]JɞwRph[`MutГųNg}V,.:iB0eaSkP6Еۨ* BC4^cɺȽ^X 1γ`$͑(_TB xXZ%_/saq!k}kaC. xEw$߆I><DhӬ[xp|9w ([o& gWl,Qfo@n?nK\sF?l@<>vWw ȥKvnK[)J0bGho᥉^ڑIS$eG7Y0_^I}^ImE,=f' oŊsש.UBʼnbɒ{e@WP> h~ l:45AЈffw0^o6C>>؝@u>WH`!pM4{VJs/4iuq} éJ-Mo>BLHoNmlIDAT!B?7MU{pr} E+ޥB68<)2̄e|ͅke6b-H<iU [7n糝&?>BPLz74&8]=C_&CС##)͂S(Ä !ME=u|ov@18͠t 4 XH15å>dX9Fi-ңD&݆_͓.P'xX\ʙ>^fG`Cclk >6 kfo0HNoҧͻ5Ȑ)G+8ȹx"UޮMa0AcU*9ӂ@y(uYiAi`=:^LDnwdX-VD(e(`I&bfݳ.5oiedsZ(FNv[yȦqIM2hzWib]*Q ANgI ٍjKtqa92ğ(u2{?2v"=~ |9M=7k>^hgJHɼ; 3] cuLCjw՘SX 8_$WУ.Y<|?U 86蟉nX ƿ2sD9b) pOH|(5\o:8d ;SH[rq:=TuـCqOVD7HJre `AI̳0-Ks$p=e3h9zZlxH;,SUy0!dGa<`ҩ|ً.Uͽp=A~.?k%ơ^:!!dUk)X60R D_u8j}s=oVb/^6f]nBlڏM|5^UQ #rػ0edS$~Y3n.:Vr[X;ۭs:M؎и AvMLg(|+dnƎ0 r 1\tQmbޛ/SS Zwi5c>O\+@_;e=^/ bo9nS Lx#?{}iOvl3.-{@{}D?A nGI !>6 Y=fεMpNܴ8_-*!U<^E^BmjgK{Ea.m'el,$2=uxCE );p(5Ǧ= \U\/M5|M =.ֳˋ<1g~wo {| /LzwT*tlfvUot[űjRJ !16HԵ]쑁}~pHtQ~%I]iR٥XK>Yؑ1sU~/k׾lƒ\ה9Y!}ۗGHne80'EApbOZO; ̝va#dg'N]trZ~Qt_5u lSNjKnE-nJWqh<뛦f%vVQv4yRiwL>/>sY,y=P93?[_ے;HO}ǗI:B&&RcXa5y>|%#Lr*|+'+u̦{NgtmɨTWoi’ܗ#ݕYz~wǛ`2/ޟ@$SC3#aӧw:ީsp}](2v0;8p+jUd4H%Ad wjYa\F]\g4[lD(Xřg=u5 FB,Sx`P,?Ή'cĸ.:.VT!30wmneq?g U_=;C 1N{9>O7ag}t7lgR냻f!/|L#((a|?s0Ðzf~5ԍ1'T,IW!Qe;jNTpM wQLe~K q<0Vc2_ m2xzwZ,݊j1BoCӒ "Q"{ QD!Xh3ʾho]ϣ,Ύv/_.~G*g8ݖqqs Q<1`;<hu01A[Ѓeo 5jɗwWUj_dߌ| "y7H.s\m 5O!Xw7YB*]!HƏNPzJ Iw} Cx(!"YV$yw.o&}tA}`7[j8axAGsW^S!|H\<=nٹ05pgxz~mFL|+Y8[X4*>yZ+t`vKջw@ 'H+3/Rh֝BdȀs^ի`Bڐ߃_(FF:şl8LFCD mdt%w e>71]4F']L,ލ\b#AsY#̈6"Ϧ3\{<^7e[0o3_4ntNtPFx?X_azp "^7^0e"Ri&Q}ˣ QWЧ %!P!xHcK~Fl8jd8|Tw+~~3B^_CZ7 s 1nB>R &teB6;)7iΥOfHu}]"YK/t|\z蜔A Ȃ⍙+/c⢧ڠc&!Y(T?IQ͡1d+$)<7Ӊy8}2p?<x)np @Af'hSύ"Gc<-\6$iv#B4,›OwKXOgЁe!8q5&u%/0Cq`S4o{XYk=Lpaq^^o/84Xhpg~vlv'^U# Z;.%Hi?j!z-t*u0ҍfoRWAN|h"WD!l}Ţԝݥ݆j=חs&D|#s+ B'Td_?l=l;.JDiN}*=ʾF/ku{h&0΁@K:Uo/(疓ayN-Ori#WQ{Kt !B"L K\ ʘILΘmBR[5_HከlaЁ&F ]-#='L|n80[.m)="s }jih)z恜Kˣ\8ݱ"/5rnv[M Om-[ &3F*ne epQ(5>1':`4prn "Gљ/mb \걁f]t(4iB *nlUOYl298(1QH>R65/hogCKzqp`Ys㿻? pil`H|U\wbݘ ~Ƽ$e("o\#8 }}w%p"4ns6R"0IOw%7$*^l߱ޛIt}SEf 6nz ZpXXGd gu1B$2^3淃ѧX8KjE?Oo#7‰= $zDjvv1M[썿cYݟn@܆zDT!]Gm"a_ ڰNfi{t5|J3nTm*/$ԉϋ=31BO}m3Wgٮ BbO:ߵƒT# 86]PQKdpÃ^Ffɡ'p$:r0ҙLD{޸ KOoaZABIhp~L*2zGx6V+sJdGOka9P҄Ҩ6|ZXU/j/IZalfE{T: f$1f&&#!&o4;cC xMA4v۳3Ҽ@g)J|Z>GZӥ7G&&Z?%"wu  & HmZMK`L1ڨM_Cz&`25z3疃~"Q %]ǰ DPbb)" =\kwǂҢ~3z(OrNsw\wsq&jkYX<;@R ,Hz+=t^0(\3+c6@A"ڵ(+sFu?'{4y+vqeڒ14QbV3%6 bYgֽ@-P]ꍩMܽ R'd^@Qs u#KcxcO^kQHVqiygڈk`ڊ@٬NJ~,7_G%+ 樂x<^3c> \;NOfAgrgGi+`!V@䫁?ŀwɄ,B`t|Cp 8![-x%fiq?ܩ`.YwXi `],gY6O_e%7hn,D!Y8 i`pVZ~3 lr_x?l˦b96e\lv $E b%U o2B:`v[K{`ˤ[c.x)`ܵ@3zNj>]x '7 t O9I 5'k8|!BktH}wF'XtA5p|Ng,o~vvFܺM|v0%#)ȼy _񗛷烙+ oN ?Mk-&i]|u&зIfwJLآӿ~(c 2 3wR ,ƝjaհCrc@¼.мuw*2Sku áB.1$b&Y-kk./Fv;y=`Dj_t|,k7)ܹ:[?K0U9pc\.s:G g$OEm[y-J'/j Dڭ 14~\$IWAڅ &qXHڿa<1| <p/w6d;|KRۜ\zgF/ABGx e T zy2$/.dcɋMʃPhfYM2< I:zޗp!d,?~~ɮN.jXxLX }l`oڋJUGzhPc 뱝cdd@G~~yh.Z]}QHL3,uv8['`߂?3hcojZ;h8rfVlnJRҽj{2}5lKjsLLqi]mJ0^dÝuh\ DGaSҋt&0©c<^k3Tɮ{{=7*%S8&]~aؙCC ?[>+'tk!R>~mQyi5fJ޵QNhʈMC[ O2W 9L@K=jG2OQy]a0oLԼ뤬Ho|f/}+D~vX{鏑^bZ{+G?"&{ZX0 n.N\7Z|h@ RiMIczDsaqҾr7{!и"_.# 5Vy&0/ wNZ`WޱQRfS-v{\W\ TOL?Ez&fp *7v/ X8iJ 4pktu~=AVmd}[gH<+h11V}ҫ{(@%ݐ.fg\&u~գ6MP- = `&?  '07&0  5 V % ,  %!+?& / P ) &$  < 9M  =*?)* $%8>4*#(*  ,# &* #. #0P zZIENDB`DustRacing2D-2.0.5/data/images/sandAreaBig.png000066400000000000000000001264321360473665400210210ustar00rootroot00000000000000PNG  IHDR@]bKGD pHYs  tIME::;tEXtCommentCreated with GIMPW IDATxWeY'[k{w{w7rr%h$D=Жh қ 6?d{a-/?zjGZrPU0&/08(p7aQL͎C*a{I Os-,^sҾq'7O5u.}Dr L8$GaIuj1x; r`0xv?]< ?9ƆkwBpq| ^ũ*Yeod<,Hj& 5LZ!X }}K~,svcX^FxG!/=$K- 30yqM@ncMӰUT v\*x|')#n:yqΖNhma/;aS /8k\o%R3-;/L^蕜t?t{wN/w΢JwV_vN;Ksscm9.ܿ:$_pU:iPQxZ7; Y_aq}wx矔ШQp7'l*_+z+s4V8AY7 7VD<4 <:w5rUY"OBE\fnx|L/4p6MITq*ƪmܖ\x iԼ>D?H"Ak I/baB[‹&Ab笡 cag?[N87N.8uEo9:LmYc9ajLIv.wF:S7T#뜍\qm[v 8Neq\avD8YhN秜Ot#w™Yr8p> B߂K _Lyt??}:,)#=R~edJw?\}rU$g=7'G_z]"d)'^c q=ÈHB UHb$"Ksr়#) AD ؛P>PڝzEeULGe/ʪZTtIcW*ίNOLMEݖK=Q"e%ȊxV7'j_n'>= VRJ /͌[I2"bi4j̜8.|UX O2c߽O(k ble+iEfCRs1%VF!]du,)̞Gw|>k, j'ϕқnP濍{G2s8qw%mzAI!}ڀ5W ҇a$" =G]w7KQ1 +[?dUht@4=& nY f s [~H}'䷁c-K&6y̫"ro^T #3 :e4sCF [h=vNl8sm =?{S>iۙٲ}ٵ;2dl܆ll~.ZhXО]ߵQKˍ uǷlsm109 ֞ؓ#:Hkv[5ׯã51wus~/Ġ 8+bށٖd'N;WKN3(y!ca_-Ck,"bH{q_llۇ h|#,{HJ"{TJ.2SٕbĝtCN7âIQVt7 hiٷ)1y{jir#bfޘ+)geȲXyɜt,~im=瘥'·̍D?a-S-≯w$sa-*m4YL>\ͯ/ZvvN#Yk8MVP)o8={v? 9!@9w!>9?[4_v>lNl箐;-Һ!2,rvh׻X=;UvâU5]NͨHlq>^8 HgzOgn~=1Tf ܿF$Żt#  ǖ ӞLEv%u $W }Y.6(eU=\!eG1^txt;nCѩ|Mn]ymfZG;n w^s,_kߒ]F~KX\G8|Ȱ^}f\UOKm·E:۹L&Hdiw8*2C _z Ώ;/^~xr']hWF\,%$mxONOaq:=y|9sR8 0Oe.7_R6AF569{z&\c2+p$I'رeu7;},&;m!K =̶8P?Bc'#aw`FUZ|Dy$B/a0e# qeIڬ<=+;V^)[2YQ~N.6꺚eѲmun+ĞG-jL)35]rHzSb tD40F쀷&qyX%q+L!vkSLhQ"I>^ IF QSi! cXo"W@Ku&?\\`i7'NK}G`G!nKyT0 UeJ\N\]gn{Hd1^u`2\9#оm0_qQ- vɀX͝xokq7@-ݎk*sf6rMa?yx !#)Ձ5!} 0D~98`sBf7wcG蛼w+ȕ-Qya;s.u g=~M\fs-{lwɩ;wuo91o唗p0Vgҏ9#q}~+~O$Bqw{#!TxGV;&%=]X^NKbst%RԪ)[/|NdYiwe^!s; .֔ZWwTbTjF& ƈr{$&ʕᮤ-OX|nM$e(+\@N)k!.S<@gMRH{=Xwz=_?1{o|?{5XYѳO&ֲ66G7[L,+-7Xߓכox{̉g MN@]|6#"iRcX겥A;b|xTѣ&$ԖMo쭀F?q^<ǹڪKn5`F%τzZɨЈ=*r͋3sz櫜Kp\a[ y**>1rI7IϛQ8G)~OyfDC\:66Y(vY`r7Pzr1~kL?JuRֈ.~glri*TJXŠ3c |-F];"Ej!6i2ĸ XYq=GeElt4B!alT"f]5T)ګ"Pn?{HwOTe {Lw2q!Q Lر˼©gY[2w2ai{#gxȅxp lsbT\OS(OIa>+%!ٞc͈_Nu%{ 92XkUۍyړxmd~>(ð<$%mawTԩdEJĭGUSMbOgY8hF(̙Xg+XDѵC_l,G;Xj;~EDeI9S#(&HЩe^#' ~N3n}}q*t?:'U;rfe8nzĕ &f?2ń g[{'^ RJgkj@.'C/blFr(;,DQ:y۔EuSHp fYcm7k;,k++S䨓Q_"DuBÞΟ@`U/^t*>gg0AU'IE,3:A&p'E>qJQ;b5nDu̻%b1#};tC',:^WqUOze#{^<va_ ?C4wݚhRACI="7e=5ƄхoW<$Fe1vj^`Wwl[T2#evgs: I:nNɭM C4&v#3Z6I^yHpp'uܽ1ړ1|t0МM9Z2\ḑ {pn;ư" J~<ȋPԱ#X K.G%lM<\z[ZGx#Ǡ!~"߶qD.,C!IBӉeR* lT ٤UX LUܧE&|yj+ ssb'=* {DQp-:+lEzcUȥxqF~x֤fPS9ȶ8啄9\*cTriViANX 0=S'c>_֫*uw8KPc^gg*;bސXE`DŽ]ejd7FH:Lh "9"5Bdu ͽBMUչERƤ|ɪ]޽DǦvI!V-l$+!<괱<p(s eosm;<-ȃ qXĐ;u fsy$Q > Ѯ:.z"8 QW8rr{氠Qg<919X+VQ-`XLA#f8r]'$Ĝ="jKv$rԓ\X.SILB  ]:n=v]n˼py^e~..DjGEm,.bu$Xuܪڿ-{YI VGOfDyZ` ّ :OP̷3wpZ:8ܺmlNЮtaxvlj PV--<{2Ka).dԣK˽71 lAHHp/K} }׀u l/ 46L* RARł|t &k0(b ,1=>Yt2if yLl4f,)uEm$ʜC8q?%04꩸(/WCAV]g a 4)g繑&L's[=(Bud$fkcfhe CyM"8Z9hL*`qY++PIjyabGyCNGhX@.t:IM:kභ] dWoa3.PH̓}č.\UfKcsf /Rn SSPh8X=5˥1XEWaC{? z60g0W0 ;G0<*`qps3s5,8g7q0"]?=,Ţb zطqߞD՚P!IJNlM<%d=iR D|>&tTlʛe屹%or;6_0B'&M)F"8&̊$*ɻnHUu)e"uz*yUP|yvOmא u5ij8"a>ү[_SNC 8E-Fw 'CA73Zx\Wj9/gfMO?uo 5΢';8sL=cD[ʕtiW]^ U{VzTDGlYx~+=d%3$KiHwyФvKBد些=زyL07{z ELz =q!Pzu/ '0ݕ\v0Σ&-+8mD~w-km̈RɅVt+7ӂݏ)uzl+ðe21?UJA22gd;" `.bRq Abc(С,'0(0<&0en :>*2;n\Im%d~ !Oo< 4yTH4:n߁d> #CL^9 ө>z<`Bgp'дF y;{nx V [V< jAvj V#<|\l wς\Ӡ8~ )(IoA5<>x G&hy? !pҨC}3&1)2ךȏ"L3P|p $(c hGX.b,\oƱ[ص51\8\-7FtJ5R. '$"0 F>tK6]ʀ_'YCgtEWc{Ց2ځru)Jt: <ws(}7^%=-Ojˈ%.qU'*⼔UO{FʼHO=4Fܜ"L[i`H2B54gpt `W6!OCJiօCÓn?ު@%=K+ 녊)BsзZm7x%pAV5acI7ވ3fw[y}_PZ cb! CoM(a7r;f&K0=ڙ%Mƿ''E26`'p|c ?ӞC.O@ ԄtcJ>;Q@-cCy0>R: C i@  5ǁA sZp1mC1X5R&xpɏ` AjƠq|9zs^vguܡm{Q%fD41Lu)Ьbs!Mrl&7zzΓy<zB}1؞RьpwH2duAg3Z (.h']M:"ZyE,d*}1_7O/r!-$?Jh]3VYPg ڕ[bG;  o//Y90x<û;<)=8h"-kN7*/҄7"#p\ksG &`yH|&ptB]%:G1@,-agLqͬ!SՀHħPyCC/z 1Ub!xZ? 3}u0~8gB9oZ J! aX{<BdȖ@&'h[úogJo7v2sp`sp+`[nԡm@{Wց s8jCreOCWT4sIՆ*2(A<&r `؇9HoE>[!Ie\ @X;n9A܃!'/[@phC zm^\!wNA.v6vjH͋:( 8 V,nmx*PC.,+m3h ^ Y,1c*Tfcf A˷g?ƫDpgIW_]aecY. ^YbHPiEIHLK8H!^ϣ2 L j2T9xaI<_jB`{jI; Cp=h/@<˕!8}}! JGA Ɔ-:>A޳i0i 1zp1(y]:0o{`{6s`|7| Tnp֗27+i8taf"vmxM{SC XDV)ēW= `vxmCpQ\ \5j?0YPtKhFx%<ԁdpF P3 i큘wv,]=/\@D%>V]9 PdC7Iİߓ\O\yz{lNvu(҂HKL Xy"(˶lY0l Aމ%mz{:ꪮs|olCKg]r/2>%/(OWU599׎rh~O-M-[ƛ=}8tWǴf]Ymz]XQvIY=Q Tkڐ ?OV7D-T?%~eqT ]T;JEj آ5޼k,DB52BŚ0į꾧yO'9AV\XUٕVPKܓ}y|y(\|-XuHl)T\{_2"tp7hLf0X{s),ASuk{`Q[)3uQdyVSy!\LgS\(p>e{N?94u;jʰۥH*Sg'|M9U0z43<)k)7Ƅ.n'Jnhx'e/3$ !7ҳ<&"Ol#\E8S &aF@ƾqJs [9dps^I>礫C~"#+Iik~?=KwK=a6,h5,y.LԽ6^$@RIpǜ+1b%캸uP;1Np~&SmE Aw]D+"iqH’pgW.+ =wojYO#7-冤9[e-3"喳4RƦ,#r"~B+)iA4nMᶵW{h0uQћUJgO(>Դ}z/>z5+4I;\ ,oqsLk!dk!Ud8x9SVE` =Ӊo30,WedqZҰ 2=< H\eTfNT{QJqTVիX<Lz.z}!kJLypH.V8QtE\ YdZ"0K }*~/rӻ^v8WdBD|-\b6FVztiRؔjRXr~G^G:o7c8(6-ۏD?Ԓ*GVCS^O$ϥOˢ5$ִsuy"f:~G05d9@X7~+_W#K=(9Se+F*Ӆn < ϖ̀|(d^)0 /"5+9eNP=6Km|[6&61Y9Nҕ$g:GI ki|e?ڸFP[瓈 r?xy}K vmSHp1c@= S΋V X).5K!܏0/' rnܭaF[fI&#aDB;җ jR},YrUme%g: {+K(jXu,UgԂv(5;IW+"O̵#e4_iU?VAc늬o+{I&,e/V'dM0Qlyg'(h*i;Pv9ltZnE'YXD ;IUY. )Uc]1:XCR&gca΋л nmc:LGBB8go`OLjq IDAT{ QGHZ^֪3Űg|5kP| o^ˊ1cܿij#V~'ʳ Tűau3Ok0ƵB%=cPJsE^d>`Kzɋn|tvXjRp&ݠC*PX F,檗Zwgp[a {B'"X`OzbFzF ~[OBC`9tej# aōJD=W98GC:2.u&W('`5KTaܧ+X,В9HI;|Რ3V2}K&g"[[eyBԗz!56Ao}ہˡ47 db.(Й02(]D:.K~l&V?:Ƨi%MY?U {cnEM&*j6nV5vtչT.Ei\^r@x>6kMBcsm {983$XJ#3-9k-kKc:r!w43zVϾj;˼~9wx8p^X}bwDom:^[*)\\^NC-Z,T1EdW\/wt)k?iCXׅf3vBm2bNKq=qO'k2!swe,C,}+vVWEY9[D^P?$.-[(F(JA|Ǩ(am'; e,kN yXm"dmK&ǏSMVK̾bw! Ϻ֒)<󹵉~;4;,tu&kNn5]\P-:1;]ڷ%AF}5|odLU@;eceU !)"j<-At2aːXa$f{ć޳z"{ >pwJ ˺#Q_ %%0וyQH]K"2i\ǕG8Cݿ? 0+-37e>,j|Œ~ۮ.wSMo/p|n/ʁEn;]ޖM0Zg4 5>'Om*)ߗw/O/r1|`!(KI;Mb9{9N \ORs5^L|QOM!0YަӛW ;=^nY):MR [=|oryH^P_)rVS+>\g)9#F9ԇ}r!7LPATb-zF"{a* 6L-a!Yz8f b>,7%G: .ikS8QR{ƀzJs%'@8E3B6oF#qyDY%%G Ʊ>^ɊRD?d ,ǂ7'n+'V wg!_NQO{e=GC [~.b 2Tٍ6+U4 !*=-K2A&p~v 66RbϝJru^2'y|Xp8 lṨn',_Ϩ@JFԐfIQLh-A`mB7e|caOR&>}UՃloi_ Yڸ׈ƞJO?Xg R?QʖOᜫ2'Gy:{H;a}L~|UeQYx-&|݊[Xc qW3̞%Rcr1R|} Bx89מZ \eJ]Dkw bFneᲾqPvӮJ ':4uAdRI ;IN.|PϢrdjGBޕ57Yi+{8 ]"n`$Xu\EZnavTC;cN;vϰM:S'Bk\*{K^ vN@?%N:F>hIB1 #`aB3@ >I{t>m`hK8=<[,C4U.M,4"t)Q${iPDDq\EAXL^r+ N-#!ͅz㟟ɋ_*?́?몟UTE5P$&PHdҗii2ݗN7_3O䵿S. ?WěVD) EM64zTW C4w7V_?gFpt鋀8 ~Gh7Uy7{a _ 4u$.B2 6ҞRgptaq[5uc?!Ht Q>q>`{N(i`{ˆyJ !d6sų#>ZH_GAE$γ),ƄتDN):;gy(rZqI({>.ӨXsbqc]66UAsİqβłk]_ 'j35Uj3<1v+c +juƸyCP%4K&S>6jWhD,}gʒk %m2zę~rpQsnwjװ?[@{^A )+w{8 o' iX؋zm0`E_nWQ4|X_^#ta۴rn¶1vX>a>!*1~zQpJqgLui"w.V^7 . Ҫ<ӱ+==%/b\e(|mJ|9km~>x-+8#=s3 ) I.c]oZHCP]x9"+Yy^niY`Pb?+MYjKDznLKg,WpE= Ow)#/·q ڛȊq[8Uw*3|3H>ǒۑYmx7.H rswr]OK᳜p.8݋xT7^񛩏{()K w$?(<}/K.K'_Ԁڠwj Z[v_5N.R[灺[LB[9Gv{M{߶nchrLz,ӗCZ[D$%v*Ӏ8RG同9wqhh=F:4HQb/sWj+ЬUm%4^Z5Ђvc?Xb*ssE6˘l\S~B=Nnr[prJ#e=g1{ӁbVfǛ&`nֿ"RWQzorg.0؎Ehg+,N$Ƹ~pBfÏk#L>bdz2-'Ӹ??g!_9e kH/gCU[k!A``t~J:7WN|4˪&[Q*)%^ gg) g.l˒U},@VN)$nfv,M*c)֒J5!fa/zAGoX5 :3_sa+>)5dj)7^Ns~ӭ3Ff.LP.gk/9S\(UVph?:iͻ-ͦV3#dd/?- ']!^TJ(R 2i;=v83-ΰ~8R섳`[40F':$ '֮߅Gh0Nb;qFȩ)(9Gt@~Fǰ [ m7%}b'h .qnulk8x/V^@՜E& _8_H`fZ*[}REA=,3NYdc3p\l|ju"O{pbLz,0 ޸ҹB.M^ E udnjs ɩttJXQ&zGPڄorqٸ*}^jx ΣuDG,,H>/36/3׹؈v|uʯҷ>qwLgeF44δB[` +I/VD2%-qeL9We`FOtXLI5i&y2xF:]&z`E˺${vo<%:2+)agN+>sgNAXyY*FR"˙N^vR+S *nIݞ(^WL)f4>\fjJB32PWVS젼}۴mK_ٿ7d 7ӟFDsRWFv]4BǾB30S*T0G+VX#Vצ^H+Po|$jH֝?.ũ>p"O} LLUJMʯX3yt>k3S *:nEr}l .[uqDNQ]xL|[w)Y[jПȧaϡVvo;4,% L%h0p |k<+!7p)c%zO }<-b+2ut6vEQsL?X`rTQ:wۜ;\spr(pk%o - f5Jcx&kaDlud\2VLkEV΂ʗF8~WXj ,3>[E+< ȸZʗ}]y#oKki[lrm, ~* -Ak~C.I1+0F4zcĖ,m>tF53,u$<4L/Y dCJ^8n4?#vd~-ˑ,rʂD :c/E6G5 QihPϽ*8JBKZxmG$;g*F}r.s*+tS$D-.wQ ~ӦL,Lӕ23Rat[W@WmMP4]j#];Z%CU}N#9Arځ G9UfoJ,|BU|;/Zݒhb~Wx6)w7/]kݺ=ڶag)S_}HC5NحPJ_C̸M01rx˘tL.-xBȿW Qౠ92qO^i0g2V1%ZS& 23QiJ:2}T?-1{Cw>!q˴&}1,!GXZƬbky[~m*6s! !7:W^aMߺFokR uy䡅bm sf'cz^dt Ӹ<%1mc@3[K=*y}\5'M#JJYܢ0Պ3޵V;\\Mv#:QK O;n.`O+˧GIl~1RaBA9fv!:HMQƸElolxS?#aN܍ L}'℀e6qa&QMM ftzq`PhB"i/a?@;PftSCh8bW<[TpW=·t1ItdGSyyU/̛Satfi:G2U _M*<)~՚ّ.+E,koh[+wyG t4"G}ƋuWbvJiVGW|S]19\sS2Q<'A) }yqkG `Mc:S~U3= w IDAT9`ɻ&hS21\h5d}Dnfإ"x$f'1zO.PGu};zZK9Qc d!M885.[1*f,Aqmy W~uO}yL^,ǫIy{$B1#/[.=-;9#!3;Ht-/w?@TU, Ȗcxy8c:ֹfq>x=G84?ژ[K3ͅW$gQ:q-R9Ƅ;Bث>҅8b1, Ix_ r@N]%&qD.'y.Ut!kn%3۩Liv}sos7~wwgS!=LHIim5|jzKBП. bm]]@qxrPu.G%rdwwcGN+BʆHVۢYYKNܦzHF]6 ͥ=4n#^l7fqtq hȇ5W5%Zn ER Ǩػ9nJ_̬i]U",hWPI &L Xc'}<#.͑Pt;~cm.y5+AFcɯ08o5q3MgmZool`=&u8yd<$~ٔIKU";`ḿf]tZ-2,a븑 '8 e].dmv$6+O[4D&a/F^"s}Ɇuh~1}ZO~ VV6V#]š:>f0YĒ vEN/<.ᱭӎ:%O|PI8\=u?})Я}gؠd&9 '9[i&xj:s-&?"W(R(̼E"㷑I!s'SQrg7wLE=~<6g.6q\.bZcx3uݚj?D PAcI8\X+qa6 YqA|EX'R{|*ٔ5)$>INd[9.hF\XX n3p0q \/L(nƏ:L_˒^t*fxzrYk;O}>(\J=3ش^O'yuǡVmj ꣳ9)g%%+Vh>紕n7f;:0|I&{zԴ㮸]qaۡ/BR m*f6Ň!DGRpŠ=^R^Xu2P_y%f8lS+zF1>an&_`ɄOUns4:!*quO%G=,Ė9?E} 7nj5ZYV=\+9|r!܅⸚hjp@wOUT}wM|v&c1=IOq\NVqk_m|Cڵ ʓ,=OX?}oQTV}> #A)zhLp~ӿdCKfgX??}b%?v,ɋ,tqϘ64(+)yuP+cz1AfNf)֩JRʩK|r@3:`٢L!,'6qmdA;">7z'3p}-j;ךx&;3n K /SxcO500ܸ-aK"}IحH%$xIy"Ek$U$ԟo\H/Jy\(xGKHņYX5 3˾Z|4 \j6~hެM}:6isk귄<&MrjmYln7q9Y*Jfש/$Eu;tﱺ f0v1_ mFswN1J%n hQGKC%x=[ 졠P7BJ _LBeK"ѦP7GPn;^dgz.Zw4l7'/cΖ^J4fOfzIyڛd 긽{ Nמ&n>tY5({K-(bX(:_ g>fH(kQH0;fsAbqY%zwɱEl h,J=͜f정;%4~'ʥkX3=\j Gv|KO1w0M J ڜ_ĖD,U7w P>1pRi?FxTyY\LOypuw,3G"޼FN&gb adcw^N#c-s"ZX{U:~eJiFopZF8{ڊA$S'1c:1|gBml#{1GU*=xhihL(s*` Ë{/Y}z sYgֶ x<3JPѺ7aOYNQJgNg͟tr*- W PU173I0MfjPްFw+^?}Z%LpZOBJOOd K0!x ng"/\ odFB`){1'HǙ.wMvUٍ{6e|'Yb(!/_J`Ix^.fJxuڮG4_vM~OւyGZZ:hW V#'{ʝC.CkZX)&C] y{&>oz|"wCw.(Co/=/a nĶ\[DS1rgdz璕@kG mV\u,; cpQ(oȅK6dTY`+Ӿr]2iJ?Ez>%U9 PяhGlx;X\6f7+ H\M1؍K˿&Gn;E96 {ς6(a'|iUO?:cI48h_"|MqX=v>q U(ZZ'bcqZ$XaL6f;5ԟ!j\U39ҋ)B ;<X 鎮Q}79ao|B͏5ݻ$sGsmw &<[%o\u']/*pL(ʕ oP/]"-y3Ϫ4ePɜn2o6ahʔl',p1؍g:[\>sg縺QN.,OEtf7ZxDF(J%6@8+ìz)s*(q½4l|f]l}I4>g& -#:%+7*MaP{TBO(W#H 7y_Z bo9h ifi&)7ą=G,./H!!]|MUu5!r& ǂWBgbK{G^\Zyv˳|i1v iS{]~m(DQ}&o;EzXd9eP%9"1L;b%s|G_&p \ xf0yeLreNƒOs LIm~TRM$XUBĵN2٤?_ sT.mfs6#6Xݬ3ݢw/ysՋt+KbGm3="5ZG8+.4cr !/xc f/Ӥ^ailk\4E vQbtm4Υc*cWYRG(mIU1_7_t{PnU>'>Z/69 2F\Eڔ }27]{K. '蚁ujt.OS'A g3o P՘E5+ %xmAzmDdŘ8ijRLSQ#4H_7ʆEo֐~i65R6mvxk6gu@2}۹=8}q[V3``gT)yHZtMp&S2bǑ&dv=h.>%%^^+097)5:u4uJJ,5Tz:e /%z5߮ )"8-Wg"Wz*Ǡ3zP! ސT^ 1udGxM6f/&< [I-qw|Bk0.~eݰFȘASbmm=AE~D#W|%O3Q}>Rj@GLlq#A_|&6ZuQcb_S.-e ȜZғ(iKAw[;j(3@a辙"ٔdn@eK-(F'&RaýH;RY @%G&R-[yio:L+K͸) ܚ0qV24GI%D O# qVڡMs8@Eٖba+\b~H Vw0fr-2I~Ἕ#NɗP1 堜LX'ф娆ZkԘ˄/~=!zˑB+1%66RPofoj`+Bb>=:K&sl3WT'+ӖۙΕ#b,gH?S8[¡}Xs{#ey޿j65~Ln]TjEH>l,6sGr=F+<۴<7SËKi|Ka|E}\cn70[dt 3F]5s/cS}a|2/\ -R'l:v(ȯt:lihŚKo"uӝ\@ѡ 0fHsܴp=¬%27QiN7,d30eڌ8`: :mL&ŷ X9:vV{ c7&&Y+ƻT΄z* 42 Up~ɕ7ei@/7tu⑈sQOi7:qNm9~7.OǠ9b4Jtm?w-T$gdJ6FO+dKnnc$!J1&Q&FwHį *t,Q@xg8$JFku,M ѹ$sK cƪ8qֺp B7B$OxZԠ-qC 2f<ۋ=]iǾՔ8&Ӡ}m:+ ~bHݸV--_(:וm[=q/=[iEGbʹX_Ead!}+yGoGBcmKs,)2Ib^3e&hXƧIX3ĎHu#2x#vrO$V?Óeo8L4] %Wc^l\w NJt"-f{:F0"XdK:U Չ#)]OyqXɉ%4Ngk?ի!{綿T#j޽)~w,:}.e,޼4|$Z􊠅jU;3qJD4gv{LWG5k%X`pc7 |c~fXHL=L˜B7КUfbfkB#Gרf5C&rئ+1[rHݼD{K7ؖk&m/ #ûwL=yp< ;|mO)]MSƸfE l*RxBg:UfM27Vي8;/5Q2!}8"7ɬ (+c79M^K2t8tQֈP=dCb9e۰Q>l 6H-ahp훻; X(q-. >GLg sU6 W1,scT2)H?-gwzg>WNh7?d`7NN6 zTfn.SpD=TN6K&᜿G韠8],=Li?B+lD &ȍ\uSmC.G {F'2ͻZ:-WJVeiRr΂罈6n?g|9[퓯y3O8p2c9ZBhא]귨 ueWkJ|ÎIC􂕧C+1Š3-;Ks.# '':pSeLE^'XwT6^JfKi\o:%^#mK$8 8~UvpR)gV^lLi:rN}`´P;mv]5Shu'*K?`?gB3M(8~Z /ab,vwx1|"J;+sӈ1G&KǢ_Ґ!3Go֗sO!神!lrWDiL9b2HM}W:v`)\ ,gbHO.ܝq=#:O,+dk3ύߊB)4:QYfP;ls]k3XTZXKN"I00[)sX*T6JE\ J /udT+V.["Nك'bk)|Oؚ8hqe̗1ˊ#Cf5FVCxg+YWn|C3b0ydM* ږCS丌qf⭞`\꤂nlJN3RiZ@: ͻpeqJ S+Π2klk3ɼ~@~LD s8Bn&bq$)>w QHt3=$ӼRIsp/ɒ6ٵD̽կHf*1؄_Y]o7XfC}ˊP8%&JZ(v7h|;}c 6>3xen;eHh:l̏ '#f~K:">`pC ˠ8 ʫH7[WhYk̍w5͞glf;,]d\Wh|q=Ul5_eסҘ x̍tq c?K;71OyiԾL=u}w|lyϤ_hY.5*h]R-}S9MiGTi]\P+8>f_`3x~[-o~A֋%^xLغc\ &P/O[xL=$Y#$# on jqfDگqJ!~pGi-܃`Id> s7יK-fڷ?|[%ayeB)cz)~$ax'P4pO8eYr%%ie8@x)ds3lu EslH=;OYķ˜ ;(.<H"Go'6!W4˸ jOn̐\fVz0Nj\J$#.}aBTbf5:0DG6FY #gPwmƕ7L+|Pbҝr1-WӪpgYGL(-Dw<˜]p)3. =jOQ(^"myeKl9_,͇(9w5bcF& ' FI`²Gj8BIVM@R`]!7c;j; )`~zGRĶN2]ob.LCA&BL>u[4>Znbz&|lʝ:Q\~c՟Cr}}bƪ1j#=z8<:%hhJ?O{NӢ&$COyk# 3U.P,Rh?_DLhb.C+/G=l6E#Zs)WqA"ZjxU zm?"W$0NtHIe/pL3SQ2b%-'mVnn.KG5|H>e !iiˉ;T$KFk/{]F[_Gp0kGFj!Mlw2NQI=뿦U14HEc&VW11}quXa7&q⫺;(0ip‡ ă{v/'׉cq 5'wغy~a(5@c+R;v™*0fJ-WoQ>h# iPIDn&ͽE 1"K?URS\Ѽ=b&d~xF%Ţ`|sMteFrr VpDf,8f}t5}qI)zC-00ۆ́Usa898Lh43^ өwE*o B9s]vf^t)TҒn>D4J)A3(SnI6#Ǩ-LfF!V:)b>r?HiUӜ0xKSoxqDa_]s! !XȽb1lcu9{mjT8_]>2d 鈨BwMysf2#D35^?ruڵ.GyK+p@9|=[tށyt /cMDr3q^UAAE]f>I *SDtU14'Զn#CO?asZwl{oQ^㋩;,\/h&j.aMϑ?LoSXWL%(3'zvYc[$#81*1a?UT| 6 `&g0ebe&0jVjn_3$fC+>vH@3==AЌȧ~Ds2G HIF|urʷLs\=j/IzBIsZ?D4 ^{Q">^HŖ!l`hp>JqhzDCufD~u!w< WNpq:=o|`T㥙86-WkZT{;4,ڲ1Gm <0'xd̜wۘ]X\b׬S03Uq }^C\S8 zE|u6c+z7o[i>n|b# )LקkT(~.'"BPlIGt[}<-g!*cX[12L3za!@1CeۺΤφ$iDg=,~ > @F)m+mK&iQ _ژ+;sk*fv!~JgX}Q*c]r.Q_\q&&OalGQ!2+E1\ۉ^UXv0cS[>ڐ XHqmX}B[1-'~ŻƁh%ECCiF}^6ke#4/b)9PҠ"8N]\i4{ɍwP=>7u$I$6‘Ne0C19uɫk~Jv$6mɲFCWtd>YN7}ǙC$1J|ۅ>OЮo3c?#uqO !Fc4?*a8uʣ?-zS;`Zd62r$ѽ18%U)'p>e0&Arܠ]{yyiHaf MͲdTo'1\;磶YͶQXZ2{oIۭ/Lr#4/|LjJAlx`; /?bG0S6"4+\_ ~XGYRh~bg]ɇGOٖXk}a0ɭ&j+5J[5%w dya߁1,qNhd[P-Fc̚bCanyl3 M8?`np`ݎ29\%zJ]dqQP5- +oJւ,Q:W0C* ;xn86 1=R<pv6qWHo|CƠG:ROFߜR7hF b~_i)J/~ϴܤfh2Eq?k129(PZ^68t?D| ;nwx hf< /Jm2rDh, /Ldf~3'ZJ!,=~)42h FIDATU2a9j{ϗw1hg46iiQpd Ԏŋm$ ?y5<`ir<@\hM?}NRN )UpAE TH;f_n 1x|͑Yhu{8E˫)I6{wi# qfݢx㽈ɔd%4'mf0MuLeằq^CO&uNqMc;V`IK-٨25ͰX +UKIi?}=T˂i/ 2|z55e(>R*VXQp&LT?xu[vю LDg )PU5_ivϐ%I>ڽ"aK+9L;cO{|"7[=ѻW`dv+d7욫8e6G/#+Y|'Y-z"I!k7M,0R& mg@=En`AQʬ\wmqZ5$)k6IӮoZ߲iHr+/s)/.񣸑MWCe4(z29XCOo8*slڥP]z!w&I4>? f.Ϯt?/Le^z%F6y#F"cZkz%+,71wb삇a'qݯoPds%JeC%|]PKn.A< Nkۏeb{N2ϧdFsroE+לx)\Ko`"O YX{>ʟPooK&zMPyS.S}1QS&rBaAtaAu7#…J>?\^[¼9]ŪzGP`8#W,&]\׬7ifnߏ茇#*+ bx59"fŴr+h]ڱsGPM>ލֈxcyzTVI~ETFnqׅ%0cuI77YZZw.AC %>y v@Ưrwu)S3eD^.$r RPcuMkZ'B=DUBY>F@?sa C4J73m4 ]_Seػz>lơƥk +Mq>~y)Ф6>uS.+s5(dqV#P{i^w ru,lNY 7hkM ַ%:!/lدZ+u܏ôfL1i8Sf\ju/rp y½g;VG=wH? 3ԉ7ґ'-ĘUavxU #}U)b6tԌvEZsV.31D:<u7CE^ Ad!ӒK6*H&#‡cxk3<-$ܧS[XvNjT d23iJQ4ϫB +>5RW8a8BR'Tе67x3&q3/C"Jx[X5IENDB`DustRacing2D-2.0.5/data/images/sandAreaCurve.png000066400000000000000000000653401360473665400214040ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs  tIME! v:tEXtCommentCreated with GIMPW IDATxg,}vO9 H 2K$E,QLZ&-c%RMP *"3ͻwp熓9cO虞*d$hR?}Fr@"=R@l8 #'y>EzCIed/nĉ82!@j Q ^ y̒H<"F`tCr8YFMY N2CC8AHGOMnRr@p.X-H {ĉVy~bs x< RS ) 'D҆H&  }K4~;L(% tC b``^ր-AJb! 6C iV c!L$8G\@# 60xZK58X(~6Bo BhM :2 HWóFփH;$cĖ8,z@ndwZL4ж v @:B }|>)#'?$CN.мa]1M2 =GO(nB2>yf} bu -QMOc/?D;6-'2ï3™.=;ėoKqƸx9:Et:k ܤbrG .FܩtE=]ΗJr9LrwwE;78e01Ņynj\m?Mr\$r BN8sB6 sJ7lj1g2[ sg.G8fZe 9Lyoq~s gaNM.: 7hsSS%w ΑX.#⪖yԸɧtTw;\ ΋Wٗ91{I%iM[ekOS\$ip Ȅ5\Ap/s(g0u.pEuy*>xᘿU`Cv+we_a2={- ,Pm?s_4|_& ; \<յ=$Mufge!tv'ĸ.C$8B"&/DPK{צ ~xq6X!TD0xM n, z.0sI}MpUW=j1SP%ᐺ\ :cGiDTSM?bR=jR8֎WfX=gUԁfQWK=L*UʼnWd@SOWUuuuu8sj-uv;<*>RC o<wU= 9V iXȩq+j+EuzT(Gd9= a"_Y_s +YPI%9]vsN9<_ `: G(H >wV}Ik-'a_IJ[)qa,}-O<.?$Οix>""Y z I/"Xi@wnAޞAݻ<ກMbvSu7N'B-]Lx(hgY~ *[Ǹtg1qQMO< l{PjD40^XĦTv]Y)pUp~g<- F)8^[q>c4c{5ҏLRFCr:\";%#%}~"gxU*f217h ?}eto#jgh?;ul=[r{ 3?!p_cQ oYuٵY@^88)7Ct`zMy!g޴YU׫ꪳU.PAqS}+*nT-Wj;zY^S_sWs*QUz5ʵVxF2jXWjGP'rfxΰ{s\Vk-USx`W5:T'-Y-t}^{Iގ$>ړ;QRGm]kr1uQ9sKVY=T*v=&fTu?RK)˼Y)zʂlR(K+'oȁb~"Gn*ѸiCsl,ym22ho߱'9M:?_3n,']K'Kl-Ѯ7eW؃VS㪯g{J']}qESN#Rӿ.ȍ9=;dǻf&}rD Z01:p-o( ѭb~ AWM4՟JE8'OE]"z|[pC_ 4[xwv|Mw Ell7#GW,=0tC `e7$4Rw16+"Ë?b4 [4pR*f0ԆAgR։:a?ԆXqdK#,c$Ϡ[B}LOtOjSv.FVsA{;Ѕvk<G5 S!ɯ:7?=\'pR9Zq,K. * w=Umot9 2h/p ?A~H!b0cFyY,`j:t Hu{/q}˱`WI>tW'`/wx7I9'Kֈ<7zYm=:烠Ei/\M ~6|P(9S'pKWo݁:q]'Д0{φ Na:_q'%Gy}P9.t\Vmn26_33W(&ܦ7b/T;hrwy8\sEopNMNy-N}l;8!>W=QsmDZ3\z&9'itT q';x+\crvѵ׋9 q>B/^| 1kyYHsl6רxUFLix& ^3G/4ҴuJ՞Bai@cN Jj۾Nw}MۭtaC k4J};pLY;B#2=i:8qEKǘWi`dΐM/)\vjʒ8ڱKZьk=6nͯw&ICx$6_(3np(UfpAz{ s0V#FgY!JI44Iΐ<ϐ% ˎ=a2GolF ɮ"a[5[=E#3g_]NI&玲ិwtB?r1`F>xZm;b_q%,HmƢkhşvS6\>< "A}ެE6ӐMfZKȒL,Z & IdŒB C ?oHD&ϑ@ZBxSBkHt@"vAD ,XT͞yH4I]g0wHx0H|c[D^. *SdltN?fCH_&;F(9OaxnINe ;o9FJ7wӨ%8xﶽ?׵]KZMk`Y] Ȉ햿Uj.l7EusYojLt)V3_9ұt^U0*M 8:kG⽁ˎľ@. _CxwXq 9L.ꐘDIZ!^ٯd,4Oo Fx }2'CxC\_&V(BDSȖr4K$ޘ$e战J ;5K#5QUm-QD:oV;<3:?6>ƍ0gbu9w{_C(LI.;sL,Ww%}wS1u~&g%7-ˬ1{~t7OW1{n L<)AtH+xHhC0x+drzcbUW.ɇS3*xHY;Cq!qRͤG3 ɳs%CR޻HbM"($ҸD >&V uETU$L CE2&6;,)Ϸkc(GLKLqXrx'O#R &I 8'5-iN8LTK-5DRVgH?ˀ + Q*chhp Nҙq<^bMcN[kGצ|t`+U[mi=_[ZW[?GQ'Ѩ@UkwֹBkE{ˈyYbْ ||u աnFB-_d /\@eVV\IWOm IDATE֧ uvN0!>/haJ wW!5#$꿎ǖoaT0m4'q^U!oGB]&#a2@zR7,^CzM ƀ >\;{i qR&JpMpf+pD ,Z =m@z8DuI[kJ2&;[ ri8Q)娞|3::: z Vȼ 5Xmy^^mOkɺkmNeN+Zwڬuݶa)7z7k?0?+ __.?sopܒDOg|՛o`NVɖ ^K$9`/=ܺx!&!( H jߒa_\.Wz R>^a <^_Vq{+QJ1aͣɍyX<<&1=E6…8B $p._AcmwP16R{q E)CL:9Hj' ̜ꨤZ_v>xAw!oO:a CM{8R hk vŃaq1ӵiH[7+'Ohc,F4,q=ߑ~9Lo>~ܒgtOݳ#/4?sMݞaa<(NGTb)ұ.lt~1ګ,G%T96ShS43sX]D{=@pC{BAk(!Î!4pC6(E"h(U. lqypP>tA%b< Shh;RMNjv4~|} T,⊌B{Dn'Ogiidcn15cT U:8tj6L8zþu wa]w޵bW?iŖ6/8ْj_(sL yX;,[H\ cSDO-g'AUxdKG2[lR/1o0&)![׻1P`W B%D]UaW#5:C "Ctl/R3f`rfM-7GDe* :z18fvTO,8)$a~tB0$h E|t5$Ӯ!'ָ%e%6ݩN׊sbjE {H6ݓjsZUUFMfm%vw;n'QPt1T0V,?_V׬P.>@'37n$t9fYXV&'OQZop^Jvg7}LޝǯwM8;QGPGC>}vN}stbx 6 1ӍA6Ԋ`3X s&48*hK0oD |g`cف-G`fm;%Ɓ'k6z^At9Nm);L+8m7 TΜwgTrM~[ZfӪvu3\Hԕx7jykn<6+>0pei]{jgl _(W|)8G\C',b)Ce){KR6{Z t^ҵ3}aoLǁ׉8\#6>;?.LۧSHJw >8cm. 8 +1qp>7ܨXBC>e@lVjuAkڂQ6E NsC+l|f.D]pGL]kzhr`ZoA>H'(K92Hgbn]"نbF/I*mR®+R!jӐ?T ʵ\%\51 8@!0#إ ؼ#p~͏N 71p|3]dbӸ|!*@(=$}' k?BBP WPΡY#t'N7w@jwelXE[=_H9Ie C*_ {4~F3wၶ;jeRG3L53^mμS=yU9^ ۼ }L٤a*F 3~I4kW8V/_Ɉ}ɏ2顡'{dvTe4̪/*C~0Um3]#!#  B@ { m 2;>\X!@a6;.AhPipנ&߀]\AI/77л:"8'z? Ѽʵx1xȞqO8*8O2b]i2N}N[Zj\1; 5~֮lez͒:oO![.x(>@ S?xe7>&>ӭ=[8/1|Pn {F=\Mi ڻ~7}?0j=t4+sӎ_vc}U81t02|pnj37dB v|@QMu۵8 vaԝՆ9k{qc(2F`uOV d:]Xdi]L!t3*\[`T@@[` >5tJ ã\!"#Mt5/N`?Asb<c=tCpab$+.'7GO~oƺ)Gc[!a֡GFWu]AmpS?/4c7j:3̋fLk, 43sWc_2M31fJy }A 9ؖ(+tWKg"ܢ}Mev2iMɃ>Vi c]ۀ!u Q7/ǘCvk0:Uh.CFnhraiRњ 1NPF0)D98ZAVPWBi̻jFZo,r杦>4KMc`v97.ԥyj&jxz?75tL㭁#wrDF(f5wyy/9/oeߴ]d?M<0{!53ɢxh+c>ʭˣMG83A)ʙ0g$퍓an:f T/ Nh }߆z<dSX/&17q[e]L# lzhj#tX <)HEzpyC?]uX=-:^.TkjxǎDs-=R3̡Ƨ;-c< *XjZxZtxa*cVwN> ^g#29g? G_"2ESmfZyv^n'x_U]ޓʐd R'.Q=9%JJ2tWw-ઍ@hO ܃zzR""tpƂ@!R-* ҥ"n(ilvsT(nJ֥CUԃZ>QT{UITujԃr+͎u3~5qSi~d+w'=N_?/iw>Ov3 ]\)dqtF`j Ts?r# 5!Kenn7>y@!h3֑& `ZSId+-la֖X +e gPHY̥0:E4A6? A`J0Pd[=㴝2FM$`5Yʱv0QMH^ d*tᬖMzd-V^vf(gưip5g%G’<;k7 'ٯ88ݧ_7]^"y`ƜWf _xZ>8%TVeuDfZPnquG C^L'G>$ = \)4s=HCS.C.QƷg3'aCs02;A~Db:ZNsn&S!P^as4!UR|9NT=VY݈tN:l;3D&yZ:߸V_8jTƬ j&J}lO>_/-yb~a԰9`/w5A tUOLS rU0< ϓq!9_B9X7g9O޹ AF"05z4 c_nl`a `#Mij^x 6KX ًo1dL))9uxsڱV^ъ(jC[=wZnأk_\J_n٧K VhFq-عnģo /ch{[_4WO+lwx~c BdFy:ܼ:RGi5YzCzOѱ=lI613(ߙ7z0R:)m^4w;T#cX=R>_ 6L h0m mHݖ<:uΧ':Ai)i~b'K\;jӲ/udjا Um"2Y8#ed뛡 $|geyվkF]+.}0Ϣ,݋ HH#q={wWu.eD0>>wt n4#V~1cB܌U 'zU o1CT.IioŸ"A} r<kyp[.֐?$,Dؑ(TB7߼eD:FkAn0#)A<>v"C!ab /12cG+3FZpFWl=!!ן`:se^X{%ddBfW,0j]hϝvas3ʧWwTjHv} 룄-t3X[WPt?1uG0*A"eq+\aRxdނQ+Åpm?^²V{Cir+{4*{0Зܭ x"Bͥ.25%)ȽTi%'6f]n&JB\ƳSzDޑ駽~>6(|,e=>~ 4ǩ eWD"rb gM[}M5e)ER;Ej6}>Oh D"3x99LL o"ã| cl>1zڇmF mQُ-.ZQ=nK|ed#$ yik2Lr}ë.Iv@anF{I61/IRT$J8m虞?0fOK6.L5|m~p G큏H oV P^®D*wr/_.1Lѷ' A _c+j)VUY,?3ahI]U=@`?6˓[a5Q,vA$Pm#!8{P!/ >>"WǎSyhils:9o8tuԍXd' u l[T9ZFt3PA jMC_1>cĬw=+CmGB}/u~i%*j:;XvѾ$_Ʈ ?*vSP_/1M&ӛѦb^,Av18t;hP$i,HfdȵS h4Wj0V!LS0:`22vK0-Oܥ]"Hy 7<٫%d4=Ԟ 1 wmTK.׬N\kš:{[:gYGI漛Y?6iڧI?-eƿ\ڠ,+V؟:o'm~q* LYnb[(iPQFJ/Rt! tQ-$,,};~?/^DNN.,Ρ!> 2 U`i]!L2 v@9(hVwmxl5#v BMj8֖s뽎oluV_$&K*{ۊ>}'R0M<>'65?oݾ|K1Ѻ @3;@z C7:o `26 .u븝G:fFQ%qK>'я8Zk腓h}y<_-ӏEB}梌wGZBм9?b*ӳtuQuKԝ{(R=b3-)k~ 2~ھѼ~|틞zs":?m:⃔lPYLhc# QVi-(o3yg0hd&CVhԺDIRm+7^F04~ 8c"ޏ2*Xt0ǡ2cEH2R8.rDw-41 |;ny18Zkb~EI\y܉6U_I /4Bi9IWI:&#̩#Uk=sbW͟!?G#"ίݟ_em˷-aI[g^(gU+,>ʸ)]SY5*PRFEp3F +<׮S IDAT"RJb {KAnt_D<Ū:"_0˄V\{7O{=niȩuyyCc-bGr]GmvP[쮄Js,74ºlv:9?1b]ߌ_BBrWt)Y`.669|ƐƕX#U(iB|&+a|%;u#3Ta=ZEHlɨ` 'Ϡ. NH >z/ ձ8EbLvbګ_sŸW#2Y%iE_okUD%+]a:T0/6Vٞ28 WæZLCq_#+m QPCͿc#,3 cSYο<o/Jw1q@T O/qwXP=C"\N J ZMx!50SWv߇}`̗ 4Q z ;U o"F)2DP|ta.N ,Z^&n؜oW͡8)@/uzؖ]GjT)5ֺmUUzuSQ ]V# 65Fp_$\q^( >ŜNPz,%P=xH.e2H\+6hТRk";Z"Ưc;EJnCO2Ę!y?35M|=GtUͲ:5祸tRJUnT{/5g;ׇ+ޠʔ;fT-wb,Cs_hS~jǾLL&˳s*E(Qv3"n=A⽺qϲ\vYRbƢLBU{%PEh޲U>XF{FzLENbm}!؈ZAiwI*c-Ĕw};qjvP?Dj#%n7e-( 6a]ZV ɾ95HETYDLI)zChH9M~ȿYMx!Aa*.H|X$Y.ԝ]ObqWZ1#c$4 ҽ 'rܴ|={SQrc wڮ/O5oO |.(oʠM0nue<7M f-$7i1QTĵ'b[|9tARVۡ9aUb`Z;-u#_: a +ce_Z%iځ9^j&IΜ%85fnΡleفnˋsS]}lJ-wi Z;buQt52Ju˽k߹JX 4վCElh|.qz]BdaA yN-Ag2FήR)~F?S{H7أ&FZτ!?z?_BewC`[ԥaL 38V+Ņll TͫLJphVצMoS (d)ߎ [f`Ud]4v4S0g5,h}^o};HiL&3r,.?Ubg~Pav%ڣTn J 2Iׅq@TR O>T$H:hq^F#/B܈.B<)Id"ސqD٣JK񖹡4W۫R"5^ڍ6^NTQ'%Qm^rb_<1G0eEfH[fDZ;o-WI1ʹƮӹ՟٠ĩ R2㈚ rb ·Eš_#z(/0KB-aȤff/q،K#RMTՕ7BwkV\M[s_g? 3u*Lv .Y.JZEqR;'yqPʁil4u(H97PIE/CKHtb> g vb Ird#;㞥E=Yڱ8۩;cM%mNI/^Zr:ɗJ;j&Nt ޺#u@g"\}ͭ"n%cymy!4`{MD$ƴވy.-r// v+z5$>As x7!$ pXyZ]yĈ?}O wlc4nw[9KZ9NxGq }1<%,z :(npF)4ݡA480ߗ $i1j?`Vԍ,rQ$Q a:Rd &;pv a$"݁w]w;n*XP(NKFkZG튕UEGZ_5jm՝нoHD}]@cǙyU2,ظP3Bc\fo.IuK\779B[f1[ڈa:]Ύإ.r5C_!zAɑbkM9~wzk_kM*Tl4*nS8SRgHpzy.\q.yW~47鬙d!fܝ÷Pڢ7j 1n?l2LEyj)*[it10s">:7  z˞8췜M_>qASJ>nVƤ:pRr3͵mƕ'5Z̤3;v>Gs3#pfkL=5V \ "/oV-'bq';\EOhKS-R'O!h)'aCia[xv@uA=HY8=}[]+='Z3L/AmL5K9v5wGQN)BZ{)D8~QJe&^f1|݆`QX@]ޢ 5 ˙®vvf(MjO>R:&w}G$ #,>\:ISZz.G:-oeTfjWxF]_t_1turknk{|H't4ueM9X绡!}%8rb׍ >Ď* L_.oS!\9wDXSH?w%cV>GPՍaH6X]QMfLۉ NtV̱, n~@o\.R 5wi&DavAv=<,5iW̒Qu/hp#,uQfq:!Bl\B#Rh rDqI!;2 >N+۵4ZMx,yD2g׍Ǹz}DUxW??I=sIǙΜb9L/D "1T A޳Nq ;ƔUEe=J:0CYŷ`&Hv0H%KsŒóc+[={&◟oK/Kv-ʜiۆ4%yG"O24;kA&;ŵ,Gx"hjNd%EUL Fb\h4kEhxT,D/䇺v Q\O8=2'^RKb溯9&R-63նÿSnKj]=A ,b#5A?pqnhA_߇x)a5|;=P{.()Rq ;52#nd)'[|V?uy+\3.wש6g: nQRSZB m^Zk9}7QW?~s)> q~T?_:> 83P`c9lKBAcSGf+y|  !}a]-;eܜքBKw?Y~l^[lj޲#࡬5zw{k?a#<%4 ~Too[Qc]s(2odAv-vň ao7a'š6-+A6Bo"oU%m+r6*lg=ی=*B)huX;uBn Z;i֨v^Q|7DN$-   IɳWua=P1m0SdspSk[o< uX `Spob) Xϵ,ۙ.Nv`L=REB{[0'HyN"n=jA#9[gu̽Q됙/vK.6Nki銓whW|U f7r؏)J a7t f< #)<ĜS^V*3d`CT'%r ,_eW .hzB饴3 nwJJTIJ^ckwlģn]y 9 gPo|j\3cv[CA[$.2 r5M؍7švbC)jIS)$r֋$95ry_*C+rkx. YNHʄ*EI5>`6lW쭟'ƕo *!Z盀Ń.A蚉qlyGHeh|  Add^ 2魟(_٭՛I5'8nu{ XɩRWK]l^MJ}ŋӕuȗ#+$F7C@xX-W{97-Zvel N,Ƃ`c 7Ƒ*^tٝ>i֊S/˷]vIsEyOmqSPsAy,{gHGos"Љt>sM ߁04B69 5_kPmB0%-9e ;;ύ(be`.53Sܹ߯\"~TݳϒY4!=`!GS!w z_E]}<~jy&ﭑ{. 8um)ވwƏvC]G{'ޏ=F$:fe.屠wLu0% 7:+Ԝ@:"1}W'éR>&VNqbu%}&Z6wgNz)|6! 8irgQF+dE@`ҿYK"8GGJBN "r:2"_r ? N{VQsӯΫV9=޹˟{iEYg#"gy_q=kY&n0@>7!<~! (TR: $2hIq";ont[o=$K`81ڳ^}Ϛ*CDc}e{׹<#y'_9 \m y_Q) =sbX凗]_/N\ g[Ԙ;UE٘p;*XA7,SsO*^?GߊAEq8e>B EE *[.F>6~>B Sjo` 0^Eom[$"Le%.9K)%ԺVc3G{f{f[&~U}o%#-EeS/ϑ닞B6 HM\0 h m+K /tH;3{.`/ @K2 Z `xR͜PA]hkw6xDY D}7#0>ZUZн*N]ޘXwk|8M뻥e5NFP~{Qi?.3$^AA`m`qR@ǎws$Mwlzֲ4.Eg{F\VUigX͏J oJJ{ONoP E#=wL6:Kn^vAu.0`;uf͟V}$ܓ[P`' m˄׽1'[AA$Z~+pJ~~JL=Ix>Ot'lya\%*T=~fm2npdZQpqz3E#HprAt?B!n$"{y!a׾zD=:sEMK?19.ֶ$.Ҷ..?BQݐf'd+l˫JIs ;g MвGVQϫHϚ:f!)SgɟOnTaEaR &HկEW#D)#!0ct9_$v\wU׷}_ Eg~3/9508A  'bx{d-TN |xy^̗ۿ@'&Pu2L Cqo?{FEUIENDB`DustRacing2D-2.0.5/data/images/sandEditor.png000066400000000000000000000012231360473665400207430ustar00rootroot00000000000000PNG  IHDR?1bKGD pHYs  tIME:tEXtCommentCreated with GIMPWIDATxA 0Z KI[#`0 `0 `0 `0 `0 `0 0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0`0 `0 `0 `0 `0 `0  `0 `0 `0 `0 `0 `0\ OlIENDB`DustRacing2D-2.0.5/data/images/sandGrassCorner.png000066400000000000000000000023561360473665400217550ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<kIDATxNI@C?Ld $K;a%xPU.kzU'̕3zxnfL}36in&&nMY'>`.n leeGqs~ؤ}[X`]p) 6ǞOg~=ܳvl`s~.[ fܿ_?OGy_W73e|}NGߜ9M:-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&rd}WCIENDB`DustRacing2D-2.0.5/data/images/sandGrassCorner2.png000066400000000000000000000021051360473665400220270ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATxnRQ_SI5Zz8Y+!{>wqN03_~{=\|;pW53~[ g..w68 \?q?p㇕N3exo*-1~X0381p5 &\?le0~ؔaf/tJ&/f;r6<p x'gw~㇌w~㇔;Cns2~hiC =p.4IENDB`DustRacing2D-2.0.5/data/images/sandGrassCorner2Editor.png000066400000000000000000000015101360473665400231750ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYsu85tIMEU"uIDATxֱja1ϙ%6L%9 huaL$g_߭dScJpJ,?4CgV2c{~lX\`P3X 7~( CiJ`PCgd`Pr?`& @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{I*.IENDB`DustRacing2D-2.0.5/data/images/sandGrassCornerEditor.png000066400000000000000000000017371360473665400231260ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYsu85tIME)blIDATxێ0@eAHdTZJNФ]ƒ."79.n󧈅3*OXlFnqF<|;FЎl~  l3Is'(,1ٜ F cp?v"bCzX@q( ͇bC^hb's3,>] /2 =T4N*@}PX6+<G98XlX_ꇍO͹;_so]Oonmذ6z@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@K                     9~_xIENDB`DustRacing2D-2.0.5/data/images/sandGrassStraight.png000066400000000000000000000016721360473665400223120ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<7IDATxݱ @ A@* 2L-џy7@5-|l 0 œf@a 9 0 ,s@aaN L a} UgF`@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E6qIENDB`DustRacing2D-2.0.5/data/images/sandGrassStraightEditor.png000066400000000000000000000013521360473665400234540ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYsu85tIME+wIDATxݱ 9p"A ?S>bdx,p`  ,@'`y} mP%                                                        CAIENDB`DustRacing2D-2.0.5/data/images/settingsBack.png000066400000000000000000016116211360473665400213020ustar00rootroot00000000000000PNG  IHDRO7bKGD pHYs B(xtIME ,N IDATxv"IPU͞kZT I):!xdf&_ l /`" /`" /`" /" k0PM?1"g uɤKQП-\_bnj{TH[>Vtxmw -K>s>3`;'-1|Tvb @Bc1>`! MP<\ׅNn\~z6@}hذ|@ Cޫ+L}塌Uˇ׮[ Ue,maq 7|{ {b{O k w/]ku?|oAf)lbf>a8}kYH-b? Mzp0y6-WK~f*pmϯ?~exYv_kn8|fyrڶ_2Lv^_b`!oݻY+vj^~6C[z|Y)k#)Gή Y9^'zQZ%`3[okzp;nf;aZP|OH< Wݿ3z/1@TuqwLnc<]ͻ=j.:yW A.oq|w+ϋ053u+]/UOޜ~=g|NUaqX}!`w<}b5V>|W|Թw.׻5mt6] wתu`7,BIEjd 07RP_ږ'Ul!duSwZ/;V9'8oΜnٜ{Ӈf!;Uٰ~P@C x/,+'š*uw5!wF)]?ne[ f,mKb\岹-cTr[+e6OqN[H%^r՟W跅OBX N~6;'xT#iX.peC](3ylqR.a9O֯p=tY m5V.uv -yxwol>^VH_?|n0swػ=Rj왐_gwY;z,ݨepbTTiᢷۚW@ aInr*SVNE.kmqWWTZxڶ'N~`/x~-d?^_4 -B d Q܇P+pUWւۜ.0 5H. iHܵ`Xax+z۟}Vc+~o \||l97uAK1Ѹ~vJ-wT!d(YɒBYkv]Z۬RTJQsX< r'G~~Nuc pi]3`?^ŬɆ /$@-4bCBT)8HAq!Ϲ> \uV٬k}8_-|gpT,U |`>;>T{o{};Vk>5Y U1!1 -Ԯ[-e)/VZ)\KVΝ 2]|ZT{f3]~R?`>L^|h]1,1)$Ť`QF!h%$9=j*+΋.T ~P | >?,ܕ_B0̓e{v,,imnAq yfsio.TnV'.8ޙE닯3?e/>ek.8/ihA!$)F :kpp_9<5TQw(Ōx->U~-`Cni<ׄ}zUoVJYEofzc,cPR L*~kPB\kv(/^;TJZ p+ g=q]Oe*J O㫋jCS*6J!F!$6ӊ)å$.cp?{xh+Ur wp{ OGU 7K@"vc=>T녨6+AoT0}%d)N*\|{*5J{._9{vN_|c f_B2|K+i?zv]3kgZk[ po1Z~\9p` ur~mP)>y\ uQ 8[ xoNO/euzwlRZpzSRYTJIEoXz2סU{uSi-rC?:rnO{ ~+׿T-|e@l>_^aV6Jq#M#ڿ`mVA܇µ:x1u@>-P !P*a*|L䖏{bfﲍ&m$k%p 6w}[eVTJp8+/ʇrXطkeC O<SkV6n[\n}U\:}尻p8ն}0b: kh=V [}W נ{Iy8?wR|ѯo& ztG…8^jRJGk(;o|\ٛғv2 W9}Pt(/^\Ӫ1kWs'~։uNօ뜾~ѕd`sl>sUfN{k+1nF6S) s/uNo9hxaS91=QѻܾKpoY{|_^o#D[>Y.Q I[EE3yvB(l꺃\>vurY.ͪҧ9*[r+|z p]=_rV1)Yf2qeTTYס;Ki?׎gREeGol~rpۮ|N^Vď jp C|6;mF[Y R R$C;hlgO/+Å@ V8k|Oc JOJs_Q1FY d.yVΝSj{Ơr+Gq~m B7ȟ>ge++}r:0>_>5P]h&ɬ!FM!X c&ZT)f mr>@ؔs \gI“ycvfMc`Lu0_W{>>gm1(Vj5pfu{yk-/V={O;K{o`oRsn o oo}Zn [SJ=sQq61P8l.|picoy; [a0ۺMU<`xJ;s.nwÿ}+gNuxyV.eֶy==1-/U>x}7horƀ_1Se(l0B( mJqy8!vpX-=3Ot0O|1]Vɺc{v45S}ol-9׏4Y/nóje]m_3J5wy^}CbU~n_9*fB4ɳr~>{y֡VfL' -/ z|Ghrn-mv7{Mg{1\1> L^$3ϟqMNQUʾ[TO~pno jۇ~n0a0_ƣB_i,p.Ťd[[m$wC? {KսwU.8Y]{~о](~uw ?~Me~2O~m% vvAe_@"C [nX='>׆ǭϷv.YERZiFIA)3|}+eCk,e6W=ycskG}ny\w UۺPg^D_X0WVovJ |{}.Rvu]f䞕s'c]W^_-?#C1[;o\w1wRF!솶fMJ--r: |8wo}ڟ*'|QȫV#O5}}o[o-__xz rɐxY®>8Y0n3k蠜:yGe#g(ܵp _O} ]#0Uӧ~J~mk}kDCB8`QfR<)ƭL)JOEUw+V: `úP=pzz{y^Zo9k6TJkxg}uA縷w]^8~wׄħ~CT Z%|S&S6,)FfJko^>76фF |8 }.]o\ғ,(SJ[T\!U>mu:Nt{KU~֭5 onѰ_^P_ eEp=m]%fRJH1e*>=hrvy)$WݤU=|*0]< 0!|7.OJiM$eshM%-Zq |/WꧠEv?]W{n@p7a ;~νkז_93ؽHf6bvev˻r*ڻNSOapU4a0))qWfݦIk笜zg|AM `\ł { zU xT7ė*^5P,'KV=23 zLEON<Ar.mnZ4"x3.2ShĴc6=r*ZE)n6|fpS~_&Sho& +WB߸&HEr)cce4ؽ-|*c VcKB`IѢRJCh)dE*SAy_`woslJ)+mpy%V"7up|E68Mڄ'ŸncREŊJ?Hw}MZ;łG_s+Z7wW _Z!|b^| <;m&d!H?$%KʹV0X 2x&zm"DwkSs}O)ˡoJVm)rzy)sj|.6T`!F*תC2[\[EK)m67ŸUFIyٕ݃Eep7 i ?`a][wL1&)䝔++Z;Y/a/[# /6]0x%6*gp6%܇J94 nq*__N*[^ az\:W8iI?d$!uE98 a.Q 0pҹC夔S{HfڤFiU2WJ}wUڙxMZFq9O>B k[H!$)(SPJI108FLe_g IDAT{WRԹK ~EUpg nE 7Ƥjz~&"|n־qj;T}{;jׇ{" n\B0bEtIRR*μ*=L"vP7%%] ~W<8Z{rG&okzz\HwTU/ˮ ]cl4+6)RPTf CK5JC?D /!mվު}MuV)҅jy_Qu6=3-Z??9z~^0>2 ^&{ SLBR̢bJ?,( >H-ར=L*;kB /w y/y}s[('vY JR}ת~Z 3))|ߕ6JO9'&-wC?G \VCZ;ai+<+{Rjߣ*ߵx "WC w z<}s }/`|k3~oiEc,?vJɔ)D~ۿ Ny^ {Oי3^K 8ӨSat IUUu-e<뾼۷a6 q')V >'EIT;BS~* 7kH Zk_jvC*s |}횕w{0xX-u|uUڽ8(f QrWm6[ŸN:'9s 8'x}o_`|O^]~kndEy?G_.σݣx8;==;q[-Ov/#= X< L:aZ!hl bNpt8y>>,~ZkhA0>'`~VϥUQJ;v,}/y~j_*}{Ga𚇵*Yq`Qi+K;K*]}<]WԵ9:???)=WҟJOۭb}R;}u۵ym/-oZ@?Ee< CMXaݯeYRu]}ksK }Lkh|O xK ~R7uւNzO/-aί.kj_Z<nڑeGU_:B,!X)N`%K6<{I=`|Ox}S_JɔɢT_-P4+!Q~Zz6'#G .7I~fV-Z >ڬ׽x=B=j\ AAB&nVv1g:u OIu2)e[10{ ~]R@G|OT{eg}o;+9Z/%]d1ȼ6[m¦;u^1ή.3ApQ x+ 8??UVc;z׃ߺNJoS[@d֪y)Zb&$$q=f0A00n~x} r/"J+I ~Ov>MgB_;/vܰV|V{sO:LE.sk"}e -a~_s%6sk۷zt~h_PxS?3~෿/jK TC/n|rY[jEUi7ڙH$^t(FaSRJVzd"z8Z8&˙㪵  pN09qdSo&6UVJ(=RPq*~t;V=ͪ|/ >[<,+̤M\jV, O+YREʭeQ< ~MfӠ7,Ljs7~ SI):}ki ~3~'ozfnRVj[Jy}J 8'Ʃu[C x5XcCR[ɕ_\]WϮ< cy& 3IS0ni mpPQ)nNRTRNYjm x:#8 \ pç`n[+{c3~ ~ZʡAQY)mҟ)w|YcC%ۓ"5!fCσ` G.q[)bZ ]]iuurq͂_8S0 ~}R۷{r*Nh1jv[dQ坃[}+>&5Zp񲺟^G!D-\l[K]]Wr-%u}5p'wvy[_W---r?(BLzRzRڙbt)?߿HIk'~>U[mxwz5!))(%%SE}R:S)笔Н^9ZK|`y'*~OV3~dr/B[g+ڤnRbL+'#\[ rg62 ^v}kEt)XTQQ6Bبt,ՊN9^rX۷>n -1>^ni\RionsRSOOL)Bzy<}d{ڷp ny'k[!Fɥ"WP>!udR0jkUlTj ׄF!ldS')u]~ςzk5T֟TG{^m힃iJiNQrMdW÷-.$Wm7|1Rku%7)ysYjS'K}%0VO 7B (()e)(-JOSEի:_>|~ᨽM\z/^ii1ȭ}+~vT f+F%e/2>t|`Bv\k=_\j;C?L)Bz~~<-m%/_it[mCε{9zI)Օg}S)em%/}WmG_~-7ݛ1DžzWؤ` Q;Iw:_i Kl\o\5~c;r/ ~ҟzzK)b oٜߞR38gV|/mxֳ|lOZI`GScvuщM>{-uRiP\ٳ6q,IfE]g6B0\c°ZR+9OSzMVҵR6J?lۙ<u//Z4´jVF pojg5AX㫶<vW |mkz7|2(.,]J[m|I9K)^$\V:IAizm|w% k}4r)]{I{ݳ/m6IV1euoꗞaDDǃR_ƾ-7ݽ3#_+6&V-=)ƍBxYR'W~~_]}ЗgΧ`ڪ߾kf%o[𫬔ӟJmteu}ǫ|YTLη &Y <Y=ZAqbIR륓>u/YҡNʹ̮;B/ >7Z@| z(R\>-߾JU)ʕV)R2ں9ܼe-g_1]'cI 1t]I޷nomg> 63e]֡divJvPL/1)%)ǁē!p$u+Ǥn>'*>[~h kpmܵvϮnUJI!e^ վ{v}Y+s~g3}aht j&REp\ qˊ tF_h¦RLfQLQvۭm]]ϴ6uRe4xj`χ `ڪeWuK/ ])9o?OEls~ ~Wm=`[/` GcVʓKG*6qdIJ)RP|+YurJRVu]Ѳt$ɤj`Oɇ `RկksٳbbhKV)gهyǕ'U/N.JgS/؇ܽtd~<^qٜi+!^]V[@O⡥kvlj[h `AE YK f a*F*R~򒕳uR+zlVyC0yP P ǪY\1JE!xORJO]9?oYn7d힯{;KUa[l"x w?+^ !8ټ BעR1f?cBS k@AqIqǑ)(FSI mK !(}Rc5 j`C귟urZ睞R2X}~/,[`\E `ZMH KYQl:VT?6cx^ y|OC]-`TZ箞AO&i힙 7穀5\ gUYGqi;ZַyG>;^T[B% )v2myߟn ]BNu'D0/_CmUvQE*LnZ ts~ ~W/Rmn\!īAh|6k^kl-^qP?緟WϯquJ=^:c|j5t4IQEMEh%dALK?Vv<u̒RZ xͭ7+FSI_zz*%SYߟϭj}Q{ho;Lw~PB |vGYUKu;lkAx^ ^1HwZ <\ZlMT/V!07(Z5)Hv!b&nTZ\;u݋BxS}:"x?V)VkCyڥ'vRR[?3/Nܿz_Zc=Ւv]\ nH~ug Je:X+ƶxN.o26оo d^/Ɲb|I/^:)^K^%t,Y5mrU_枪Wr?(em6JOGOɔˬ?uV5RۍZvڀTڥO׵֦H!x'$9zgR qm !\=ւz}{~}7o}?~sGM@OיVZkЯӖV\ 6vm1OeemFђ,I ڴ Tg-J_o >-Q U늱{=KN)%uxo1Vto?t<;\}A~R{h5]8u wZ;=5bHCx^d}R}^lR|pcG^^6xk&(r.^.33y?13S>&q0 q:}BP)f':C5AԶ}E0ojT&_[N)bR][ ^U{gZ+_9k^-ߣ^Aʬr[d:nἬ@5BJ0smk߿㚯*4ѬƫA ^I\ϯ]tG^6Ѳ"?2a>kg\CPpܪ|M j(ZPK\k5.( :SQQTPjN&{,OH7D08\Ӫn,u:[K򾪷ڢڷh޴3/ps_cvmy{Cu2= gmo9z7}>\o.Nޥʬfo7?w'׺8ĺ6Y T`4>/xzZ8|wj/;JTַkYv!=62 ѱ`2Y .II!Ŵi΋r˝>j`w @ hkWI)M~׃_YRV51+'==/dnM_WÁ5վg=y}g_@A!oŀw%ܝC@wVq>X4P4:ծ᝴Ix_Z0񗏣H!,=Q:k8Oge>b@|z ⥵`P}+G?;zz;v}L*>$2 m6)jߑיs#^[HKԎDYYsVlg,|XsvVZH6эk̈!"2# 4 n6@إ4ɘ&ByB!6-.;C5y{%+j 0KnwdъyG L~{Q\~/]H!i-קYydwD0h݅D3?"{P[lJ$iR׋9ɧ%1\BJN/ᱴEZHPlBȍ_F-7ԦTTo)z!y1r^Yကb6.cHLJm%;h1GX/D>.ێgA2{WuIKzHcc?y,K*o}]lZ EȤ Pu$x 1f08/<8^+!sU)!Bq0!BE&p6uVPU5Vq||o滪f%Вޱ51ЉSy $mỌxH[ bmwI|R!,AC'0M}:2ٛ>S=kz9-.Mܦ0߶==iL4p쫺p{R}=ˆBE`%02IW0H W;NaL5He+h !BxB!d[˦c߀ZTd JI~yd8dgrC|_S~^i\>9]us"zBcJ猁䵶k,ĺ|ߒrWNBNsC}ZX&=˙0Ћ,Ǥ#[GM|;X[ؐ?6F ?n@UXPmm5` y&(B'NJ E,!BY( !BgS7?^SUea~'ϧ*@$x޵ydn~)~{ws·Kn!{^H痯-y<%87yuuХC>bW5^ B w72xD Qܼ/ZBbfїiಖ"IP]NJQEgW&`BS;"0P;ti|aHn I%0 !B.{@L!r۴|~]ojѻHRk}raKgByJj\nA4}En5UA@XmSoCi[l-tz?-ו2 erpL*PXA:IV-B^M%4!Bȥ+( !B2m\_U?HZ[ar1`:5q|ӝΆ-MJRkur;Xҷ-gn d;lKܥ<3;Kߔ5Qb gB'&B7v~ju4hQH aMGK?IsA]o4pO0SYn m NaԵC) >sB!B![>mc5GU| >b;ϠL[uPru^~&[~Tw:4?!.v3{ƙ+#Ѫ! xh\"\^fl:r7N7EХb-7`L;@t=hN.YX&B̹ `B!m[>YslSg"X#L&(9sˤ~%%S5ƌuJy$_߻9>XG~}C&7(Z @7Ox8KL oQ ^H+3UM &*2iAy =JRi`kaзm+h+Zb%xB!d&Bm-ǖU5|bj/pp'~-/S|l-}E/w׵u6+o]I"10 _B\xUX1|"8^$ҥ1 辦v$i!or5i`UMul!UY%4i$B2)D ꀦq1 "- !B.qB!jlʡ9}E)(N$z.Spl)}e}s>Ѽ1廱sf$ _c}d !^=CêAaP.%mB@imue0!o}27s \4Q}64vā*D,LeWHKXAeg¹6nB!uPB!mgdږ`>y|TD-7~S/y2.!}[;/?g<:[7h 8'wV+i/(| {zB>2:Uo.S5<.4? &q4@s[=} 0>]Kh 1T>ڣC+[B8&B)+ B<9Q*jYU8wãW]љіLHβx?<>۝6ZK`1-6o[M'>TI0T0H," + Est8o,dpގBLG5*!v7=ÖY x%xxUhc&X; +u@ !TI-BBYQUvD+( !r>& !r;$~Rny>dĢsM"S*}Gg_>L4kwyyfmclbJBk$ /!d*PEA@Q\%):HǖҡZ.c97`rnn ]M@T V i&p6QHMqM*M84mႿ`Kh  B!CL![6~.1Oa`wM7UgϋES@\5)Us:Y؍?!Ů#>f-6|MHFKdۯ1Y/'o9׈3uژ)_BȻ0`_mQKem|N|16"\:鱺S[wfQ CsdN۔GaK9=Z"ts\`- !r[&B < Ķq[>:X+)U8wãW}!ZyU^<[\AHwYeoךyywl&I_BhneRwK$k=&a6mQ>]39l,"݉Nhpblޙ !eT92X-NK5 IDAT!emp^h`rUk{,  i4}AðLI_E7?;QǖnWv >:i$E-() !r;&B ~s Xg104մ|,~38VGK.upϚn)3Yn]'}13/!BOd""Uy4p"0-vkZBIZĖ{4Gp.ߘ\`B!N* !~.Ӿ~-XWUMPb^ S3T2ye\klVZ3y]R71MR(ZxH"Z$=4mнFcɦYdu絵z֔"ε8ۈ@\"6)"ju.pZ\J`B!( !rfޯIf h$g8Y37]|&ס`_y5+"PhLĤto7w)kbf䴯I xJImA-B5!K9/-sTpYl}!#:t4_Ħ 5b `mlW3M 2] zE8B!@L!k67 ߔx zZbޯ~^3y+5rsT@Yzw}8%u$^6MI`ZB ߢMsuciBpip.pn P `@(v+?!BuB!אayRUz۷} L&q8<ځwmryiߵ-U61&%e6"*:5P'X؊kBnB {? 5TQB]hV{h`2"/[iuVRB]FL7 XB@B+bQ @Bp8pz"s-!JX+E Mi`QB^PB!q^g ߐ5 1& f35. xy߻^2K.To)~<1d~L0cL 2WEPU6&r"%S7Rd#`U/d}Kɐ?IvD1 l@S tlkD < |Ѷ@u۽'bX\-- !r&B5<->Ga `a>b:x×]g~5(%H:31ۥzWLk-Ӿr k2颸-S9 BkCSKsZB4pY[kZ .tӾ5tbLf&|+;q.pz 87Jiq@ L!0!Bߜ}2B kZs8 m .!`XHn4!$\IGBn@ZO?CѪCK\>Kǻuo>0bj~USש*X;:79H:&) !r&B;f;LyQJ30HpvrZm"~˖LѢ6Hq|_I)gkB%{{0@UGpMݽhX ]峈 1ro>aMX'ϣUxg0X;f1Gx >wɓ'u, ?b˗/Wt*ggx g5vwwq||8:>''+iKB(km2xXmLL>רsz)\ׯ l$,cB&a`*l!(kHv P xp+G B! `B!#JB՝-4_,ǘfLjZ_~{?^8 r=O>ţGp=<}əѯ;;;C۶ OOO!#<{ GG8<8NteB^2 \SCҾo}99Bs \ VЊ@LIX; 0G4CzQB!CL!w|.i/yxcc|vj/ɟZ"ENwK.Q\_B~#?H7JGtڶf޽ oϝL&h']=l8MӠm[sqttȻ8<<>vw_ի=iU*𮅆"Rݜ"X4W8CL\YSjrN 1]P 20j/kEvUê)+B'cO{7fF! 0!B2/ ߾s"!yyLU2yo)7nSdd]l-~K/\褯1YИ~|'Ə?r[&tŌ|{NOTƇ~#i~u]iXkX,0a1h۶{d2;;;x%} 7&d kᜃ$sO+D [C ihZsy|F狮B\&H\x1I!aک) k |㻹C lmE@ L!0!B%o Bha-Ҽ)fJqv#]8s~>Kӗү$s7/Dk-1_R?ħ}> ?+h5Ckf# f[k1Lpxxpvv}]<o^IYUk-O?~O~t_ Ǹ>^zm#TU`:lA'''<Fuj-`ww?]ۣ*hF5V]&]kuw.xa T=Ęt[B+D٫"/X;ڣiⱉs-bW~M$B!+B!om0[UUc}U=Ke^^|ޯ,yx+6z5&Ns_˵u۸{~>_| gc>CĄKt:E4xE~f)prrw*v c*9AӶN&Tq&x<} ;/^`K49ZP9YkDjlKLGQ*u-7qtB; 50@T F`Dk3@`M Yui$KXz_B! `B!AQ;)&j)]^?o<'el*PdoLDcmX kl׶lӟ?O>B.JNwm+TUG䤓u xlCu;wZa*/_˗y/wX,Ǹ yz"X][|t12ZJTDK ~>&0/ `SLG"εi[_<#B! `B!!."=-oa>d4@MJ/˲h[Jf"O __ElEhD m1byܽsyL_>b[m[zK嗘L&pΡkܿ?8,γG%4Mܮi1$_wϺ9E2P7DаDR-&~S`$'T|+"66RM=mƣۘKKG lgB!o `B!ˋ UOyCkm Sg88I//yT_r"M_ ڱҧ`aXk/_~LkEN>~w||i0bе@ /M%={xv^$qBn 8Ѹ>&ya.p8 8^șO4>7;@:XZN-_c;^j8xnB!*&BNv/Ccc0|ΝeQ]77?u/ޢ Xj5h *cc<|b= 8==B899pxxZ*Β]|Lk-s|8:<=&׶hO"XD/,i^L|@uvm;I֚O E/ޓ 8(ڣ|εKIu8J`B!( !rE K_$a U5|TNݫH!|%~?K+|9eGiRdU*ZXkS>2_WKn=GGG888ffq||]1իnzvvֹ(zAӶEUUݳgX*cjo9ܻ{'''8==6f,& hgw_C]"x\wW4.B嵦aaK=" :SAM:IXT@h: $` .5&BțB!6k*UoN|9 q|<)xx:~}Vs~%DIFQF: *lUQG<~?_U\sκ^77=y;Ǔ'On=ۿNNNf3<{ sNNNb.u įCC@PyCSh?ŷOo mFiܵf6p\/Aھ iiJƏ~0#x 8W6I`kL:A %0!B `B!ooU T=Q:X L&q=L&;>$iE^fEx>YTLVws'~Eo׈6Ц0կW?)gA9%'Owvvg uNk= IDATL&=gLByX9t#{S*km4M n[F`m*vwwͷٳN*kZMEhB&4CWӕ"8of|>rܵ//*-]c,`kM'ElJ*6#n[!6I`(e)$0!BB$a1;?l6K9'cKsZ?Ǣj/ -zI)mZ ۵z./03~ u?_5~_7 ޹_kSBw裏 "GѣG*"888kBÇK>!t G<$D*ppp|{m1L:Y\5& Nb:T!Β&[D:g=÷Oş3潦x\zLkLm9Ry[a<&:I,?b:X,}$9|7899P{{{Z `(CF$ ˃8<:W_xݳ>QL {mEp:ryYjҗ2v8r8;1KQؔbuh N4hFGeXRB!AL! rYpϿ|TEq%F[?o%HI>rC܍힥kϼ9#Qc#c6:7?o7_z٭e;&w?c? 8pN6¸9c8K❝>H2A|]Ëx%T=7|ӭc,hac:7hډB\ж-|7Sn{4u5Zkqִ0۳" . ! Δ.Sr3($;jW3槈5n&I_=H6 bS!j&B[B!pqk0QZA'~ R}]Lߋ_V& wu/8=k#0BsĄ1*/ͻ#o_R.-Eo)y཈uΥQsZkڒiM]Mux9<&wvvpppwж->裮t۶hw|7%.C)s{vvֹxH'JOx|?} wYj|O7M!$ɿ,mk)%ű3E2TBv$p^Z@%'pڣ>iQ{OC L!+B!x}kcgJqZlqԽy7CZ$=̖7]I濽I1)%lLOU(leQU66[~漟i׹LjY|wn'>>>{ۧm>4M~SbUŋ/pzz =1LP7 N {[Upm6(SSJa )ko]U 4m ׺% Pзu67 GeptQH`_c$p$%ETF l&p^Ѥvо-9XwRB!u&B.*^VCT3 O_tQT"f/&LS힑Ӽi=EӾac0餯B*VLʤ?$dٻu:b5R\'Jqȶ š>ú28 6v5y_c!&!11,T*4MM¹B!W0!BFWfR)Nw6boNJ+Ö*\׊aRJ+@50P י4;Prm>3~/Ç~x+͛d/Zlv4qH +{)DaoǶy|n1+fּI8?z^$R˯:%|)vvvprr}{oqzvd/_R\'{[R˯o=ApQBBY8'@[9hHbFpNĺ@Z,(L@Lg 웘nPH8 x\w{J`B!l{?_~oͲ `k>1bH RȔidŌta]XGN.KV[CqA+}KޏaU'W)/"_| Orx2ğ5mvuzz?O|ꫯppxI=z׶>%1pm "yw/?ؿEsBk48`>vu1B.% k c0%T%6|SJ` AMxvB!BL!o^U5|~G/>5i_]n3OœŜ_jR~ߨyw{,H[Smj{=o>ZcNi{ؾgimL6?(nGB{ӛulY ~ 5 RVw8{rlM%M}ZHM8M0Y>I~߇u]wnJgggNw^|bѽpxx7jC]1\Y epP"XyڦE6@H"I5ewbmoo{#n3b2L$nE DP X4H`& !r( ! ;&K->{no)Vwce=`ίBam[Y} LSw7P:s&ed:4 bQ 1L!E1NtvVƘN)!Ѷ*s0t$Ҷk5}bޮ9f3utk`IZgws[aKSn =|=kHJmڏN⠰6uQ1ڥM!EL:nXL~¹$.%&&BȅΫQB!7֢H>lf}ZХdCzNikpl #Inίs~_韮luwR޻w٬MRn[^n[ι{5Lg}rl#mq`6 "2h+, zi_NK K k86ǣB{?|tpE8<1WGܘl- y6gAel6ng;t-Ak?{o$q}3]uvܘ` @r-Ң()SDRǮVv%JZ]r%JIkѻa[v!;\QxA 0 @sU]]LGeFLuUuu{eO~*(FHW_7w|Q GQ7:9qJK)͊xw\-^mBq>UCu}} <<,pi0py>}v{, γ  V`p2ưW^ ?y:\FE4ˡJLQ :BmŸ C`  s@@`A`,+H$DlI$DZ_+DS(Kebun%; { nA*➭|$owJw.sV`7Z0>5EQ8_;ఉ]zEf_fiꀴ4]Kw\u0 n6h..ṹ9)0DYzBYn#sz=۷OQ!v[h\Ր$ @~߹4E8{Y!2{la#<*4ū.933Թ縃3q0 )BJh7=n`!,Jq As59 M[̴!]\zx`(Kze !p L_+F@`$D"m 9I$Dچt qI0ftF"}M/i*\{vA0 V]zEQoM}U]333HYoEh5CqХjZl]f[ Jgu >nJ)m]aj4{p#`R :twEVEOOOǎΝ;GFEWklߺ4uь1>}.0Ғ;F %%Μ;}/ҐÛ>*iA$$ѱjKnm2{rN)nSj(l Ŋ.pY*N%9I$D"]u7$D"m7]> 83 _*\r˅pqόq(f^{@ P)ҵܾwffy&ߵl(꠆a !8cA GLԺj(h_ҸQ>g!2{a} GWXd}k>4M] vKKKh`]ϟΝ;h @Ex7e> ^I=@m]fů >r3 ^53y+(6,0IC[ؾnTIa8Ep m$hD 0D"H`D"Ort:gc6/T+G)$\s8S{X/A}(MVrZ]lu iܿp - CDQ`Qo2AjtJc-a=< [M5oM@x-'&&oۮn0,Ie={N>4M1;;,LgfP#7Sj?04_]c f9n4 U@rLcdD"H$z6ڒ&t;ho:>9/^q2 BC;>a޽Kw)RZk(r5w `Z"}' sUƾcxyB[ \h ]sXsNLOO( \{Q7vh4h<33;v "isa~aY(B-01Q-k /#GqӤKVY觙s+V K?ؖ[nVn /0`&83Z{ 0D"H`D".}^nE~9ҀspfCc ,D@i뤛nGC|FSׂqMDZgpvH8ϱa1hUxxSֿk@xQѫZ |{áCt:WΟ?Y!eΟ?$Ih`pHEk^¨3RJȑ#8uju:45YA)96ivKn1Ǻ \?fjsu,ǎ /2 0D"H]I$D45$I I :7@sEׯmlΝ[½טi3B N!{ߋ?oϾZ{!)<71DnUY8Ge(q}A9(r8 C!\L ]"(P?Cb ǹs,!l1Z `^MTJ0DgY8]=a/HNYez(0;;;wNH()J,~ IDAT[ǁ`8{<~iKAeY"MSRElLBBI5}p x϶r 3jsllKDFD"H$*DD"H-_cr5 /ߏt¸| /rDž=CAAKΝ;Ǐ}#صkצܗ }G^ ]|`.yQ8b!N$I!>̺I)=e9,z,BDQ쵍F,fwKos~,׼&sȲܠS@\ 0\$ :8RV!ɓt:ػw/NMOO9:\Y ֥˷.txQJ'x;ͺt9 H$DZH$/CZ;M$틊}|oAw .WU&yؽ$qM_S`B S]{0~~?Hu)з |-0]~:d@m_8cLs$jn{__\=iV1=eny^ M3\yYOHI# M jq %h44uZu45454uxYjpO$.*zΝx饗9 @Ȳ ΝCQ.:2]' sGS*s?<I$eAXZp` $ gX#k!/^Z27%L"H$;&H$ikj}oBX+E7 n%~~vڸg(aAqϗ?S?wMq,],] B4:m UU4EǨmq^@)%ڹsG?s{-}0DS-1ɉ&'[رs-LL40c;Zl! ĕE\[x} s ^V;wN` jvΝ߷w$zG\rY笅x,EQ2P{fpRCK`f&m͡jiGpkpطoZPD:{t`_FZu\u.>|o WyYοk^ ~RJy>ZejJCֺWZ<*"CvXv!Dcn~1EQX¹LW0cb(pQ>z# :d55\shAquֽjp{4sEQ 9J^'|߁4^R*dY2/!b%=OIZv>2B Х?[֮_R 0 3p  @ CAM`x A`D"H$.' )8k_!Iq, B{Yuqݶ15 ub0pjEO>>rO9fff9}ջ}KSs-WZ(pmBG{`ێ}X9x}C֍$[_D=(J]2B|Ԧ9k#)EJ8V*0qSد!* L A Iq~A֎mk]n:v-ڭn7 =- ]Ug@΢(1m_+( 8pCǫn[nC""Ae e~sw4}>W+)%4EY豹T[`͈۫ lڞ3S$Vӹ5`̤(4f<#(PJ8f%(K PI$D2"L"H$&|0APuښr#$zK{Ay@qwY35j2{G%u!mɣj/,8\k: Wv-"B_k۱ |jlZ%o$AZV^^z9zKKۢpQA]-^\m7Mo;n:?( /}ij]}=-朣,Kca9x([+hC^s~⡋sP<77NhY6% x_x>REOYHdžkK)ݸٵgll$ ޼C` Šp C`T"JR#~-`&H$i+0D"Hҁ $_/HI$I(fΣ/ /1H\;*ٽ1p0WqS1"'*߿ᄀ Er@_Yn_we>V#y#s@B ;wΝ;&KK--mߣ(B0xA8QՆ_ŷ0ǍFƍfS qf ``ߥ˂ pJ0tn !|/v]{ v=]a Wkre`2ʲ9m|>苍lz6\fsd<#G9كSNp~f^o#ؾ>~t=]ܾ޷|.5UW)]VBۂ;X0ק nAiqA p(i۱zC%-e K^loY7'L"H$`D"6_k/;  7bȲEt3Iw D>J@ A/Ҁ_!C  MMMS>cE\q]i!&8fQ:]olh+9l(gg;9Enq9o~ 5>lu~仃p#`{9$+EDWa}wrx艉 ܹ 0ĵ^߿p1ϝ= )%(BAlOUU{ i~?mz=j,KY YJ6 ar70EBo݅!0311&_qpME߁XeY"MK2Xݢ(Q&H$iJ>KD"Hs0}J< #DCQ,bqq6%&5#cq k1 x ! ^た]|=8FPQ8{,$ {n~a3c~nK.,aהsFǘv4p>ʍ5S~#6 ؤ(7w E-'=L7 (Ơ Lbp ;jC*HYJx _H$Dڸ rH$9+! e!`$0FP=,,qMwW gŠA (Q!n$j5?O~hZsye(ºx QV>Ku^׭HeYszz8Po4Шב,x>j t?M)\00Dp8>_wuXW]E}Mu5ǹ}7h(\_\Iҫ1/?+DD_^j⡕R8x A)h4vQױdYytsc}m2O>$LJ,J=@JʔCP Jr *oW瘙<Z~qU;@Wj`pw_QWc_/! 2Q$䤫h4Pn^Ũn( 8cF9}y y{n;y+nzF+jE lm,$z}ё.z}GD {KK⡕Rh4uz=A)̠`jj J)?~E/zv?c{aa>> E )4EY䐒LfRǦaP$Vm)2cs3X38J,ː@W@J A(&H$i̟H$/Z J0azaȠxiw1hKw{ \hX|fg&,ЀNA!w4Zx+-o0( ?:&V~ah4nW5}m#~Ǯwnz >r?|zEQ si:6OE8pZcj_X@e|FV:fq#2Qّ~ܳߥ΃LIᮻomx׻nŮ]kaHg -}M]0QҌ1A(\@00\V'FsssRb׮]XXX $`xq!y׭Rs|_F,G E :ڍ͗`{fv e,3@\p㡙PYVAȝxI$D hH$/,?uK ݤ`o7V/D>kq gs'o/k|& ~/+31coYyz9爽:q[xڰ))%^y8x?'EL+ߵB_jsȳ \_ wRZ a:_oNg O<<}(z)zEo}poqpA+)@-In111($ 0Deȳ \mERKr]+@?]1XH8p=:*w߁օGau+( e dkRk .%ڏ ,KLLL8!8'N s!Ƃ~@0s_%}Y|[Q#szh y^;AЛ\`? Jg@Yb:<`y[W)!pQiZ %B`H$ED"H _]ׇ+ @3@ )dvfFG@J?g` ]|^3@;ھUa'O}V<[wkY\DeCπv-h܋.Ex=yes1?._8ϑF&'&gZ-j5:t9S: q gϜrǁu)fi:T=!DZsG?u0KV~[܅{}vXl `VCa0s[̭}` 럀-Z nZG^GVC@A|蛄)%ʢp.V>fxwrDHIJ0u`Ë|9ֲiBt)pGcjs2!:#q^O 0q,+ D)P( `%0D"HrAD"Hq^)+_ IB҈ yrw n*k|6=Ư/ꫯe=j6Y\D.4A8>NOWw[vo e逈uQILLNjaؽ{^gΜAAٳgm 4g A9 X(෇cS?dH~m܉{(m j\eY:4v}]xh_V Y$К>FC;v "]komcxcAO:w_a!RʑжWu o8'p)K}/M%`,وA]12t)G^&H$i3wH$&ׂ`* $SHQK. N>D=p^\ o~B\s ~W~+Y k5[%`j¿~-[OB_w/?gy׊9msI)!@EhZA8pJ),,, ",--9hbmb1]/0tWj?_;ICx>wb{^ #؂a ۳ssXvBcLG[hOo> Ν;G r=MS@Hh)Vo;md܌啭 qrv6H![ʑ y^zWGBiMD"H",mD"6Wߗ2c҃! ׯVAUJ e/w \n:o}k5|[k=|E?KQ8{,N81 ~gΟ<_.ֹCډbA0B` .v:Kמ_'xGp̛Z;xQ $Ih4Pjw^:I$I~ 蒉jg5)jcnmdHUlO?2u<˦E< _xO<zڅZ<׎TcsUA7,>ᜣ4@J!2ҵ燲<4Mk׮v[Oغ9[j\̾ljrR ;P7p 9Gu8ĕv_k7bAm'd9Jt-_c_`޼Sp[37 )K%흳u$qG"H$銏!L"H$jb} HC@$BFʲd/-5[M_~}Ə|fG?#_E옚e@*lXXX@aj@JsD^W[r\ו74w'^:yscG+R)!jnl6159nA#ISNm4M5 8Iql~~>GMU|o=;P'GskpѾ,K=z_: B(1Zp&s]Z24MNJX/N0 CW5}˞착f J!MSy)JӯHh);lB g: JijG0.XC)0hnܼBD(K,+d4Nҹ~ L"H$&& H$O嗟47j[- °8 J_8U1έ[DF_@PPB}Q47ߌ_gz+E=/\f;N Eܸ;.7f/$)%{5|oŃ>^/m`ff/|׿e=K_ ӨjqΞ;ꍆsk- 3EhݑUkWuup{qiHob_[GG"B|܎|x;n|y؍*ζuu !\Z¾S6sJ<}kY=0(]<03; >h`qqsLMM!s7&PJj$ GрJJ,..` [l!6h4އ8~85H~$A)*aq/\)]0i.xQ o}6 4SDnyiR8hU^ `)s@0Q$R](FLEeKsCD"(D"H &g/  @bD2(^`sf௎4_߱Ϝ Y/?s biǎ7kb޽Ws\qJ-܋cF MuW?^z9~GHp˭׺.Uc)cٳ{AvRǸkk.sWC"]^?{q_?BLasn^>>CۛHƏ}^a;F"e/;F^4t  ]8v{>:Z60Doi EQ ECY,!@eHX!6~eYb](Y# CH)]fs/U;Mv-ĉLJ ogq5JYjA)HU @q n҆:K._yb`-fi073an03c:Nz Esg^{EAH$DD"H+W+$IQyYzԪV^ᯉZ.!L-@ Bnl[oZCE.֋ n_?SE= ]vC=C(l4{nڵ˹0D8q;n<ϑe7q߽Y A:U\=1}9 ϾG9,/n$I4<2⟛Aa#?8<ߑR:{-s , ]3X)]'^_5j ,%(BAE9y" %^ xl,كE^45B '0 q./!|\Ye)6AJYjCA0=gq< u`fNe㡥{,+غ|0D"HrH5I$DRZ ҃+AFBst:'%셛ee׌?1g7@n @ .κ7p-7_1.y E=[qڕR[$lG?R~_#xO#734]^}LV={o^mZ- OYȳ \!cm;,Mm..\?S稃"m8EQ{}~=w86Ec%w[ a^ [9sz=uT xG07އF+B@/㠥 hװ_~ J(K$q OS=\%0D$s Di~fZMj ȝC|n7fwuj:?v\0^%0<)16|Ki1΃8n3/L ̟}!f`(0(g:Yqa oFN`D"60D"HoVe%SB!'DQH=31Tk&srWr0axLz{ލ{s ~{y97FV[kYrڛm~cGֳ8wnnӵ.uM=Ӌs1Z @VC6@b#p5:rvrZ=Y6xW/~G( q5ƶQQ9EBUI Xb@0yȂ,nQzfaT I IE8E|fW_ރs8v+zvm u lp]`R۫Koa*=qpRIK=xi 0D"HEI$DzSUN}篁2coL!I"DC-4Mثw^$P_W_wZ ,L  o6~~fM60nN_6y@eP `6}8l JIU'0#&$D".H$t q–v r9ðZ-Fe+~3YzWsw`X00 A"AO>||[ĉ>}I; k}-KSݣ6mvUW+ܨjƫ[mj5muq$I099,z~~y# - @3/0vaa1S'G'ҦuzM\uծ xT>/ l?!Dq ((nk5v8GQ2V,Kh߰<|0nFȦ1F'V wq;0±cǶku.b+NqdXE#H荰WZVGC`\̤)Hp5V eL !R0)s@1p@J 0D"HGI$D8p0WB QtN=*ߋsU?Fzs5ޯ|8#k IDAT@&zn6<]ׯίuTm6kk3jJڽg7eh7} QJtjePJ98C䶊 Xa.TO/A' ҖPxg_*}V`cN`[؇@0 .ΰ Xp,ur[0nQC( DQV%VR >.ūĭފ3gb~~~[) Ti#Tf¹t xgqFBt_g=0uzbJGB3n| PP pPAJe"uW&H$J0D"H}r>R{(IJ5"2rϪRҊby2B,ݦOϴi{ l L}lh,0nflxA6X-[&c[Vi)=2oyoxK2"+Kʪs2*22{/Ӫ_ ēHAnE:#~]/<O5 _[ʐevW B[j5ϿK=_@>_Q‘q[4gW=tz{tl !1&=Z6Ϝ9Elll`iiil}Yg{}ՙ0 ѿ{ sϝ?|SCǏs5o,ۗOo&<Xʳ ,!ȳ (y$CpdZ<%ZoCVӧN 屚[,3Gl YB |BPSu+.RP:)mwb-L(٪ esRpyA0@ {I9SHi$I(|v?Ìy}hl5k6g"4`B`,>ϙ8P/~+wW\:ӧO"M9w?J*2xJjR-.w`}} w}+T $nCJzwEDcm-1~mjZg?IdY bm?^/EG٪mS T K)e;"x'GE(B}Шב)m$q4M$ .ZJ)Cv1(,O|%%=n 疱:J.2dS3ö5c)%\ퟭ~f0`lcٕb2~+h}i?X"" @y@ \* St+6@61☣,;hmqۉaYLu {˹Or! )ptޯQGa8y_eoDׯ&q<@WoAr,9G긚Wz~ }mn&N @I`vv,fF6Ё_'ɓi hGk=F5t 7vY*m#wWjOGO᪫1??Eu17(f=ն]GZP LUj$lt-$q !:YR, 86|9PX[\ø۱i @X0xyJ3Υ%\2–+SPʮ'|Ŕ"F3@p'z㐩 ruVko͈&a@0@ U9_ F4G(qvf}h" vCZ۸e\> ciwL1MS/~A;9Ào 8Cq fƾkk-|=#McO=ݜD$@EU/Fuů3G򼠁0VxE|կ=&ە-tեN9?}{YΝC0tEVsDȲ Q! C,>21vNrqĉ[QSO 4 RI(^ 2㑂zR:քWd9o[ I`CzV s%8 1;~r繘koZ ,DpA0@ #_@1M* D4B(ln1 '~7K]`L#ڒAq wwqm.}{^gs~χ 0;;>,Oh!L!$ @tA&@mg^PubE`BKyn|i o9FeN ^mke3Y,K|<5!r-|[h(8QհտR" CDq(rUgJOmrI3^uNvX__yhJYW{PI}2ÑPe"r&mm܌5as(3Ag@ pPB+c#0Nx,@ @ \2.VkK1 x IF@,mu %U^"/v&Հ-݈98AUcڂo ow+f< ]+c׳I<1Qg VW6}zՉ&#@eȋsyn2Ν"c@ q)w:44gOKHk ?\wۜ9$`f\ XX%K|#m爣ȑK)$ BCP !%5 R IaO !`.e<5ˍjIR";`[7WD_F 0JBPSUAJP<$@0@  U&-!9: $4$D1d:[%ݐ_^WyvD=_6Yܔ\+y7tm6&PLr>x x;߉Wy=GQG2εZ30Mڶc}/}wV7bq٪29p 8|0SZhN><E@W:s(JXc>/}q>5?7fWbsGι5n ` Ȳl|`z_%l`QlB)8h.c=" ,K=M5(T)!jtMxjm]EYɾ3c:nDY)=_"/?Qު}g.d^(;n_6X%4 ` ~j|}ww_ !F)g\ՠBs6XZZBF^[@pc+GƥTOV:>!"\1]dW kۣ;@CEQh'yFS}5pBEӁ&dYYCKYJ쪫}t^ǏI3ޏۜ5 5 |u4+s0}<HpY\}gKn^FKiBJ겵f^czjjm:43gi!vVW[CA$Io<6rN8J }~m7*Qu,I^%^o`CjꏪosKx}X>_ 9"S t_5$ @a{~l1@>&xԜo~VJ,^9Q) [hCE`zj z5\MUkfjxKO=ujVy3ynH^MJ. X#" wRR)p\((@1kRI۬hiJb]9+MA6@ \@ \(GJPZ  8P@ksIo~_eڔ{šJ焱 7{U1p&C=;~w?C{F|SFQ9Mhj3S)6o@Cݿ ǎرy/)Q9(@{ b!ܳ1s_ʷq1775r~mZ!}Kh6e5+|l54E$X[[Y eˊ?W$}Rؿu]W?>Vs! D)K+ʐW ؿD_.󀽒Ռ!dmPJ̑F$9Ӫӹ\ CfȜ%)@ K4w#@ Ϣݗ/|sRRZ@aZ oZQh׃r eG{ {k 3>SO/ƛDmIBm(vН(G!VzU%'-9er33Ӹ;pvi +cSG},̒횦JW(D_w;L95> N-,6D2onXL@)J$<`eR@[KC@ v@ \e$^9B!Daȳ.)wak K%_̦9%ϡU3DQ>F_9~M?__F5ߕeUW]T|? e֕_C&>ܩ]mgWo<:^ml͇ 1114M@3ưUy,ڒ .} ޏ (…'_O^tqI,Ib曯["iZXgf;KFYq>t:B`ل,K𵖴jD.0m9cGkq򱓚yoˆyD_AhenWį0(H;q^ X3 e)XAKYA@0@ …2+uĵ:zX?',; Gd__ IDAT,8?5%1tSfC4%/㦛nܓ SZjjz^'{ z]eT{k PJ @"p}xKo#&P襥%u΢kܪҷ:ɎnwzxD \$dY&>GZKpdž/-uBp[B5EQ!2l}KM݆I@JXo#}}^z=55;|1ϜxXB3s,r@!J`L'J<9 Swkhea6q :WLhg \CqYy _" @x{DpU.+DA$@ ͖ Q~r/'vKD>E/8w_.8p|_9S?_zg׭~}{g %/hmTv{,`GeSl@a0[Ϟ÷Ծx_Ϝ4"-Bdƅf, juY,hp)>{z-dʟsMþ' MU.Q4( , ye< Wpg&0M`@LMMw{RWwR.Q%(B^wּR*8vZyJ ϯ*6VE#FPG>CQ#8|OXuK먥)0$hO5^'mNuVK_ǹ5KuiYx 10pp$0j3A$15&4ˍXS[ )Ƶ%4^rTqBk2m/B@0@ ;b}gm \/ldI! @2VX}wp䯎b`,:K> N[nyў\,K,//T{}uY5Rnbe˽Mx }(hkUWU2o0_>^o*aomʘRx̙3iez=a֙V Kg^}t:=ruC BW篖dT eQեЇ,9S>(5p^FV0D$kB( eQq0)C+J)LOo3Occ}cfP|R3s+ZbD_6hr<-4VPZWۧ3!R*CWm)@ " @r%4J`)^~͍s%jnd )w|_@oX h b17 xo4K~(pYt:g^NH[:W?⫛a~ܐJ)Q4H7gkҹ?mi}A}}w7_)눹> Q0D97}>J5hp_¥G>0oafmܬW mZgR:W;U8 s[PR"IH)0C:[Tm}7xs!}˰t* YEcM$Cm#מӌ -p:ðK ]2\ RAzAy@ \L ˆ&ιq<( %__lrښrUPΒYC_00 !vQ^җ5ws׮mfr8#J):@KocnWI=Y><~:K}!Bq ]:4Mq1j9YnCUu2C[җEX<kp\J1FxϨd2coP=gsm\֭pGZw|3}$ ,9"!psak" 豖CY+"6Z oM 0XX5/ d)M<`@ .|`@ )W;Bor&.JC"/-vEj̵ B A8>ݯ|%G*RJ,--'Q$Qp 'h#ͦsG7= >_0O<x98FZ F .X)^89&(68*Cbzfϟ@_)|[O>f7t9jwٿCte7Fla UQZ^-s(I;5U@J3UF/~x簺z0 G^9V:D_.psϽqU~+Ł`[Lk!D\(m#= @@ )wytRZޞưO n"/=˙&*Ǔe'_5$Irɯg-O>'Ojپ!9\Akc9LX۸t %e0zcޭ tz'>}w-\f?0+++fv@KegGth`Yg?UZX_ڔa/| _xыcjjb%i=L <`@ ηoCoryP`s󬳃]oP׿`'`1pWۣQ4}%V,ϧuVC_jZK4EQYQ Щ5eE#,ڿTab'In7XSR" uW}+ A1ޯ3Ro, O<$a+t_E/#㲔4 +}csnalglaD(qQU'I5Bs%sAڒ)|䶟1nsc ! a,V;3휕 Esyљ982GC<`R0 @ tp~H48° VkeQ:2~.]:3j'{L|2ܷ$V(f62moSǎ.ryyO<$ZmoCȳm [sZQLҨm>aiXA`RA+8c)Y6̆c>-#;oç>о=(^߯?«Wqcaa^z=$If-;w`"I^űkҴ]٬ʠ+=_rm)7JI ug+ĶV(BrsY( @a_%DUT y<E>αnjs$VvX)%0Du]1؃_QPNs ?o z vGl h ejO3Ha c}@ ^]>Œ`%9.I%8SP2kbBDx$Q,%JSܴ.EelV @ 3N- .r-JA0D"ngYP"/No:Kmn ΫL?Woo91qɯe-w- +=1^KZmWB}%+s0Te )9Rt˝viVC–ij=jEW(Htډ޻%??̡,ϱt 51g6Ptkh GzYfO%=N|˰ٖ-,i[}l_c^5EQ"ϋm?dݤt{gY % &G<9_=/annjˇ_aHܨuG, _FQ(u?2b}*g njNLVauuU ؑ-MSl؃*'پJ)~Cٟi}ɓ'tA2t:m0RRsHtsE Im=@NiЍD_.3wuI &{f y܌CI02X @F-a=(f@~]֧Ŷ5>&x`@ 9v`!)s0󨒰 AN{y[AL{]FhKJ3͉ o^_kes^mUq(~ QZ?[Er ~[BQC&'$ 66m0Ɛjh4pm}"¦_+mWT {k_x%\s͂VOy $I 39sfllr!`m~(-$n5xFI$ID{Јl?a?9Ι!jIv !ƭS3n c"B?<`ReT8y2 Hp.p (%ӆXAS0@ #״t @@e8Cͅ H5ıa~Bs'\|\0ksMrƌ3O;]LOO],..;V d[*~-S%/βO=?=.9X@A.;V)Fh2lmuX[@r@ !s)L<8y˟{~5`Xsc [, ODhɦ?0IFMpΑ9bs+spV&3/1"9ssYM?OMZEQ(#MSB@E$AYj} IDAT`_[V[B{ڗ*N>G\F򀕩cmssX]]EۅR z=40nWҞ!t.KziRp.ڪ[>kB6: 4jז"RpYQ>ljo}TJ-X2 B+PJ eZ sAM l*\l(uf.8G-v3eÅ9 f?4o|xK_:e.D4Iv4 K;0E$~ S 7qb: oeOQ+ Vq,QV& @ cY?[Dp(C !$D VQ2@isr ϛ#9,hs_ O_kqqO<$&͡PgV"q# Ca螫n^ kS|RJ=n7C#4 _Ӏ!DzqhsNZ=Oy @6u==܉wGAAɬex@$t:6 LLL`nnnԩSa6>QbL ùsp}F*$j`nj2vZ-}0EQ I"" zoyu^ϾnJs;kl(84dRJ 1p(BN \Ű\`.Vˢ@B +X+@R su#G D -@i]I (yA$0;W?XkfNx .gJq0i N`w6Vek&'㎛/}k݇zyݚU|r`g胬f tٙpvii;dL ?zZֶvVN-Zm}yyՑZ9Vy^va%R '/?_č7_~:tyGRbrrRH9^@1X""GRP->s VVVP1c:% /m| ^jö0 :,fqUW-ફp5Wann ȑNajjss3Ѩ!Mc$IFAf }~T n^;ɵs|{s=0aY(K=1wc/f eYj%q!2(ı&}*;,f~~poXX"NK$2ma:hNdΙz]/#id3* 8!YP(L_$L=c . @8 @ cr3z@@)MDiHH!rMVH_Gz `M%`kSP\ Cp:v(?S|M:KKKqVn_i i7Y-[}iSO=Ϳ3|o?7dI̙eu *yTJ!MScvv^>8ct:X[[CD\}^YAƎ$_`#_U=c0cW"]8r_33M?~4YHjիCavvsLOMa}}@h+oGQ F@>j&&&h 4}RGRiIС9ر8z#5!<#G033iLarrZz=A90 y a" aۓ]3p(\`JA sҶv muN2H.;pZ_aLyDaL_K[?+DA$i I2lnp`E~ '\4eL W)Qq^GLL4.5xI$qN,}/Q<5a({YIMZK3g^osNl%0DZQl:5'333cmm*4 _,雦S5j)ܴڝѣڍXZr!ı?#6Y!IyV56+mۆ3nG+ 0@^4$=`vv ZhBYG^#BpΐGs &eYᇿGv/;PQo) 0K)QOl!j8>o_k߷( Da9 6Мs$Is=Ww 0݆ųg|n@/r!`^&F&#n@6cMGA1Q 4^1VJ=K}+h?8 0 @ cY?!sT@`u֝gC2))ߪ̒c}?A;DQtI޿,K,--yd]%z"~oUY[nYb1lcaXa10ۘ1b6 c1cؼl>ۀ007 66KR/ګrF?bɛYYUReV}ƍwիWq}nBz~կ"T:T)=!~pҧ>i[ϯX!6Բ lY( Rx\.zvU<ʄަ6Й,WwNfe~/wɒ"|DQB!SSLNcff?ffȑaD,%Hmۆcۈڲɬ( t|)HJ6\/Er nB= yxb1"&&ʘT8p`&'06VXRN"?8iu:mh%5&ر~u-O*hELY%$h;H{\Dph  < C n3jy4 \zu$1,j1[P. ^n%8RIK%wU"}}nvo#>ODue쌢,--a~~^T@hJQB l۝clةvtL'&8y0~Ҏnuzn \W*$ضB!( P,G( ( (s( +"P*[!IfWn$_Et:4 4Mr9JGRf$ 9i!܌_\ԔQJ"$A^8th zj kk5ZZc~~ U7:j:`lӉRMf] z?7| |0nfRƘPc[4˂+,g v;캊R 4[-P&f9N\:dcuNŀkQLIu0#n0D8% `򒡔D:r`g=xJTb ) p*|10J@m6br쑵}vm};66XVQհN#tq]Z-4p5R@*Ro >S?kre#`f+^qώ7#}G(r-p^|" PJO^B_8}ZVh@)T08,V$4ؾFX E Wh6X]]**jP5hQl$)$$I``^'?x}'fg@6K:tx8]R(CټN Us#IӮ*|<|t/)@VK5AW %!ۏEc\AsA Xe3`Tmj&22ZU&KMLQX@0nd,`a,`8IA]Cڰ,Z}"o*QUߚP͈.UR%ԆeSXhfFA{;q_377!wmuZmSguԦy}qm|Ϝs~~wN-,ksZ;I[>&&&:Z`Y._˗/^#caGmyX+Wm|Yl;:ϷT*PabbLg:GNcvv'Na9sgp!;vHQ,>l[:Dt - 81rw'UwT&K r#i CDQ2*qXA.XabJ<$U1&H{Pp=uM.Mn@n 3ag8kii 8RPp"W*Ts3l 2Lɳޘ6X?31,l ߞ^Fnnr`wG:BK6Y7zG$XZZKnYmKe/{+w|<Ķ}Z3gf@?,B28Z |E,,.swme~Py`ǏOggRj߬78-I)[*1>^B\٧c(DjC cmPȑ#x'59@8G'FClUJ^gF[UcG$Qn_`~af|QTU5ҔٜBXZZj&Vlv*^oecG~?blxum[Բ> @EU+"[h9 C0jA)D|m] $ 2E}Gۿh|p~6'YX3Mw\ p7`{x$M)<>sPr.qBD\>RB8-✼KS/ @$:CXAe`D5gA&¶-pB.cdnPBJo?1i}/ Բ`([T}fߑOX^^Zu1@ώu mO̙MY賠m& {ZRx*VW"AW9W*B(K((rC_֗YS!As.lBU޵mcRÇ166flodɎV61,-/ 5nGTBTsjQ*EtZZkhzv[%d0DƧi|oz{Ooz(nc43FAr J)j8chZpZ&2J)8`+w9vmLIb)M;;_H R'LApCDQ{*n@6JϬ9!2- @SpPX3Pǰ i!S$ 6V{`g&RSXsmXnں~Vy`k|+ĤQn/nDk%- 1J-PvF^nGٱXXX4MvVVVljt~4gLXJm<s_>ZK|9' $8G.CV cWkշ*b)VAk{0 P.ީ ܇Çi-읏(#8sCfUum KKzR+ s]3677s|H/휝Q.11QAVEGiu}\@\@L6|߃m[Z =cgl?Q[o>$0͘Wi*R8u$ˡRT,"u]=7\.'r}eQV|"-'wc15[ВT p]g٧?]EFiܰ̎%DKŘ/k@정E~q>PbIB$CDŽBT,A2VL]`f IDAT+h)ށ! F[?3D?xEx.rKhZZ%%}f- }'{ Pй_bXTFG>߿cnnZٸVbyi +++BEۓY2VΝu xףVx")\vLBљi_HOY+R)?`H'4{ء ffcjjrAgީZy'Yj0 9G"PVF\-.#EԨT_P*{bbLlT*Ǿ}X]]F\."|T*eT*e VGw0sm`Gs0J88%ƝK&If1&70000-`пSKɬ3)(,qr}o!MWZ _^r&wԲD9/A9{,Ksgwsssx|CĵkװZc6[yYgfn?g7.\}Q9=;wTYw !yV}<=zJji(zNv'W`TfNX^Zã>"~]o>Xaj 38sFYطoram<|IAj]Rmٶ/ri(Z [^;4ՙ(%TV 2.* &''rb1sX=^(DQq,Ցb^ {+?{هɉvP$" 9ڶv-)E, f#cT*~t 8+eY(Q"IMPy2;_G][;=֪#w6$ğ4&PcwnP ].V18z<ĵ1zIU7@D&0j^Bx2E8Sj^»dsr9CTVƢZ<ר F60000!܎3`.? 4Fun g]0nB睅jύ/QsS*DVbu_sGwx{ލ|>c[U9U풿s|c;a4WWݫ s?Ni|> AǸzꞴlLUdRHљˇ?ˁjRI(}+2*ĉ8}T5;55RݩqU,//oHWT1IKj dT㙢~A}X(h+vݍIT*7yr!ĘT(sC\(bP߄0S N֊^ƄlPtx\.;w"8BvBRjz[%t\gA 3\raI{hU,UR\q5,//m;HX[wH,B3=Q3l<3GoZYA"2E/T3.eTh˂GΈf `O#[?s^n%t:^%0nِ/f B BlP[އPANjQ++||ߑO ["uޯQ9ku]x^V-~ÿz7ZΟ?r9ؒ*`q( C0PՐ)j}YU{:cq,7/juyVY<7}8rN8'̙8sN<;6'06V 0.\~/M˶:<ӶgM- JLCcjjbnmsb% a! }nHYD!!8xiض- a!c$Μ9Uh4d('0E]7~c$q3Ps h۠"ItX*kduuycaaaT$:T]#ОyVeچFkVX]W`F4VЂ `#۵~=x$54{m8܂Y ދg{8sH@(qE R}X(ylKsu]a&V06Vxan 8x "Rb|B!ԏE GPXV3D^ 0{bCrÇQ.7}qhZ!;[ zn! K)}mUs$߳J`J)Ο?UpHO)V of=׻fߑ#!3c]+& a-s*:XAda`Ve}PX?[1kK}Sg[~>nrwV/z6&(j p\Z#>~?֣.iE@ل/mi]4[-Zv9Kf~pso3B|I~uWϟV*g9 +m~GYiQ[z7Rt9\);3gLSĉ8|*2HK J)+uPJ.&''j 4nn IT"c(J=nnX8`}4X̣RQJBN*#s_SjuN8ƹs0==%kxu cnE 4r*`!גDetUpa̒gΜ^xᅑ(1H7`su<`Lq52k6PS*E)4p+V `H60000)6VnTn~v)XBln{c{'%JtfxT_uѷȎfk*z&ȶS:n*7~V~bW5-YQfK|Q08cҶ._c`[V 4͜ۃrzbv;űc38u(Ν;'E#o_|swŋZo"=RXVׅC6˿4V_{?g)=k%c\FQfWU݇l.-}|Tqu7SCgΜFĕ+WFxZ Mf#$XggOcN̜=wVVYHZˁK rpp'VZc= u! |)sOc s}o!M׌bPnsځ W*{2/m葿 ߀-;FpayyA`yy׮]*jZ3KSe `C ro+_[KxoU!pL, ih>J轠LoZfs]M`vN>Gbzz_nzx',[hv|Al&`nn+++Ng@~no84=m4D s("."9EDQ( >7=ze~j/{z6_9砖E"(ҖFF\=gM2Edm,Uf/pSCX[ X[[RJ"v8(ʜJR^:@& eYƕ͈4MQfra#GzT" QV ZɅ<^p :rX {\60000=`4Y(}ϔ^抰4Cq0(W)/(Rco6B6%UޯQĝyQe ?DڕǣVkN"M[O+N@w:pQP 4Y\D4Ip1;T.]А̍B upαDQq=o5mc|lL{G 9W/#|߇m[<EJy|l jz]gw9G`Vr.pH#Ǵ$I9 lƺA?~ p⥑:R%9YU#@x 4y;볂jڂ̐j-ι(%DfR% 3VD[Ac XA. l````0"}S(o9p|,i^_QgCM쿡*3X Xukou;B_ڴ, uUDC}QH2tc=/'; 18͊фi8I !JZ"g Xg0Us;v gl[. r D%3Ӱ9@ddߺ}kT Wds."9@8?+h.[A ")d F 60000zl~ D,X?~kòSk  >Y?w見6؞>r]@oJ%` BlP[A C}{[UjRS;77}b(MƗ~˴ XRBa 177j=i#Yr]cean~jԉR (}u]66qm'pay,//PȡPP.˅'ڈE%l& :|?Rp[֪UsLT*h7n2 &1}mak,qo S9 B).\0Rkq$#Sy]sfN?>{X  -VДNK[AKJ1k^+h T ! م-s~@  \ :U2Н~6;}@ڽoM_JAau]P:Z{];jʕ+F_uHZeY~nx Oo|7]]S]㋾ \͈ʧIvJ񞵁VL #6<8ٿ`igSe>2==_NF˲066mUDnV46ƌ GEq\ C!\9m ˅<("s!33>5_389]o}҆,Ba)H~ґyiHbg:tKP$yxgFj a[6$'28#$pd`~(rB- ?P7++hpSC1 X$eB ΉTט3fA! }vRM _='1ח~- ӯh3)D((jёj~kݯm4MfFfjKK7%ձmkբ̂f?Z9tǩ\.`v`WuuQazzyiY9m{S*Xe{O0冮<}F3LbI8fN<X]]6*_ݴhi3h8qqC28B>\ d60+E,1D.7|ëOךGҤnMW3tH rd Xgf l~%pgff\tid;R$qG0&쉣\ID2T+yՕV}yY+hgK& JIoM@U׆ )ČȪW'Rcm````00ТkҐAa(0Xr< Ԛgt+n~ޡ-Mr=y( hKC j۰mk[u?ibqqQ_^^Ƶkװ852J8ޠu]W*gE9G>0~񽿉$IX5Wܝr]066VF9)#m;} "Ͳ077'ƨ^1tkhۨT*e,?ۦVאB E,zR}C=f]? 5k&MF$i:Vߵjdr? *l[lٟzEcǎ {nd<l/}Lv2!'MVm5ts+hse+J}'vDR4e"o z60000kC cmAaa,`' p:ZuYLhy!q+a_u"@2o UÈC?#еWV"Y/ }ߠ͒[E0~wbZ_%^Bo$h4`il@@qVGV;|?|$%mÕBضFijue3 N677eApSWy.8ˎ٬Ǐhʕ+3w8$D]D;i b .(Es&X6D <V ZY3t ߬45$PCbA_K$1JyyǦB9[9}mmNAQo&9;F^t lnUVYXmy:^:2k q'&I׃&x`Kn[AsهY;)6((ReS e241 r V&VZlw7000009`ЧRM¦ <\Z?.< IlN6 ~אۼUUPUrQxGߺ#v- %&y ФfyO}?_F:ZJ wi3(6lۆä}_PW"cmٓIa¡!NW\VbKƽc<V m((J}Vk@>[6f*`P*$lpK8}4Μ9Q\@f`6ۏ|}ۑׯ렔buuUD_܂N^7( |_Lvtbvk*^xᅑYg8N PQjPA5s+mPzAVЙո~kIJ..N\:PMA8D"s4=V:|?b1#$ &nQ,Vnyȸ$o&=nFUٟ3OcyuׯC Ԣ;A AkMvnf-Tڙ-R*mqQDŽpVi@ ppƤ %|76~ Cr|QJPm^K ڝM;~V$yz,z_U.)$)%&h_]E V˲WWm+c o?#ݷ$ſwl`).cu4Mm r](񞱁NP ='nFCիc)}D$6|/b~aigvH<| tI]a`p;ř3gpC>/T]"!YsDZa[~>5_cI`qq+++vڮPJ[%m_o >gNFߨ SqɹVK{ hxoE{~+h@| \\$aL S*u&BL 8cLfR[}ԻP]`G+pzlBX9p} ,i^_i?k<:`e댭f!TeRK,!`j۰!??|۷=3ʪqKHU8%PV:U}&I06ۈSNٳxKm]FxC_F(PYX5DM>zx衷 }4M'*xɳhHTϋ7# 윹5ܹspFc88,]E0c""x͗f}U+h5>cuW'%ALY@iʴWQKt nCRiTB,H`#\8v{fK,Fg"V[VfH62j73/TTwE0̱8~8K\.}[_Bຮ>oxދ>siO4e/<@LM1?:Ih E#o[.lR7 G dmQabbGNS4q-Ki UTPG@SNᮻg>$, /U6(Xp[gWڶ*ڴ]wOx_KUvX/6dsYX[[yx*Õ "3DTۇYJƹspy|b1/UA %4$CuR};~B*[B" 7&ѫΧE؎3wO>V9}ˢ:6trR9sΡ@"vgQ}-Nru"z?u7+hJA8@88sP,)MU@en! v!zw(GpMJ`(GZB'<}h6?$.3MVU-zBʚsK)8 + >ajjj_N_̒ )MZmOy8+Z3fڜ17z(P.$Bq @1P,еCx'GrƴsU 6{E5VseYU_|lRH7{sw'E:8e^pDZ /,sDpRo7~gFzvH@SxtQA jivy0τ ɐ/w=uz֙CH0y8Tn0#}Jn MO}/?h;{3ⴰ\C%mu E@͡Zj!cxuGKP 7ﷁ x"ZVwzR6Ю0fT9!IUZnhnEwߍ3yQu-DQ .,j[h۶/'>Aw߹=I0@3N8z:;f8SnСCC9~Z-pz7R;s&}GTB\8({R56E YF(hϟǹswᩧ>wE><'`GN#M۶|~~ b~/I04 ,Vn#IS8N1Q9Rg!{WէZHͽH(?? <`pNΙ$3ÄwaX űϧV}ȕ>@ 8bOk~BØ"{@-Qn6500000nZ.iEе~$eNPDR8.il]Ͻm=!a&A*uFX8~p߽ni7/m\ވUĈ뺚Vį"Pn7?c&c843*ںNY1pi6Ҷ&LB n7#Wsnf]*еySO|/˲`6v>[oaaW^9}Vbyii(_]wYXEm&aɢuMNr{ 63`(8p {챞 Zqt:mp-ٰ@(ÖU؆$OQ|*2 N}˵'2v" )C0-^! v%zJ*`J98\ۇp] d`gck6T6%,n-d/(jQh{Ɨʬl2y<@ϽU|~wM%wJIĈ2s]  0hM)E.CD(zv[I%DZbnfӡ=f<[ދ򞣨5y? ,wAU[)Jq…o'jY "M:P*Gu*֠twAf=Fh"uIw\?Xo8%)g$>u&!XB%9\J, ϴQN` P5٫_kYc a,n 6CR]aM#F_)»O%_Q%Ohhj_[gͣ$2r}SUwuWKuwUA 9#1 `-!l$Z-$y 1p0c`UoU쮬׈o{oxK/2"+++*"wd{w^0DF7o|v_/Ns<+OФf<S+ ƜUtZ\xӨسgNSÈd黑3 LLL 8k5H>F0D(=_4`Udݱ͏ިinѣ;"v3ַwV<jJ%B  7-dj`~'9~?Ǧ?sLOOsFֵ$A^q0ħ5_&M{^nI:W_-5'% uÝR0S$xծk]ד7 ` `L[A3fF1K*`^݄@ @%\ϤQz@ lտJ‘n5ۥ*Ϧ(CnqEC_}T&ٹ-Ϙ̭0vuxo'WE@׷W#?K~[}2tR*:QڳYѣGe1@#\r趁h4h"P;03s **jQX%[޷oo&''jv@I_$pa<[O ^4ovXZ\ZFIچ1v5d;F$Inn_swe!>>tPs!˲RN{eUK6Ze+h>km#h ӧO;REy"B .u-t< _E4^]_fgg199SSm6.o/Vv\QjԌ©,Q[rOٱ换vxk:`/ņb`V/֖6 y;Yc_R5wv `wznŘmEתb ZwTk@*`@ ( @ 7H!j0\:JQE@m.tuY0+6UPeu_+[%_T*|O[oc[jC6wPw 5O?g9G~ Y?GgmJ+ ۇ{( dYLqse,,,zhc>w4ѣGrM]^Y&7=A,JUfrїS+h4Pi"и;+Tj5FTb =M=U< ??l>{zzsssX\Z*I Vs#IS4DN~s]K־ժU|Mx'ܿ1iAAgL4z5ލjop/ FTLלL)(?9RqBA2XW#mVФ&" pp9.51#Z(|J `tH`WWڃ R, ܝʹ _9~ǙӧEQ`mmsKZ\Kk,,,C^|Z7}{qZj0#°N5w}׷pǯ8sssP/iUyQh7 CnCV*t3ҋ[H6^KGGGq|k_G#i-U=!1<ݥ]wR:kgCq19(P騀UO—T@!&?xW T"!CZ,}zϦڀD^Hog;\!ƬZb pߟ?ܢ(033a%Z%_ιS/ٗ'i_%*q7fc-R(jY?an&T?|zQa|llơ^ӄ3JqA4 4@6mmvtzܿY0d8}.8rZJj`бj`< <2RC}ćP\nݜ{9X،\a|߿sR۷Q_:y (?[zHoTs9g쀛,kmM0  W 1@p0CQ(s-}0#0@ nHL  kߤ2c"Z#p:) cc>_%+rܳ~w j_ :@Y +w|~Gt^KY"( RnЧp4e{]`]afZj$!hC+sM%u_,,Ñ#Gr}]\Xw/lQVd$#|7E)fZ-`ll O߅?qk5KG V |]oė;oڶy7C$`T 4"8Gr5 )) Z@'W{)T6ƑuW_ɋɂ׀ܜ{eVls(Hp&1}FP(Hi? pU&6hϼ)hg0`M q#pڭ V[̈::~1 DPe0$pÙӧK \-U׷{^`ff'>hIۏcbOS_sj<ϑgFGGM##hkms͘X³`ҟ޿?.ePrBŗ^2vf=fϵZ5 VhK;ƘS^DE0{3gpi<qZJJ),1l`>O's-Ϟ;$I(wS{O `f|~$[Ogbaaa/ #dy欟x)b!& YrFR$0~KXJ3AAi^]w3܌ )(((ƠȳնR*p. ,LO @s" p(IIIS"F"{2늷u] =տ/6PvLbй~ۖxs9> jV]͜˺VMa잭E%&0?)?&QW7LE!16h4Rm'NaF6qalmGFFSOcr<zj㈍n.M~31p9x$8v(C3gNvQ:;h lzU5}?~ݖ$6"BΡ̜İTʩ;39cO5' CibjξA18 Ui~}3/a\s?[7ZTY/gSi^*р̎2$&|3 @00 PV4T @  D@[<[JgK0ú>@WY?wZ>}PAG?gƻc_9D _U~`=p9w%Iv @[Zkժ#BS?_~nx[nHǢ@E"~-3sȨs(ߟ~w 10779u~oQP*8FZA+4ɯ1*p N077Ǐcll Jv{G@(٭QDQTFT0:::t022z5}X6&"Tk5A*F :IY]n9$ ;FŽ[9s>8e(j[ny?m{mLOOcrr/4>ӘAW^ @\ 3ISdiE@6ccVhv Μ9{@^u5ʼ.߆?曏]󿳗7""6oV8R}yQ@(Ɛ)j*c(\۽zaȑX]]Ņ  Dre 3e+h/@IlշvwdKvLүnJfJz2gb L`JA)Pz|2T@> @ ۀ˩y!jqYcCW`Y%0<"';66TZ’9;VzR~`!Cp1܇x=?09<%:'͓VCx晳4ɷ kkmu)4gHj14GF0>>8r$ٳgqizEQ c0ưQ޺n#_IСCR?݀ 0Ξ=[4Vi 46MYsF!Qv mzسg-Zs7~Tbq8vMe\Zc~J|(0;;NKyAi" Þd*ojv̲d߲ے]S~ԯ:{ԭ81?7?㨝dnTޘ*[AZ;utogO̸&0{6!aa|y2{ fq`*`驀 pA0@ ԿG?W0# CDUVkMݹ:o5trzz w-`B P?GDRE˒ ܑ8 r#)~g>'|&6"B4UX)q8PVQZu+8M7݄{R`qqYhEgal}}hYNڃ@RAdGF ph#+u[[JN{%< ޽ n2~p4 $saaYTi_pxGQHJvjbtʹH3wxWV>l#vmm3]2eT]r!ݸΘ ԎL&" Er&(#d]:V;e-.2?32s881}8}>n?Z6dQ "dYYcNk_kw䯔oioHgFQZ !'PFגQ9J˘"<ڪk4"GIÇ#H¹sA9gi'(B^k===z={jh;l6gm{&&h#XpݍAػw?C}m yGtBh‹P7X4طoC]' S˭vĜudF/S磤fX> 87aC2"8b @19TgEI̹HT@NL kտY` )3C5a(b`Lbuu8e xWHPvC ;}7sZ+c?>.\VMnȲdqG Z벯X}|KG|EZUSUP0:#q\0` (jZJcccǞ={9خs?[%V􏌌 8'4ʝAfQu7df(͙MIcǎBF{o6QZI94Ihh}o⥽AQ~$IDaW[o- y#sLMMsX\ZhfKKd|B-KSȢ4I)Q{rȲ Y9W&ٮoín걩jZkQչ_K)Q@u:K[:)7`\4Rbcu (@AurN و@ A@pO (fo]@qaaX>Ͱ2oSv@=P U=ruzg}Fm|!<jVYl_K`YuU8vg9__?ɽ 9kfu;[o=7n$*"g IDATGBאԴ溦iJ,˰+m촡u6Iozf$ 916EW^4~lFi5!011A6З3abb|6a@^g w)4 ai=x= e~׿_ړhZC[7  M^Ӳ+h欠M\ZKd#ՕlSC1@02 SJIHc8y}U\hoꮿ@ aR~O 3vI FBp[bqC/ۨc= q"~>+_ucY?PԪU' ccc}\zGZ8cq씠fwM>1d8 Gr@XBep\D"<5U+qZcc#8th9'nɓp O=;$E(\xll uTJ9nbb!ubVCk ι}翯{)Y:xpk PJsmqfF("@RA*fff-w(*q3mHZhK.7BI \,Ξ;7m6T7(ZZ1k)ٿ @Be*ںskom XCZ{4ʱ Z I%̫~D$ֵqvR w;Pn[_ iC΄( D .P) (nZs(ug(t>A AhpMo4h[XI5°(\"m(y?U|o•aZgqde>r@( lH1퐿a_KnE/?_%KtU(܁6ބ#Hq;:,&6xx+n[np3n(;F!nSO?~&iR\x333Njh48ߑp<+yA97{̌ _ CIW*:t[e8rTYʀ*4G46v zv++١6µFQu{ 8l,B $If!q(r}/ 9 iylӨC U* 4y>5Į4wo&dVVꟳ 3)R_ f&X)Hp0}2Gқq;" B@<"@yA @ &€|MAT$8 2`vk.י@{ ``srԿ-X?lUcsp( {z;&ͫ(}oIGy/(vgv6pZ$IY1!3s5s5K?NPܾ}begfg8{bf\ʎ3"gur ;X1??<χ2'099ٱV 0+h5=Wtcw^\tMiejf&t_R^[D*w @E=1 MqI_)!ی`\L+n圗޷~7 W2j$JUA9NΎݥfq+ =kPLBIƴҁ.ʾl/ &*`驀]&`A@f(u+c( T"DG^}ޕkrye)̳ruwƒ8/3\Cg-}ބGpZuv(Q! CG=*~Nw@`?y<)|3x/q78SL> <pMCX^Yt؏qiT*8|;( euaqqY! lEQ uy6Zw?B^Gc z|_aZhVZ:uU$s,//caaȲ i( " B[+䯷9f9Ba*i=w~,$AFn#I$IWAjzظŘsN|'-'Oŗ^P^9"dd[[X$kS+O 8{(#e=Y˝BPk3fL_Ot/vQ({ewtB)@ }i0:@^R2 4xVk ;yߍ D^6c̅Qo36~"pjj sssšЙ$+, >[r/caX},ff3?v|)^, Z m??G=M B Q:umͩn,Qe8l}h{fs]7蜞qaBZpEzδZZ5n~^1JlGLHLe=VPh@ \d}k)pǥ*3C6 Ҭe5dyO˵C VWWT*Uij$f9_O[ Ndb k`za&\'_,i-E*`@ \@ ԿKW qi܋UEkAxy}!Y)78-](0::,˰(Vt@`$-ɮYV;E;Ipѡl\ɲ .\(K-v )eIG@((ڐodKi2_g{m`zzsssX\ZZ]\Xp!aվm&ùv;P y!2y\4z"E5$Il12ISt]7OIWaj}K4KSղv)1wXqn˿aSNSa5UY0Q%^)ÔVN*`@ l8 @ ˩}&eGHmN!H/tS;gdL9Gf?{côr!A0~x˓;nFPx/ @ٳgKEj&&&p 8~}CU65MӒ]",FY5 aÉ'ܱ6wџW!2/6(Bل333X^ZʎΎv8F̎YǮQ#4m >ycjj gϝFM6X\Z"!I,`uuY""mlֻ,M,ٟ^5Rn$Y1鲓N./>fQِ5'n_B)_ã<1d_`Mz>tڗE|BR}|>?Ɵ_yyLXȎRBј3x81L۷ǏĄ^( mu%eoJnqرw$IICYsD7)S߳nN iQ ۷]g}TZ1FGGi@ =8{DfvπnB 2!MSu=wa~T%9h9YB%Xן / 0sb%Sk߶mNGsYÆ0Vz =zZA5RZnww>`kjFBJ)cUcL_/P4cE1ÌI +h@ \-&@;WgL_0lZ V8d%8ce2V[.?&\ainN6`|8c!E+f$>ɓ'SSSX[[Cϖh3K8!E*;XEB\_;?8bcoD+LRX8t{;@sª-'pzccX\\De:ouGϾf (]=ͦS: zao@VCQXYYADXXX9s%-r/aR5ˣȋaף( brr/4ž{Qc,.-anv6ʢ@EBrk;f L&mnl{, (h~/2MjI"/däIq[( !J Jo~1=Gythk-48% LKwԫVoop&V(s?0u6qTg2``DS0@ (@ We e FG"&SZ+{7>$B\ldIāDg.e)$` ;&cT:LQ-RB0 E8vrW(|z.  x4N u?_gPecvvK6ŋĥKpY^hqQ#MS=hksSs]##سgO';4Xut@Zu9l6/^,@9 NRȲ5V(- @.KDs^G.WkSfMMa"62JJŌf,1Bпo2C"GQv94Ee0*`ko<ϵQ7ߌ{w.QB=MR(da^VCQ]Pk' FBv~?גULZ\1+)fb(H ,`@ \'P0@ wS%# 4qR9#e ~ٿ-]nIA_kt'tCܿ }cZ2enn[?[b3!r=u|]_FG ~8C}7cO?hui)t,gs]'&&l6kammmWz61;fv.z2 78!yc_K={Pհ+v~yQ8'O?Zn&'}Յ%}E>"ЃXZ> x~MJG1h)C*jJ6RbttjuơZ駟<j͍2:o~(BfAF !8Fhe(r ~sa7?wyJ]@I]4WW믱{b57)< ej/EujZfİ n_Z=mmRNIz)M6l|s MY@Щ8@ _B0,_&H(J7eD%&WD1jq}0111ǜ* icik>caIy$)~#P]g2=^ͻy##zy,Hݱ?6I8Fmn|3Cj=::qs;RXk Fzyy .\m,ퟥGN?Hs^R g0"KJՕW~ pk;{zo#ل#@\5E{Q t! S1/I8,^f  e%p `@B2 @ woA@rl!7"ۑw+bޙu8B)gC1EZC~pϾ*f3 cwP+76K_> V縀wbz7rswݥWagl0DDDVCPJ!I`zzz{A;IaNu6P{Vi߽: IDATOm/={r}{嗝%8r*)* , 8c ;27: IeXpK%O?g$#G6@yrx  { }8}h(cFFF U1)#2i ( " ]%I(`uwzǎunuuSSS}Ө~u-5 X5c zccX\\DeچsΙ5gej q%ffRcuύzV&EQ`vvx饗)݋Jcqi sDYPB-ĪYKFQTC1"ɍu?c~<Zb||Fq#˲u:[ƐXN}]P3eMڝ,ZKPN#b0NaUzymj4Wk4K+@Ak=L2bLAI<+Lm_?:*X{I fA'@Bl&WJ`Aq!@I$**b+ٿak K֖ \qB7~{=^瘛srfmxq|Ȳ ?y<^, o G~}.M>&2ժS|Z t RȲZ_:MӒ0@9RJ$iRl\x|s0-Q u͝KdMaMɹ&VFaigkH_ԥu>bL3n(5EQ( MFVܰeY:U$gF_ko[B mwߍ7MC9 pVzc*rN!~Sy4k[J)&%Jb+߸DHsQBYyo9!?HL (L{Կ̩E 5`[(wwƱCy_8CpƯYjanv֑+ݹlYFRq[4~76p;߸EDtxqu,p;:M0fX^c.ŋdݵaXH@ Z /"RŮBgi2<8n}ҮJi8z(d=|h--ldB_|?c={A 5{m3άjkkkHI8U`)4B8+~Krnެ*{=>ux})R@+R]lƜsOI]lX5w1վPLĚ(X༏ XIL m@Y 2ٿQJJ$VWggndcFd CUbj]?spSQ3m$_c^I%imX\=gnUCF/1;{/$"1(nE> j5MV#h+ѷuOIǎʱXYYKJ f, @^ѣG򲳄6 yIYm^߱iY>ozY>gơA#LѾR]4|ssK7[WJ\Zɫ7,@Zm!)|=L( \\aGGMpƶSI0 l6j|iiɭO/^0==54uqa찕jc ̑~phfqiiwqangKAo-}طgR/_?_~i##5 75mAk|o- -Ӝ<`kͅy׺Wswqi÷E($W O$n6Dz\wwJT``wT^2*`QsU @ ۰ @ ,Jm Q=.޶Կv m.@;lpl" F0:?ԩSS^-< בIg$;+wɭkiIXl#d 7͌{ol 0F76;A1 a`lnVԪV׾ee"dܛYUݕUqUewgwō7w~v- VޡlisGܷffMhqw©.0ē{t%EP<(cCϖc~k7 Cy!8Nޏ|䳈k#<W^9T&+! GZEX]]EZ߫6q!cYf|Sl h_o>=8 ̠i~iU5ZAoϼ)m%  =U ')WV{N8>aT,=;5E~1\tζ\w߃V+ڒ#X܍vP ž/B20 12<Ç n8XYY⢳A* kq}hMJNRMJ%j5iv#@w&^Z j-Zf-'6c]=0ڴz,?~cxѝ7V+JIcUY!KSUa~~+\[~0.%Bt")8pxȖm\Newn%VCk \dmBڹQ9e&&F*`qؐ S&188888lvpppp(t=H _AJAfs<%]N#HO1O]$!&P gy/?Sxw9S]+׶_"Cə-7$(g /q7RPUaJ*.--lSm:*mɵl'&&Bv~o}XQkVJ%e!Efgg155%I,,.Z\h5Gl+T잘pÖEcff'OB!lש~Z>{gߚ 6 ?~#];׿^[R !ّ'T*2fJ\yz8*8wToţ׺<44'N ޾ xAtdsT5J"Q6K'fNTvA^Q Ћ*`LAAay09ElHLvpppp|;}v -C^HDKhGs#տ#9Կ% >9ŷol.]boڧ/r|ˍ xwnKT|$oT2/ |oyYN>> Ai̎gV1FQ` ^/X?4Eƹ< *S7q !^l䲿>| [2Α0*`NdөT.v|Zgnc%Kk?{0*yzM"TҢ ]7`s>`xCʃgGL)UB~!nrHN{6F.G 1e++ۚ0co9z-+6+1 ͝RqF]=./38 .1(䳟ձ1ZH+i"M 徶nZXYYٹ6JAKj{H޽?xFR8qjAޙC>8J*JzffjIhMۻ t/^e@;l|ם"|snկ^ Y0Pdqe`g,ԧ_{z.-G>or"$jGɕC !vQ!YASjѶX(GbZJii_*# ܜb(ju6}V#̛{}S̷VEQ, k#/P¨K-/@A: tN఩샆F+DBkrl_B,7w;_e~}XZjtcc8V?}sFi[M$68V*)^45.~۸[qu ܼR#X`kY{sy =;Wow; (1悫,`.`\`"d#G an|HZUs02a{)Bd/a TGA{j5*uH;|r9ַ2BxǢ.3* 8!"sB-V I`rrO궶֊NFSPs@H {g68砄`Ϟ=jh;TP5g90*[.+ֳ|vo+7N :_eѤp1&d瞿o0:=u6iu׷wE'D! &4!,C250klV&VVSk;kq! QAc IgDE@Ӳ0C;6+UN=dOpYSЪ_uVk .3N_;w#kHcRK 3xCTn.">d8dbZm ٔJ2?ysĉ]oYO~_?n1C?S>4 ZxyCk.nZ}\'&& q1,-/#2amu<Ƥ*Jp\sFԾ_8ƕW\mrTλ*J{@WU4e;@kո/XzhJ)p),/_ Mj&W|UQ>v?>"/޳|<< 7\ݥ4-E!8 TU l")0Ui=u^kֵ_Z=́;1Qy@ιzl" ءLj粀"{ d5JT60TFkL# s(e%z,` B88888X=a.dx^AyiB$@eY@ߵ]oo6_,)䏙KLԁU.Gro6|~o>O&>/n11Ӹ=C«Z-2ҸkQTE~2omC2 "󵭆B1MSsy3;;8߷#c3g8&qfvLnm]h4p,/(T C՜ TDEfm; EE\wۿ8\ra~~gΜQN_|8Yb}7/{}bN=^||̟pqך3co}сoy399s?RP_v8$+;c' {**`2X@u b Si.aL;\ @49q),--!MS"CB-3]״V$m^kEꪫIN:!'VVV @ ;Vyu IDAT+/-5 .=nx[O;z$%87V k.Af0Dq$A!x! x=e\*S E&lgr~=x'.xLO/@yϻfͳM\A@p1)2 zxgH^,@\VN_}ĉΩ183a{]B:tmF!Ep5u fa+t9 @d23gaȿvYz!pppppc_$+DS^YC68ӕC&+^ ߎT3I{KJyA~)Wg\%%f߯~|KMwsL+l6MV6ЍFJZm[Sڨ W[*̀@{{~NmUyhZh6EU=;6fԶYqe`9<`X58s$X^YAf C0Y>37?ex[~G|R-0՘͉l¦Yp!S;8888\ tʌ&:ORD-cjS玡cICS^(SڹXrd`l𬟯Z?:~,-/9f:7T9tOgN{'1?aw/4;P;N"Xm6177V%՝rZøp!:x|vVtQ8MZQ*쳳9`)/d6*6 @^XY^F@]4 s,$ CYV;wzU'OrN;3=>V|Iw`.g[k}'ۚRs?_\Y@gD$6(JkI8TԾFAzf95^;|3pZJrQ G3SoEo_*`Bh U^sjC*( *`z*`pPQz + ?f|64{|^_ R*P|f~&Myk(o}~|#Eo5gQwGl^C=l6QTnBkdR I|YO9/DQ$Igkbp&c0zӄ߿|g$7{>۟7$m/ԳkRV=sZrXYYA$BVqƴڟ B@ AhZH$IDZiѯ^vC|{Ṫvzjσf?U;~?WFBtjqzqpAT^ APA@$} 8mm-:K+(011ϸ$Imz6КY/'3!.km`[>Aq(Bݖ[>YJR.Dlf/Xo{Ɂ'&w)pmͬar @R 0y**E+@eVZ3&m^g1<}v 3@ C;nXV])ze!c[Aoy=t; kD`ʦkyާ&Y]i%A pBAl׈r\-a)r(5 ,ߗV_ UBԿ:rt쟑;S"T0)elƿZoxC>O6cas9|>}Yǐ=hf@R6N)]9(BEWgl9G9;)8瘛q8tP"sc$ WVqin^}={vG׳sClUez٘uúXy^#^X}Mk x>m3MbTU޽6YCCC8xDVCRA4J` 2" t{seHԨ|^3? zbhpM<7J2s[AOyO*`༳2O9Oo1+Kk9NPxV!ppppX?1my"0^y< YK"k,x#S?zY?'!DWBP6׿uFsPgب}'h\>m<Šy=[O ͜ 4xʡn;hZ cz"\.+Pne 3r066fԪYS'OTkThUeZsUG9sY>@l, |X>sE "} 0o͞g7:/l(F{l.w7l !rLRej0==Ich4h4rZ4L];g:Wи# ?22%7JU)K˾T2)w[A_Fj*^@1&B PsA!Pڳ\ĺsppppp, dAeꠔR1"s*JT  BU@ڶ^Ov zC/-q+n7p\_ŷn|m˿}/wYݘ`8y<]߅D8C)<σݻQ.|s@ kYEH$ISOu, .j}_Cg AH5m###nr0HhZ"3z5m{fzj ^sH`"C +ā0<< J)Jvލzݻw#"Ibl>\?$AU&{Xk_~<͇XI,+[gL XGZgN{[mIAk? [z= C*3>T`\yAy!1QK8e@aÑ.}sQ) @TPx&vދL-a}tigsE K& PSJW^ye_>O+ NMaiqѼsT2E';t#s'zQ\Lgs"1E@fv jvB*vl{BlLBYB}\W!jCCH$TU?v! )mdY!e|G$ӧl6QV!JU,<rEX{/9)-NM!" (!1?7>@xW{9V@t#M?fs;bG?9qᇟM7_ZS2CT:* :Beo7 U*DQyI]v!iGib5g60뵑;!{<0Pc<vˤaЅsu(*`2Y]C :1YD2 ` "w[(UvR-iZ!),X|8888d8 h `ޗy+0G@}$YFeb9Λ]n-G^5U~MB(<à _*<YiG=ow{ϻCŗmnE V8|HgB&ibqq R.6=WSe!{Zb|bCE˘ SOim=g\IHZk4 Z.ABGQ9sY>_$s\FR5igoc'>1c)>?20DZ02zHI.W*=8P CJ^p5RzhM切2YڌE{j3yBTW @pCeo>뷗FasC !_"PaЌVҡ߂!*[եٿ[ _Je<::|ysss.$ ζ}\>uJ,&BU?RvfPsD0:1>0!R xl6=W C8LWb@*>5S@,>t333fu g eq>ꊘ10O>$YomcJ@`Q 38[v(45kSrPr#~/>8e^Ϛ{=a7mtgC?o}~$I?|A}'|Ǯ]gٳAtJ'OJҮIK- \6k4y] ;;{_|q(hGDՙBN%:wg|_W֦ՊmSm̲ *󼜝z6rPVqq+B"ӧ133mosʛbj!Lйl,Þrk|ĉ'1&ǝs9Q̲Euz:C;MUWq5 #w-G\ؘQ쮇R qr$16iϲ,Kjt*^QVC 94I 8ڴivTvϛy,ljsB^u (a&R R!A pBAlSh}t HF IDATvppppP B y>9yY_>+MSbaaK]S~ď.}[${s&puBwdT06fXX怩)ʗT8t B 24VVcrQaqqfV Z m贕<sI+:}7 !}UB333WAPqΪⰀPVih3/,, 2jiH"̓$c@D/5,//nop^ЖKN{PT|vySMa݌KG>wbnni_4Vccc]QQ'9^ C][RjB8MSqu{M*<}z9NBT=2.0*Ϭ"ݞ;$=*sȶl,Ga$`Ør*`ޣ.akұ0cQ$!:q]-~:W[B!DyθSJ7osEwo)IK=D\ŋ&U tmL߹_k}AΚ'O+(W1 Y~g@ۍ/U/c i9by3;;}uy&~h8~}DfZVރsq|_'Ssc|+w6*PhA a!G{sx !xo52@4ta[4I) m%χ[!6йi'Y JE00g|"Y&&|];W&<1 y Qg̭9kI9"ؑ:̯vJ+EAS|?X?OMMa~~jZEgCPe_e;?W.݁>iw"I={D\s|'N?d3)ۿ-՜i`yeaeuy{pGza cP$-E'6)1:::pp8z`rdiV0 Ezf5j蝤׻%iɕ3g,0=3mOEo΁$~ӗM! SCU'\q$|j6 CC7_?:ˤ'9ozDZ8FHOm$)YN؈ ^ߓHxxx## Bj!6ЀԶ;Z׶8F :v,/"6dyE;Q{V>_h ,Ï[aߵ϶$5X6*5v "z}+^r;~v{ ƛrFlBC,.0r*n1}VSeD;a BLψɤ@ my^NA uˍÎ#vɗ;,R`>!`bbkWe曁kfgW;v ^#QĒVBg|G\n48s V%MQh.kC׾,CFRАD;Q5tl !9o=_(]EbR:lh8狁Z>o=4m|죟lwq%m @dzM)5*^?|j_w9P?[Z|.9P~{;P*mܝ|ԶJE^0DT2!zY"U/9ֳ;@}R?RG _I.Rc*`_nJ. #yA@UzTwj:v͇Ea; UrypaWF0x@EHL_eԿVJ՞YVb^/g`Jk+C6 Y}*gu)h0nIvKKb|>?5/y$CGvjgK廚EvgbzzCCC8xjymGh"/cQd\*BgSo]g#I(BKQ\}Vw'@kkeYO鶸hG M MMMSQa)cohgt lg`g![aLO+̕ _\=9R W\qź("ij\KjҶb/|aJ ]=,jV/}ljYo /+kFHz^&%"G(Kc(%"y5,\Ï ̵TX^^Cj1 k m度`9w5׀xqbOҀv ΄ !TDGHDmYBpGK֍9[5|b-/VzFK)3zY?RqDukW"d3s)|S/죘AlSɼWG?KSaR0PP. 4a-$1Js@GQ啕Cu(]B2sn#c,B>vjܶ!,C&w{=ܰ͡TQTږϺYV0 ճ=6{6?!|xEjJnwW>w^n1==Yl0V-jf\l+h:vR45^׳|_9Yۍ|Xs\D@@Aj`#em@s_ uppp1؈37ϞQP!eF* r_~Fwk샴>9dڹ 6҃p|V=Pȡ}݌sSCXކ;V \}$~oqpm7Bn},Rm5 tY*Sϕ  njR0ϮTX*9,VscZoNMZ ޜYϩ,u XZ^v}V&q ?z[> anv8x=]jaxxjǔ 41ʝ99ŷ\giRs '(gA.X~ea5pmuTD6'u~ˑn{kLW.%LEt'2z"r _ G@z 5 98888lG8 h{4<!Rx x: dUe$F%8wԿTUo!3mA@`CCH_>+MSbaayuU65pDgYjf eܮE_zU }.ɓ154EƘ1cلJќbn;hl!{ew@>)/5>e WEuqI`ttFca9, Cϓ5mpWMπ`=gGsU+fW|į_S|#R ~1\_mصkPdGv2cljٷ4J!7g~ٯh|+PHp9` MSu$1jrs]/<`1~=SDUE  9 tH6Y@o=\R]066Cn =fI{mT5Ӑ)Ξ=#/,a /^pV{w](za^bhjbnrgޞ̫Oٟz*^@ǵEkB$ /qqP_]kw\]wxSQlH\nzZ⨀so"_QD9W'}L i McmwXd_[o.c E ZFFFF1ڲ\XTݻwcxxXڥ*]X*ahh6$19紁VΒ< |Oa@~EąX>A \],ó,m֕7<Z ##5Q.rJNG~x]+e=Tsg=8L+~;yOg~;FZ1=@Yfb*u1wJODQ\\B' &Br" c\uH_:88848a)<SB0F!R$qܟ ߮_Կ}~>` c!2 B,k'iK-]{.wxD͛YUU]UY=SSUYٝqF+ @L`n׎*\C7n$({x~`OE4M^RxݦjeOgثIP.9vx~m^_X0{m,# C,CJIZ%Ni]̎Y7k*+,MPBҨ0׎!5 dn8o:x[ m/0h!"cy)ҤIj4w琋Mr}Mc<<<<ҢO]FuJJNa.",-HM!npP > 9=4v?ǮH)U'3w~~ oNf#u_-\?1QYJxᄐ&^x9E+.׮Yl4J%piR*^@# 4w nrއP*%T:q0*V!;5E8"]gNM&rhϕgT@>WVX_[-Y5co˲ 0b[蝠E۷}̓O>IUhcl$r{Wh{Jr2T'OQ*ݞb~^ϕ]{.o~Gצ0$[b]sb[NjsL[\߼qDt쨀5eȷۙVfvN4-4JeYBkABi$^, J/$Yfj>ijB{xxxx 6m>܇ZY *QAHI؜gؐFemY ɫWyd_^z|n6˳--FV帙2fxY> IDAT@~b~CC7 䆗}a}P.6ڒvyEn܊Wh)FGGo2>>+V U$Z,HfYuo}hgWVs[> 6kkZ>gZ (rኍ|n/uk||^`~~jU2::H!FFTJTeq >__mo}\Gnu5 fgozmZA#I)yW~^.\7拾RT nhOb]{DQ4v il V ubˬ5tFjc|\`{xxx 4tdp9KNGYiV 0vcF+d1Rs3 *տ<z-Қ/>Dr2)!ixar_䷂q8shuyWnw20 y}ټh*ւVP*^'b~3ݺY?b$bKJ:z}`_k躿Ly|e][͙y<i)׮]KX^Yatd$'ϒ8E8IXY]%׉ֺّUّN=fsҗ$_wZfln!*0T*Q_ַ/~??t[, (nQJ>/qS <,w(o|7{\ֺ, ĖQy0 딶yn*)e6JS4uZB^ ]u-H !A8"rF.0@dRHT aJjxyGll$dZcylfLm-oٳ盛駟*6[-$ PX*Sg=w:/5>ww?j<u0j"0D)ELLLвQ dk,#npJO(۵\.36:zdhZ%ZV68 CRK<`5 ؐ!YT ΙVӧ,_x~i8]^Z4ScklQ֋$I6X>a~yZUҗ]_oari״6m-3R)S?/AVaQ}?:2_{|ƶ=i :jM\xbye 2H YF*}oq6Bڥ>[A)ܵ7>@BH}"z*V <[AGQﬠnO?O7 ȇVݙG.]xw7Ofvo~6gNIa;*`l7Sj\^)>ڒZ#4-͇RB#@w=u"!|]_mdpE4ѹNSI(~{H;=,n+\g4RJ?wmW(굅cuV giiuK?UvH?{&Z;}-),HVMVc|||5q#c].@#Z)RKsdVUͦ ,1YvPZyS-ڌA'8⢷|Ur;N88[&0s濽;w<@:5ꌏ34TahF=/ݿN>җ^ؗkq l{wcRG}}{{kfP*Q ;ҝڛe{w{pF)ce2ϋ me)"sXaVy7&82(]B)GV0Y_ ݱ}[+zX_Q '~wX؆WhsZ?az]߹'ϕ)BWVVZb19zo၌ٻY1Wyہ[&ϥiI` [-vZu/$ϟ{ٳyf 6 !"F}CKy:(6 j\Hi,#%-|v$plvv,bp|2kk]'QD&r2~2jZFZsKRWNVR{lR] ljYk[G1t֦hBk4Zd0DQhR-<<<< |@{oB(kEV#,RЎ͡)ғ[LDUa;+(;@"d@X{yk^'5;;"r_Ͳ;oÕ+O 0*=-o7nA%XoZs0Vs%:T*$ /=DBvՐ繂QVhKan-qkVRyGfzZ-_%)0nw;oG)KC2OLPV{8gnng.]ms͋y=6VVe#QDFG^أJ%*JW֯kۭSxg )Ib>2{(* & A??lZGtQ(XYY]R,4Ml*OX_ZjV:o@v*7CeW@nGg|'릋h;@F*m~sQvLQg i H4aHf}&M{1Ǒ@._K$ D$YF2CJUǞhl+>-+6Dpe{KUxHӔyo[/*Ivn?v u?1Oon<bޯfRk̹s,..@!f3WuV>,`rHĖv_;Ve9qi׺Rto%9u䑘ǏgnnH]5 Xe*4#\2!@cLMM191cOcuEjpw6k6a8_<ھWn-/J]kz(G K%DJ 24Bu<}zd*XhZ 2*$R*2!@Ac `.VtggY$I;SU`wTaaS c$y A-}jjm{|7Rlb!~k׮Ș?\YMSSF{DԍǎV>/tJ) ZD~8j5$ի\rfI^GH9pQѩ68+DWjm;2#wI)!dJu2gGyc9iF4׹|sJ1194Ǐczz&7Rza3o$&`!}/vR2sO>s{˿W/ccu$j$U'jJ -F~9z-^~Z<,M Nؐneiv\@^ڇ?H|j7hѩ.Y68pqm=uΐ+AnEhIhȤh)P948?C gO{xxx "_,(k,kVXBg-s ЈM읻lE2;' Կhfj!9lwO ׯ_RK# x @X˸cnj7}$4[N)eyyVRVłίE,U/G:McKm#]X.@hy^$َlDTYZIR;;ٳ{opQBo|qr9cvKNOOs= C* iҗϟ2Miv;Dľ|#?K^r߾ǵk׸~:60+lRM9IN揹U~gY~_B*2u٩Aҝf$!$` x絛T9wMH d;p&wDƩ= TԌ*`A'=<<<uRjMfpiR ".KQ'?hw9lL򒴹T!yFn㞹tiC(N2/2eJRWqfҗ?d~yΑ7Փzv^#gϞ _bwǪ kS 4s=FH@k1n2F6ORT%5 Vk$Sյ5aht נSۻ9ec]$p*ؐZ-tgy??f1N<ɩӧ9~Ϝwqq1yP$v[9?a}ệDQ'' hj4ݎQJ[n]V1jʾ#~]֯SV5Te3mڭ5N |7~7ڮTkM(6*gZ;uvZ*6jl!4 !L}Z`k2w*`I)zI0 Tt.C1:JeR!BPe-,En޷@':뵽>:_3N*<&DR=w,iϞoaaa̩p6)fnWYdϐrwwB<A*줈jSSS sw9kᛦ)Æ8frr8i4GڭZ"ۚeYW&fEE$ٓ=5ncHiK$q;ST+$1 2C)R>& WKav]Jkή`nvY/Rٳpĉ|mN,kƋ(ޭwxx.^Zڱr>~VB]'I2LYpJ%Պo[0w}{S}ody;k/j>/>i ~قrJ&5H@B) 틼 xۣ\hy4?3;1ݶP(RA(AfDQHdY`wG{A'=<<<z?WgAyiu,|l|Ã'o퀽Q ^js,{) Կgb:[,0nOO2^9*k)x={XP. p9/#1J౱1"&&&([uQBeV+4-*ݺS?sǀ"` G%סR ]Ab=?Czݜ !%V0 s4 oWJ!H >^4}\__/e8w3=ynxۀ^RmP-Y.R»%O:=w}JVE|۷}+oe4U$IFB)sGQ8N<5y)O23sj^kxҥS.=K|-n.h洔^V4ZMȴQVW6I ǕL=bgk0i:@ZFV 4&BBHG ߭_O {xxx <1gs D2$Cs? 6fy睡[BԿBv,@:u7M{\TUIBk[k3\q'ٿqo2^❬7^NkePmKVi-իWUGL&k RdTm|qɫ׮ ,I=*h("*Q1rXHxRyŪUHVU,#KSjRR*[5Zj34[*ӜؑZ^__穧O=PΙ3g뮻8qtog[>6|NxSկT v?ۍsE\pI%̝_@4m:i46ݫ ř!˲\,?056A0g]l{YA )GffB0 6ӫw:Uk#) F* d~\u Z!DQHfN Xd`m=<<<# 09=?PHv"W۴]e[y񓖒=߳'fo-lP&qܱcêK3;x 3wx{3_.>~8CCCwlg-$ ++222BR-6'&&ʕ+GA J)$ZwcN} pu7GNMbIrLZ%M4% 2Co2Ӭh01>NeryRߊ_ IDATu&DQD"20a O=O=ccc{={ケaFp߽Gw峵&/_v yR?Vjo^xYg >s~~GyŁ\rvX; 7}?kVi;ɞ[]vᬜZFZ04 246H@+hm A A(?yxxx "1? CS:gSKBʀ(Q.Kڭe4!|F+,ԪËyH';B D"󃠐)\Q?O8Geqq $I?lHeՋBRR9słjO qxu~fcA{\#ߘ]!RF!He ^cc,//ٶi 07 ´^cr^+BgYF^gdxx` <nӰv,uE(!h[ܑʕJTU aFG!2&&&h6in9qDNUռ9!LqC~W^_2ssD###jTsss} k}{=䖺ׯ_9s9^F ׯֽB8&KkmDkFeey355ux#g;-7~{,{~]^~k/^d^1ࡇ^g?9qF٦NLCUJ|kY0U0UlE; Y'nrJzA*eh4ZJ,Ǐ7RJH9]7Ϫ*SSS4M’έVQ7 `mm 5RdgaRTa0<й锆D84z~KQD$Uy~+EN\܇|!?ϴ{>ZIFFў>Oc*m(4a8k>֚v@WU&C@;%Pn!AEL|lZk[gbpe,㯞y3gΰ׿uJaȅ b,zΆwtddCÎFC AZE jPUu*ߥ%&&&&]ZRPTX__gaa!'JQש9 \H)%j5Jǎ;Pov-yR\.Yn[~ꀞL>2RJ}a,q֠,o-Ɔw˿(گ%Nܙɽ'ntM^Ma׼O~Ǡ\)h4%}* .UfOFScpA)HmH B"B M!I& '=<<<ml3ah삲$6ZLoտuԿRRGwR)*R!(X? !rԭ?; :{_Rh?`'O\.n@)E&"2Ǐg||<_+Jnƕ+Wu@(GQHWJI$(m\822tns}aSN裏^%fцZ 0DS !eqq!re\󌌌v[g7sf"2;f쟛ο6pj5ZvJbll4M>{fJCo|{[T-YnݒN➻>grR3ZaL$ W8uľGZtd:(@i_Adp$"}>郭02*62gh%;dWX@cκVW d@'/Xh M6+v& t T"@CneãO `Vş)[@HB8# u$vA x#C(=yԿvvw2+oXƟ?ځ4zϞ{i`EM29s}kڮT׹| `j+ Ìb AUkA@*{*@RR Ccccvv r nP$kkBAѠhP.8'6###i_qEQ\ܫ !ca~̙ ^XXZv9sJr٫[) \;lf}v_G9"p#3J4MIӔw]V+&MGh4ZTiZEQ: QTt,$!O"'C\ ׾ghr+ʕ*ͦ9˻U ) g]mo,;.h3:VJѯ-@s 6ܙVAY`M@{xxx3<1( z9ZFF86 o] XmzEkTdBJ-;a !;۩قnp#o$]E hw_ŏXP#7pr^J2Xgff׾2uwU/,,y6zru;pd]`;)EQ ,LdAJ ZE!~︃,i=={p׆#ZnjRoI'I:Y122B$iJEV,Bvξnsĉ<7xhh@ڵk^{qCgdW(*~0ۭwjj ݗX8i1>Oe:I*VJs_<}7E盾o?`\ &KS @)E$]Y[=O("Vy^RbOd^آw@Ki4r F hB r_nXz-"B,򷶁֤7<<<<fF+ M #\{FXj @KqD*۾mOFVSB(RD>Wr@q ? hwޙ@TȯLw{m/_ʊidPfB'ܭ=Atr,y$*'cHs.$annnڷOD5Q)i6R<qL$bddF[Fh4FV eٖY~-njlmݚV$*WJwũSu'NPPq$I$ o7?LLWoQ|(}!՚̑Z6Yg^{~>ϒ$ɡjRwWikMn7t׹c{u3&bJ@WZ @6ZbWڨW|Ǡ}‰+9hXgwKIM>Uv{Կ^{05i:r]m vcw v4DTjESSS3::z(_Glё.ҷHHCRF z!hb||K\*xgɲ5֘eee V /ar9Em2_n!לïʭ{ J1n@7go\5(@p *` tW6w C?5 $}Y+h-!"B,Pwxc ! %A`^045RdbbMQ$ټx'؄4/')m7a8~;B ⷨ-W~dJh~0gf஻ٷOT*$ Z=ؒJiRV)GVZ#%%H s (r}bb2Vgqq1y㦄00T1bI{5jCCLMMuhV$Iҥ ^\\dxxx_Uŵ*:ٮȸS7 CΟ?ϴ 0jj5>}0Lo|o7Q*f^S۸B,HN 5slj/SO]lr5KNm~cݠZ#B(!wɗSPH4w `}?lpDk`l=НaYH!m~&Pw}<ώ Yt(]O|Oy٫2V28$9_:e |XԿ.7>_\v7i9wK.夀V,˺SGzKˌ1 fiiJI__olE vZF$iz[g#d>7׭ |.f%O:=w 7#go=+,}^ ZkΜ>ٳgן]l""bMR e!{=nu{xt3 (!6К0QHT @{xxx |c s`B( $vgTA? QA' D`̢o e~׻yv m]Q]o?w̽ć{al_}43gԒZ FaTeqL^?6" F5eׯ_'cFFFn &={tQ$wJ1IPVŹr,w"[l}؊ͬ SN`X>e.?c~mkvgo߫.!hi `i-f*`׿ʯC0 KdijUqrm1oӺAqz4yF-[ dw|mBZ\xã}g!4 Ϛxynn\3JN]@KI@sgy^Sd1z+$iƯwd$,7 8_G7!Kwy'=_X22R4 axx8ϱ=6[^BPV묮Rש,//ȵݐjV+|2Apzalk_?z)֚y\$0>>yYT_sH4ywkucl-f:ů{lߩ).w-oIhyeD X}@`縰ՙ偋9~8uW.h 1YN#AݧXr)i4heSHP3΄Am=<<<<׋ퟅNUvAVE@ܶ3ٿ 0ҍDCwsF IDATo[y{#H yN-ZJo1;x cXaPC4 =NGY c(]9W^=6UK6 792;;KVc||+.֋$IXXX`zz7}_(^]dw>^YgeeJBN6^cpq=V1~AlΞReY^SJh!cccuB~t:6[H9"x||uh6ݐmZA@T"Ifggu 4?o %R(a||4M7%zW sֲEw7: ta!5AUej,za׼?Rj׾)ar͞;K@oUoa@L2RBm%@ 4[wB@{xxx#<ѯ xseVV0L%2υIޭϷ||+?we'W!,Jc!ַs-,,teU:W+ܠN)6(>9߸~oZ/~$ A 0s,/<| Eek4GF8s jŶicttH@ZF#'W{,{1:2(Yu=I_ۅ"%Gʛ_O~lf_Fsj(.BéwCa}sq2xf*`mޓxk5?̧? A%ӄJ@I'^o5nhY܆ AddfA@6С{xxxx<Y[կ Ph@fmPa;x?aXT/ lQ@YFJk-}xӛȱcv9~@)ix~ xbs?Nv$BA`QnT*UT: `yyAk=~:])%r9'@Ñ.^HJ[|/UqiWDoe&Z^7E/zO>*i@H]qАҪ~v=趁6onNQR:4Į5C]Pg*~dGW<<<<z?gl3fSCf3۰`cۆ!b5kxǞlWVBTWm3Nlگ}Hnff I26JǹzYɴ)ҔfZNNϾɑy=N_!gϞٳ[> r(hDZ93ks6h(Ȳ,Ru 8*GF hC{wNYJo- lhRBj9ڂN]q@MkK[ã_ `~\C})a(:s4nbܻ{Nݕ &U"e@? .ؓZXXտrD-aH eW>gg.X x/KU*`ҋffzj1IQO]u%ꮮ 4z)R+AB"m<#ƞP 3֌<f>" P.A @FwYpUf]w"+ʬサ=΢cuuuq$X[[û瞻Մ${V2]?m(Bnd7ѕiv;yGR1ϗ\@χ66*`sQ!3*`;Ͳ ܨdT}콸_Q^/MB>F D Zkݶ:{Y#BΌ!gBi[@}@ L85@ L+4Ji/8@Aq O{*׻[-66-<;\cSmx_8/'odYWl*H  L(G&D&`~i cWsk2QwYW)M8q ztR ~Q! C\~/_Fv6@،sCWJGyREpv^~DVx뭷!݆ r7Y!2w>T|Zɸ7ʸ>h&df|k`UI0)ތ.%3i̒)BjqA`d '@VL S} `Ҥg^sN[4 0%;mBv]PQW`?v{yP4Nk V_DJ_2vwx;f-EyWXf9襥%\ZR Q @ tI#I=Bs?0R!XB+W9ZD"8FǨ1bosӣ¥'/aƛCU"3_ðJU&$%XaEaӹ=IHɠ%9(W8R@3 lg/;@4@ L[]VJ9R,!c JP4fc쟷O6^Vhgf 0Y>YgE/]zKFQ{Q?C:KtA^ 67n>Fbs sbt:dM {@g?}e/sFGy333t@*<ϱ\NN>D. t0ps3^7I),2lo>!_4߿vEڸXG@Zg6Hig]dP Jvd+]P@!alg-@ 4TBJ6 ,!!dGg@OK3=r Kbfn+. Qo>_?Bߦ)(,_ӦYVn7||k1GL2KٳnyvRJ icyyIl4M@ v`v{4[|zzq#cGy'O~ߊbii +++XoМ!Bp*`3wkAHy??MUF\ߩDqfskz4fc2YR*H(W RLJmK@׎bI i) ᶀ2; 1,!K1VBq(L>я`4MN `muiH W,hoW / sL`G❀w٧bqqKKKwMjV!2ybvvi:T7Mz=Tע;+U@oȳ#k\^ Ѓĉt@*,rzNM1J̼uR `涟+tM?2;{ Jŧ Qr@rD5@9u/ݵZ*]$ ]R\5,W`RU:.@ L!&O^;IڂghB!` ȵ V^pq.F&_ U字~{qg;VN>{`mj TQ"ISRF3ʖ(Wlkזկ귰6Y[ 2vsgbiiɍJ-A^GsJYرc1&-SgKZ%ѣ#Ar B-& kɼ<ϑm~< Q^2jXPTù ˔ f im_@n,G&84u6Л@6s  `8BS,C)|-1O7n8hE>@؄o9q<ٷ[1ғO[Qtf`$I\V+qQ_zօ Bokigqާ_{lRCfW `Ro>gR\!0;A@NJ@  &rq=׻. 3,Sdv@Lإ"c3;;Nz!˴ӵ36? =Y_?e._Peտ؝j_[69,6pd>\'22ydnX]]5N ^W^Ej,)4쬻V&p5t]4M`@0 HE`Q4n _-vV##t@*|N$ cGeiT pY1a`B?OIz,z84ɑCƄ+ #lzS1`*@q$X!L%Ȳ~i@ L&jO@3&D2OaaF8gy76awE{\s&z'`SE!>+<*YmdNտ'kߚEѠϟSA8 CGNkշ~wP0@ FR|s#k(?~?&a EdTz`6x,` `K? ^x)^) fubzZAB3H ΅(z2s,ø1B#m )L Y@” .[" &ASd,ϐ+~3~VbI}իWzᑔc|mwz&I?LB`B2㺝[o Ν1J.Z Vfifvf:vEmj7y~w9~@ L1``#`GTA i_;w7J&-8g[QEg16rBiu?گXA3314uwf# 8wnՍoamr{LWQG<=5=>`07,Ec@  |\Jε峵71VkI_!DaS^~<ы$ǐ~WWWj iGA̘^+Ԭ8Ȳm$kC|߯wh-@1H8eŢl YU*B#lR6? : X{m #`C@>}@ L ՝90ԩ/BpB uLKoq̀sy-Wflв=w,.]I+++h̠" [4[ܭ OtrGO3g2#Q{ښVe#\+=zMC*E("hΤXr~K@kaUJn~͇,_8y$zA)P-X/Y>O?jq``$I `鑼RMc?wN87nTGq JS Y3_&&ϤT.6кcߔbڴ1P\zRPCB1@!#ٿۭ@  " a:뀗P*C``,C$,N"[6n OVV!Bih~3r.0ưjBABH5Ep7|rc'?NC$ϟ?W^}# I Q䄵Ln^333`L8Y do_@{u@ϖ쵊_~0 cqaH`3]]TJsf)=k4ISm8vλALjHG9c`f.%DeRm7~?|ۓszկ&!2u \KF uI30UL; rt+rЖePB uY@ @ eLi][XAF#)i8 E-VJm Ss?+V%&+eLB+"|W@kyyc>is3dEϝ'_h{ϓR:'{-<`d0kma6fV~#6~xFXVl7 l} <1U(pAJ1(e^A2K(H3pH2 a@0@ L~}LO%  i<0xFxtQF?s\@M\/?\+^w}h4v\Jg&@йb^X[E_ t_Ν={V^^^v}fgg- Go£0F)f6LR}0Dǎ\+ٳgqY:7+ kj_Epc(O:B^׆GdqHTRB)%4‘ƔFG} J<"Y ߋlw?*fYPҌ/ZrLB[5\Gq((p! tKŷx`@&L ՜җj9mڲ's`PxR8gNg*b*Nk@5gfi Pc]`Q:HW- Yd9 w.>w.,CE4a c7jm:z:.@v6ʚԾTQURb9L:U!ʏ$_ڕkO! IDATUvFSq0 >Z/:BP|ljT-* Fv4㔿eBȼǀR$1(˲Mj_u̇~0c qA7AskoE X[ibee.nݼq`,?1&a9tv?۶'OlmmJ+MS4 9s0Xvk׮+@B-[?۟@_x՘eB<;n|XכXgι|mk|qY>`òݤf/lJc.Cd0qk,[+)` $Ae1ě)u .`15VUQb>6Ŏ5ľl#k3} ׮O1-*P,c `9CRm*(+P 0@ T Y)*S 6|v:OXwL/Y=B3p.ԁ{[-Zհnq$M ]9_66&W00zx ]w|t `YXJ0vv4YvG dM(|bx'~WmQ}|[+^rx%yJha) u?g7r4/̨r S+r ﵼ @!M4M L!fYWT)gՉ?C?sࡇ#L><^u}*%#ǒ$ᅬ^y4 @5,--affl GTCOYY}%9cLY+,k}p`ǜdM=,d 2k56ת~&.^o |,eUv:ucYJS {$M-l1Jjf%<|榭gy/X*!b}݄ܸd1#B\3zKU*0W;&\vtPRB&X*FWq#*`@t/]Յ@+MVRŽ#hgt!aD0O={sU~0pv$qx_boチ?*? Y'N,_e,hw:Ȳ ǏG^ѣG1eT 4a+"m%Ѥ>V l:-)퓳s}wJk{ kʽG{Q:'y18vY=܃.\Y>5h_>)W] `t))!=7 o#(T QI`ڎqDRnǴ,\0zqao_yǦVf: ˜lX(uL{liVk~ `MC00B4W@z4@ TDB;bK\ -&y҅T^*QPL޲-G/,Ԓ.)h[1#.?3`UOꁼ-O^EAEg>g_h[}m,"??tn|7t*<ˠ,#}E @6ЄQS)kW疉_Ƶnn,3c;C"k#;q\Porub -[^'#_?76{VFxᇱ@b ûʖ~Ư!g|dk;~U8c Q繑\*GKHtܧh(e+A ;Y ;cO?Sy8C0J3paSl|S@l/tL)m7PʸH@A2K(HSp(YqNu% Pi= `)R޵KRߘQ`Bl1?{ŅqS@u<}4 m| \wvjsS-wroDk"Kٿ} -cxyC :/ C$IUH)q ,..B)`P6fLv*{ `[_KfY)$#y$qpeo{Kdp _!(*Zoeb'gyI~X_{Xg~y<È%Ld|8([>EuٿlaXg.ܑB lQVmUI 27)7{iEO\zUF觚*m ϧL௾& @J9X!T@6E90 @ 5m R)B@0D+< _6Umێ"ϢavzkH~sS_/P2!'qֵ8݆e.^V CV+@_zfffp-_KЖ-72dY4Mݿ`Uİ%?ǪGv2gYQ9j Q٪o @2OYKew3gܩ(zE[x-{k5[>RJsPAk[9"pШ1339ֽnFFùD `$y)Ҹhw1.^W^y+vF@^dW(kFp ) Hc.nk7$0ۢnE@ TDBU;耗  )2Ta)ޡwk I¦Ֆ`+|i?///߫"QVa RJ^P9T ;{ IvNvܰ(|g*Oa( ]9[r}4_ͯ[ZY79 ŴB B0& sM@ &BL}0i&Pj3s7 #ct^da̐^Ooe>qy}իWλMBg|~}yOqJ_~q@0?wos! z #G`qqro䯽2ۢdp$ v.޷%c8.VMlI`{"$6n1u8vlKZiK.}0,;Ӈ__;)+B?~?; 8gR57dZ'wm3)WKUIq:L'i8g zYA ceuA̸pVvo?n܏#G`}}/ Cdd}srB $bBW%4ޞmQ8C$8 8F$/@ L!h@ ՝c%2>3S/`$SȳR߲hs\]/:YIYӟ% *?zՋziX&o_h[B!N.Pw$n{iUpFyͥ%g^XX;#%Mp9/pnFv\.WOz=ghfs4 t]6تazݨ\rgjCqvV뫀0DǎBG"2 LN,Ӈq_ {B]NQW Td|k3Pl+24Z$ߵr2ao61g=33X1ckq (C)IvSyosԥKWRc5t:m,i,@s0R`,06Ѐ^)PC1@Ml]MNj@  " 2PYnz.(@Di287TKߑR/vx~aKgƪOW>H+++7wo~Չo`C]FwHB9s?څs0x@V1 C?~v S, w39VkޖNz3iꔼ7ot$ #*-A`38x=q8Uj0DVCVC$N)8Fe5/s >s -c`ߙvblv^b]vn?d6Z%U3o>4lB9Znn1Խk?%0.R?S'Z+qKv (n9zCc \I@1p!2gZssr#M3Xޜn Be^j@`+!iS m!"#C2 _p[Mz; fVBfq6}= Ν;{ V]m_77y~X\NȃvΟ;?ԐYB,,,V<ϱEQm_K^b9۷:`0R Q9XX__wDqsjt$In%uafFYκ EH)ucZfZmKp6\`&xz00ٝay1,EohȎNsp·bii,:۩`6ϣ\G!߳`Vo` Ҍs8*27^W$:2ZNۿǎS[ԩS8y޿~4"YO;Zi{RX*EWJB+cq0˄T*+d @&N1Zzge'`JAY ;. M(Ecd9a쟵MI@4>,/\#ssfm?mQJ)ߘh[B_8l0+e_)/l8s 0DeJApZ#<(Zff31oeV6?*v^~T`Mm?[:o Q~uG*0077fGb~~j8q֠ S) W; <]Qb`ͷܶ\' Cb;s kB0*Zք51ζ\%q9dM U0xm3ef7f!$ v{=?/~(쟋o3.*_e~~ bj2``,\+Ē;__h{öׁ{0S Xnn68qL V!8wxDsvoYmճUcYUoF:Z1 ֠@l|(?8^^^2n޼,1 %}%peh6ׇ%}O"+>?|;:tDly\|aMp0J;nԱ_K6v.qc;W_ҥ8MSaz#G0336v]4 0v 1=^e6GWFKO_ 1Ri{bbf>k[i]!UslST )oU:X _EN S" .Wy6 bX&&^81` 1u]\xV /p]TY9:t*  ywnܼ0,U`4MqM7TnokS/ܜ{jnnccckkk>EbWSn:{+Wܹs|~~e9;f9C9IqY 9{,yicN61py9syEa-[-Rla+~m,u(|D _&zXJHFc4!Hyccc^9ª3C1;oZ\X܃^uW!c %"e^z:3&MK 0J`(xԬ``, i*]}r az@0@ TcB@Ci R*J)aX16?d0W1IpUu>O~Ff+ͨ\Q_emu~0ퟃ8:HdΪjsӧǏ2RD6R-ܤ_kY;qDVVVl ۩}{,Gy&?ӧOcaaFR~!l[Ύ &B繙߀1RsZ<#GPV ,-K߃NT,m4]WM)> ׾ 66B7XҪ)5ѦIVfYijqI3{x_P`>q67nO0k(h4͉sqan$& 8c(YBI e a%bxm, (tN l ;sg*Gsבcֱ,׫\s&LiD*RB@+ @}\ogPJO [6c|bLCAkgQ}gp|qq_QpI}*89V /|k:ӘO!ad70U~'OW`"~2ElͲ ]buukkkX__ښ_{UG|y;v Z Z +++ǽk7/#wz MU7%9ps5^0JKJ IDATsE8~-[ ^|B}͗'~]v4 E!ݮjhh `mPv#D9s2Dq?g Rj,. տ9Aq\Y@hg3shbXBHcM90M @ &o LBA`{{f˱[~zA7*s0,#&߾}3tm()%sgl1MNw߻7x{mu9~' Fw{ dNJYSIOd+-qk__ yb}}Vݷ䱿hJ'kkkv ,..͛rnxE^ia yo̳,CcstF؀&<Ǫ~0Pں^SsGq\thw}d/}gk?{ɓ[js#Eqܸq1κ>lyz&h]#%OT(00S[VPn=ݼdhO$ s38$Z sp.`O\0 gP&#mH0´`@T<.L@ *@Z@s;;e؜7Rq۴{r]~dsUHgall!g7vm_7&^4s 9n1??(Ff10mk `KfY%j9ؒV 嫌$IpUy ˛:~n`9tsf#?vy?1| 7cKgCs y8__?kK;oO~]+u(±cp)!s!) L #N>ǟ_6JU q\kjTJ&[4fVR:#8WHp.p]g琌"!fS0@ TDB؜9*ӀJ*Yѯaf6^+*&;C8rȾG[-$iᵅ[ U.l)%K=4њVE:ݠfI`~< J`ι| `KN"w/mq677cǎaee0}G mK ُjF 4p3ĨM6;oG/^ƛ0p01& Â7 ¦RJ%|Dx7~+w$ :.:&:0sssv666 Bu6tE[@c8xfoV a!P2?I |ՒB=H:xxvgVL S " J: ʐ;&M3u)lVLq*>HiRB6śn7qD*9p®;욦to#~doeH/yymm V N@3HBk #G Dr6Kn96߲Lʒ%Tδ9 p(ލ7Pqyj ,[Y>n7qc;W_ўǍx+x{7G0}v&&j:~^WN 쏡[@~?x+M@H 83Vk"RJp6M_iiXT#ysGyS00""`@BL *uɣJQe9r}Z{)\Lu>p_drm \T{9/Bsu~Z\ڂNw·&^ϢYq@a­B `?C0em'@ߍ t:dYVxV=cxj19*vR':2q Bg+-ac> o^.r@E[w%&[$A~k_[<=Β0Αf::kkkXZZB$vPRl8.T.ыI(l+pRnN9@Ay爍RJW30tHR0@ TDBU:`_B@( +Ui/.w[yAlƫ~p}OtM⦐[oWoC.X;vE  +um>k ,˰vN~QU'w|w]~envٛFQ2.-ae0y!HYM [)7CqcǎQcFY>1&=R|~oYjwO_K?Ը4EFcǐ)_&z Ξ=+fߩ{$)RzĦ@6лwlԛֽ"MD0>ѦE9PUL ՚cs0V͌)\"Sk*7b8QJU,T?g~egdm݀ve𵯽 x{}0 K${~ Yƍt<V^e"fSQbccÑnn~i},iJ62آoZH޹99q R:S"~(EI漴|YmRJkᙧv[qϤ=8&o'~}1'?}~?=(GNӧh487;; "sWcU}h?ʇrS*9%E !3ZV+\?.X r a@C&@ Tv.7MB(<k*͵w[WM - R.;pOaAUmY_}O827Ya$)"vK/}g8C" ) $]___3uf+Jص]ڷqNVN^Il:MXZZy#I$Ir_e s} ELj8?ޙu;+߃`0qq7IY>f3EE#v^}o_(koYHhZXZZ2VWWv ~:._ zambRic?l1~_ƐJ f9TaHv/ym-Kka0tPյ(^Q 0@ L jl !e^(z&Eo9B˖Y\Y؝Ȍ^N<)?a# `/6w0:Ts40hC&@ӏͲZKv:W݊FԒW^ufI 2z=DQZ4M Vzϓ%L8F0@0@2@Rs^Piꮇ,<`Hx駝e/Y>FY>I\J@)w]X'2?o/[]_[hwh6)8BnϻM~6[Y[ӧq͜UDGz\j+# ~i*Blsp66!M|LpEǏ@ &"  q 0$#~$٪# zJ2j)0u[Y5PD qogluG{B ϑ f:|$ϞpQ!64RJ?؜Yhcuue~3)Yi۴ MSZ-,//hVѣy&>zAaaFo`Z8v3,M,9`=lqn=xq"<KKKd|!a,}.w*vW^y ;7Wos} />HnfxFNg_6ж?)e24 hdqJaio9{AΜp9LjbW1Ƥq!m|35r@ tL ՚ozDg \f+x)w¼ ~":;Y,G>)T^&-qzavE:`TѢq?KJ)1 njly;qQ c=zN%+Sʎem" '(ZJa$XYs8E{ǎ8nd2\S#֒{yymVl̸q߃`0@H͹o-#/m?U ð{xS?/mooqmmc& n.-*\!9)_k׮ ť~V427ӝ>(^|KKL1c4FOaivKэerY@\H`ݹ/#aK\iRWoxgDBA0@ Tv$|E0 LF Ibc=GcE9bsDspU?+<;=whIqh4 {JHWBcuuv4Av9/Xw]llla08粵帼iou`vv333Z ~Z͍Q!2g+< 6I<̳~R:˒SJq| 氰@ K`+g.nqs|~*~w ?x ZweL ,:=Z~ma7"S%CHWqfn%7 ZkE)67\sHd &% ݣn@ " a">A`V+VH@*m_Lg>~eŦ嗿{h¯s8$p uAE~y*Oь%|L/c ~vN >sjYzN XVTY>[B'{;-/|{?R*|{of7+r?auu{ŕ1oWR 2i>:XQ^g~PM;Y2n>g`PP@ kWB%Ku.:pc,5@ LWx;'Y)2<L֢%wMr33̪9ӐK}ydnՀnv/O(t4 Q!kN8V 'm$~L~io7VWWn177 6y56ߋ09Dq( 4cHAVieUKm`eR Y^sai.֎f1t~6 xGZ 'Oٵ=g[yw0&칛n hk'o )x8%,,CC-Eۑh4HđY>lj%&"DQ3P-qk̸0Ɛ*>;RJn7ģ/Rco3|&0*ws9W( E}_{\O'&oS,0??W憌M>{,;Vׯ_Gs;FE6^f'SXK3a<]{ڱ>s fM;ʞ_Q's +Lcny0>XJ2j#',),H0(pKIpea 0DB%0. a&$P9~KyeS|Fc&+;㿼Ug?#ϑv|ȭ/Es'ORwH8p{K㇝q,o -Y>a8 D0z_6G ie͛'>0\՛R)z=ܼyZYe+l6q)@c?{#Y}qny\zzvg,,\rIQm~'2f Y_lHe~0!EE0 ..o;=sKV^9ɬ{VRys2./cx!"ط4b\Q׮se {a`VsV>ܼ>Xx5qjZ!Ґu-&p+5@ ,bb0& 2[a/[f=RK2fRIxb Ozޮ|g+Pyh<)]N8Dw{vU/ȌśGLn.N3<12VeT[8WK[;8$kK?޳($0`0@f6cke<$%,/SĞnGZZfV~pO>v]3 8GxRX[[ >C j68Ǡ/)L`Ljo|c `X*;-柫 oOC+ Yf̀)aRkhY"W4P/@ ,H '? nORD $㏟={90 ڻba=A? gf z{Eu Nnߦpjj=ó6~OK)1]mU!ߟ~svz4a8b8CSI{ԩ k=T{I7¡LZͣjwqET篟(xeԾSn6֋2=3R/*אarb`JB3]\ !884տ%1D͋@ ' &X6NAX/`R#Yg6m&vNCV"88-t6VZ}(XhrQ} jڷ Uㄓ؃3>Z6g}9,O,r3"q̫?޼x~w%~3fo_4EognI C!ѣG@ݮHh41fJ)c,+o~e|ͽ (e.kk l2=-h{qXkHJkpWlj s5*@B %52@ , &Sbsn=V" H% ]썭٩Y]&2/0Y0/м Q Bٳg0Ŏ.6QHo-D{D3Nl{)RKEX*(V Ӗ0PJ9[ku+ٿ-V Q9g? xZ0e/.$AEnp4b|,P >GrV`-w@ߣh4BeȌm|J*vdop,7?s\?x!͸dӥ "4 K.᫯M%@en"7BeQj(a%|c%Dž qSY&}$56u*,S3j]fD &E ' 4w1n9TRL;m<Ȭϣar"W4Ȝ/ƍx>쟡G^EyoB_Я@1<j6px1p+fjYUKJ Y9wvSeeY2ċ?nVju6ag6Ok[8a7~(λ_g鸍CD|giϾ%|mޯdo?=q\xOܪ^I C$IvFhTrRwpvާ5OؾaFׯceee2 #J*dB96q=ɔ]Ęy %!z ^(GYԠQ9tA `@88n uԀ 9Tҳ.&qSڇ-^ݛ3+vꪅ6syOnkc8:՞[T*~^yqx}?^vhL'j]vhRIR4 ̆;/, l9VpUg?Wy䯵9([6 Cp~q `[̷d|NzծoI  iT  O祱Wrk_JŅO4Aa.spslȲtǾn.cEda2=М7.W) \j_[= !?|\kxOڷ^S&;2lmoɓ'sD{=zp4J7GJ@EE00a,4b{!DY`C905&WJ?O>9L$chl\8 28c pƠoKJH jCHcu%9gޔgۛg١OKkEQUZ>Ī~ (}}g_>O'~5k曟WfC%>?~<8H)u6~0.2ōte.f;oh,t;^96"<S MD&Sƹ([TC3mwhp93.us;HK ! o_Vt2/Mе]Q{◊{ fqdwsE_|Q"qdw_"n^?k!ګoDS#.N@lsLl!̌5O"Jm{U/)ۿW ຶ/iN8]$qijq昅A(}{.RB94EeO?z_~>uJ:)%.>#!`UY6sX>[7":5F)?cw8oWJ!KSi x LJ!=z/ѨMrv=ams-ro3:_xa۱PISq4N\k( mf@ZL0ub@ NDBL*`Ɗ)vPl)52^Wo6W,_Ρc}}S]%pYՒp:nw Bׯ`׮Opo+e_:pOz  qKuJjVnB{UomߞֶӾ4;[FΕ10"*ҩl.yCJh=ש娰,[6nܸߣo~aal Kڬf$I#ӯۿO{G/dy`$IdbM.] /%lll`g{ڛG8.רg |5']Qp璄f82ty(RY@XP0@ t{Ͽv9&#E1 LYg@ϭe r/7~=쟵Rp!,*f7}>/~wp\ T16ǨFƚ/&֑ >q9/2[>MLS9J`9(LpfT}(.OfU7ZF#7W'1@yGh4ː V;ْV+A5/Yv2?xO+[0 v9](l(r`lmPJAJrg{/-t; QRI;GD17c򡔱ܶz|k A B1 !8L{N@Jk)fYq`@87N-g9"ߗ1 `FGp@ UYs+[83&Zp<,-U9_[n=aȩ)0Gi%/2~!syߪdUZͅ u>, '}D(LkYGX|J>{{0  p ^1WXZ+KZ<۸yfW{Ǝӧ/T_kS}Z͛~}A7/xO_y );VիWj(ro@M sy^Z"H^elmm-l;FQ1XJnl&v^Qs0JTP q0 ֕/yN@ NdM 'UsB.H\K@e?(;ז5Y_>rup礹QsZs7`!+/cxd ‘w`Xfs~eB]kfuV(e"i<}QUڶ ðtߪ|rfѾ/j"X6njD _Kg?@jO+oۻt`#|+tfe˗k_9v̌IM#Q#2uS7]}n蝅iDk3#׏~7*Y?_ӎZ V]nho[;[K|z ?4bsDUOO#inw6yfAI鶐Js۪KyMEv h,ѓY>?|Bk}3~ޯ??xMf+ JѦz{nlXnk"X%p/ݻ1 A3 #S^?BQ S+JKZ) 8\V*؁@   t4@xD0IHd3t); D}~2)E?Kz]<ϑ]:Ϻ/E_{ fL0Lw_n>ҏ't՟kPKtA8EQθ4VHcV|\{.>!c/UطGiVV)8G`6+4 ,w:X]]=1 ?~d||Df6x `Ƙ# b^xylll,l;a`P|S;+m2.s8ljg̕zmZHa=zbЌIe"̴Q} j~@ &DPhECМAۍ9;&~YY铚\)^T/u*'|2~6ξ*V緗? A:c$ƢlEVa 9(BDrWq4+>}Zzʑ0?Q"KӂvCIh4h6Hm2:;אBf(NI'a,C.]0 qWJ IDAT:(4ļϔ|[v èXkGϤ+N|UfJVH,MCU(yU܅@ N&Ř~Ap )0š֪dmP$BYPǙ83 ^x['MG#Qi #}rs ^'bN?31%sI;º.K:/jՍgRUUJXIn,wx,?kZ4^^2hhșd3h~w`m8vmEPJ!"()je`m6UDQW"Icu܍w!`4!2diZQY>۾ַ;F< *ʱf316I#%8/f{SycReu N;;;sn6/tyg R"/Z~wb[5m7`|`RB0\ A0@ Nqxb,7<КLM.XWzTew\X!kvȬpT}s]XK,\@I?ɇ f3@0x$oU~&+:R0 -RӲ}*;z$pgͩ69*\pEF>Տ cܜ;n6hPZlbuuyN6"Ēpt|_h lYOX}A puYM!eX]MI0CA6C7fh3<|NFcuib4AJ(r6.ث8H)xطvQZl.3WrZ7ksrR0ZrH135,S?(zB@  DMk@rkWkY<_5(IvZ oG98^?뵣Qb<>sXYg)!xe.*@J P&n,0vfRJqNn,9'KlZ-㫄0l'$qhhl^RA Oi"N$I(QUZb~Mh nsw}AU|>vvvkm9FvFcQ4t6gxtkd#u{{hf+lǶ5P`q[ <Rpg50[m~` nRXi [ֺ`,LB$/p @ wJwG:+2"cDsGԯߙæ=nZS.]k~u>㒣o;й+W_.وZ [ :p_?η &VO[@EhZL1ƍ}Q~&/cTpH KWmōS[9uus{k]XdIj׷rU{Qn;wZdO 1$Ivp!`0Ç!tRe?y 0jU{tدߏFQt'_txbo4uBuݟ!C$I8Ei"Gnoysyh\ `s{(_|1wtBsܽ{¶Ok/x~`aJ۰W_0JL3K s5PJS?Ѻ/ G;䔚^,@ IM@ 5wCڼY TV`k< ơvk5"mlvOC ӆ -bC?'I2wOZhm i3&JB889 Q ݻz*u@J `Ĥsy3 @BAw 'KV+ϫW]&B ImKj딿Uy6>[^B<~1hE2FWWW|p"5K!3هTǃZ>ۋ0k%+hN!"5h4Bǎ /asge+%k/>sܼuy# CpưǏc}}uabuu<69:4cq5Ras-4!FQQ/yv1'ڈ5E(9ij`@8eL '7_¡RE 7Qx9 m~kt6VZWo v7@L\fԿ97EH!,V K6+l#{ Y?+o[lЩ6!8H;?'ƛXMKBCJA"L%0J` z?Ժ4ꬠ p @  {v Zg[(lΠMp19$&(x]jm ]+e,N*ܿP1O͞rQc4" sB CQKI It:"}  }P~&TU;e  Ql8<ϝx4Bq[ج*:3#~kߦNks/--!`;)a~lMlnn־_ !>}m|W{|ҴVk+i_k0{@d=LըJBHph<&v @R̿O pPfF `ZAYD 88Lq}UƘת!f*x1ꫯ=14SIQVC"Gcv,͛7k  ɑvxb2P3-0jbv$4h4Beh]]GӾϴk|;YUp$XZZ #v>[ZW_' D-TfXk;dí[pڵRiy$˘ueȲ M<~YAizG_`}RicyyyjEe@s9?yx]nSwn/, <ˡk} HO}k8*\;CYAB@d^}Fp`sR)pbSjg_Jbq=a5乮y^p_< #4Nooom{VHvV Ϟ=ChZnG;YX)%.={ȀfIτÒVfIbKp(tJ>韓ϩfı\}su䫀*\gl/qߕy`URU)c׽l< 40ID/|wB[|_? %~ cܿ)Q+6Eycd쇳,EG36xYvVJbuuƾ}NG#vGdY0 ktmG?^6 C;`6֋8o+*B=_Z#gŚ)lip @ NeȵxQdv^CNNWL8h`Qq_(J01bkk^?Ov')VFi @8}<~ݶ~f {l:ٿ/(Y@c"3I$g}^U~}u4tu/G?[$ؑ+++hZ%W>}'`&>bl76+WpΝ=՟2B\z9V’sEiܱ LիsV YA6;wn/tATyR ;e>e,Gk]7 `-0&> 4Nj@8)uugH,`^+aw9;Z3)@VP ` 2n6{ΡޣNXuCh3~%pBexW N6;- W^uY?Ӭl-H[RZҥK*JWXo/rVmr9Ngm-{%,--!ճp"@ 9c7؍$ Bqwի#c+h$_G*驂gN4`-`)`5] @ ND±`bn@kA ,ie'X)LC 98c`"8̡ꫯ*p8ud*?9v}px Z6ڭ"^0զ@ -á+8>yB3%P|ufZg[R: cWg7+* `iߡ~_[|QT_˗/;gjj' A-roƋ/0<ϝMi"H9BĈeȼ7w^.[1}}s~#]B@x0nuxɃŜg2&AkoLg 0i=/ՐL3{0t1^kSR `O C9}RU##r@ D±:Oa Bhh<+TZD> ΕOY,&mvD\_}囇z}$X__Ǔ'O$DtD2Ç( _+W54pR22t]g;mRYY@A[RӷH`ݝPZXJO| :wqj\#KoU뫅};X" sE_q)Okp֭}_'IhTNA3pg|/PZ)F#t]\ti&\n 5R`c4%sdus,ܽ}ga `2 $ 1՛9scP`f%4[>nsY95=@ #&ch7c%/缰1EB+d}ɳf& gvq_YMƲZX,W_}vuFv^AF^^Z)1MWv.RNO  Ct]͛7'Obk{}y_R6rGrΝ{(\<`;&jC%%-OWc!~U察!(B$][[CA,~^b9KZկ.aO}AA^ʌ,ٽ0 p8t÷ nZhh[H!S\_O~صBJF#$I)s뚱1&"BJPj)c,N3Zl⾸a` W0m"ʴ;ks@C_)R tQ@rB1yhK  " dԨ߂V ,;+O/ܼEi7YfA K낇^Lx|寅%e.0R IDATPZcqЖ ܤn@y|^%pX$©,tuR%-9by;Ws-mFu*:U_qgVmJ^t:.n;%|`>[U%x~',*~Ͼ p[/1*˵ж}}Z ?C q i_>,`finMSF#cV 1#oߺmafW҈VOFONU&2 P`hAP/j'(XbZ#W0"@ IK " d \L_o; int+ã"ۖW._ƕ˗n#paIa87; ɓ~Dv|-`ث@mK4swտͥ_$si_GKX^^*fI@jLbN;al69ߖD^:c 7n7_I`0@J) HI`lze9>k<5זJk<{ Fc"sz=hmof~Ic8!sTb$eY ,--aggg!0FM \9*Vڨtubژ>{-N@BpdQE C`@8cElwJET~-ZXY#Yq^?bgˇ~ Iawnp^ڌ@ DNf$,ZIEh4Q#MSdY3Np+xlIIF+++t:X^^F$j9< &@X,bJ_< (e{vSq0V4ݦ`<‹/g ڐl Yacc^vsJ76d~:v>XLsQ^ͧe_Ii>\1VdL{u8LxK]EIU3j@ D‰BCk |r@@C) Zs3vnо+ϙ_d,PX^7+3 {/=#wԑ@8'3<-}{g_1kuz&K~8:"X)^,[%z- BOmWN2@89o0V{/$IΓl$ F0`0P(PrG;D1Fi^sVWWM<.}7 _= 7nX6  ؀F^?Z1N \zPPԮc@nA95<@ &cdK)Ƣ`f LN̠2Sh͕S;ha(qV,6+1xvG`5b /i6yޣbyy[[[إ]@ 8 \[*q-!8Fh4p8`0@w4u6/WJϳJ_IlS%DgU0&U[>~f_\v o:a/s_`Zc4aee9(ÃO[ߺ0!ZͦSPEΦi 5ͦFYYNaH)_;W\AȲl!O!QwV*@:?jkG*2m?7*(B5X\-8ys  @0@ ~F 08 H% W /,6pVg+0Q ^ҡW^_m)@ G>/Mc5wJ~Ͳ Ya0č=txUI8gU@}>^G$@8=Y>giZ6? !^xa |TH`H @LE!PlRpO|o>R+ܺukkXvl6ϝfl^Ќ1\v ?l!/|.RIG |ҕv4$ /3}T2~@ ej\)pg`B )f, kU솶oO8Odm Oxvj%J6*o8m_/qcڢ+@ q0f-YlIZW+#w TG K >TϦjޯ?s[7oڵk/C[sudl=!CٚrQ(uqBAk,˰lXtÎqqގFPvRX< ,F<`s3#*\O,sȞ^mEjP0 A0@ ܔZK 8BW$X@GrhJDNHpjޗQނs_CrC$0@ N`>P%6>^|'}u"Ij\k=7dOXN%N>;X>įkm$ ݻVym2OUvaBJf$u9Ah$HޅagKwޛ-7ٚ O(RCḦCdSUwYߞ:o/ tU*A)N;)R JIBwp|| I#-Kɺ }tMߵ\JYg۔!Ez74`${-AA+(DQ (k3 0 0;Il?6%19 TIxD+iD܁-U6qYXVJ_~51 01a桯U\瑨[EE%ׯ/Vkw#ݺ[ݯO?0F8+w7ؐcOk \0aBJ,ˠʚN$$ׇ8~u`qAnmxX,0`8b\-sEQ)@ALEV^x6!f00T҉tE}evִ"`MOw+W^1 !a mairL||,3 a pZ<&/'[`DQ@h ml_ C`0XI(Y z4h! [DeD} 1]aX%nu*C }/T_zs|OdcaM$K/L`8Y)'?ٶ٬ y"@ˎ_?(+5 "|o߾Yt5]neuv(1ο~mrKP֩57Kz_47muP/D)r-!UV P E >&j |9E3 A nk=zRV`T 2iZkh#_7 Cs\sn~?OO_!@ĈA a`^on$[E| 'ϟ1C߯#",s] N)[X{D3[ ڥ'*=v#P@ 5#0cո a}mVhT0P sPmZHq;aw`0hm[QYWAm94ŢcDQ( &W -/0v,/dlN򹧧T(ZnSy= @`ߔ1X_v yc`X(W*E_($4(%ezL0 @0 HQui9RIe6fj5bG旺6IqՉrV~筞)>`80 ô ,uQvHinB/]9_H;hBlZ4o[a0̷gRZ۶uE!?uHA4}||0T"-'?<1LV  cON|<+s\*oUY0 L^fgk$/x@,_H4Y|rᆪk13 <6,3 9=]a se$h[Û[5DBb lB1w#T@BP IQJYf!aѮ 0HW4 E#|S {EƗ.Y_sp; ]xˈ{raaw^:s}컅 $ Uۀf/{0az_(r"6n$I{u϶Gaka"c(rB618 \|YkO;=U\nߍYyl/Y] Bk(ek^x۟afG0  rm(rGdޥsErWp1B-b?Y*>mYYa@$S ǾGo_L3aSw. kdKgt/iG>+_~ee𶳎w|*It:1(D 8(\)>RIE3ZkEQֶR"b7ͨEKeYu ٵ. }Sz()2 <ܻ2 Wϋ|7cL&JfY!4PJ" a:>|QETŠhV%qt>G7j֝w>+ۊKacS;q]_15:FD" n:aGz 0J'S_(;'Mk7y/=y7)?+3Bt G#LS>a{o㣛j0Oz3뷜+7ct:q(\~o߾Ⱦ#IxQ9E#I2:*\~Y,CQ8<<Ƶ EQ4^ӚRVqzn8PAu4K88xKӂ0an UuA2[83byHXfy0L l `a$᮳x  ;v4Mfaa,qEuZW\J)DQN0 ؏զ!EΑ,tIGqsJڿy͓?^Yen]0 qxx(0C6}Mi^k/ås/o(Ѥ *,5>zB)w0 a nmM`h$Mq7 $.`CkW( :{o[?8ڭ3e[6@=l)bp8Áaay2|c8v?ڄ_~E:"09Vf/+U $گ4WH)ERs%yPJa߸\(|Nc[~*Pou㵒uąά@,WNL .Dsy4aa: /QHâ:}9ˎmk,lgE#޾^Caays,̹~|&n#ׯ/8g1~'' 3.}(GtBDRBJ9pyyhp<ϑeٝګ1[ (ʺ{˹p|fp;ny-@T7cd.H6Iv^[S&(e-{e6xBQhnbaG 0;L7&7w7 4fQrrXή.|:1lR n{}vi`x  0 0 6|yE0t߷Rx= z=ĥH$4HC)Yxi_+UaU}ޤ,<G.`滋{|^pc|hF>6Ęʺrp wB$<_=:{a\' avLp( -lg  1dpwMw{dc/|~~c ) 0 0L縸d2ޞ"tv]ԳC7O>mu-ԇu: ,CG)Q~|Br_,0 ֮|yyr`1W7l>~u ƺ)cqv5%cF\ˑk !:# ^>5+*e5afk}gcmL9(tf#<Ln/e5rB# d/:aa4=/ i:ʏ|&.җ\+ׯo_tyך{!~VttS;P Nl"os `EFgU\=gMN#‰@ib@TJ)P *Kyy>Vlp3 0\# aSY@& pݕMƔ (8QxF!ڻvqxxpi<0 0 J(/eߢpoڟQ!J3ݷMsE;}Pրڏu%!8dYn UE݃//_Оe...p||õ_Fb֐$hcPE,e0R@) PRN_|y<<<ׯ+*.// ߇^ tLj,s@Hp~:gӧVRA㼞byd3HD^>ٶBibKnhck~P nvafafTw6SF<=7 ZP)9Em w3 1K6i8;; x;aa1X'X$SQ7)O??8FZk!t.}t''f.]/mU}54WϺ߁cv5^ @zQ@ C݁McadlM0 8a!. Sغ)vR{fs-uv2MÛmik/벦IcVch8a:[ ü,V]CKaI 0&Qq}>~yQPl1}FMz(%EV^w 4?;>~Zq=Ne0󹗗v~7b|Rtma0(]@]?{.#EJeTJU[|qc 0 nCb4:+̩F$6A8 *c@!vc@]96TC[Be"ލ !댧y0 -fyG)SxQ`A. Є=nY -^Amn$Iߢvo|00 _;lZo Ga^uwW(1RN w8/ޡA l]ۋab>BV/<1N1vf IOŭA?nA^{JQI$nڷJ)?l D`)%$q.Q D^__R aPN~_vYa># õݿPJaCZ E=jc'*}q+v08h,-5a8DAX~ڗѨ'UUav 0]krrvbYX1/n.-? r@X¶W mp0O?"1EBc1MF&Iz0Kdg_ߣ(r`ӗv:{t:@v:"&7+t !0 E!0bLbXk9<L|^UXol{;_0 횛ק(0K/^Inr xJ"UfG00/M"0D!X?;;|dZeY$ _XJjD>8=9@AEk 'qt>5a_xc!s Z}3*/FC 6{ەlqhH[Xk-> ߔR(_e3 <,3 ~} 2ڦ"-QuV[[ B7ٽ9 lp4M1( ôNNw$n~}BZn!Iϫ߱a)pW׌~g*O??.Y0DQRboϊa"/mχȲ 8::.saN}6F Z"$8Mkh.!ik&ZSڲe¶5kX 0 CXfya3n7UI! t`yb^B2 ZɆD1 01ՆbiUݢ(|W<ϝ@{ou}$grH`z3~_޽CE|CHֿW'$k]_ |y9. }F ac%o{TʉV+Ea 7ZF{k/Fey170̃/&,i(t9@^NHM/ ș5'61O@3 <=951FN|`0 Jz3¥;}yGI$Q(Oa%i1}Q^ ^pom{.ׯE!޼y?o>ZsJ\(J_B)Qqd>(7TCQ8</B "q6Pms;y60$I|81,s2T=/%oR8::(믿b|Gғ>gyoa]`#hs[Mm,k + griP rnOaG`a Z)RGQYsrM(|s"S>Cd{[]JӔay,"}Ͳ̉$fY~^,|^_k(g+ιBE0E,s5Rfa 7Tysg}cgzuKboq})۸~~%50=Z 5>tgʝ_??FFNYCⓀ|nF_x[tkzZh[k pgkmkm(``a`af ;ݏ)Q~vYal=e)`5hwM僃w+˗/|0 Ӟ+羭~3[~,|>b,=/4|oK0 X,*0G1MYn<~IFEꏫ!M^>okDdžߊ;#ͲPOREMYJ?}ׯ_ l6s"5 Coa,ܢ6 J)sy(*`q%ŜFQ^3"v Nf^Mb?4u7==I^5^&g{]_?__:E>̧&>}]I@Z ]賯h0M⾼6ac|w=9z^&\ymn,s2~) 6z^k@)dR.t̘哥+t#$Lm4$ / 0~m&`j$ _[7@Zizde)`̝y򲳹Lg!tkMj@oe,0̷͍ڜ~m^~p],HԉNN39(YkZt:NX,L&(N q;|$Ie(r4V 1 e׀Ԯs_TQL\ۗk\u7}0 ,3 KյjF+k`;ni~tR5і`,2 ӚIkQT×D_riZ"뫔=>s\^^h0Nm]PJJ)\\\8!qcX cn &1u|]g4Js/Hs D%ȽOXܣǾ eR{AZۈAݻw8<8Aߵvϲ0;큫k:Ǯ}8cIcoqŮrz{m;US+ԶTϫ+ 78\6Jȼj1000̃Ej96ZNHS5-3rU3f9 9k\@`!aozu9L|\$|K_=fRJabg{=Ya::i6pBt:vwCJ/_b2"c$IDg?8/ 5E`9gst_^?wj}L:#.B/K8?OO~vڴ_i~e:n ^us^^`{{{q{H˒~\O\X^om't/ur(yv-/ c70 l 0ܣ A,&ZhyF {! jMhv4M1 01icy C9gK/ WWWNNHWWWX,N&DzO{Xt:888>^znN3p8x"`^V}Q#)#^L\s6$|}wX@k",l6t:x|`0W\W^a\n,B8 WZk$I^ g;{WEik~M]ܧۨw= %r=cd?;o$gH\:W>2#y:ϑ->*MS袰c׏Χ6nk/ޡ'\R"+7X1Xy54./Grc]S#Qݨκ^`U^97M6XcZ}> ]RF.0pY)\q3 0 #Xfy.H&`AN5@۱\3r]$30/VzlYM =%Y6B8ޫ+F#;>'ffF~w ZkL&b;+Rx3p/7#1KŻCUu蜡~A.U,3JJDAXi?f95Ln3S{mv_~f8Օ_OyW_{{{H1dCB:+Uzm;!?~'`qu-k-e+F@*/0̃00 Q [SJ 0%PU`E v"_c_m;8<:f/^y y5W=/Mb\β t:x}pW^ ~߹z\_ _ϣ(㾄xY{ Nt>Ц(;/kUwqϩUN]`Y\$sEsw_ 68+ϭnw[x"J)DQ\ۊRJ[~OsI`2T3*?H/spyyC6/":M}5,E}H!]~"ZeBsEAAPkans 0 0}@A a oCw2kO_*('4BH@JPQ{7w]AE@KNlX/K^~L(zdQGB`1;/ En"t6$Ilx+'^]] ܽc^'ɉ~GիW?*5M뺿Jq\,gIXbh|3%}?muf3wf3'6cH}y,CX,q(Õ<ϝQ1OG?"zǮmMNߣL}A998n~\\ 1_,믿w͐7][x0T?i)s ._QOk lrTea avJ[:%X]sŶ1ʯ[Uelm5n6549 Vh ]9AQqjZT(W<\vaDTʛ6 i(ML$qEN𽸸pqF)L[t:ś7owa0#_ԯKJvYfZ޲٣L"/}9Otd2qvt:B8( acIXЊABrX,/9}(BX, q#IDQ$}ׯKTEO/tߥ?~gHL3C&K?..`v8ieBxCuZI6<_Ǘ\oz655^F1.0.aaAimf㝷$ nU ݍ)@ozKZ]wK %%r#68Y)כbɱ N._g@.N8I H)E{ T͏lXg zH Q9ї0 $ ^J)0#/5k>4w`۰˄mXYrh?7ZSAiTX@i5 UߛE`a]00̃ZoڿEӀڟ\0I:h}ssjmH:ҥr_$Aew>;Ln;«'KAwb9C^5c @-9ÌRY<aEwݺ~_s\]].bD#h{ 'lv(ɤ1 _䭋F,3O\'~&? Zkf3'Uyc6~^߯;L/$E{A cpyy3t\t9LbsX#lF%#RϾ x/Z[sx?Yz~u۵۷kÞ9 198b1@.Xd^WmM7۔i,rC)&͵\*פl2Lk@*Ss?+9-a}~蜽n-~]R$r?M̷.L/E?iꜼw.Kf3F#^6M}Цi/_'''888@G?eMO"(I >?3)%7|qttw?5^_ITDz)!:?З,7?0Ϝiq||3_4,ϗg:B<̪\nWq2 <,3 <6MA T~5vӕD#)1ϑ-:lbaw<Źww5MWMYfz⋒~V:/Jƍ7c ɔqhCB ##FNFL&Hԉ-(Gq prr0 繋aum_; z,3߂&n%<\bucs^__c<c<}s^___ÇqttC~Zk Ê$ku:7rT[-UPJd-^ )%-^~' ]̿EQnzZH׸ŶzRiM6NI#-ddž5m?x\.NFM=!־*fxK*Ծfav 03 _r`4 M$aifEĦ~A_ߏL&1n&bZR|\3Ot^SQZ#/kF 8 [M*UNBJ̦FAB@mCLj^__;ׯܿu<2|_vbYM6aV|cor7˲J_RȲŻc C CexF_x E|'tEմY'%dw;tZd毺.i1T)lR{?sy$;v6+I ,iw6;Eğ%]+,+v4z 0 0 {?l`o~MmlU.s }ZP0Bwap<~m__wӢ:ny'6ǹm Ab PQs,M!0)_&x30s'"_$&d2q?4uosh1)>~=qc\^^b>#(?{Ǝع}ɵaLy%}^T2b6951qyy,˜[t~qvvz _~EeǕ>;~bJ[Ƹ9en?{lo8@i(ś|F10tqS2=Ml+Qyι/+5+h~Aȭp\v3ey Xfy!.hhSbing/1QR6'@cKpnݿ.R&/ V&(Sfզ8c D)2Y( э"a:z:5]nmj~=dr8~}} c;})Cu|nD?b6!cq0 Ǐ$a¹/ee~kXhTKh4K 6yGGGΝ<]?G|/rRf\Xw;y$Ip莟/)S /_.4 E4f?i6uhjƛ9 Ի}60c00MEJom_+'_o;]3EQ|~+'E߷1K$8991J)\__/Կ'.)q||o^ MzC~/LgVwRJw)gdbݲCU7tꟷy.\}7qE^—7co$0 0 s!S2֕t)elZEB4໻! )mh hm)Y\n~]cankpiᄄLA}>]D$z Cϟ 1*es pv?o.i9~n}z=f31,C LxN\#l{ҹtyM~;Ep8ŅAo[{Ekۿ{^r}LW7Ay) !\]V'pZ槾դ졣kC$L&L1d#8*Nf^?[x}&)+Q B4Z[\ ܱܬa1bEk]aDž`auˈ47t@nbܢATOc Ux"8墵vo}L'v²3M/TE} :# !zenieǯuJWMy;:u;i[᳌UL*>{uBzS9 vye'k(z?_۶SAM8aaKapGUp ?;[i6js ;ƗRuU,vۍ`g#RУ+(WOO8==u.ޯ 4E\7qTwz̦) i,(ZYng^ӻ ÀޯaX4y91>~+dYN!9f&s>SG9k8FtGuż=GC$ Z/~|.\_z_M闣;W!jcTV(?;caf7af'Vz~m Bs:ړ aE X!bQ|] NjW7 ̎26<8w}wT{N+z]NfNJ(zN(*v>#MSWyf矗;E֢(0͜DbqCH~jo;w///W\]]A}yz_Wcr̹ff|hiԌu {=K9BJz=sXi*^:Fc:>'xpc=g a,3 <8qkw6 TuΙ6) r޿?IGh#scAݵ L˙\~'^ xDDIUY^Ty){|63n~O}o{LDJ$0D\HC<֜…~x)LS|M;.(F eZ.1,Ks^'wDQ ˯,;J~{o]f8Z "0Z*M76ํ+plDA82q tj[ XGLbCXg`rZu0JXB4akzXxG -#*z;'?۷o}51r ^_UJ$ QNPP#wjŶ3?aL8v[l;f3dYr\E 8vl5p{{jr+1H}b?n1&H2tEvb=QQ3LkDWi9puIrwNvtDA8:2Axb0G0M9kxKmRL& q ;lm`q &!&In [5}ڟ2sg/I0DhZ\\ K9ys_6]Kq'0w. mrXVL&Ns~Bm_*F6ބ8_>$NQ!MUv+r],t:.Ch Hkq 6-Q}ڠz= <" <Jś=&%{>LQ=&i |-,C޽{ě7o}x<峊۠".BR(k;89VU~^~(^)v(dֹ)9s%e|pssSs@pp(y11b-_z_NgկۍE*n,[a>A[LjFk7KZw>xjV85w;]I~oAB`A#@\.( RJUSӴ&;Vpeg]6/:1R Ztء|J1K_G{=$IA?u"PhGGBI{__ݭ!.qϑz+<$u6(e9yM7(@ԛ0.+s, c0K/wu[{U(2"Huvw:`Dwʺoawg؍Zu^cRKa$m`U0Cނ㧘 l)Alek;\ញefAlx]18ߏxD} wl{B"S q۹K"Ox@)Usv0/닚qyc>;'̷ֺE\M:R>ve9yCC-W»62kj,"7YXXc*ax]澶[G9BșNSI&. =dF?-PF7\Φe' Gz4$rs/MN_9On-FQT 6rE#_NM79$by,\j?D9PRwwwfv`xm@jeryi}|nB) s!ӗ}7c#(TVA^)A"oRfMTF>Gɴ(zZ)9:NjV03|`08 5]?w/Tne?c2"}!&pvU:9fK__/~JIO]'}]y7̅u0cݮSze FCI}mP~}+eG" 9 <MyE mӔq풛D^ߍ3]@rbfSS{}ɜsB-r4wOq*ܞ/YGhz}ܙjBeNC?.Nr4W:Qnk;ZVYh'!=9\n A\{d]E}2w߾XD4>^a;tJ OA J98RQNjZpIQ0g-* )=",S8^n݇68|qwnmpqpѡpv2];:I//˅1vMUeS+ڈ:%~kcN6h "?}=p}}&ǧZkUgAAb6OZ=1wWSXQ  ,' 0qvvBZopQ\۞oߗTΧIeF/wF\0+؄\~hw?uZ6.lƿEQ87˲ZHeD"0[M Lj"\=\O33vr~*-HNh-, “!9Ad-H{/F{rk-LNvZ0xlT|9^[q>/8ӷ8~/PmBKa$n7b_jm]<3;yRBxnq._AA㌳A-E^Z/FQgeS8D5Ηlkg#-7|3$sCn]s MtH&_8F\b0p$aPwݿMvi+Z6ʅ|? BpQ0 l#Zq,"ߦ`8{msTz#E H\m$Anڍz'dQA8D5Z0[{I_TI 9Cyn=<͙ n׉t"cY(._nB_~{§\n~szmtlCDli'm~&NeK  Tv)A5cPjyD(np8qN(X,zpyyV.5i&3I'x6CBm]\a%mvq lw:?z} _3֌B%.lVy1p=Sxe[sX9fzs~ofAADAh ;Yj y8FtU@hv{z~d#חi6:C~gm>9}t:54z>[v7\m+ڜ﷉m}ʩ}۸'f^x8.ӏ}[j-۷oݻ_[,{Iz¾)%A@z[A#c@? E]q`:d0Ϗ"@ <;tlB@ZhIt:HԕRj^O{W0" 8)tMmNPF[X){[;G鍞pB'MSps:Yk)=\zdIl'PsK|Q_&Aa < 20sJsG ZEG[Y8iN~bvI&/ B$ݔx!o|K$zϧo 1s)wYfb+,0ءZD>-T&yAxn˅_~(>02ή1Nwl`}DC9Jɽz~ “H <ՠys7d7,4x[8qL$v:6wp(gnniso!p\޻OkF[~VC!޹֔E=NW_&qǹ'Ͳ Yվ͢(,φ99VN2g,*`ABF O r(mpo9̦_lt-RE8X%-N'49|=Ff$$79C9wCӶ2 ]CA< \mph!8Tw{.y}><=NS665 HC$\])r/(v1~MOX{xJjì r © = (CD'nMҲ6vO'Tk P O>A&G>g0Dyn>~M$i 't|zl ={)5桟zsS$Ij"_6XxR޶y}O㶍wk\%W? oK)~F76drx8F/}NS/۪_`jϻ1O=92\Eabke+$О1 ³MKh 0jZ4 NlgA("v sӂd|,_ȽlO z4`0p8Dpmer5 ho5\ |~`򙿎r%"s@P=ɽ-|{8-)q mrʭmuZÅ_ɋ8dRՑ;'Z\~GC'}k  9 gueI,V _[mL\$~'(wba-`[˜ˣsimY v;,;ֳ|p8l|/$d}''I !-9f,w8b0 MӍP|qw\e.mp諫+x<ީl~^R4ieep (撋*gI(D*>;;Cw.`?r(m|Mkw4 ϡ~~P훦)!\P~&~ < 75C^:I:Bvo{fCBk>=t: F8;;b@ GSdcTx.sE@_Ol d<(q}/ ggggFN(nh}"d]4i =7$~)]i9',Ptܛr0?;I+ k^~rm`( W 7LJ)c68V֟; ;>yºsVBmܿ>J euMo\py£ɐc|Z!2ט~7`Z֧r.9DsL&vk x!x|YCg(NSh֪"s'AA3\va L E)hDDnNL,,X-PѡmC@/jȖM;EkmkG%p(Њ*0`.49( )<@Q Bc\šmpCA}Mع;{/YoS~8v?`0`0l6rm_A +xx[M[J>:yNp&]]q\6֧F"~xuEnFq$m99r# ld:|ϱ.}Obxz=Fm,۵m"4&Ւ@W5-@)x׺ZSlۆAǏA>;82*0s<䠓r~(,;f3\N9<"EQsQ6$I;Zh=ܺN(*yyfT/ $"$+/HoSNaߕs!' }'臆~3\^^b<; wn|eS8x}+mlFEQH"ۣM 6~~m$F#i!j"SDJ\(\F?%+cl\.k_:w]wNk>+p`cʈV%q 6~b)Ϣ(6U9Ac"qA⋽vc@yZOZsx7 bh{ ["_W|嗇 ÃrWN: '|Ga-ǗCr֗j_|8y0_c'r&B\;{&؃A;C@ ,qHoC& 0irSI?()wtdCaCZ}%ڔK9?$A$5gggHt1L/w S7p Tjr`$8;;,CQ(> ї .~b|`8]_G~0,C}sT$HiB\X[{|;yW&-3xHХ7?_^? }VUkˮL%;;C ־ilHc"K0]myy4~l>};q~~ۍ~,EQlvMlۆb|w66{L֖9kdtqA7 ٸm O csbS5h2!PJ/[ܒỴr1̭`Z9;VkK,*;<8FsXcJDۜ6?cr]#2V|$²7By~ShEL.kh9k5ܦ?[~7fYo/cHKs 25ڝgGkaF7\]Y,֖]m|'CÕ aaW% QR N'-,D:l*-`q#l?'9-@(!}.h`$(r]0 9<(5*+5,[Z0hY(ñ*U~߉i&v P8ѓ8+z"0.w.\znnntxYꛚDK^P?s$zN p~ Cʶ1$Fթ3-҉1G|o=7mrR_Dnh \\\ MZg_SI[7xV+7V(1Zy^s]1>}~3{o'2n;!tXw[D;Dy٢eg?d~* kPnܾU: AY@qu5\51P@)ڍ9Y5_r.~&n:e: tkyܬ$LjD^F9'w1q~q^ N9ǵPm8q'ȅz <0ϱ\.1y]h Š8$I-/](z?䲡Mb_c\߸ $t#Zj|a<$&qNoᢤ`wimf@߯~EphsNt=B&rg-L v̦c0N?OO} fQenO]ro1Kכ?FE^0?"TY*:˚[ A{DV 튾Z Zlʁ z}{{;ĝ`-N`-,[D hW4E^>xsK=)>|3/w+ϊ;~Q '$} ŢC_8 -0C@ Hao! }=s \P;E} £S}$@krz֮=6g&2o!׏Fɐst!o۷oqvv6vm_6A{i X[.w6 |PGpi([;Q޸N6j<k A)^ZeA>&"Ax*) 4;)>drp؝jZŝL^1n.B㜼[5"R|Br(B wz=hEP>~ky]M"ډ%KNA.Ԑ° 82s\~HhM_I3s&_}<~_\~[mmw\ZD_zj}ۛP>Q$HCI>v:B`~__~ekϽ~aY厦.ָjBC]w=M&{y:wo6զzcOa,\P4ÆaWGʼkr9 ,pq`ֺnn@◵WE`۵ZsKD29D<^hue.?$W.q\jf<;WBpai I@R94E7It_ 2G?J&sp(&A}aD<ϑe˥I`rw"3qzH}Ϳ w"P>{ mwB"0߶"B_xN%? \t?G5yáKiqyy=ܿXo۵/*r,Rj0)=땩":ze-@  " ‘̓u`,M&-|BvKAv7101LB\V iMaZDL~rN&q^xK| t pP>}FN7? y w'zNQ.44}iR~JsyB=ӗ~)uIR8S^#;6r!`\ⷿ-~'_e$U`\2?*k:Vy%LMYC@sICb~TPbmj=h Z'UrJX{_V%p`DA8 ` R(R=\ (՛;qROf-;*rT)\^<"%nnn}^V)"U&l4p85@7I0 vqqq4Mpp`h1_tݿM}4~hڕQueH=FwP^;/9$+b[%7~}%JI&B;> ަ!0$Ah4ŅFy_V%$).H/Mq7[[s Ӊ?ON7`0ع72W< Qc9뵇ǻ1L7 || \'6Y<и 黴'bːbFWV{*/ @`A#@Cq0"[4k^}d0Z/_{^kN8v4Mqq~rb!MS.bՕ8}ol6p}G0*KD#.p)L%.pHF \©oؠDu A\<4VC+Yômo PgJsqqq3՞C(<;/;~;Q. $PhŲrJ=xq'?~7_<+<]c)z~T8/3_k(臨!n[< mcIk f,CNzclefPu+T_%,+D,p?(@ clF5~-d y-1!%. IDAT/lcE{0mczw<$|~Rϡ^,_|<o߾} t(& ߿/f\@E" Zp<*w 7E[_Cb.w\D#rThCm|Q+L&, ,K'!L6- UPywK !w:0qJy;\h TeǍprS1EŧOV{j/EQ:7X*Tty޽{\D]~]f-;~>~U T9ʨoljz U-e 1X(ķF5gvJ!Xb᠋D)U ʪuBʖ[څ~%.*w6ceBT-v&"l6Z_Ax$ G(^FKpǮIH A^#t?g<. SmnvQyo_ ZsP#. sAQ WWW[7lOrwb!(U&XEb[*H7,4,p (t6&Wk8ld@f`mS%RppϬѮ&e" ƶ7 ѧkscpssxNe(w۵&r_Z[qx>g<Ra,s#c\__c2Ϋ6R_~NM. (qާs߃;PҾ{9 V-' C|;dYrСpwS{39w)/%oHӴ&\=8sWvyĝs*c\t#lģ'\@WO`(Veͱ7o<Zy!ocO-"YG+k7~k-͈4=J+Fc௢DV5lrA o8߫r1rlQ:O?1`<6Z+rs8h5.//?@]#"}7`%.>~;|g"I CLS /WWW/puu?Um w2bvw_/>//,7WCC_.ߝ;?W_TjcsFS7Gha$qw1%y`ᙓ$Au_yIK/뻆a6o/Ac-fww(rx^@WnjE?ԏ]^4~7-C@kSy1]B»woMhcQmr6.ܵ86,Vs~Xߜn,'My(ꥼWkk AXf#>ňPTŀP*BֲpLn^8jr j rsj[[[PB⫊"6o!?`4wwe:`8g}nnnpsskmPVFr K&˲ZH> >}t?/fV3X;Cy|CbKh뾅N Å"1w!!jE _s璐[I-YaZЫ G<44'ӘY$snC. !/ws.D"ce]KQX.e' TUV,5r:W+yYqon_o6 f"PY`ڬA ˭k5mWyړaBa9ip {~:j'Q3߮oS ;6'A8" nJu^(2끰}Tru4aFU0` lǯEw[$~)l0/$Y_ ?i3c\\\HN& ۼ5G k~CK!,lrE|q6}z>gH[zӁnׅ(yׄarSHa40&0x)4wr0w;*4>̲rvBk,W+F#t;!`ZE6XkG(3;XV?яV"pKXzµy=^NwUzc޽Ç6]Nv,4Mwf'.*Dַ(b(2xІ[jMl#p DAxU؝WJĴ$a`4hWa#gBюK"? V/:Loop`uσb0P:?hA Í %}EA8!XDΦ,$hrrGK{뾣_ ^&-s)/0h}1yD1]y.^>4Hm(DJ4%*~ Sm[,HQae2\-0֖Byo.s?W7 Ii!"zEzL&R[rjy)C?^fEǧ͙L&1e}#fu[H!&Qp=qIڋz@A  aƁ, [ωaM|'J ^&aUCkA S, UxWnJ\ ° uD}sy?b&w sþ?IC=Wxmmxmml%ܾ$6)Q|<,5o>rrAP F`X s+a 6v݃nk 9.>5ǂyH4M1L\gEH{=5 / *3 *sr~Xs}|Xv~yE%ʲ \.]xg Ӿvwe;C3 5[N/~aoXC;?OP0XVkl;kr\>Z!"c"aDQ^YJ`~"@2Gc^" AJ`r5(R Al1vUgoaYptb!8,`[5Π۷oezN" j {\(%/m (cA@]P[CB\A_K|t}w[[p }I(4"&i =ϝWFL긐5:by` zAA8srߦ|l˅azqL߃ !Cm~'4TQ(hBB8 /2Lᡋp?}o~WL%\?~U|<6ꄷL&hjJ)^6>(ZQtS^xڊWz3[,p4|q-kJr6Awb3U[O ~jqyy|EA ~Xvxyߍ'|7pZaw($te:MSKW(B\e!qNǏ2/~?=~;'/PF,B1nJ)\gr׻9}kU\ߧ-LnUqE<QT/Ddp@+1 ! qm[t*Vm]LD>v*@2da SmMvs3jBx=Rk/// |#c&^˕mm~h 쏛CbyapDJa\Ѓ~~-1X,H quLVeZ)*dtEQAq?| {Q9e9Զx2ǯ^ixybZ! EsUvka4mMZ>o'te[zz)3Oz*2BMCCU_(y8~A`-E p,7!AoݧVwtE NxQ mnoȱ[yjv{nSXɱ% 3BCHX(Bǵ_\HE=|#"DJaXǏQ( ,Kt]}(& FayL}Q:1NO5CurϤ6긘*.+q|Gǻw67TYR9MBeʧ᾵B1+*ϣe_QWYA86A8 pgo9VF*ຊc-lɄfxhUUn)[s,AOS CcI%AYq, wBD۷i-.k1 \0)& 8F$PQj51H]uJ"EQ(8XN~nz`ׯ/0}ڙQEuů}GCT0Oc*~(}LZ#>h3†BryV\ kea w+,pPDA8,{gqD(]PsEyU`cD( \.D]BB>?olfwdRVIb,0v[|Y\`AAڂ \{7rb2~Z(/b>Gz>.$5 q#s0ͰȲr1Yk8vǒ_>1oFUᓟ!. \%}R.Rv~d: 7`ǍN+W{6aXKb-qD6 W5ڼ^H t&E pvm|4TC57VUQB,,;17H[&BEy㶚}z=}v^^^J`AAZҙv ]=zh|[w\I vGI(ȅֺ -繻Ms(i>g_.p<\;s/+~|>qcZXfB6[@Bw>^uhgeP:J)2sp{A8A?$a tu ehk`m"Nh [Ue-"B|>wy,-[&p9؂  H;C;>B{s!#(B`$H Zvth.;Er GU_g?C$'UO%rAZ.}i jCkͺU /,p~~dYC's߶![k}[.=B un`rMVQTk`#ޭY<A9v"A84jcZQcP.Ge^rݽ}$,[`n︾wwwX,nlnnnp'!AA86[nC0pa#0 0 p6ҹLHi~A\9ʹ9c7KGYϻ'a]D$t:&8UrU>|uuk-&)ަ `*z>?|)mSUiMe]xiW Usv;FjCAo T`>(k(DQ eיg׹(zJBɚPk_m#Ňz=z=,K|a^W0   PH(& .//)p4IJGpF|&xZAsZrw?n~;̀Y!˲wZNy^@k<_>W~|?hb f&ikˎohEӽ^ޤ@_]]!t\} qXxКEto}ܪM\l̅]TGζ8/t:ib0wy<*00:  a1@/sdYr U9 Lygy^~4IvtW L.`rH߿/ŢU¯ ;z=p.mri+Xa\U ] sltoL%XZk _'S)sL&)!1n%  p"pgR@!t0HidTAS k`DQehkx1(t q?onCȲ ٬9Dݢ()RȲF IDATU m8̾%ySRI:R,[+{20t)ǡ ,H, h h!j!F.67p\)$V!o;"irgmo߾g}"  fѐ$R ~Z } C\__( 1< ,+7FsJ5Zrk૔|.kӻ7?QPsk&R8 / q z->O? y#J4MBQA8o>MSdY&ȧ~p}4cbE$v^?Mn^ ~?Bpd )]zZ&HiCKͯR@kh!W 0|bS1x(V&B \@Z7+MYZja޵ 3c ` 5."RR6Z-aa7tzkk }_=`ww7Tk9[[tuH482Yka-4RjGGG_YoMk MeڛXkHQת_||Åʲ X ,]F?Ⱥ펍+K.hחDw݈YhIxx-&|a^0̫@\z#2 kW4Kl?[k˂.y^z1TNQ5ʲt:b.@cz 0 0 &B٢( lXBJEۅ[[[94EA$ϥMd MRaY uUM{^oѰVJE2mZmKdk?ã;cL_^+L/ȚڸH=CFv;V>W 0aho꭯KRڰ1y&fܷ&1犼f㦅sY_8;;V`0 0 V @YBj`T]tY!MS$RB]PJީTw~kLg7Q]UL71d}ttಬn*#ܹ}x돧ܮ!!b \ju_pK캐`E O@k1A[,3 0׸vC0 sX} L bT4@kbMY8:q6UU{1[[ aaym{>z>tnJq5mYȲ ^JkI~zk\_j`j`k-NOOxFR 0Ơ(p1z.oUvAH_!F$QOW+.d^ Xk|'"׾Bk2'Xo';yM4p%L v\W 0MʇazMWk4 iݲ9$0F^6;n{z Y|j{ͮ+wwwѣ_N00 0  6B H$Mst:F#!v!V$ k :ZK)i{?^& 0Lu] صy.[g?qxZB@8zFWbLpl>1˿MWК^U1 üak_BbZ@CC_TK,5RMGFL&(*ԪR;aaa6:.J)lo;ۮ7p4U*\I+c|z^&%!] d2 eYl ZiV*4r.v^E0e'+uB}zGMByc+^S cBD"w-V^=0 p|a囏RZōYTo8Gf;;.?ٹm2Ϟ=vtpLYA*aaTbe[bv>82$R"2Wot#WG64>b6_OkR*Gܞ~f PDYVau/>닢8w/*[6/7\Oc"/1>F-ŬE1YW铰>Ǫ4.q ( 0 sݰ40/Wkm@ ~ACJc:YE腅7 2ІWDoD@B߭x}loo_cCXH`  0 IJ,%k[`[%ﷃ8fJv,­#Khr)Neȳ ]!`LvTc-?b4O? &mH&wNҨkR/L?pXE$I%1ם_+pd Xn .^I)` s;E ]7euaWRDCnh! boo\B.m\r ceT&yS9:>a!NcXμga6xv/='~,~e0Gl -@^4"s vv)<}m Ex_a ~8::zk!U=EI7Ơ'O~@U)Ե 1{{w+Ç\ic |‚^J|zqpkݺv9~1㹪:WJLDJBZCG.kq%͚<0 ü5/ak7jbWv=LK~GGIKrPyoځA}pz%I4I0b,m 0 Q,| ,-iE2rYRiy3Y,)f֨B'ϱomm9֥!`T߾0 s 40̫["㲽L6R8@W1RHX°hX2/s$ˎ6.SUD!RZ#MS/aѮ]&-}(d7zBevtVӋ+ ü-ݮce4MC_`6JA&髄k,!Sc|gu[e2J 8fYV(s][-?W~x:b-7VjA֍r)$/#.e}g?F 0PrRxWH{h̪( 0 j`a͘ J4g5L"a izG )`qY36wn( 73|KeZ8t5@h4FQ]'_}.899 Xfa^UضC0-je߸o]a@]b!ad&%1ffLW,̊NI`:= LQ~$4v7 >x}<~cuWe˲ mhg^O wvvVe7)jiuzʶ\ksH|\DP@&αΆ[XJ‰.^C&n=aVXft{2s! dY 6vfNH7/NPّ691Zc$I(Ȳ ΅JkP5ZgL6 O>y%sh 07Ah"Xk g$^ 5hnⅴMdAe?jh٢!gpUU8;;p8eY]A}=eNuQZ5+ #H!eB:ԋ/6iaܲBTu]]BY@"pGJzA@P*k$a`aC mthPB `* ! 5^j$vMm%] ۅ厱5"cy4C{L&fz+_{||=ܿXfa^9*~q/aI=&=UX\7ռ$iF@Ӷ&X"}jUeY,K)t\1( W10R Ͳ0^I)4^NNo~?{pfAQ5YyR-fUUgw3z?{OV"enrsJVZCR:W:+ áBRVl줴F">/$4ۙsa`av$ HeX,oZ:[ l*$&TJ*O0QEp\Y2lAa-qPk lfG4d2Rz/"sg,3 0U/ `+ TLBCYA,*$&E2$y;, i~8V `0 MSf7k(k!qtQeּUU?_kb߮ UU4V?,]R ~]EQΝ;F,m_g^*sM] a$8xGh00H 4qqi%κ;z|M2a0 jn.T<*h <*#pY.ҺrmڛHΩ@C<~:T9ex<ay"a)|^f.z>Bd*9q;.iN ;:AH k@[Ucdni0 s0 shr- vR;0RBo@HX΅f6r s7{g^VBB86@ox` <~hUUa8b0`oou0 \mN_OUt#!zl6k|O N'{n׭|E=IXVJBDI%N}N54 bs+q`f7zY50+e.qtV}_t {l < 4L_>~U[}׃yt:CU(*T鷙!>ܻ{<|ǪyٜӶ>o^zF:JgcWt(6" ]I T(0>$ |촮|v?ga`a56 HS߫Jk l8X/,[K*1X]" t [Fog9<$ZUYÇx Ƹ^? 0 ,iލui"+Q~IL&A."%u]cgg4QE.u֋.NI( ctpzz NNNv3$y纮Ln/ v'K_e ))~FBjżA2d/߶?Bfm'89'MSL%2(Jh>/_^=F9qP!|0^;Ff`Ѹ7|fssWr{7ea `5'z0 l,3 Mо `kMK}h{FʬűE$RMKnYa2^1$!p}a+̧ߦ Y<:N@BCvA41,w|2̫&}-"qvI}fBY֨!f/.6>1T>#鳍=~ƾ}z$k%'9Ry/^vj=qw4iB@ZyᵺÊaW 07nNaSVJXtnlhlIҗ n ds*|6a8J)L&t;, " IDATs$I0 üjXhW=}BpQN:X8#Qn $."fa Tw]z=} }t:<|I`89ktPFv;Ic3%0oo%`0@YUH- P z}ċ~ EQ෿-}];t g@<'bB'H!$0,,aW̥VC%.1=i`ooY"2/ʬZk~`0aK=~ڹ,P[5<ggg8;;d2h4)ivQPp!r$x.eYBHndcPV[Xc\``AӚ>N_7裏w+_>Nމǿ3TeYZ)}믗?wnZx߷U-BN<:oyML7g{^!/6 VJ HgV2t|8KyKh a}8-5a`aWd6ŭR iʺUZ 4Լ.seXhbC5wGL\fXFGИV*fE/^މȲ x Nc 0 0͛^h'!@@"l6 ۤ`0{vvCc*~BkPcܻw/|Oϫ XkBUAi$ 6 Z~H u]/Ke-1@ vunUUꫯc|/=wY_JDϩ4sH)wWv#74m cxF%|g0 ǬGr, @ PUXޚǜ\BŽVJh]ں~ZE0̫`a_N#H@Y? +!%[8Kk-1pKG"LxA=]k`fC(o @QKc4r`a撐J/}%g x6{,u48qZ 8c.>={cLg_@ia7UT lEQ%4 uksJSE%P"ISl䗁e4\h?EѭȲ ϟQך.g=^X!fۘ5~Nz+_Clmm'''8caYcޤ>ݏ+~c*Ũ*8<`8b2J3۪h'FNNNǏqzz*bqfPMk2}-abKh!%1f*;K@eEDJt]=TmM:Lx}&, 6cc\w1(P_^oQ8::j<9g.OmnRAĪ Q IVYL>!q!>H҆gpU 0k`a]bG_ m_71}kׁ67='2{jJC}β I0̢_ng_=!ܹ3|.MueqA8`U S!̬>[<}n ! Eh M"QZŶKSb Xfy l!do` .!1v1ŒYXww,ļ^/A-- ҍM%Ҧslou^/I!C1 0U (@տEQ*'q=>>*ڛ}h,*9hb8h'{WٰS'Q0>0̛OWYB+L'10ޚ޴zcJ' ynUUa21*i/YkT n;JCN1c5-ĩZ|ٹ]w6Vu!`uY ;Jk)eT+_@\yaiXffR, Z>(JB" ` )|pUm-[̫"XΑAß@{eW.2|ϟ7b8[̼7CQg%t.afۛ$M!lT+]tDڥ}F>ӥ{USbOZ쟻.4iQ޿W~1m{sSv:˦WHw\oRATa-` M),bAW E/ 0кYhKf"ぇO0500,[[>6^  dSbs4>}wDAse`0@Hne] <]vDU>fܶKW ,K_Kゥտc1au]U )t`10Z( ףӯ[UH4,G~㏱w^c??-Q(˲Q  L3TU5l_/+ hQZu{VŮ7eż嘰Nإ#i! &MJ@ s ,3 \=eqdgOjm`mZY)COxCn}o`m y^H(Ji]CquGh$l]899=e 7x?OV62GkT. Rep`a֧jiIZF,Y%R,U麳֢(`<m:AƋ19>>7|Ė;wѣG888w$ ,kcj`^b.ja95-y x z2eUa08m(1hh%ƥXЭ_}ܻ{ CܹsT$IR$-w]?l7.ϝ{!pƞi cc&8ּ3wa뭞M]cyQqana^ﲻq_*B$F-|]^) c]?2XߙD`<[띏|510F# /qoo/lzx981 ^YX]*E{{;+7*anr6Y ISyjLXzDmvoHh4Ih3pzzlCoʱH4ܶhDNlc+'pp#y`ME/NjWƉuh/`^=,X~-,ː@bqI$i a[[Gtέa<{5888d27 yIQU Y٬ReY꯮n#c$mLch#Xg^wcXW۟!dw1iJSΛb]fka 0mcqտ:%0&q0(kD^7t9AhkmgxS,Kt]hWN_A,]E\p(z+;/sA6|m3_!sR Y%$qh"PEc(cї~$ ʲh41NOO1Nթ߸ʘ*ވ?kqppN<ϑe~eB0_{3ꪂ6& ד,Z)^,$aJj\%f3W7!DUwp8+ ڏy3O !+4Jjg)4'Z 0BYu ypa`a5! 5xIZX@X@P#36`oeU޵M$+)k-0Jx!`So{{ \@C\pst:TU^ -~)1+'kmpHJZk<[O? m`uwUUL& NBK0FU7WZpQ8::ZHB@{e[ l\-/S̜~@;)S³O @khQJA)g =7s0 sӰ0 s(2,]wp604N5F BC)5K`y/C2YFHͶf<:>v}„(zJlv DlGNFQEXB4z2 iB *XDUI6 ]Kqo|YpUUFlWXm_o 'NxۡUf3z=(PU4ֺ&Kh:\̴UPTU>)R6"yK}ez! xW6Ơ-gEj3Y6ǎ 8L_ػw/Ǻ1wbW)mH)q|'nw}>R!*AC, x y끮7c)~6\_?w2 0K*a`a[Nc]X;!WZk$yì5^tHp҉ w]\3l,|Nhb?z 5R(;; }/#/ RN&JU R5BlUFs| =ôdIS0C_ *x6 p追T[ W]x</YV]i\fk-)qz=ܽ{u]c6!U|T1=Xe^ź*8UCl (P^‰O$ײ5&XBw:t]D2<Nؕd !?NՀ vo%m az`a5,6,F:*yn 2 z^P_LA2eI]M9=8ǏUe)$(=Z,C<{SB.Jcֳ kL NP@<=!/fH\Aߧi cLf&Yka{ ,MQ[p`nm;Q@`q/HZf3cL&TUnmMR888nA˲ d^bn7犿)(HZ51PZ;s PJ uUqB N\f ~~pb<ˠ癜!1YZ{ C|Z_y sXke>b:5o{oMt^/$?|ǰ*+7Bh%+DYY=7"pX`}RxPΙ&к²a00_~7k_Ea+\V[2046k3$7%J#`g/~ؼQ:U{{{e3)HХ&c-YS&ٴoIk$ #U4!9:y>G ]CK,>e٘ڢqo>oq*{.f4E}BAi=6зUIuUi Ͳ7{%]GVA$sx<1Y"sUneIu]$,!VlcK⭅K'ӵCJ!ƣ}]XkC2O|i̚r^~5O=R ^2ISECi.}-,TJh)`@JNPt}܈2 k=)q'H$\EuMuMKsglLO&%N IDAT%u7p\Mފ՝PJa2[[[ t:`0%ʼnq_eAf68RIme<"%&)fE$IFYU H48 }Y5꺆1Fk@P-Jk>q%!| >RPRn_{9 UU,я/>{E;;;ߣ-KlGcXUB,_Yu{GCJj ]3O '4Vxs3 0 07@vy|!6LVv^kZӯh3da""U,Ѭ5mPy[e$9/p>qJUs{BwZGq,Z%/aWgL?ŷoJ,"E BTJ P] {h_U& Pu]i>.}[)FQw^8nt,HOZ0rO`UyuU<~NI4^iD8kWkhk]?YcP9VYBS5^[[[8>>N$$t&i aN(,&7kh:BH %ϧE;k_WǓ$.1M3ËxyXR~_0 J9epngQ7 oE`_=,6Z$NeJA)$1af`av-@*b{ @k l* ! mdgRݖee0{fh.Zka;Zn,_@~>Ν;v+_eßg.P|'{i=zZ_0|^E(;N0gӪ0BpeK yȪf*6/ 4];eYb69~u胼,3>.}oT 8Y5 qIҾf d&hZ]LT lE "[B,qIt: n7T&RbV cz/ Ô_3~Fn?_x,W& ou]"xǡZY#Bt=o%'+n~^4+mcky>o 0 0w@k4}as{8d"e͚DJXjh% h=},؁!M& lTJa*C/mR }^a0p`l"޸MA[z&3|@xvU/USeo:TUxl( L]*hЮ -5"{^)%z^H#"gZ6<)#$F6Զ,aqkF5^e гp.zLgyx$Tq0EQ\w٘>y1+mq2P!&@YfypiZƌa(x}0 Fn'4E˸wsu^6 AdL&L&:I,aaY<ϱc0bPH YeYsYS;4Mm*\bHQ 8HckC:v\OqM qoum:z :%_}XY eXEtO<4fU8!/=hQUBW84.8qpOAk8r0 s0 za5VJD``Ÿ6+VɂmUYdZbS7<O]NkhN&xIε݃-:"Zט*akq\mDxtpo[~g)WK\E(笲}[v>,EQ4%%UeyuŤv:tnn<ϑmupUU-$2;Nì( 6vww}2`0ynğ[r& 7íqno/"eLdv u'^[h;s5ɪ2"Rk~gl˴V8g J!C ]0 ,,3 j/ˣB #$m\Z4b'<™/1o[8k/^̯=BBu>vww|Axց*HXe2, gy4IܬC[[[17eD\J-*/\o|d7=Ym_ecya{Z1Uϔ4$||^rz{-c,濃I4Ƅ䠸83j%{H%q>BJ :y֖,Yg ߺC_c{{;_%+Ool,[/ɷ=>V_F\ i< @PeO 'X$"qM;g(d6<{̝yo'|x${.߿ɲ,,TQz ِFб2 f(oK_L)!%K)HcB@,]+żuĂf8UU-TӶU߿S1Zk'u3{^S\@vB/Uo{ͺmܽsO~m|?8O#OՠB+QX˵zɝD`")1N1JkU`4MCҎLS)vaS{5; $t2O>},{o'ݝ+Dzqe9QXw5JslE>$]_."" Q'7xg:+% lퟫTfja`a_vE a  \) Vn;P6.,]:[c+R<0+ ]U" O=~ג!Nc 9llyp ߯ZD8![_c '<~ 8 s% [Gc]$%Iufb6t:Ex葫&*{=f3`7}[J]ݫo,j.{eInc "p>>2nqo}3@zu}͓'f "pD$iWX}BtMgi,CE=Rt{=kcLSt:$I=n Rsw)kxD0Q_?7Oo9oibwwǡ/୺!}YxpȆcυ"Ec FX CmT3hkSh]0k`a mShXhB00RM c$ǜwrjQ0u1n͔>`馴l6Cd2AQz88@~s" +ۿۈc6B^?2) or/x15-T%f|geyk: ln !%fidA&)Ih$7]6T=5o,U6vsA տE<~^onS<} /!ˈ?Hβ 6I`$H4XBUY~s{K<|:k93rCHGEd P^0`Y% ,{ْ cjVma]xԈ9zޕG/2+߫/3#\JI&݈"(#$U$*XS) Q#8}ڣZ mqsZ=؉%ߊp!ѴgQpy:yrlG18DQ(r$D9h@[Br~}1t],..bumfS+ܻ^_ᑿ<M2~/}a/A?czz6m.c.ןspmTzQ6~s a{r{چ3]cZk+0f&Z t)sWRͲtD-@ {! ao#j^`_,7z,ۡ͢˱)Ge9|zd12 CADQGތՆ/}{@Zݹ)`Bo+H^),ZA $/;V3;h:Mjk/#xc\G;~p8ZǏk/"vsj0 Q3ޚ!ZYi-]cbEU cjoI(geȼ|bu{?Gz9g^1s]*϶t-̕z<:k8ڴNsMƤ|0R0j\ύFF .! ,=gf;:whJ4m<a4|F\g(H `7J!56W\!l-1ݼh9j÷l BpBa^IV9V`eu!:76'ᠯQF3[cp7ي+{ g~̲,[@ǰ8fMB8EѶ'OܕlEpSW_njvQ lC+ `kd -j4M9*~Z5QV9B.įWʫ>c_w^Qnޮ6G('ΐ`gZZ`!6+%`@<%/J_! ݳ8e[Y3eUvfi?\Sp%j RL[ Qm+7n@=gǹpmti\t h6r&7l2*1^`"T ss8|R #" CDzfgQO~p@V'%eq6eqs~]$}پe'-1lU9ҳ&|XgH/1Ֆ:bcûߩ)LOMk&;u N=lobْ¡?w6k6e Mx^A V sI _KV׍F}_OǵGnLwkFZU_q .]Tq (_S+PCo`S}7Ք4󫭡!U4HƠ8!!`Y6"B@  4C¾-G_`6wJ1H m攗z%-b%7ћr͆3UJ!xp)%9:%6b V(怍:~g*3fv/lot:P<䓈L&Hma^+`Xda}Y6<TkgSPLg~/+XBoDHZOI!+]vugns$ɦ,`ӧG@F`چŋ05ծx : @8srU|Ȱ*8),NJ5G'|bWAJ_) >["}4x(GL IDAT㮁g{шϟ|_8NVTJAdz&Kh.YB!3~>(j8G;v}2dF lm}[h{ 81_#G=z0{]?N1׷#T;3+5"Gezex!Vr)9w \ [@ 7;oA0@ ݲ{\B @@/%EB=n6K2WPt} tn%8LT[y6T ~:m`0h4Պ/j6@a8Ǟ_.'S?A{r 48y$[.L)H!uQkPr)?/?ֿ"98U}lƽܱe5ſ潃"46C'Pcj155Cm5S:ޏ9gjǽvoIayu%%~^ ,%zP.h q:"$Fjy50I!|3,PI1^ݻ))]c]O\*6mU;Ts;({I J 7e J:̯m9w4@ &*-=; PB@goBλ'ݙێP2az9Ry$;N+o.,Be),.&._~QabbRJ,..bmuFa uEvO<[Z7<'"PQ|駝 KO+lI [̷xzVVW66p&y2L;RM^Ǥ2 "-;}`Hf4\_rgDWpmE[-qe^3}뭷*wK֝^+9 kNL*`RT ,K0@ 'h$}B6v!,HӖZ 7=jm}?Ȯ6J)KvqYPX36ޮ2.__g{j5:tcN[Z"+}q,$ᅏTS׮ F$:3gkܪj`h~yP I[apR*Gb25?}]$~%|"ya~~ IvgUp~k(÷fQfQu͑@1fhaIo0fK`R Ȅae@ &&]~՘&'\J* B( ksd4W~/cl'vےr pQe\rmڬ27 vqgqo6x ,..n쬳^__G(* b;V[埨 _B'xELLLxS Z;Ŧ-3s vvXƦ"3+qQ:ycVs؛o\;[眗e|[?ԑBhVQvPqёXįF'.^tv9Nޱns!iIX2QTi ιkRbcm%$2Gg)\QJ*^y1N?ßcܽ{^6~Gx{(6fwQJT{B+9UYR^M^J]&%VLq(/0,KRyM@ 4M¾/&7˼9*4 u [ѿn#rblmNގ,RjnVZw>$L s4 $&WrX,,,[Eͥcٽw+a"d#T>S9Rܵ}yu>p+S$w-ec[.ҷo[A5vR'T_GzMhLKzM98}t^ةS8u,sHx )DZLi2"K轅zhZNnsI1@)Y-ͱjտJBX)F=׾k_1qc>Wv8A쟭oڤTb*ko~qp6M6Ti e++'tiB BvտB@jRq~iw>K+j*>._mX8\Ng1;; .8cE`˦B 9v"jx{e}*dʢnŋ9{_^7KZe=<ܹ/FaO?3IMVE2X;%}*تGY>)(rdObNdA1WJ _y'(O7QRraW';tDn*H0Tq- 㩀=sD0˧h+.04Cr9~g*d)xg+q| rJ *|ۇsOi@M&81 \R:e@wOZA8$ENMlZxHqQ䯯.Z/I$I̗`KcPd[+i*)e{vZӧO{{js#8{[|Kz-=k[,PRbT%43` Cg Ek5ĦIW=&3!~" ~4Z ?q)s8t]\Rmס~YĞTgƭ]LjVC@gc`F+\ 3s+ya?@0@ 28̢렔 zc M΢t. c%vܕ*BN'ˢnxD*vIJ!0`Կ bEh4ӧKmm0J1 Ϳ1833'<7OF6Є#c!&'qhvF椪Z·>y>[!ձecmkGͨuA '~}V9c}!JL+K_{۩3c gΜA\7[-177ؖQhef曕wwZւF[o@0&>  BR]Fْ@ *wYfr!$BB@/(ZCi_㣘JƧۛ՚U1UUC4* 4E۷qeܺuˑJ)z=,,,}v Š߇b8NJbN1k+Vb@xőMkw[ aV?KSpўC\0$I&H? lI2{2ttYQ{ \fQ=\Vok ~'}d_ǨNW!_=M8X(-YNO !23ڞ?V l)ls%|\~n;W.8c9Khfj~ 6q-4$oTE50c #Gfr/}鳻z$I0???^OxaI}_GQPكwclyy_HLyIB2/BAxy@ط @ /1 ,)PI%pM$8y*ہm ;cɲjnw1/[9rVdױ|6uoeb[pS)MGM㩧xWPۛ'|N7~zR1εi0 Fq溲S k6h622br(S?ɼ2 hK\5 iZfmIcx*eB5PϏyN zǎ1xEn:ne걵TvHK4YB?XjԸdY~ZzL n4a iTqԺ #e*{/]?Hg{=\JG^GUq=Bsv36?&y+sS`R!SL3a[׺Gw@gN~ciϼE4RH0@w_fAo>kmfIJ LE݅2=vk#D*~.ސl5$petpwi nSSS 7c}8ܰ+gVgOP{e}:pl 9YSZ-JZk`vI#c Fǎ#%pPT:}'$ADpvоBH?H8zRz|jkW=__'PR:% | cN=2vscG[תcD=׾cHhO_^ׯ_ǥkJz½?loUk]Tj[SL;wcqVLq(6V:E }[,˿\̨xzmrVJShv}2OԔ(o|UxUŻ+ZV!0L`swjEP޸ _Yh&Fg}67X"kCѣ8~8N?ZTD؜W^?g[fV+GؔY墎#pK\,{2OR*E<vV q(#epcZvLUSܱ(ajj /\@ûΏj~vVsda- ]ZN %^hy;hZOH1Lۈ"s]tdbs>~׾1 ]Zɉ Lg;6Y?UCF5 ?b?MUm+gC]RX_&  !qc=lik\ @ {YB%񫔄B6WnT Pȴ>l g mkQ|(.(DmWWVp=c ++9 hch j60\T}?Dc,{N8@eg K6sal6n1a n*WRW`52&'e|2fwZ-4͜ x+Emod-vIkE)~_$ˈa_h4.G(`5ᅌ~GDȎ[E8sqC8v%N1_8Wl`g N vz瓂%ښVnK~sh6j`Q\WH)qa/U|KЮ17ᥥ%zRo*.k{y&Vu#wZzJ̠2 8gt/\/ W0tԫ6>O BHC@ Zo^.J1H)0ƞP:wQ20&^lX7Im!g.K%LkU&2*7>sꢊڶY)a~%$Iz#hsGt;mg0sDPePJ!"_O~#7ױ >%`uƜ@۹spwy ˼ SE{nW0HMS/0Ǡ!!R,j%ּPd92ZJr {_zm/zeh7^gY wL':;u}5V /\5]wlElF(BYu4͆C5g^f MjXB !I$:&!\UU<~8]?N9g7͑91~E;XZwq^oRN %3J + EG25B@&@ ゼaBA:rHFHR(?`{#mSKIK;R@Y\ښ焧 V zQcǷ9J9Khi,ܜ6Ǡu yj_bh/_l1N #l(a^z q8;yUzh`vvsssEElk aW+%6ז mgr6qo2q2 g<.wToY^kZ8]cD&xQp@׆R3p^7nFVO/Z3gpر97DQiE߰<)XKh-%i!6kV\O(Bl 0nW2g m_^$%Z?OHckYiwR^xMTr]\X7 ^1:sF&6W?R!Pڕ۩yPC@ @ 1t\"B*Rcs0!P PAFy,J;]UxO30ɐ A+xOCaVնe6ֶwEhn3ߨB'?}o {4@ ѣtH"8'^~4uA:K =(袍$aQYvY qcjj*X$H19|ר̱uVK/c.;LH!ˍ[h 72YB'I:&]ӐFmyZo#9?2.^<_ ?UuqA@g~i*ϬhR0kd5#?ߗ3  YאJLA[=K@@A!B1kMu$@:/0cX p19R A+^H bŏJ3eB7Of/#:exPl6A KSol@VFEW$cuOS(A"0VqQ;X GwJ,R}88yN4ewׁ$)y`=$IY{`2ڭ;cǎ㘙t8133 D76賭yEG[tS[6IYH2pxT毯@Ibjj zsDQDo{@"|Rka˽cWZ\9s4& (,xDv/Th-8[%lӊ=0q΄p޽~?=hV!KSm t:zar~m|wa*msfg'CFYf\Ql$|>VTXX %.쭍R4?>.쵯L`#LD2cjh,,%Ye4^psqs g<E ͚PdY^.W3 m  $9-Naf$Rlw2qzaq!7O> č7 MDi+^۵ -y?WFOܾ Q_{7e;Ra~~G!8F^ǡCSOavvv}&T}4 C$IfLNNj9ֲL]&z-(KQQٿIe,}׿_/["خ5|Q8Eo:ĉhZ4xqI7sU&I. 3 `nB{=bC{=EACGs 6frrRGj56Dž[dYa1TIs?/ Ivְ/}f}r_o;}?X7s;+u; TCg67r~/cjAkQa|tYE 06y gn1!TV s@ M1H)%rte 6ЄP\oɷ;$@A+E&joT\. `,c zPU,9wQ,~/ch`Jdw~Nfff011uܼySgf@#} }Ÿ0 7e8.`nno/X`}4Xݛ'|]'R"4kqQ(pqo~ӹ\qB5` і (M5 c㱌 Ah-ZDչзxE&VDcKxDF4`VM(gqMܹs'wkW-fK 9M*Ԭc}%qv:Z*%..6:q$I\)g̹  R:+_z_-L4q?#Oǫ&Mc*,Ÿ}`ڋ%.õ/?|Z,50Ť{c(鼟M/ VS/@ ,L ^»2 :#q@ePtn*_ 0PRðvJmbsNԖV$dV\z ^uTJgP)v]j :6"YEnpet*}3/?=) _@g=Sz. J ;{- -c,ɯ iNŭ˛lQ^+NStR(,Oh mQ9wzzhZzhim `1|R>ZwMi> ;`~~sso1W͡l5L lvkn5 áM"Q Lݬ8 D- Q"2c$Ih4rj~ﮭ! VRB܆\!%?q|䅧_4Mqsv;TsVJy ys0 :7? \y1`+3SIM1(ekC3 ]HP@ Uc Jō"6\pfrC(wlS]dPN˕.0pmf~J){NMvVŕ+Wp֭}pmZ-(n)B0Vf6ɷ7w\zǡgc^Do/7/ns@e98qjajj rzۛ\RQپeg_ ~VzÇf)q}'˔\D>:(1}%-,,୷JFpoTl6qY-0NoA{FQ/l2! iZKh@+}5psB?t;G fFvյ5G}0g$ <`/52 |ܫOv^ܹ^Y]2(Dro~-F뻝NoLd{{ar1;u

sUMIr[s~>zCpn59ɰ %  U{}wԓO7A:t8v(>nݺV vdͭ r+'Sg}up6 VVI:gfc SSS4 M:t1CxbFz,`Kٟc˷_#UEzX^SSSEDND{K(JsZoOl=:z-p᫁m.3 90iyg2 `ŴQxX}i|_`չa={j)LOOcyyy?̑Ŧ_^y|I9Ū2oF9Ph1_!g.W3l/5?W?(%" (+Ax9 X;sCLz)Z- RIg --ҷ~3 \QA"K3$n޼u4LLz2(c 333NUhxَ9DAxE6[pE/+ h=#~y:Dr= QyZWJ$I6j]!ߒ2-gERֵo$HSSSͦgQmR"Կ8v+,M :gַ-W1iw}8uZhk~U-9&æ@JTcnEKh"|!!i mRJA,MIdmZhZ^~9؏~ /+t:PƮ?Nm?wl޽{rjw6n^K9zC￉z}fFU0_[R V _a9P/@ PL _ʻ{.X1"gRjt9RMRTwkvI |k+R)(00) DS{Tq!k/hp$q_>9g1k^.88(=.Z{|޽{NgNF^_fqsgb-,--S_kz2ifЄA:KhP_fKC874n,s1+:>IL3S 쬭 VEZ8t={^W_/̟+~/:Qݭ?}?z=dI wR;ʓz;/$SŰkIV.K yijdj#QE}%~[6&&&l6$#|S\K#k|Ԇ6 XFy?%| ?o6W)^ڠ΍BjC<30HCq!R]{ "Q/@ TDB%whfНr%`P dLA1_\)s_}_ŽWϧSz_ˀt0pdiUqn!7o]#Gpmt]X7VIVV9K>E|kW~{Gw ;g AXK_%Cꥠ(v!ulll;[hK !Vvwly=DU$[::";i]5&:Ǯu @RCE9,`0pJ=m._*Μ>]fboѨq5t:ZoR$[2/w{n:.iJڪhZ:2LhOL#[:Ȳ z:چsC=o߾+W9gk&/3ޟ;3,..E+z{ş{_\/07Vzp J1De4p `s_i1#TfX7 oiZi7U`K:Sv䰪kXŁT)7N@ތ+Ї>H e@bmm wj5LMM! C}΢ir "VWPo4Po48 4Vk*S'paܸqg~b(]U#k`''' /SPMY@Et666ttr0e$p-Sa{nBh哾MEw£Qi7Mlɴ=S2N"޽u}qLMj8s4n߹5`;_\s ʛc :&K臼46j`y%t׃FK099Yܽ{W;9DjacǎavvΕ nWz;h=z3Y k_!e;=f8 ɸ!3Ap@0@ T{)!!-4d@AJ@PbJ/;ι*(hc &ug L2YZiz< V%)ݻ :u.//CVl`f0jm"ZŅ3^oocu-6I|`Bg]ZDSJaeu#{Q \FxmQ:?Ij¾ hU~n}k9!q$A$MQ9ů_įOZW-%#=| IDAT U&fJ)0ccP؏(+~o|;8z(N8q I9Z-\v-g\T['RgYelÉR`B@1M } LlQ Lx8-}5p2r>iT033V)%C<p]C|Y?nWgרaTd|? vAqe~kG( JiJ82d)@  &JGl^Lsk)J%!R7Ӛ? rrhMGun,,֭[t7ov`F OMغ2Z—11ֵ a?͵NB"HR/@  L V9p9~GJ L1(4m}.Zp%.Ν|umKVzb6ナ_{OJ)H!00EZU書pch6Er ݻ%%^~իW]+ C  ¨ pŹb>g'6V mB=TϿ&qMi2įm"*;.HjfqIF,!llFs[}8 Cj5wE+g }Q/*(6ٍf!99l[{!?3=s>#~1ܽ{7o<%O-7{_)%9Hzh Mx薸\`:cLOOccch6jvAÒ8X1q8VE\wLvbo|򟙝G?ۚ??5..9V(3[P&v  `@88K{ E PA5VS `Ců-n^N= b J t"]Λoŏ~$g@ibaazBlll`uuBmLOOcm}aIJ?Ye8jb/}_WxM=)}X^@,2Mo߾My1NhL>jJW !$ѵO:=طdI[k;uתGH"\ł=>TQC5NE煒R+erjm:~Gӧ+w|7[ &\~;{A5v= )lLoI_&xo6ϽQFZ fab0nCh_@gxo_GٿPJ߬>vaޚԊ14\_pKg(0p@ZXKu,t22 M j`@8 Z) E:Džq*0D0[+WG2l7]L -al7tpm]t:z:N? bRloM9rZY?olliE6FӸK)7ȳϲ Zm ıcqƝ}A{o `@_zN@B 1LNNbee4XDl>)o|E%bb> `t$Osז.>^[<}}R)$V^CC9`]0]zs5GXٮܻw/\x(JA_8qޛȕgb9{bvUތn4jhՆ4$c # ll~A~6! c#3enUwK"YKwY=Xr?%ν$2`{}wYBkTL$2$puhm1s-K ~474n!VVVzy&_/<\ܹ_|S/t9QQ,fCÀiWi5 p*`c1-,=icsM`PRK"`@XPzg-\ۊLc8ထm+8%ٜ~6\aCO8`Gϔ>uhr\5RoQ>/#Ypz6clmm1n 9N>3g@J[na2?jh՚;N뉀8+6~<~q@ 0NI@ ,pkGr͇& T1Fq5^LkXLͱ+Jb߫ nOdg̛oBsVOSG#u{$ i YUi(ʛ uNx%xgO0~ cxgvq͠Ⱦ%W] ׾Ŀs|aHl}¾## CS n,q`I|ԩ#;\{0`\ PZ;r:qP7(9Z.CÜ_.c26a z֖?h aAA0@ ,VJHcg,%gcQ*4#0pgmh)_D"BZPm*N]տ]Yc6EYUU(pi0p̙S~2AŠG^uh?\<!8}vC^~g$,쟩=/|1OmM?su$n5ǞUTYM? DI`Ds)KSivT&R)@^1Gq…?, :1\Khy'[/^פ`gt:EY=ueƀS_GmǓI8<ϟthpܹڿlnnb{8 N&y&677mkY xcS+9^}w@ψ,:+G0 xTJ `c#zmH)R@=H3{a@0@ ,6HӲI 8a,_d+4*R}bhl ,j:),?gCp `ɓ$3gp9c9pom YbggF됀tx eO}NUUsx>| ~pK> tN^B!v-n8OaxR+߉{s_88q4`瑽>[G7{D>hZtN&Hપ`diNVUeg!\"?"Uˌ4MqWp]֏EN(PXxE0잟GT8[ޒ%Ýn7;WtӧO*|GB੧٪yv'Iulll`uuL&v5w2t r(9q<K~/}RP/*1cs$&?>G4'QǠ4ln&PJC1)Klٮ&`@X`H0$0:SJC$/48ڸJP@`Jlc6fR)9Psߐ^a\chlEؗ G/zi !,t:͛7C~, *vF#ܻ{n @QXYY 0ʩ'$A穁ڒ$ImH'1`J0ϞOiFhg4Y2{§O[[[yymUO;S++f/vKQl$?-캏_!'q/Zsv:X=AzZA)@ek>+&ȐHJi[k@p Ҁpϑj5>C#kL68ǂo++8„;Nqom +Ξ=Nwp$R ;;;~`cs%l" 1S6l~{%0> ǵk7Nd`ouL*`ਔOked} 5Xa;8vrnUyݴny" sstAA +uFv锦:^-,İ?'}MczbP.>|x"vŋ vvj)19ǘE^8A װ>9ko@$ kk MjG&!<wޅ۵b5o'u,I{X[[ׯ/O&S~dx6x0pm?Ř1 *zܧ/k@ <.ߦa @op ĬWjtf\av1Ʃe,-O4d}Pco~`$'@Iv_x>T*u82tm}}&;tm^4^l׵~G9a/t]iN-;L0ބȋ# ?uSAu \\VM(2"voHARVMڭ$ i6lTUǐQ?,)>B82p8uuTe̽72<},ڭClc{kf3^s2t]=~*v0Jq6{a0YavsƯW qePehm-rƂ=ۇ1#E& aythgˡ rA#~ T+p*G)(oOhガ96J֬>gRYv8uhxꩧjc-4T7m G ŴKG(z;_b8X:>x?㏭ ة ÒID֪^1m\g1)5@9_Iǯ5{'2nb<A$ ,KLS0Α$ ڨ ~~VR>^~C])>>ᾏ%tj`Iۚ(gݴ&?1:x?4gQDe0ZCE(tV2H~׾7wQL-ٽ9Z!3um`53֌HO*^^w /@ ,HL  87@ϪP|rUt ,\Fل*3p[1tvg@V66Dڎ!g3a 8HtSYxg1 jU>PWJ,KL&H)eY kp-pưBE}ƠeL&PR"q6ajF6Vq!=•+Nlz0O@ p" bzHܻw/Xo3dwS| k<oSHKx% ڶK ,%VO FQ'I4M^Bv:*k?7 c F1XY _V^HgVWd`XB850FkuE/ijY@QA XK1hxK|Eo_!O^eS{~1~׾d%Cj!kb;kcsxK* kkp9 Ü]=-V;-5Teیyů1 WJ'D iia!)J%=f!!$<@iZdYb `6qd4 ( }MB7*G#*p n/|{ߊEjTyN^^/z!dZ-b7*$Ǵ>$gͯX?Np8 7jyci$cLJ\מ"V׾ӫgiOM  s.& tnQ%B"^NWJ# s.]+gyfKROp?3v:yH ?~'}xm~B,Kcn$$#؇ y,l7~<1ia֎ʸx:r"7JY3 Ӷ<0̶ *} 9JeeԬE#E rn- % a Ji ,p`iôUkÅJm;"vU?i>g=蜂!sMt]h͛(eYB)M8jmjy^2/; ~pbcu IdWߦSpW# Ο?Ux4A%ٻ׿T !|s.Ď|'^϶pσ~Pn\muuJ&Ƅ5_Zڵk{5Ţ?SNՋuvNJBcVUUG{x2)jZd (\g)%*&.F}01qʕ4wϻhpFsf\]m'&CJqi>0fsCF6%`0RC) ŸSh~@ tY%%#X%)0(K (0(0f &ڬiz`&r$mŲV<gSU'4zj Z)0QVnܸu$? .Sv{kD`]I̔,ح6pSoTwoIH85aMRvx"y_|?g~w=FVτt2Ac:bmm UUs)E˹%mt@j"*TUU#^ckso_ᐈ})^ye<}{n%H]S{G"1N9b3EQ{LXlQ¼ ē,洎54G|@1 f=įLP@ĐP&bR*|YKaAR!I8 mрv*`J[?#7m l6zn_FCc tؽ9Nw._BܹsJ`!D EQjf. 6B{3py\vD_{x't 8I GHy L0۴6sK8nvHn<c<(K}$ItBR &rKQ['mQ|2}Y4 IDAT t?|đ$I,/%/n4L)AGk4If7EQ*KY5TQ,R7'w .ȧӐS`} NZ4o+Oc0k-b}a 0ucf+ cUJ;[h,QQ@ ,Eކ@ crfmZX)i\1g`8UmQϙfNEwJke-l8x߁?aOBc?ϔ>5s㭡1p$S#&@ ,*pia1Kۍ'9Z00B@$pЃUjgR]uj705ghCCj>Na&wU Y-RZՋw+I)666-dY^ypJc$s9gΟ{-:^ƫ ҩJo{dx uwyiCpVzZbKx~pom V֦0?6;}4h<'M/TΝ B1-G)U7݄AQʲq*6 t<~pΝ[[[JGN -lĨa ;Ffc՜sp! pd`V06 ZjP) %x86{9DYia9Pc-<@30#BYgÌu2Uנּq`z~68^p|ᇘNZ筘SrP9SO=t:dY,&vùQ%Khz @_/4MK'6VoE>GD3@ z˘ݮm$1NVV$Mkdt-5ؓ~HcGhX]]/)roWgY$I:2kREQ`:b8bLU!Դk@ ,M,AC@ ˴m 3@Cؤ6@`zUs@?YYy;+%jjq(rΐR7E_mvjh5VVVpi+X]]R eUnȜ$KZa5 "ct:'8}r2(ָ?tts- ] n`NRV~?5cmm W^$QLhRhZ;4j7eYfV+XyAIQb5tlĭV͍!}G'2V#m pn<^xN' hMp t޳ja<V&XB[Lc._#8GU2 KAQ("I`>(:<+{x<^8`ks&/lOgxRgߦ; ܎qVX愴m>8dP _ 3@ ,3Ċ@ 2l{fnJA;h+#4SU0y%+~Jzc♅ K`[nEmS)1BÙ3g0 nלë.I+V/CT`T_ܽK"&ct24Rg eNi] lrׯ>U$b?[^yN'Ϧ%tkx.M%4sǬZc:b<}&KBl\e(do<5]}=<4UvoΔ(~w?3/i`30PP0ph]A)Gy3c}Roha;fQR0(hᴦf0έEl-E 4'臾F6Z}w800eŠq)g iBkhdd5NEdpϩJI+B1$qH23<~iT'Y.'vm{X3@ aE,fs<, ^h3CM>~F[voomnBA3f]0g,9@X.Hfc6 0hO9&yh!B0mU Ѵg]h1Zh.6q0Z"+a.Fd5ׯ_ǺY1@YPJass;Z a8&0?~Oe`M)ߧpkڃ"IZY-[K)Q4EӁTʪcW9p~5qU=vcyD/}]Ϙub5'2ᅪ1`XmQ0O[;O#wo2ۜD}=v%Xq$j\@2G7)nݘg6gdm¿ׯ;\@  CC@ 4xkJyP`0llB E 87ʑ,v04m9agdæ jE4`fe&,&t:EYvvPN!lACM;"H Ug§?҉'{nnܠ?{P_@xdT?/| H4ZO58&=-/X%)R{ZBF1=յ>O>YnyW1ٮf㘒~=sbڭelv?{8(&g@x2f6hV*(%!c&Z A3u60 VjVMsQHι_A\͍*Ys5>rR"/`UvtBL&Zc0@td2AQhZȋUY{E5y_?Ή3ﱉ$ '~#矧Ӓph<,nqy!D?Eam0#aOi(PA0=>p ޮ,K$i,M1RZ8w %Zkܸq/^| $~ckgy(t|Y%\zx"ԏz'R)h {A]U$$301q6ո73g ZsUk0C"jG TR3g^-U tz%,M6&$*G؏O>6=K?;>V װ=ho = Pk`}}OsLy[w1FQWWBtJZk=zĤWO'ptAA% 6̭t] )4TN|'Z#a!M@ 87c)!c,a J>A 4 &`0E*F*vuqviH ,ŋ/hzO5]Ȳ yQ N1,Bղ nUUtv%ЊU'>n'2^" &#C[XzfLsTU!: .s_/#I֮XC&+)m%`<n#uV^&"pѰleɫ]`9]Udi$|5_2~5nZ;=NcK L8!'+(+gpk2 Wn`l.+ 2Oce?pVN% PI9#._-PXz,hӆBnkᏓ1Jk(jC)(Ocž+{y[nYK >@ѣq~Ͽ3`IBo,d2t2t:EA=8~}g5\[gx8jĊ7𕕕0VEQ*LS C`{{؞)Dۭz8~p΁j/p#+`MΘP[1Df ݾ[>3!\Ԯh,KXR8}4}TJ)1NKD(cPT^ɏ$If$տOwlX)+t71=كV/Iy>yc}}7OcGh 'U{'Ԕ֞SH IDAT֖u}f5u@'{}=+Yԓ@d^6À6= GxԟΞehZ޶{vsHiXs}kÎ1IRS+p5loo^ 1'm"VfY9J׃w8b{{*z=E[^OZk4If8PSjӵcu7տ9 ?rI֒ r|y 8xvNlW{(H`81 8Y  R3)]7,%e) a|k&`48gf_O I `\HcfjJؠ@W-ʜĥvG@X_% eV_!ُ52l.ysX=}zv nnV3g`uu5CNp0`ee8(<< UE PR{ezgY_|"?pSO8˲I<ϱq~?.;[,0EP˅~dz,3TBfd\͂7\w+,`R?yד>ܑzJy_?J,Y)b`?Y15"`3k߇x".XdWd:4E׳0u:k5v(B-MUj~2`}c~O_YY x<ܩBYze(jF5Tz7?omj_9MSZx5pB$ȋsx>}gVn/\rR&Ҙ9@Ϭ8#O[_3\|/kFׯn ۚ1ekeV9j~.@ KڹcFO0H\2 1Z+pͬnI0k i8iH^.x`"yWB>)iGhLB@Ub#7}z,jK4I r6Ơ aT3+vcw~_ڿ9^kxK3gg|1OشSPɜq@Q2 _=C29tĞcW cvҘ Z-lW`xCm: "D.w+S6_#' c & H}Tѡ1s1N1N1L),h4Be8rK$ *hjш>fIC9{ヒ=\gE[uq:*RJ{:VU,CFv0ln!?" )%8*:W~35J׮#MSp:Ez?7cXU(bfE9 "e˯';x<3 ?3Q:vqn2 خR`\%'с\G֖2;sā/2U.PD*c>"6 qn۾UQEGz% RB~s;;; Nvi&g*!֚*X1뽀96ڥc+ۇx1ݻ/Ўp x@L]:sal:<ǝ;wzEx }l,@3xʭ;^2yEO7z쬢:(_UIbಜ/( R/k| oXMlEYy!#4 0\c[P޳4ݼ͜R UYzҜ#4)O&L& C P y(zhZ"+?'1^{qxSn9F}Xծޡ Rؖ*o:y(zjt޿>'c3DUV׭|6~L61_OpYg 3(b( ZJY "A^q!A0@ ,%f1. pZP}'bJc,no&Tφ^)ZyOīfDk= h ڭN>mm"1f.X:/o?on^[.+.<=:6 lc\U!O x`tVE\RzPZ׾V*(<9 >7&c=O5_kDYa? Mw3sIATy矋amn]`7_u4wuyYB%G|٘Slfzy9) f=4 ┘Bk躂`T! ;ߦvYJ~vVNɤ[o;wq&n޼?_5ei,b iA{4Mmq-w}~m}_e56"XB(.׿{k Q>9'c8 /qH6vzg8- ?qgI @ `&@*\)8 Ӷpi[%`e(ldw{Lo ̹X$>Ϡl%sR$ ڭ4EQNJ)U&%Y3qҥxaԩ>ͷ} QS?= `ܻw/?o Hd\Lk*boLƉXE㏍OH O!g0@Ec߽TpmGI"s=>5_\g!&gA$s'ԇ:Nͣ(tB?[5ZH"pMenZcccݏ$[o|hc Μ9^.Z y,clK?E{ZIh {_b ƣ|]_ 94.afB83hn[̎ o - )~=ݾa6Lj@ " 1Al=M%hX/H5\u}.X$H&3sѦfM-6pႫPF>NY]lֱ@8GIyɗ_~}67>Vo!N/ VQO@ `>* 6W$ 1!)[dYMR-&kY"!fוz7"e"#I|r8sS[ ܟͲP~nƄps#cb<}q]s C lO~{ﻘNS{=`2`:Ᏹv¡o7l%t7F1 9F#槷~Fso߶VKwY>hyN .oV݃m*=Ĥp" Me  IʢOdΧy'v}UAUHfO_o m8V낏9y8Ad}0X{5q|0pe$]KRy?s?p4.yFYUA0 c ʲD @:.yNn !M牐f~'Ͽw~t%,1k_mNx"+y<QR9'c"'sSu߫z#?BcґgkY㉚(߇1V,[.M8E%+"}=n{ϋYd{?ZS^Zk{Mԥm4+7'=^geGƹָ]gYmk6SJ)Caf gp뢎@)|CRd>* chf:6$oz2FG*X9lDZw^ y./NLHOniBV\Kh}yxߔb9-3Ͼj `YUSkq,NT4ퟍ+gڜ 0AqcÛ϶?kV  Ԉ7{@ h1$ %Ai{@0A.F,h 6qx f}|`xd-%R"2NoQF\և_|X3Ow(?޿/qv;~:o=l/xb á] ۰f q:/=^Sv?N\&169?#(KK3@ <9 @ #wKY׸Ą{ɒ:[|%#3#fW?8g JH @QCPa$@@>d59D 콫k-kXkfe[##3"2N"ٽseP(|(@ .$ചGzq.FAJ~!|50 lO'wAɈV^NM<#4!`d!HBX'04vGRs\+qڟ?scAxT4‚[Ӏc" !Ǣ0mU1KXi{jb =2kVܹs>.*bOA<՟Sκk kdYfz:E掭eoy^8)j~iUVa}~ˤ$J:=stܼ$!C<6eVp'qk)2շ6sֹZbee_Z\p8E;imպvэ>/--'I,0 =2Cj!mb}}i¡}bow<>ktie=l]mm"uQ.f,dտiB}γ IH_$'ζqnaž:nSF2! `t9M p)8,H4+/Q \ba<0C`d@0F@( 4A@At:;+ j#TQOB@X!d4 l )Y^ˆ@}B\Z F J5D*`<੤~Q_DYYYćnx,%0ܾ \TnEw,&+7o~hh@T k ۲AۥU\zΟXTU&,ʅ1Up1qK =\Ri ysF_Mrźd&4٠mmUI$|Ο?+ayiHTP.L{!ēx95b%tD$FrECp!5RrEzX8e=9X^^6_YNvVʵWG׷sfs>y{07gZGFm*F!kl[BBf VFs}9z_:((ɧ~8KvJMݱ~GkM{ퟥѮlzÓ-@!2kg x&տ{|8:8888L+0 {{vE~(X@AP N)`D(Nب^5N|u=;b~RiGSmln/~)`@%M* QQhE J1&{2g>s>9qA gl OW3ϡc"j>*a8>amN'm~c{uCZ-j&ޯg~6iBزeT(HTwfEhA[}7kb%Oڶq{</υDKpU40G M﵉' sّp1(3I:.^7RΉ IDATeկ 8Np3WW(Coo4n_J2Ο?SwS_dM{Jr3ˎVV 3l1V$Z!M޾\_[]~Xվ\v WVPߖZbBGe{qV*B Seɶvv'tg m=G^G`0p8,'R.<#:>:]r_B!m8C$hhz#45z]gދ}{ܔ}q S[iq.?ą Kx+cG PƀձYBO+_aeޓk<3xצb ~cտRb{'IZQJ`5j% A 8A T 1YG;888@Sk@S_>#BYBp T98@Q\0L[gQHGLGE{=qUE?V؟NTR$ +qJIrg?{gO!9~\>{2M}>8XKw9RcK)E,=gVWWl6Cŋ'RIlxϕFo 1TZ AkˊymInժ2$_F{$&'<ùep1 Ƕ,$)X@;K蓁]\i`*rʥEeQc abub& MSloo1fT'q}m$ItvtLD zjjB?Ᏸmlnncw^o0BdjwLzem_~.T{,uDZyU37մ8ϹU %{>կ7!hP'ʶ[T*U?\ ̀?;888-0802 ,[BQp8D:^sz!hlE.:NoXXX@DR[[=O>v0H9wjyc<ӟ-?#U(l 2ܫ=Ӱwg}ʔ/t;mwvWr{](N/2$eyԲ{>3ϔ0ɼP~V\09(87Y"s4a~`^hH6Дh 3 PAvA8sBTM^:UqQ!16IY0D %ߟ;ޭm<أX}䜣V! CdJEv'*q2;>N^Ƿ6hύaaggZXeϳ W?}8F3``V*Y OllHa8E14SgeܵN`Oc#*`Ԧ'^[B3 ~18ߣu8+h =_*i9 `6 PEYO,..XL yT&SkP@]iYV,'lXXl'_>*rpH5>;v?Kl8쟣(›o57Ϻwyj1%W/^Dպ}Z"eC>3짔^VRQ 0ΎٯYl+$*V5JiX v/ɓ&~mh5Jayi %to*Ԣ+VG%WyHبR%cKF,!8Gka\SbV M;;!hDzVǕxz,LcmկQ!sT*uT*Ex≗p&nV;;t}Efqƛ×0Њ$-* ! D3_lmoY>U‹/ƍS,D_Ǟ~GkLUԢ3_0Y/Y=S@<$E?;888)03ZJ0a <`Hhpe#$sAfMVUj h-"v(t ( L__LpEu4 cyi#W8r#sO֟ۊ*{6ׯ_³?|[[ߓyTEQpr-m㏏V~Q.w_~nc El-Wl% eOXE~ 2z=aXP/--! rXV9UIcyyTHqhh ,R|@J CDUU&>af ]V8!,-.b8"chU__u]{ RYB@E0@ټ&F|I0~n(/kZ>~`}}[[$'6o<+W.YeKhuN^GyACE)Dկ~8utڻH_>'C]n+|ړJ_J*X !ӍCftYF%9s qsG;888(I|&56ec D5& &F ,?]+&DU +qd覶: 0b;GEXXXŋ喕VȍISVR VZVN܌bBe|/~p5 :gv:R |> u X_?K4'aϚT[Tp}m2xqqasvᖭ͕ζ7h5FjcDk@=Vj&qu;wi-/9YVORWvzmj8Kh>>ؖжX[B7MIa!Wp8&cB+ż~VcFZKό6E!avaaF̿N'K/۷7m=7Ef9)3z|t<ςYgtk ԜUSHKkڙSό13~RV 7n4k繹%|TR_I{rD !9@UҔ RHGvYp^VG;888( 4ݓȐ6:yxG%K.H5h"1}}F}E!!v8TRb%`:y=I[c%JdR-s4ZBM˲ @ 6ڀRTU$i*=}pa }޻u_"ٽ |*pwGSk?OEpj2xd pϓ"M\8/^D^<ǾB I$I .BDxVCE,A^K?B$%y5y![ |ܙl z ίQO=bqqA6anQJyŒ1N |2(YE<AZE4_]}^*3mm967ϿG Zj|r2?Q᳦mAH$:Y*)vx)9i~G{ T<5(Q6l05"̕_eLd'"HI"ssyr-FI^V@ ̧j!\[@}O0)UN\8裠ψBX Ju*8Il4p(Qb%8熼 ]D~E 6kIH];AXG_ǟScEuxt 5iX1E; u֣${VbiqVWqny04ŨrB!j)ԩjc])N/Qv&ǔI[;>4)P),+/ciqjXIZbqa}~DpنVzgYfZxc=W=G^G2}t6"w XwojhZajCnQI$1R<ԫ}{ ;nna$TWcks_q"z꾽=fԅƍ{R(V lSjQnEpgv3W_TloAWo9 j[;įCp٬'?gkʡ" Ȝ N$Ӝ r=f4N0p S \A)16>g&Z~*lV(7.#lS:IIOIrmc=ب_I#14Me-!PVeMUߧi4M%VIʘ ds_~N^Bp_~5y 8aE'H Iڑ_}+ ժ?kmyP28 Cwڙ|GqiuUڕu&҄"[cT*h4X\\q;w `mm o6y@Qd)X*2M ah z%5Zl4Ty-/#s }9vV5c]ιTy[YB,lKh?@ `^\gYf j8=B>=Ʃ !H [[[hWlÏ>B}Y\=3c.J}bu v]\V CdY4Mi?ypu}@)v[+K`YUz|~{69GXYY}}]j:*:xAG?DKK,ˍ"^7k%?(OݺXvk/s=yK h9{̽4I7\|}҂(=ڟ~isO<BaDZ=gvwǘ?sVOS J"F)@!rEB0!(e9\ '#rw88882a 0m T0"/c! #QGI@@jsQ`wd/1I&ƫ5yBȣWیU2˲ NG&NACLa*`B20?^#l[c /8C?ٿi |!H[ows7W૾w g|45}݇Nڊ7 C,,,ҥK8{al*~!:&* * :ڬ*2@d!Cs~߼OQקR{TKKK b-{6e>/>WJsDq jꈤw'Xжx%VVKJRy6!;;jfsI_w!.\`^흵s.a>;ykkykk=30z|ςs/~Sc8;h"ⶬ?=.cS޿)ղWUDPݣW= -Qv Aakkh( heLqΐ%)HS Y?;888OdXZH @\ y.L0%ZD>6eá/ _+8j ΁a46"˅~Qϲ ;;@ߗrNkzO Tjk:ʕ@[i&|>ɘ_X_bJwqK4 pn=X G)QmJf6ۗg@"˲}!1WVVp9-HDLhIG.//O=.^8AMRA6" e 80S=c8 +c8bssnYKWǚ: XfYsںVg('oF*쉜st: Hļ^GZ5}?O;i#S}9B 9~??.@dn>BR繴UT ϭ5zZ.UDǤI"cv1N[>Կw>}pnܸ@F!տັW.s2ӀPP9LNǶy֊ٮ+rpppp=8a6C X_zs D&\ DRRHY?Q"N[ s^rF6aN^T@94Gbzl圶Vz:[!* .\Ջh4v!8GV+J MSxOKX IDATo`%5lA%5r7Ix& MNx%3Ԝ IbQ?;UB|`?SE6DwR奥3wt#R xa'yP*2 @ 'Y j@s 8gvpppc^1i -<aƥՓ <0HLqyAK ,&z"u8*'\F\T@ ~SIJbt/ CDʮM'eRZЄVQZHA%uQnc' `q.|SwQ,;;p24Otw/A̳yƲrR׮3]s:qQrׯ_?&Z;y.?ժI-DVΝm.},//#IDQ4)]MB@>oh5~6%tp|g h6& Q\!5:&,y:clnn"TE$ItnmQ!"wVlZz?#ܾ]tn0Fi{LovxK*klEugBSlOhJJIwQhli}o~ ۷snŗVWS)vy77Fj=ǬkO9L. )AsC&9Sm5pvppp*? hDDRC swm-^ @Cp ss*8g Y+F+BISԌƍ/a0, x}ZE^?-}wF(5[:ct{~߲À&}B]<3Ss]hRJ_s}a}{q<5c AL@ \/8\088'TvsksTݷyեt\׮]8d꾿`<Ǝ82V"jYsuֈIB2&׽Up׶k5hhZ f5 B pMZIM~!vkkkpEw8y~}yn`mm ywn$IT[[m|?"znE[j s(BzgYj ?iA1>I݃j ۵*2Ru?|Ss=wvvNH_ʘ@TdC@&(88C9g\QߌS:8880'Z[si,("ՁO@vk  <+CwWJ1*d}sU@eV@`ԗY4`}}?OVHBр |_V}9(EV_(̵VNb ׮^-6&{.#sQ&OQlZVa9So4p~[1,/-YB˥2R*(k +5>Y 4`0@G9jS|-tA:Lo6~ߐO1A oullbsst} 18U]f i^/ϘZs^% uABix&ڡD1W$~945zPHߵuSs8F1/=HI-N ;9wM"FseLkB٣ @ M8x.<8}M4waʈf;}e=?s\@PsYt 2 f1s "ZMrM6p85$O=e?:SP?VNAŅj54hRk BI?=4?g'|S/hZ7έ$^}9__TpEfWgWMRtC?Zv=MBVk8g)⌏[B.+9kUmT*CP"Q9(>I Cy88nFVu{I' Cj5T+YR\}zosl e>#||&z,rRy3iVC -|'v!IB!ôxGrq.RX*\^ԪU4 0ϓJpem{oE%iZsTR@{/[?sUTOim[ףXɟT]co%=!q#GWT=HOh{ i-@ ݈˖^|Dꮓ,)EhXrTFe| 2!h4!(BeHU"/TIݴd%HNğV럣!63VZuiW_}l8:ӹL C ٛ +_Aә[g;9\#8w݁}-XЕJ)jJqc{k i|9}0"+ܜ7LZ!OY|l{RC0b9 cPPV QlN |:*qн^QZbqiɴ :j#M{ba!sI"BZy e'] `l^w_D{DPDW Ύ>wNv8Y<|{_EְH_g<իWQ=y~\/ ƶ1*Yؘb` 3IZ Ο-sQŅPB0 c;\a[D>^Et`rФo#z^YB%iA FuV|R lqaqqV`nNQ#I{x啟ŗYTaq=Y㯟-knQT>U`=gT}$)3U\:.9}s*:wWG}yS(?jO`RY|IaIr0,ҘB_( dqpsdI$g3k98880FLjF= 8-@ @ AjBNQ# %Eb6'_,U *`JC~05*~%\pГTJiK PT)6QFaO\V4-Z V/cv"N}'Qïa4/8{% `}_yw@&hoᙾQͤS9se=Q P\~6GX=N >#37"sʲ؜2J[*2ۖRho0ۢB:z>xq`}M+m"( ""$IʘQ-j`c\fY8Y`ii jjIn'ժMݞ/V" CT*T!ֶmtE14-|[pJALv,@^iBg T٫g6lO/صmUê9)RG56}џ?m6jQ! Z-b0Mey.}y8Id#5N je'r<|C Tvvߗi{~twq׿>-2Ν;wq~m܍3 |!8%"t/+sA&}KHqj m;~{4SX AP%`%tR.(2l8 _󌁪 Mg#y2B<ysvA4͐!\f]gO|O/a2G""䙼&( T3ism1տt9k0oȲACȔ3Ka 5p@;}H1b[Ls-_[ѽvH 9CgVJsmZn/yYj`c0"KSTabggJÄE6 {iomj_cGm68^x-g^|W~^En޼nIjR@YÏ ڳcWA5k95ɣ-5kT,=y}׮{H]ȱװ^AgOBIVLԫ8B " C+V;8)R 1dh& QѨ׍TI ^Iq@'5ll`ssG`8 $F{/ Gk+Ty`_/\x= q y|_o4^Q]q#MA`3/vgտ~5|icQWc!ۀ#'ܛ׶S~@U`@) !@Br(+nr5@ vz# N0G(aYhh nq MsU *Y?/c a`ii hZXYYzu]XX 8F0r] ih^eQ"YVNlO$=q_]Ɵ({G=;! J{O})@!9@)Aex?J,IJ{v G;888!8/+BG@<*@W$ Z,Bҥ@Pb5FIp{ V۽(iiҲXʣi@<ǃ>hpz^"SnFI ,/-RN$Đ{I4IFe   rr"ӟW^~kkC#Vvwwߕ1w ${?o]ͼ?0 bAyii +++ǷOyܽ/f`5aK2[5~peFOsjxaii s3}[ \ ksd̶y,%@ UeYT.~V>[>wv.(FG^xnm%0Ĺ|ӟƥKp%ֵ}jغqms$ߗU|!@{w^\om u}T*}Я}/{M͵Hx޿#[l:"zQV{ @{T1V> sLdI$o3kcrG;888ORx$9z@ P=RsY rEjT*d/++XʊrS~>{e*%慝((rO:~3AZxnQj*!(Bep@R٣$CZHԨwxď?~k=~U|1F2[6;@'rvVHw08~gQammXΪ3"޵jYįVNJ]|۴6yF "[FU=o؅E(AJRP6g* V/^1oy.7 TUz=S`f{{G&j +9e!X;`=v88L+5f! @Z5D&0̙syR+WƍEQ !*ᣏsoVq VWWKIF~!45ĿM{*TZBk&:WP @[k# &P A T!=}GA(RIS}%<J $~RBID Կ#0upppo8aN)wWH IDATWsPJAϤ-GAK29!b` @ `XEFhF kg8(>,`*WAP`l:TBl _|~s.~R}lmoc!j*Z!  9Wcya\.+FAժy 7^|7PEKAʼn@ _>j#s}X+ ;gJܵ^JD`mm /gHܹsh~d!ERe\ۊqк&QaV9PVyF-%UgYBz=~ z`YASZ-H,9_|?xak}IP<7fubd p 37^x8N%,̻&'%p;}r2 û&g`k B9b ډ^|(Zo1,-.1fDRZ P>Z&8c '[ `%40Dι93A v#X}Ԩ+/P=>8JXïWgUZj2U1xCW*(ϯ:Nոlm{KS)RחRcM Pɸ]DŽB{r.;9#I82Pdb̝z,FĢe[Ę@pI@5J([g P6 u0{Xx6eq}mGm!#"IT:{8_7ziqV vsZ-y8ՊG} 9 YdR7+ rf=/… &~>w:yt~ТE>}oWSp8DWz 5H-%DlRm$+d`" a!(P}s,% ysXvpppw8a0D$!˭$$G= @)$e3nhBp;d4bU[\T *`"H xzT(BX qBmfC-hZX^ZBR9i8I*%SR6k@X^j!Ms;d잝~!M '?(E-{@{2?`y_쟙Iۅ %D !G>+&v_scLx*=ssJퟧ-E$Ib~6 Q ~}bxDbJx[rZSDx{P,ɑ$ׯHg٩vpppGl5Eˈc>\RW:uꟐUP))^z xX[Uӂ[n_|CDʨjXZZBYFRClc)h\%XFCx꩗ۻ'c7`ܺ%nWzW*YM߼ < ᇥ\Lj~wmٳw9>u%Uzelj߱B݄&0M33 " M`:d!4k;0!$Y$y$lƏ$~lW޺{q9R]IW%]ik+sg~>暑~~#ߡNVDUPJ1==0 *:_i븢s*!c*c%temѰY! C4-pd<ΪGwcxo$| x`uIŊ&!%;f3f$IDZ:w0yF;*>pJ}uU/@w+U{UmNA(%=@ ؛2B 2]"@fHS<5Y_ O{xxxrT*WORJ4@0L%"vu),%@(  )$EA( vW|&GRź&QO s8qM7~+h'caq~FN~aV@jEXkT%OQTm3F'?=ɀ;yHǔM"Y `/!P(oJկtퟩΆt\GUs^{U%mFy0V6J?akOc0ߍh40 5Y=_\rj mރkt%V{(BVA IS;L)X:V97ׅ{ݜ? ;O`~c 뮻v[o5$Q s4upΕDEkͽ}TG>Q\07QudUKPZӼwa__(eVj0mƉ$*rKw )!@rdTܖT%,տ R=<<<ݞ4)>Զ.*`(a!Ugᰄ-Qj_"h!` /e]Hgbo/9qT=RYv,i2^|oSƌZqc9y1Vnny! QTj !}L+dgEnfI{rC5Ñ|%dWVуjP NJ`axQ- w?ǏoQahJh& o기_ɳq?'Ir?oUUv@8Hou/T\ƚBR򕲤>䜯SzZBQj {@ jUM3m|ǟ9[m*$"]Y^j(l69GfMv3M O?4>OǠ߃Wru>T+ % Tڸ@($(5I!\ ITt Rދ(?q+ uAsTW9!ʧ$h!TRRRi~q1*5tf`0&Rs~Ⱥ.ιs CH6*(@%~3{!%4cLYA7pmXŏx|{-6$I,x.73)﷛%̹R /-)WíܲYXX ^;!=FqِDv ӝ6 µfZijL'y#!8u$m\n!s I"BU9 %ε& 4Qx\M {RZ):M)q\D)e}Jaވ;|[D;8tnƯOmc}ͽeӱ{yHVۻ0]R{>'>;VWWPR_ _p(+;J:Bj.'r9$8Hrk^oBl%=<<<<<O{xxxxBIs0>r<G#)t*QSPCm QF0 Hzxa*5K7 StڜeBs$Q7&/?0v-)Q+f͙!IZ-Da~~8ZM=ȴ0` 6csr0K?󫏟 ܄ߎ_6^ Y4doaϙu-M8V9ă~h,JHm .%X}TkHr:\],,,؏{݃gw8bϭ YAVϗȃOhxэ7vmQݽv R,CBA2΍b#R{%}571o4 D@]:SVkC8.Kpzm ᇟ<4ǿV{DK.g̽Va-FU_>{aywm  4'%S Ȋ6$$B;yA^p+"j{& xxxxxxx hCrPL=+hZ`5 `@rY%J"AL"q&2VHECMo:|E,uƎVO׳^wai\mE' Ts(FtZAAP(9JVGt@Wz|OƛP!x{=`mPUE'{w 8qbGOqXퟙc8QϫL]쟟yJ{Mmȑ#h~A{R̀1=9W{VfkY^.0йxv_=0KhB)&xbE5c)KC@s^]Z^ڗ2~rTsxӛ^=I߷_9I DWk z`\>F@{ ds-W} ;胸u!뿚æV ,!A$ӒB HE\"8KMҊs)ßGC o9)B(U_\)rSd0KRJHZNE*ؐj[a/NP{.K/kqV'&'vn0%tWՍv!%<WVT31#sj5\s5hZ(0n^Usmmf?]{v8<<;w~2g 5DBpV_@)k:+rT L*p0տ[JxTbazy:F8z(n8[%Mߨ=ͬ̓vH'}D#c$I`U}e E@)w~I<]b:SSv۞HDQz_s?kѵg;~gp͉#x˷܍sU*$CM k(韕~$`mubFտRkgӗ0R}RP3Qi DhXS$vg siܰro0w<<<<w XSΔ\@<i)Y#dAJhg XJ.,T &Nb7PW֐Q]o)O+_*{R1)NVo9VWW1굚jqU]H! AVS/!tF Ѷy3s_iU?FcoSɧ:9@a7+5#K>%ggUne` 0t5h40d5Wϱ9l }j"keY9<Ÿ.f)!h6`a~~YR<ϑ$ hۈj5ԢV TBO̲ 4fûso}JP G}g{̵N =PjcTL@$}Rs M9 BE? !@2XDE<Q)niKuC@ CQPP಍Ԑ1q&vHɫBHʍT^YZ8EѺsh4pu[?Pj ``fNe+14 PnJmkL7mկ@֝7_G)<=;_DY7~X˗/c0Pv1אy8f͠aVT}ky&N<9ǢVXe:0I[ JY5 _C=4QQS;\i^&X{a\Bx^ O<;رY|Fz /g<&~_k A.-/>`V' \xnWPI]տRM*]  ITHhoq?D d)P-UpUΣܰq `JAU61 M,jUK0DUO*GElY1ũ\Ly HNz9nbH_sŹ$` BJANfql fVIPo8}_])|8:~ IDATpx;sv4^ͩUKz=4NDY TRdӘ'~B6zad{$\#I й#sF3'9 CpcEqq^fPJW܌n8< n;p=wNU~$Ez%5Cf}l? ^xqSݵ@*0 I+YyDZ/!& 4R@BB& T"MrP@@?ꠂ?ppyXjkajG Bhe)iLC&%tƍE2o* H@p4Vs J )6yz1Q =$ɓ*׫97!*9vpP0FȼFkOcGfxw'WSAEfڪ61D΍KJ!Jj`Nb~ޅ׋3誁YBUZASw=(U+p ׾,._mo=ߥK4t?b^{nrоm}OzY)ydb?kQ޴&9k!_J%V I5Kꉾs.gqs(28h8^Q'=<<<w" _/\n?$IFaf?ʽ,==mRa{3%T{+l2sfXC_3ԿT:L`P;! PW薉*_PdI4UiªՀ|٫=<<<<C r(KM*ԅ3c@XFUjhV2͈n*T., xPhն!C"*`i8xs="$puו_g1cJR ZfY^nVd(c6oX:d3k[%o'?=UeuA'hㇰ:lp09B!t(9]x$gMLhnb}blkͭ.Jd!ލR޼.|>6Qר vu|2RJAI8יvIƆ:@غ=0\(afMjg"!%_5,%q&3ΥUJ׋տ=<<<<p{.IES%ũH SEv? @A"f*萻ޕCϕ@&җ /\Xj1lB3 Ѩj z]QaF^W%mGu ^y,ˬ4meE4Bp<8v xw4 ^{S( t+VhLiNӝ΁}iY[W}!0縪+ ӻsEpבz篿P%}7*r}/32:8>ό16= qk^0+R @/S ٽՃlJJйCN{eZBj,A Q$!h6hZvX@=uﲤvm5N86ncjjjd+h@e 3U59V^|3b0[EK4Oȓoh篩hdFQd߃ll2w,0778z(͵3sٱ^{^35~o+B}6f/߻azݒq ܓzm?$h,.8FPB^[)%]W8=O㛿vۿqiq<;$<`տCg2*[Z)UDoB{:K2Hyy Ar.&9CjS5!<_u.px hM)Iw.Y!sJs@RJumKTYxgNa,[j ªUZ|]VX4,9I/Bjݘ7@7Bm8V=Gnh !K̚ns`ff ?/2G9,$afxkw4Xw36CEh6y,vJZqK.0gܬ_cvϻGEE88vغUsMFk mI@&y8YBK)1 B{6^][I5#"DaF)B=@bteC-]3g;ߺg{HJ)8qXjZ?_xܟOܵ78VUwǣF[ &@9>K Զp(RB8\8=2bãW{xxxxT˘u|Y,6V PQ =m =Nty$%-US«y>.R[Adyz>Q\wR{א4scDZLmYASJ! ئk'[mBpqdY|m7SxgYެqzlAlBJy쟉VaJU7Zvϻ~7:ff^^GR%U- \ 8GV 'e%q ZBse$ZY0{fO^Q7 +=4O_7w5xއH)8*_BW6ooӃ >"'_} K_W(YLSD@ RO髼 XCJ* uK%b_l1@ * g&+@  BYh3%EJ%|UJjNcfgfP7&DudE "9dÜaywb<7{~6)5a{ߘX evmLJ, @e(xꍼ=5o""8su੧ /,\5y%3dQΛ(j/܏뉻֐ 5ٿp;!%(e&C}#%$!($%D 2s*yNٿѫ ;yxxxxx85'=<<<<6GE1O!aU`T$P5ǰθQ]*` I ܟ("0UXAfX4Zzl Lj {gp|5w&:֟7dFNF1I覔K65GT{ng?y` ߇ی[.CK˗/c0Vsr kTz4][0 q̙V4J"c\x˚=f(su.6bh4]fjdsAz-y ~u'bݳw_DŽ_P FulA$az]_G KH.1X^1*<12`T*`nmE'$`QL&"8,`=.5k;m xgp,FnDJH>j^^^F™ӧ*lnIW 4cX^^Z`ZAk*\ҷ,{Z-m݈O}K |-<ߋBHH%sGOq%8Ϯ}(MkOF}2͚ퟯ?:kZ8~ئ?.&A4@HIiwkkW )hv%Kh:50-(*YBw5iH<ϑec2R\ss+V `jo{K1$>K^r~_wƸv5x+_5liaޖ$!wįzտ 0HeU !\HPdI4U.zw{B|N+%TcA݌!A# Rci̥T_dq\ x\E{YlF ˢ5@ !hȎ~v+ZvmJYl|mZBFVC6D(+hmH \:(eU͹8~|f>Ⱦ:Z0 X!ؙ^x5Gm"3pCi sssYZJ5?{b?~ADD+V٨c~?FR\µݧ Sл^ZB0%!QBJRB8Q&_yi}R;o /:Hۿ7c;n08!0vfx϶x5wyiyohL)X*Az쮹UQԿ8/U^7xxxxxx [xc+P*`1DL@# I @$)=Z[L#|Kٱw XJ3<ĒRw9GMu+sZ %QT)s.j茱s^`C+hӅRc:Py*-ǥKK.||+8 ^~'vYannqx5fϮ} Ñ#G0;;;Ǣ^6*:EB<9}'~wFV!;$i_ʽ IDATDJT1Gu%;CJwaD;$x5aª%$T TVp%&Z}l!88q||խxK|xnlŋ7P!]zl=y&oH0/!dAW[[<0ܶ@!$rd@pxn[X4.T@=ɪm`B*c_Ki042f񳛅zi&ԍRH Jqm,k1ԢL&{6c<`8id܂X_5P8w!K/p;z/"Iy#?_{-JX~j ;blcO.&f;0J70DlT Y+i4 w4IYB{51,x%4(BѰ 0 & jگk^2}6z& ^[05#IU'ګ=<<<< O{xxxxR ඖ U@BUjdTkUDR_ mW,Vyf*\EZA8qGg/ছntNidQ,*18<`@dY Ԡs5{새t__b =P}0x^`Tc7qvt+aZ5pA`0(;SSSJee!~;|X|o9׽VVĉ?C=:35s %g=`TFj%Vr?Y]YEǶTu }ނտuRU0_Ф!B x7O9ب%V_z4C{xxxxxlbG<:kJKHJ@5*%34UkT*+nZR#zsaRTS~~?ǜs~9ͤ}@uՂbo0Vѣ8v8?3MS mWg~iqe ;\3_?%`R#\'rp;Ȳ VZ05SӼߨ;P+ѝĉt0N$M Mh[!~5 ϽEn*kPq8Ž>uc\լut{Y>'cU !$AxǏ] w0`~~kkOaZ5obƘ"ÌQqyn7w |7݉-oys&Μ99ֵ%ʰqoEM95B%_ٟDn~+1%RªAVJ+%G ιCn{m+=<<<w7XN!}cWfP35oî#Lu0MS߫IW_CsP1GX^k-f<<<<<<6ߩ{xxxxlA ԇ~]UL\"%dCJ@,` _!$B 9 XUQ(c@hu619$׹S K$Q2$%tM9j."4EVKn۵ԜsXA]!:ڔV! @"-Yh7.ǟg><,Nhx9֗/=E^lj'z;L&.2s[U9wnn^`t886BaTo+ ];uh4panqaLgaa\&ҍ:1PR4 Qd M%%FBJK.--AF$I@p cZ~{E;t:4_-8y_ x?,+Z>O|'{H֍.[+eM&_4DK$ R PKR@ΑЖfn!B"`B"M9Ҕ#Z Iwa$Q J3T?4aMSPOܻ+ű@YA7)%UVIUkO!4E2.#2̠l*b@+g442bJ)&~M5sTU h7mo{ ^rx ڸ7chet^ԩ?¡Fef_N_Y^FC?F(lk{5;\^U12@ #LTMOCj/@AI"qK5}Ut<֫=1:<YZ1csHL%N0c%iGBГߋpbUR: !בEB}.繲@E<::y˨#mHp_R%0=@)إDB {F gR\wĭwyۿu'>=+zx as` aZ< GfgmN+X&IbͲ;Q=*%$Yqp0{0@dY~$I m<߭V vS6Ν;'N!b]^xtpsɡץ;t/~K08ʒpgNM~0ԿK (fR@@A(ٿRDp1gzxxxx*<#lŲcUׁi HBQ(N#\.|+ʆ'k.ri*@Nj1 sDZq0ix'qͷlk?Fqɳ !1"sYV" LsT @Je(% ()뺚[!=vlg\/|+σ1A߂f bU y@aK4Gt:8vDl6׭#ACV;Њq!^bJ$߭RiPBJa;X溎]y'vZi% 9sKz5.>=sPBPÅQd-M=f3Өj8~8=jw /_/..61,+]kf5[7K0)Rb~2 P%:߽SOϷC1FvJ԰0 S;>T/_]'=<<<[B \Bs+yXg KNxgpwHu$nKP3ʌb 686ÚTI.j&0Jr?ljvۿD?c+÷YMxȒ. lX>y6 5nqP&| Q0ĉ'z xwgh6j%ҍpDRC8ZBWz=ƏFiFs AF#jȲ 7x#;{/ڏ[?kr8nC& <++HdSgB:☴t_{I'U" Q `Y S$a.kP<<<<浯ců8n 0:*}{^lj'0;;C{QUiy#ISƍͮt !فջ'h 9qɧRjR Մ69fUE pGPqחaYvX ne: DQT OG(ݫ@`0~2Ci^[,{wwҭyTuE]J JՀl'H@ D(D+I9@oHs  Υޫm;ظ1:<2iWMϪ"O6M9Ҕ#BHTmULJh$Ɗp'jef 2>VZ~M:[L8 "IM.z?Dʴ&&`$YYYBUu@gFQu4LF {,C< EӼ#~曯u'8Wv:S~e+{w JqS8}aįM5i6s,{%;&%8`0@ǞE } {G6 بgggU.OJ)RnC6'7;ͧ>/N=HJ,/-\syvVd!ruP&F9aQ溔dhgUngj?C>:<2T{ދ?TT22f)a^I* &*`zTݸ CO ] eI$I)''X[[+5\O9?'mrv] 2)kzzjhۨj`NirKDp4VQNy3qq ^?osssX\\<ЇIjKC2 ǨGfi3m Y1n\^/aZ'Ggj 篿ut865M:XsgH`U}izoRPE4M8SUgY( 1 ,lŊl/^+6W_cf ܸ(nŇ>ት_[[CNEV~ UY`Կ-‘տAt*J"7sxUITzy0-eSJ@BR3rP_hhIrڳPw+  U0FȥV^YZ6@et2nR 0g͇M RJ;v RiQHibRs_qn>n4jxK_~恉k"p| f<܎3~5Af )%8>YBd:U9w:^ QC%cckO{xxxxl (pԯ֣Qu3*%tT$0ɉ_b1ϩ '5uM"ؖvVD= DgЦl0 q 7>(M4!`!%*2TU!-NEjTRR;V0=|x?o<5M Oh".${|"[M?‚dRJi6O-8777Ao{cyjuK^J8j0눣H9*gG ib Q1ѣGQ҄(A^GZEo01*KWL{Vȇ爓D KSKfz{x 8 Cdi֝YT2$,q#MS0Ʈʱ "]s ,..b0`0`F!8Fe0y,A<3MnC{?Zu "S|ޙV :V%5n(CH5 -$Hc M%TsQt1#cw=qf˦½UD% BB WKԧPKJ)U%nwJ^!~3cN.d;z2Z,`3{qӍ7cU k2ؐi"N(Rk,`nahɈ TFQr{d7sxgH x6Eq ۫D>|z .`Y3 ,,q}?ѣGQׯ5מ A^0‚U f8`lH]$D8vjJxr@6 vUk˛8km,*UA`1=Wo=FCD$ Au](pEt:;2]XXK |ii j62~TpnFޡ[czj̴ȽM0曯F_o<ֲ6D9^&BRV~>؇J}&ڂ | mH_ކkƐH~&v[KK Tv‚&v:{VRʕ+zv,5_s]6R !ڈs>?8}eh51.n< _MԤHy(VR3 տ; O{xxxxlET7Q0` '"TP^ihJ)yu*MۼGДq|Wg(kKYCt2BUկpqJrE9IyU:&s9஻ޅ˗8®82_B c 7#ݞ|Ӧf?%&i2uk\-kY(l6A=klr720pWU5xw:Ǻkq)%pI,-/#KӱÄ^3[sMlFEc-]5\$QyR:dpݶ}lAŋE8ƕ; _:qo4=侑RjBd|Upj<߼x5}RPjԿAB j`+LHP1G{ǵ'=<<<<g0& `9JʎITY.7W[&-d*`O/M"/8+hӸpBd6s!S MSW l4!#ٿREF9ykQk"YRBp^iTvCř3ҥ]st.![8Q)؅,Ol!.\7|*e3aR4bez46Kl9=_ِ'1?v?N \կ!n9hV\.nwd`>ͺQ?ZBIR[|=IS{=e= 603"J=B{={u (B5Ǣ!qk_2z7n^kY?SJgyv_zտ" U2ߐ{MfD VQ{e[000"U(Oh ]\IReQVi_VГ=rrQmW)*Vf$I&\fo=p9rxDkTFmkg`J:wMHJbGQ*'z߼gG>o?:8}!_³ ! AƐ?ÛzZ^՜Zm?bFe4inQ""˲-yb|ߏ}5WNƩ~m#1۷@(%Iz!%z@[%f<RֹD~ .RI4I,![Boe l`s/(J&vQ)Uss,_HKrשװ~vi]go).ž  %*DQqL IWzxxxx\sxc[0^O/Yc! A& \D7-Z<h]d^*`ON^(C7jWf ^ze=)dv8wUtY4 nK%BPM0 GgqXŌ]Kf\`FR)ć?rS]yf xe؇Gd5-d osqpӏ`{FiԾlOj8剏-RT*M(Qa~~gv #%j.BpaiRΚ7ݴChB(k/5W'$8Ծ)E\Qҡt>UVSj^dY `1jϹCt +$APH_]*TBQDFu,VfQeKI=RD>*LQOOk0 fFk)$UU+eIUBJP!@SF ֑ f (nVi">)/?v} > Ew#JZ⵻Qû-9_{u{c \JWSȯClk*06A[TpQ0ưM0j35.ych{n}୞J}X FcD$ ڎͯ\~sO2k0 scB"4r4)-D LEE;D-p4X~ 1S.ĸ_3`FQs?u0 $A% !{m**&ݳ% k,+PPJ tHB @H˸@q9/R##qۆ,6T|ҕ"I8@%FtaF@)NUeYZ"X̺ a#tA 0mH -zԜ<.\W'? m%I8A)ERVxA ӖT7:P74:I eL5 8G\EX(v7| E{o@e`{`ӈPt&<. -Ius8qb ~mMn},us4{ټ "~ -ɠm6y/ =Nc,$4k}7xsfW$(Z?U\;}~- پĹJ:~Hgz$T8*em  A dDpF w_'=<<<t&B 4!܊Nĸމ7!CM%ZՃξ oGx8|x?j*9ٴ54V뫩ơZ IlVE&ڻtP@j R_18կ;7" z=KBج)$(X=9r= hs^ fC%0xM9ium0,(7J>SxGf#%Z&kI&wh/(4WJLVkг Txտ[ O{xxxxl+*`CY!*`~YE*8}3˥q~*$VPX+U믿'%XXJvIAZXiJ)4RB fR R+g~gW#/!ދ_žn^D/VX0K܈ d8#8 }Pde ]P$ hB\"΢i*.k(BTi{)]i!bp. ?c?顉hl41.{-bNƊjR -nDL)\ONR68կ{6/~B CT*uPEYc6knh}erPj 1=О΅/kqN57wf\x>leeQ{΂1 N/L!HaFRB׽2wR_ vԿ@\zxxxxMxc H@GM&sƔ=RKdD@R01i[2j2W =I qҫoMFU6Zj)m!"KelZAi?oEV Lǜnb(YѹrPJ+2ci/àzʜeAidguٌ=cQ_i}_d x !^C`92oPI@Bc%8i!M3$I,8|/3Mf7wR5-$wD勁qϓsssӅT}z#~!(kZZR^ *`iia RC3(U?F lV(ڽU,=d Ik8ΰ:%Jrވ~ h,gu]E~ߵ;{MԿvxF)̰K A!%=H 8O!=ixce@0RBrձn-//#8U9| yl!Np`!` RKKѕTZ \W1N݊ng^y^jiM=OE8{m,/m9Ж7cFAT*YKxȑMfYv,k Qlδj{AT+F qcT?**zk<.^˗xsxKx;oDu=[I7& $CmﱽMCuj5AP  Z=W*ahcΤ˿3<3ni4Im3%~1w]OB_ZgDaj)(/D2mxE!%DGQdi$ /8zN<<<<<< ~ᱭWn`Cϭ`HEnѐ 0E؀@H@`LHu ?͓k孠bBc!@V$"8B\*<$-8qu\u$I:x &50$i !% PvR"Cv\&oOJi-bMmi ! CkzΦƯT*ms` h[QO<;]XRJ2O~3Y/˨j^MᇿZhVEE`!boO?`<.Z&ר hNIlNH3szkäoa[A^t g6,2Ƈm c1~Jmk;zœP  e $WdR2@JUi2XJId V;6yc-=<<<3+<*_7{.Jh4PBXo۵΃nvNiZgc[h4P.! !xW+-\&Z,-t1ĈITO>y=*VK>9g/Q}$sZ )AS{o e^g,PHY?7LhΡ.^߹srz6t@q'k8&w)"ͳaF)Ԫ $%DմAItBj|9?xxxxxxl5<ᱣP[~"낔(#P :WDJ[D,)XFQiTvxxRh׬~5ykw#äQҥK8}aR`e&82Ě:ذkj2rfmZ-Jylc;sbʒ?w*%OϸS~^Jn8 (?A`RdI'ODy%~ Y,,,X<0Ws3F2|UӶ59Fk`` ߕt]v>zn힍7 $>],,,c~%,/wACHq8 Ƹtq_ᦣƣ#Yk o4릢vcM&9߫e?s̆ajr]w8rW/ŋ3=;eDF{;Kh~p:^9 ,tfr!r B}]HpKT}Υ&|)}nt^xc'J½&&c@(Z*5IL!)&*[=nakcuRi9 ilgJ!J%06 w IDAT%Dr&~@nhrcj<8YKF ̀3 B7Upac =*xx D^g?i  ՜gG5g:t=2/ Cx k̴~ *ʦ(0??eMgCahI[A4wWEURJ1770 Kkl(BCE >߿?2*|.+`/[z Kojկm{ bDQ4ḪA8N׿v{-Q;$窛}t;k7k+!30} ] (*%ZkT&Ÿowu>;י%UZ_5^PLտN(I3 7=SdJ տRRR5 $ GH̫=<<<<qwX H0FXŒGm mk3=XұVB:X-6VE5u~hu^4FRݔ}[.hɓζGKȚ|`hs(V}AA\F ygHTW$iQ <n/rF |ݧ/\o?OFi.>޴ZmS6{ِMƆ( ]Bn'fӶZX4Ҫ~ݳu:t:k$U*^VY8 K(2}x70?ĕ+-,,,\Fy1(Ar۫\_V;/=:OV~v B\.9 ![Bo FI2Rm`ΧWo=x\X絶~;į{iapD9~0BAՖLČꠢRx)"U&8H"d/._kO{xxxxT)V7#*`4(B DMF~\Itp*$F@tƏ ($o[Ak-iLBP.Wfz8y ȑ&g9A Q暦!A2A &$"oI ɍ08/ޅ'w 0DH iYgWVV=[nZzxN.!l:&ܺxKͣs>V\5HIm,M9wuq'3jZȴ:~gͷբdϕϕDוX;UQuߕTۆIH+ I"%zT <q-PTBR(TO@"%U%T5q+E!@>z]x籲m?OoqΝ;v{O?o$8pLz?I]bGgZ1-k+ZppSunnR Yko6ӷcyyNn>gY$IHV_s0.+O? Ǫ~ݾU&IjUfp5xO[nѣִ^u-b,\E&ji ,XKhϓ@^u Ѭwu>v{f4EՄ;b<춳{[Qd@?Q=9` P P,)QDBHHE )I EfH QSyտT*='=<<<<Fݢ B F HH@!!%J =K4Sr`$rx/7KwVf;V^ݔPir2yQ o;(PqjT-YƦ4C 9ݗih422V6hHj>,:?m~WOߺco~~qigCM'O"b2oՂ?O?OB`j5>|x*V(;lly-I  }r~ !< $ 4qVCVC^GZuJVzoy ˸ti *qEWOcCc(q&z%u}a,9Ȳ ,FqT=$ÂF!#]RdΟY/]m'bsͷyԿD@PM+1 Lu/@R$+u*D Cj+3]QWڲ12r]X :;N7'Qv \Vޅ'x++z+Gz^Rsg<)Égrdpos*8|0jSfiZ[MPW9zz4~o3(7ɹrlUsssPÖ<}e,,,YV][)%ye<+[QW%v;:z$8 .0D$62\/=̐LRA9\{ל_׻޺ ‹3햗h$6 罭5ۀ}/!L՞2P($ R yT<T٨}WUzעDs>2VYI#cfҖJBjR)JXZm$9L.vvB| ڴQD3Ji<˗/T*oiTPB I*"ӯNR j!sˡ} |G߇| ;E~\%fr[jM[UgCĊ)4&~0DR_M+++hZv`9*FZj9MҩoǞǥKojZt:u~ؚ8~N}v!ݛqMM䄰0PPBezV4{Q!C :k҉ jrY]M׿u|uvuJ^S˒1͐ujHB찱xuj.GKqԿ1 D[>CUD 9U t5}='=<<<<9 X,`nUcTihרy%8B@OCmZ99M#2DBV+&~k_!0NRi8~8:u e뚛QH1R(ڭ8! ' 86@yAySVq=w=%Ooݿp]7{Aii=ǎ2g|Nm~3ث*+*L$VϵZ`+(mkl}w0 "dY, D^/X>eAR !xa~ g 1Vas @\؍7];]^'@ $Bt٫=<<<< VZ*`=O5i(`QXT$\$\(` X6v RHHB,)!5H yI\.|sSpehd&Z*"(RX{q$p9*2Rqh军 0cGM3 \𱏽<2jœ1|szmeQSJU$07pLcL#~3gϝC+wjـ10m_҃F?:%fUӲZVjJ)؜^$I4E$ ^[:TR < qrX\\o++q(J|T 7{O[&z뵔!(B$Khb^S.B*wX?o}{og~xEJcscݬW6PDrJ1LU|H R$Ad6ث=<<<< `ix0UFYg^ @7IռڮI*K'TDBgf0 1cŵW_ بp}-* *?oOmqfXj$7p<4igz˻W1Ȳh X΂'~em5^1f_B$)NǪ}uݜjFjjmyKV=]m6Rn~($4qjXYj nXKhw4^u at4a^#(L+iPTl5kN1q۸w}"ne,HXX?{w4lk"A(fm]gHJk„$&ireA(xZl{*`JT90PjFVTvҵrTR<$y5fU|_㬠<"INPk-׍p,K/mjMa% l~'2DQdmQ8KSdi: $0 gμMz ʯ|W{٨9,d8e$dѣGQTfuσvb\&1CX7d\#Gv&%~]8׵z6׌WoVC\FTBP*O^|WjwyYA8NB;8x/ xnCg6E"ص^ø/L qL9*h7=6Uz,k juyn++tvZͬ^%7nm;OKpտq P jH "B)T@@p  @)s^1 WYF,)%30 jh&i'%! Z,: ؒXhϢ x߼qA7l}CIT.cbVEο:XmjRJUfǦYDR9;~L pI o)717WKBdCϦA=N!6=&:CjjCB}=;="~4EECFݶ$IseZҷVa߾}(ˠTRk^x O<.^\2,,NN F+gW;-0|2| q衱n)nuDh`(BJL_;ֲv3c@_D23IS|qnI`Մ[PUIտ^q%4?G p$*Wq%%AIxǙ duտf@׫=<<<<֥[ .d^XŰRP B 7JL毱6Q՟mWEF oBFX¨& cTt:|ecmX՚}J0u$m:0{>z^}{xqџ&w߅oզg?v&u}3-dҪAI_3,]_?`g=#s7j3~]a0 MS ncyy^fi4MK^G^GVC^G 02z;x㍋|y \iaqq >z8A3WN3_㈣wq kiw祔B(Wʂ%tjڮVό1DQT R=t-.3݄X\\P*Y$u59ȇ?$!`U?GUO@:vHK s QssX\E_i'=<<<"4%v4=zEtN+i'~yjY>oI QAa4hw;x׭ڿo\ޝɫ4sc:NfR\Fv.;o0{?\i 7~G|Cw\EL?SMz9^%Uf ye3Ul8dg4JzFa ` R2]׫c.0ׇJa/=!#ISpݭj` K%I2Bahm ;|_z<33ݤhl,뮇7z.sZn4Pd/,Ԯa DdLJkS2H$ [?{xxxx<1uȭs(`ՌJ]h3UQ=9- j)$jBem Ī zk)%vZ^J Ir7njUڜgRiK/!|ŶƐղy?(FPJHlag8jaH`s߇㭫vz=?B>O~jL7 0vDE0M`?`l$Cڬ'~͔GVՉ~vrC}DZU9ؼAUk<,yFϷpJ ZkGV=,b~/8vN:1v`fre&mT]50 `!͵(ݿyR_wn#0Km_Ⱥ9Y!ۉus4u>_[?K0 2}H !($T V MR :c `i) VFV@RP0XFыB9iVXo^ZEAJræAθ%:HӴs4̹r#.zi_X XY^RU[O9 zw=u D AJ_$ u!$ 꺔B*=H2  XxgӯXqM12 `N^5.uH@В#&X %")$ʎ 56$ƪbEjk-Bб,UQMnn2x\c|;rnZr VVs"cj bQ0 AU_yFlӼLB0wߗ<1??ߏfv{Wo')m {`3~nf~vwDZ%nP9^a![?3~Z8(OJ߳,?$w(>c$I Ͱ糹9aRJI@+^2ΜyKK+XYbye 0DHYƑej*v~Ws/}ko Uw]b\%!f2 )o,AK%P}<* b\ "=T%nTF̹s/~qW,R˒ym K_- C_ەBu1uBZ;hIqA,+Y0Ȳw\cT eMvBN\MMKU LM*mT߇M5J^@H.кż;=&6x0 ѯYůmM0P´]βJeCYd)%^|E|8xST(Rیݼs- QVMU)Ύ1Jrlm(k5ByhGMwc{x]=ퟯ'g2n{dZx"CBgO^LbC\FѰC' Qw8wِRJj5k, !(ylq~ \ia~^Y=_R[=+7lww-t<}5zc-6r3ǂZUKhs}L9MtIv֒Cw/:kl}7{k;gf}. _Q]AJR@ $! BT.<&R p]MeZOZӋ1EsQuh_ʲ1 `QБmig= l¤H;i^-:w zCRi3 h%0:x6ӊ|[;{5JG6xnYf;Y!2u|C iivYʵSNNGŸqǻmqpy2elm.ѣ[v;:._^\ibqqKKm]t:JE1$C5v{sTYEkJ5XYg]b8dBlGnHIVFkvYrT{-HKAd)Lfz#cʫ8}<;a ,2`^?^- hbYhyg _RgOz ˦?sM}pq8>N+\V$Pm fįt`ѣ(m;aZjzJbH̚R8 6Ϝst]mvz8F$jH%MCZE@R*&J(=J>"213$`_ ,q!d8?06ػgk^_aI cxmc@e $^72fF~Uu=_TdVuwth:3sUՙ}_B(|={q<[ѣDZWjiofbaz˽xO=33͡rs1( Q> &(B7ai~ ItZo@9o?,,,L* ݱV/[Nt_w9X?kg z_ 0B"MҴqCF+I̫=<<<Xqש@0055/-GE(i ; a⌃7]|(w5oԔUg!%u n;K_6QY{fif=OPP7x'n>>| 8vl XXhai:zY2pxSfuFmHC2*tMf7R Eo-Rmy@Z+]OfyGu<#5+; PC8^pp>%E\3pFd*0&MD&Q IRgg@-uڅǩO{xxxx+h9dm G$ -l 7[ T [zNAI6Dnګ~W[3X6ܜ=;T(q\KC'~!՟V!ņKRLGNv3 @ڒ(%w$px?-UpfsKq՜O?|z 0T`o<6jQػgfffl=9tR6rH wyyn^ʷj I{dY\8|\ <1fRXZ\@}'鱛-[㔚U$Z?s;n0i Xu!(-L G[?{'=<<<nobfYrM AmPf,ҵUTi̙kcǎ1Fk4E5zcW?Q72Dl~Č4MhₕkX<`9ЪMVy!À`>v Q`3ZY&75(rwXqj[@{xxxx옅->R|ЍI'= (  1XAkgfԥLq(l-m {lAXlʪp"B"MuNǎj tφV}k'kejb&{j^g,{&73 ǏG '9UsRњp8qc߾}ZekZ+ͬK?[+3xU&(;(Ʋ>p`(w=o-yU{sLj(Ay)۷l^=HbR {20==)LOO^#"CE;$Io|V|e<_zn;6# @Q!IGu_{Y8}VM/m)ib ߏ38BJ$>wc8p(ƶ' r0*9*O4W)?~wbCQX?^j]/ij"1Vc[?Ygf X?:.Q @@Z(dX e`/=<<<ͷdA $IjwGÀ9FZC~b'~%}8, DKDoAӱϻ;mm4h6hҏ&`xǏ/%?e,.juJ^~?A OBGpࢋz!=OH!@f>1݋IOzߏ(d`FwnyQh6E/5Nl/n}pE^Ir(Exm^k#RVPY[f3 BLzݨ#UPi$gȁ`kOP:LOL67sd"RjP5UT!Q]VAόsp)u~R1S)mMM.FQoyO9 l}wH9il(jR"Kdi *ұAi]}R%5Nfp5?xOzPf!}&VokeVQdLWNB8h4J%tLkAw=:o}VVtzFᛢOmƯRS#>/Rv<왝177g輰~LOOVa4 @ќr÷8K~HMۈ %7 Hh6V~-Bem<ϡgPeO|(8 CvU*{ݥ8}ick^sٚy IVVhV&tzttHԐ Tv\zEdwʯFz#"3ē$΢Qq!x݆R VK{=4M4M{t:,--q +]};fϙ*:^Z? lbdpӍ߅Rϐ Lr(g `!_#[yXs `D. 0*9al! LHI( <6SLQ/ t0J/RPJTZA{5րH`wS!FIM0\d謬 -Qԝ*׾_\R [SLPH `r8n|i޷h 6B\oDTE'瘢"f~ ;zk/|b,nO6C`ș쨱]J(m=9!/ yn V 2f8*Lu"g%^7:xT$2?3Dggf1|-]Cq%㒾YC' :^پJ)AhѣK{jXx'H ;G? kޅ38mߝŊg&"jcW_ɥJ/o|sߢ(0cdew^nlsYY(0pM+rbP"`YY_o `dD ̜R}^)Y&o`,9V"*߇s .Q20H*j@RbuL$p`^Y*zA>@{tԄz=~e/5V"V ɹsMj>6HK-D֢yfGߐԀA};n0_}wD?쟫Y㪚%eIMH` QFQdSzd!KDKӱB +lkݹc뼺w\[g0t x_u3}o5חct?2S!R</oձ^?;;{ZL',;55nF6ӹ K_ կM~RbaaRu|6 3'Yg(Ŕ~L~V`zkLAJsk!oo1d(j-ܱ6@d :9!*l,` r@5+Y@)mOUXAF8whgDtzdY_*KxP=&b}Z*9dq0I4M! K ,=iW@ʊ_*ڻߗ=sKK+~ٳg^Mn}%'z)^{$}~'KM:>H hj= "?azپ[aQO mg5q H_i—K:߷Jj}@(*YOǟ9%ɫ^szpC9p=Gbzسg]44 Y!7Ӥʲl`)LcB"jZ%u &fmWU}eg\:w01;wy^z,awʤ/ھZ$IHH_mTlZ~dLg#=v}XY(|չ}z@6%z|?=L*KCbZ=SZs[ȳl@*ݘDZ:O_"oOܾ\Z\@fv*Ȓymri=`l߲338Xs-GX?yD&5i_j 5 O{xxxx%$ַ pTe+Z Z( ˔~ +h[LXA{Kjzٗz)H!$}Qfsj.^}-EWES3P$RԺRSl89\JmmUt]Ek5tr.i5PQƘL }fy+?%sxox'ڈfSS LO7q83qY):RڞUDSfKaEz68.e2!DZxβ̒UKnv=PyµkV#{閲Q*_j!Jb98\_ƘUѵ(k&>ý?c%/o4 \ )%8F a-S Y#0T#"z/wх'|/FY{vgWoa8aeFvFfSdp}|*fgjI%{(])$IZj%iLKJnAcd#1L?A멎G}te/eٺjYEQ Yq#t|&+ ι%ApEou&o5M RRWV}/xΦӛӈyM596 KoU(pg?&h-/[wVDIg|U׫až۔o g`Ll,]9cDUi[Vf $SCV&WL),2SŠ r孠OFbއUK3ngZ4Q߿BuGCJ`WLDjȌ.2A $pGGZeȳZi+^):+! o矃w~z9]oAo|V$I0 e9j^Z-B!#4uLO7EtSSuLOOaif #{|,,LcMoHROOO3܍.&1] ;/w_UE t:H4"|n~o>.)}333c%\ri"ǭދv[Mt9YZm'=x+.'>n۷gSC 'rMӨGqcDߢ(Ow}KK %Im^bu€eԿz->dhX?UG<<<<<<1ײ0P[AUqp(H&u71Sq5(fUhJ%$j/cnκ }=?7T),9cKGt/}aWZ 05cH f(w(%R(C8`mh'L_ O%t~퟉VPJ+@8gȲa Mmֵ&p|d7g= Q!Da d*#VUxnnnû}Z33e}ZKp8X-Ž0 mX(b]eRFSSS%{hj!9[nw^$Ɇ,󼰷g*Kx˖q] t fɪnF8@7p\<0q4s,,̗q4"GY?юLq2x=gr[Tjxc ZFϘ R)p\@i/2EN[-T x衇ѫƛmDE2MRZ , Cm]YdѼF3z0( m14)G+M4Pd @zB|{X\7 ƪjM @ZR@)MJrF5 ILO[5pTY2X[fޏ<*bWLVR |S>OpҶV?9rgvv?o}qNȲB!cj ZhR|<z03@&vQ5:f $Wd󃋢={033$f*瓭WS qGa-}Lvka{:-—*V[Y;|wUz}t:of6׷(t0E!+cOfç?^y-{Ϣ(p1ZUg6y:+7 g~xF,AMg!<ucYJ_BJtsa[ʾ#v=P!`EQ@n0J`:HI ~^_p. Vm_z 077h;jεUru zU2lE0I286;шQװ8aj}Fq"({uzz>s6=_q9g;n@FoV$)!%~]1l\ A%;h"?!0S)D`i0E֟|Ώ}_߽mپ[a !hHU`=2UW8V, 5ccjG#GQk?RIҷT߿‚?쟙c4K`=j\}fnKd&^|tu \#y"ziMO^Dqltm][gm pر%{ƙnW?ٽZe>c=?/pmg,,,F\nSѰby#<(jɻnP<4k 數c\x4k d \q0ŠJd%PHY&᭟=<<<ռ`(aeJq\JQQ*:#/[٬ f `87=$C?lObܵB@(-zim0t-X0 Z"g$ss"dcpfsߥEQr 'V#|H0 VVyXY>iZK$y.C $IKJշ!]ڗrXbqx%4טqAJ%9ag!᭟=<<<<<<1Pn kM"( 8GK$0U@HC RP,հ)6T\x+v4J$wB3FRJJ^z-*x0dqZYhVޔ +e'I(|(ڲV)rCRK's3"ѵ`es}+/ްϻs՜Qs3NFy~< I"~ ZEIaMYgOUK1],9NoрR6W"Z!Җ9;OTI]wFsG]ծ=z]cXƊ(P!Dlqj}*|( \ IruXXXٽՏi \T dK'|=j|C"Z6ΎT=J(N7/}KCkIABwee/+ _6HOn׺{š6YB+@(0p(}IdB(!4߃9Xo{ `]խ<œ""3Xz1ivT `B`$%+hΆ ԞڮVfr&'sn' J)W~/c AJ1<1RPa3ql .ֵ޻ZBF){˜#Ƭ54W]՛V-z.|y=: 5+tcyM?gY|2+LGf3]'sF~gzݦ2/ LҸ2c,--9H՜6Ti^>?Uw\̜UI <ԤdoECʹ\ƸQ6KdヌF ˊ$)Dx]u/dvc̓pU _~IK:GG㸔;nS 馛&vw:+p_V!5ht_탻.pIjFK( H! 0Z= 뭟=<<<<<<X  Z?'c9"0?Sp%u $PPĄ1M ) ZA 4\:Ӗc6Dn[n^[S0d)K"Pf$ջRJ]4!+A bKZ-H:Z&JCP.(b=Bwou~/xspYoj&2op\j#7|z Od0ca"]upZu0 {lokMe8vXPu.6Ѥ]Mn{ϯEq+IMHgVZDۤݫ=B@G=:lry%{,_͑!{|*G(=1e/UWMw?~ηG)yBJH!JqcVYiSǽnelտ۴.ưƝgP ٫:`~gТ[?{xxxxxT~xxxxxe)J$09 jТHpdY d͠^X2l.88$SS 3YN%$'.CRYz3N z1{G _ôcy'KgYY 1Bh(\j\` v-M']m-BёaZFI}lr0)*5(Bj͊c)%N;m/-Cco;o<ֳv`;7QdkA^0)0O;m?FgBVA7xQZֺ9k)z Q6!|QdkLB *qDcUW=T0?rd?!),7Do~,+$}:W|cy4u] N106kdzRډ3Ľ+++>CO~uXZZ҄*oǓ'}]ng{.b_p_03yUg !$\! H!uրZ?Cd؝( `U+hYȲ,P낾b k` I CAJl ;CU>`5 /ַb`-gv :Grq!|o?7q!nV!2asxMፔ0<=ɗT\`L[n6 &KZ~(-%VðDJpΡ\|qOǮgf15CdZEۢMw2ߨ`z/W:'lLwc+2䘏ڟP%sU_W=Wi|Z4kum[jfo"::$">k8s%$kQ sH!P<^f졓 )Gf^$g 33h6XZZЌs4 $iQz=)eAD`JPRx_\w7 W/"O? {֦y$X\\տo`rn2%J[Y)v>MS;Y:]eCϹ!L*^z%viN.9YgnfZ^aiYV 2 \XeIڜ^"T _tٽccG |xDZ}9n[~8ߍ?z|kt'v_{},/MҶ7לC1N `2^\ A@ z>n'=<<<Q J3)x^}謽^\\Ğ={j&R f}_@q(4 0aCBor!8B"$@!& oᱻ `]@ XA G 0z@ɜUgTJ)SbYAw:<* <2fwbI4d{nz[G?Fڍȥwmq/Am=v)(055e;y˵ojC$&Ydmy}=::5hא4h8|:>$oQ%Bjr_W[%{By~Oz|AMx;߆8\OK27{wrq÷/~NH},-,Y~;ߺzl<׬kP˃뮡_E*ez&߁s=<<<< @eXusGxnέ%th61:X*EZ&uj '.g[Ǹ ?eS8s6TvI_@>N;@kyeGnPvQ6덛 033c Y"}s(51UpСX2:OXYZeM{eW]YksJ& A %D :꣌><8<1㌣ 83_%ɅȕH;tw]vk?ZsTթ} OUSuz_k}caY9whw_ׅKM"ɉ{͋^\u^:c9w~or[˿䮻䚱*n꽿XD^R/Xc1X<8Ln{16n;B0E?_F?+( (P\WN7q$9hȲZƘ6sReDBhz/vؕXI_0HhgtY=y{"B咥%ڎ7Ϯ#&7T_ EQEzɱ"CGowwv^L]ث(gop?p~gX!Uo7]Mzߓ|>61111y{DL-0R^gﯘx/@o﯍=>.gӝϊ( (pa, 1 Kz}F$`Z%>3Xb1K5PEDke]"I}Nq33;^c=zy?o۳,ˡ~OL~ejrv[n SuNPzm<=DםJ*5 ᵥz( TBo=zXx{~"oǤ&ثlmv?S] 2PLNN2== }~qžߍF>|'>6S+F"6$@_$뽿>z/ێ<(Ju}j(:g@QE,+GAdmOFi@֊+AX[``<7 AJrzXs"`dAm+{E]AhT]@5YZ"q#B2VܠK!4Ӭ`bdd]v0?OQs8X\\䬳b޽>nݷwRs'B _[i(]Svp?:baa;_- u# \wBxwv"wkԿ^+7tx+.eY211_oZgFbmEeDWg?;|]ZZdjrreo}ZM1"_k- +._  Em1!,WBY 'jϊ(2*+(J\Fw&#dc̵Y Xի x0tܣ" EYY1 :N}&D`c"p311}NБz)J(F$=SF!9Gdllզtk?x=1==MݦnWny)Oy SSS=F?JzݿᦧqI\[?޽kC϶/zcGz~`H+ֿ? \˾Kx߷KQ&7Co>sn]t_ܾf3$l{|s~w_ZZZ]MEJ'~n,`ŀ0VxkSKQφ`O4b(> "kE<ֆ҉\IV832:αcxuocllKNun.ع'Q,˒(ಌs4[-FZJ]u?H,˘`~a񞑑<9眪;x||N'ͱ{|LJ*F7M:o?ѣr[l4yiiɡNB[)qH^t;tO?bY.~9ܳ-~|X #Cozi6Zc2??'>I=LONUbDM7*moAz=GbUzYqXR(KXak}zWQEQaF`EQEϵ1[ }&vfb{8-bR&A8 cFAo {bk x=>^FwСCG~w\<˲ Gy=Zol2{7y3::ʁN\> GY T̵8tq>-ũ>CAut=}&Oqep^G^g{Hww-+9SsoF]{n7 10?tL9JP揉WM1`,VX,彿yuJ]1vEQEQ@`EQEYQ' $H乏1q%dY>`l p %v/Ha\ Q̰l脡ub0 'pE`qG|{v^qH5:59Jk8EQ ޓ5늄^MvuZ-f(8sػw/ǏD/,,'$:433{qGM F&|fk{,h\9@ ϊ(QXQEQyY9 =},-1}x օh,Ǔt 1:wE)gADjD$8"06E~}c]O}juli. 2>eY"RE:8As`Lp rn`c cccU_ αw^,˓+Cjn~ZU~_6:<񪊲Uh6o??%M~%ǟx??afff('Np|vfMרuFzNJHB䳥ZzC=KƸN+x{ZıJ11((uTVEQC_E`Cn$'ovd40}\gWQ5"`8j 9.=Alzz~Mo k4xﱱ8}5=,S'mnSpբsrz'N^9EQTqR`bbˉwF?n,??}m-4y0J)`@Q#_|!ۿ‹^3r _`ddz90\}s'sbvv ozNM+6E?l 5gq1 c\Izes(( D FA5gpt>FAV,[0 b1xqxqՄDBz=V6X|^& bXٳwEeɧ??$':~ ${s~&eYҎR.{بllYGgCݾ/#η_+MBdlrR$!F.W^q14[-FZ=kL )z;;;"ۻ,˺"9&''b_$Յ식;]M? v`[nw[nW= ΰ?]/\/Xrؽ{{_z#gw"ͬfYڵ+m -Tn)D3}䑡9&&YZX@m65qL[?-abƃb`'zp(*+(CaVZpU!3}p L0{-Xf^88>i/i?]O<8ݏ򖷾>+{R4a{OYa;W9}}tdvz"u!'Kn ѣA,1~ |rC<-?FosNLc%C4!5\ozY}6M}麓^ӏo?_8DŽ059I{i \oӂC@67:~-1`V bث(rPXQEQ>a䄬0 hT Z#`׋ 4mG ΄qtWQEQN%*+(ʺ\A %ec ^2r],1&R&ЕXtl`mX$}"pdT;12/b,MD/~~w:[Ś[9 &Jm"hiYR:S>YFhj(Icwjڿ pMy/8wïϬKdaaI/Pr8G7l8LNN(] b-D;22R]w#/y>?Cp19q(P(z⇊[zk,625XhL05"xo_u8_uA\W{EQT( 88^XVyA52!#;CI&&&Xopq"ʋG )Kb/p|^8Ru H)k+SGBLNNp)O!ˆv?aַ>:t&qsXkIP.D{<QtAŅvkX_N&uޞ<M-lSǸl5LJ>>>w32:㿿Ro~PwddZTwkzy哟3N814dž+K&&ҸgvWw+pW&0b&TߴUs0ޛSwjﯢ(JTVEQȬ-ǂlzD`1֘%y}E 11o$`ELj FR0:zE`,lbs#CLO'pm7?7_.Nu79t]&SDt/%Nl ^ XX^\XZzs:i?2{Ml۔t$!x,u=eZM~g~߰M;֊{N!c:I }\8lśnPE1Pi\cU:#۞ߎ (Z06U/뗍Uoط bp#%RUWQEQN*+(χ#{!k;Li~S#5/dC %[ %Ul%Me"04 ϻ133;i6[CD/|yx[>њeet &wT&| Bh཯ʕK6he}l qШ[nٞ< cs] w-NЅrr1뮻g>mSAay䳏ߺCr6bF#?Ο_pCCu6}iHD5FQwGzH CW$c1&t,d@v_o,I.υW_EQE(*+(ʩFǏBY1²Ѱ8o%<$l>:x%SA7kc7pĄ=(3J8-}- J\阜d|?~ka7 [ܓeV y9/`X>M ⯸.aLncFAo2Ev"0H =[: /ӛ;CW+|ulj^'29W}&!9ֲH݀VAr-njn7 ?ecg%DTup/\|e*U IDATw9rUF뗘#q~ҏ,{tmC 0?w {^7tc4Ś8v{ol̄Vf3܅܇Ű}{UEQ(ЙE*8DZ,!1Ř0o|h6.렚 z61c)}htY+ٳwl?w#>u׽{nXs^( 4J`c =y9-uo|\Ǖخn蹼hs3zk_{z"*Wg6o4:KKK]].o;B8r(?ÇXeu*nqI}C\9Vq?bCvx~%^CCo((EQY>5]N⮄Vf *y&Mt[!ցɂ{_HSX]NGRg H6 {I#Gя~.vM2ir1#sLYV<=͚n 1yvwh3OdG055B)U+ ,ƚX5t3ƢƃdH_NO mG-9*W{EQ̠(r:pG LN4dmi4 VB7dJ@k0b{b#Igd$[[E`bkB'p0beiqJ8iAQ\|X_PYQe~kn`Dl!k4Ej]*w3H/~-Nn?N<ϦT,s-ꉨ(+g>_}s  ^o}Wo= H_}|k-/399Ano%Eǧiji09k 6 b`of2D2Õvi(/gUEQ3 (jQR/KO2m,Y)ŚLx 81."byD[\ iqUyTGD8| jE^03=ž?', ?BAxJ :1㍡pkQϦ:4YQEQN/*+(ƇԬi4l(ef>U"^LVXKcDgDa1#8;. R6$Co#9 &iF"/8OlvxE׿F#[qB1˲.79sE%v):n,ĪfЫPeLq0?]w}k[nktïOc`9 ^wE+Yz:?SWo𻞞_{N)M NEoYx|񦛇J &'SoHn0]{]_ZkTݔG~ mam6T`-jV_0l cq;z]5((gEQ唰VTAͲȲ m|wN]>C ɗ* 0ݨ@=9e8792 E?pѡڎ"—nC>[uڤz$tz,M'oz] _HQF1xt4lw}ib{ ULnNUsr@YosZ5| W~%?u]^'\/X_xŮY2FwMߍ=ԟ'|r(%' zʱ!F0&뺧UMâSߵ/3&~mk& ko%"մ0&: Ε=DEQePXQEQN@[6S rX ԶBS bHil`/!z,M8$ I3v( [nHGkOt8)K<60;;C 9G+^^tMju/~tIlWn`]G  +9\7LoW7q?י>߉Bvlt'gp]Yo^X/~{y/ߕ\cccѣmFr=]IM禛oac~nٙKd{]*n⨴\Ra%;kB3iq`A,W:cC(y.9*}S+(r*PXQEQN[;`_dJCvd8`c2DD`c[3:1"2r hEM (K\:褄0w}Sc9q8eػomC=_fwy˵oE\ '2DB_wբhP%y" }gyn4KsOz KK9wqW_}Ɇ'{wbog_sz?+K^-!ߩ)> ja۱G917G\.➓7]C&###u-=ʧ 2A:h#! |X5 R,$s7A<=M[E:t5Iq ds;{#'~.p7BϋhT.a}u{){ϛ(6 HXa&+:Nom?^t~֏Ą[oW/&q%/|/\-79r)fr13=]}_XlV uWpu~=xm@QK%&{&''yoyxUJ㉕60a,Y|v\6,>Par<);g 1=_%eYڲ3Q0 =#`bm<ܳ—luvzsu٬]]8wǎD嗿_՟G[Jzsbaav(*wgc fj*aT~gf_|C>8RYLN%!n|Uݲ + c;HbI56. d!_B? 9ʲb_EQEdTVEQJ"psؒ/d42Ȱ`k0Q`^,&FDWއ1|N"pQx밖]k&:A+eQV"pm|7 .8'˷2L<ϫPc+zj>mۮ &+_mu{畎ZhMwDٳ>pyOJ=@qڑ\uo=dFw¤}frrjouQwKVio|$fQVm#8--8s IYA팍EQE9ը((D`{9k"p1FFL`ژmLHXp8+N||EQpwM([Ekq1jMbwIܖKKK|ӟ;7_Yg}\u9W aFƮ]ny_EJjm0seWiBpok=:mzTjq7YXXږA?^{N%*h9s?w?}[o*˒ 1UjURo]qY%㞓۷{BWcja>q[~c [iн/NEm,8%vǓb&7 D18 Ε>:((gEQ;D0hvq,YZY!7|x,XËA`#whhGp%ێ[*(rPXQEQN+kK gVo}tz@e]xX%CTA UQ[AEHkD; s ev.s>kq͛朳^~ֶMr횐)qb+wcQԢwr?p媎۱ꔥ˷}[굵cii~zƺ]~7k~]\|[ꚝ:~~!(Zt׻7m~9§? o#,b.D "+A2rɫM{9SXF}~w>̏Kh)Z[!W{ʲ_83Wny1'5w-N؞穈n4ۻ#VX۷ɫmȑ#LMM ,v֮wZ2Fw\=>7r+7}"[ۼuT%2UƗ_Up$obISql)"x#`uCYn{\CT{UUEQ (r髉PFK # 22>F>[x1A B[8,6x,&NߝFE-IGu' 2 &oa&M+cG #vqO_my<X~ħ68"|5i~" ; YguG Ig=fjѾUۿ~K7:\za{ߛСBl[gs?w}5޽k}LG=hBf P9O pa>C-..03=Ȏ\Mۚ~_U*X㵺kj5K{Ckq_|e N9svib/1'Tu_(5PXQEQP"pXMml,kQyil cކiclB%~"0*oA Av YE:ҌHh8 SSgOt+O~^L+NFWgm\0Tn$bupeUgpMW#QOvՙe茮W0۶gx1VsCύsPqᦛ땲h6\ykx~JV~hیkJ/βZL7 INF<o[n`qfggc5Hu0ߎ48U1A'y+6:⯱4$tfq#&h>%p( _,\v:z]EQePXQEQ64$<{Ԝx1##BFdU/5 eX<>#| b1#Q$~"ojG'ζ >DՎ"Lvd},0?s}D/t{/oxE/z>!]N?[?EQTqQY]kxl.Db?p:Iԋф,nzwr]XO9-# .z".:  {lsy;xƹ[t{|cGҮ][yHp TI###ܾosLOOgzz@ow+ck})l߰8gpze"EQEׯQѵ&=9:VrgЋ#QUx{z/pykG%(>e{fgg?/+>q%~{"BYxKQ n68(&VvEFA#vcY+ݓ7ߴ=ż1.e~al ߺa(([VɥwJz;?74yQTI]o뷊zVt&]ɊǏs-wpi_NL~㐤aI1ּL ,C/CE`}H‡UKP$~a;VEQL(q>"0n,C`,X+d##Hf x<D'g1#+H"c\K#ӄ01q3koy?8ī^J^W3Y_4MnS2}^\]nyc,jqռ,KFM}K޻-+xޫIZO-7ߣ'ew-?SWqOٲ/P!o#h`l.~+qq{np ]afiqU﷾ߌ]4i}oZJFٰOcׯ  8V1"8(yO p&E=e5YQEQ6EQeSD.:h8dmO44.(gA3.8 B6at:d cI0q@מ#===xg{7 tU|3[~ӷ#8{Mr'װO)S).{Vk Ul1տAGjl6D'8<^4y0s&֣nge166UW]¿WWtKfu7[VU YF#F<7J}OUC?_}9YOoaTQwK.v}_%WxQ^6ܒ{T_fR(ێkEQekb:((Fe#VMߛeceAk,##  hX,UA D=#gOp xxa#]L[ tG fc8G~׿^lVQ-˲rccYcbd$ GrW IDAT޽?~ˉEBߣUkrX49}o m366ѣ{Gajj Ç8pAb.eVFGG" +1=}kkl\o2mٿ( 1˄ߴÇYKQƘ͛Y\_Kݦ}cjj|nܫ|ݫSw+ϣ'˰6z*5Xc[E2ڍ뽀P=e vI{D,e{zMM d**(A(<`K{ =0lb_] X2 N` ?7ՋDR Aaݪ@1O52WDw?z?GN]hn$ 'މb7+Kؑp> 6®߿-}N$H׼^9|x/|-{|\v+6,SsexXA{UU6g=o~#~3ߚܾSSS] I=|0{'6z$&o=T9~y]|<°e8LڕlBՂ0)k8 Ƈx .`KvEZcm Bp'[ pݓ]n`{eqݰ5}o,4=7>;]N`ҴltYy=[%ά8<j\bu/wywwr-_cqqk<~~ņ^!ѣ;9~x\Du6 FFFh6j F?]wޯoHe׮QUO/pGN3H#Gne߾=z#G "LOOkO,p #\vy. ox5cc[o>|0YUjAm6]yN` {G=<3S,-.8u7.ŀ"Zb_,Ε,- y) z%((VEQ-JQi,|->FFȲa >LcCedA)[ bC X%97uwo?7ӧBuq 7Е(@#]r` k}~U݊!v߮ +SG\8^_s%⯨((;EQepr"p)}_k,tgiL[Z_[}&N,[z/pt{fkCR`}n@%tx{K'L8O в,&(nE!U{ёm4*I ""!{tN1i'Abh2{qǝ=?ͯk;vlǟ'}lA!n}QNu^{)o}9眧l= .D?17y_@Mשf[y{*]߼~z&'annٙ5#1=n}kŒamY-.7=z}a)ݖ_EQeЊ(X+Lf 02֤24yH"n4.wo<AY Q HG X=8Τ_=#ë. .8}x.=Ʌ.E\uC u9EBZ-yNQK( sU70j~>FWN$ Gdarr;6sC8mQFƓO޲ag?KN8 ?/,,qU" }Q6Le؏W_} ^{O{o/"u {ol-}㞏=>w=<<33,-,@unVA:5,}n`,"1E`pKd>B{p'J_sw_EQe;(lI]ٗdŝ1=H2rŒH,P:Uo_̙seoYzTCWNk)!!H(E"Y̌}q{̮__cK2<~N7<<_~$Z1Qjj՝կKt*E]_ 7(e0n[$%0}Z߽gkk}%qX|WYRA(Kߣ9 (]|O6Q(c0VϮ̳ڷpQN# Z  q$Af-(\|S% i2T)wiM JJ?rRQ'mB% $#^+oqo(;CR2p><΃<0҂kHKAtp*lHEDU!CMځ$*[[[d[(&> 8mih3h8FY;w>~Ʈ֚˗ӷ/8 ϲ(R$IBVI@)埅9s$O7~ǙǰMC'+)2W6Z[kPhm0ʂ(2Q\1c"=]$pcZ: M%݂FaAbJw%4۽Vŗ_^a~nj*Or%y7 G 1xcHR8,qi"5֧+^ @|PAZJ1G0>76fkRkV0(f?Ȅ~¥TVxwBVcii/˛o~kc觞zxw{{K茣m6:(ߊ=}oy≇ i?|aWڷ_gkBbfӝEw7_5JjZRDƒ>O?;hfBs@RG|4ڝOj G* ڝhoVZۋ +ߦ|fAfD  Ԕj$+Zmojd[@0`v ֠}gje1 'ObH`+ |32$tgL%&/otu-pڗLNM133+Op>|G.O~G]} +)Mw}zq)@HcоsL{јd(jOf=nB&!I4"swɓ^9KK= ?i%sƑV]sܗ!N"&uH.fy {#X6JoL2!߯sO ZS8W72h`emmՕGg{sNJO,ں6 xWַo@o VcyZ u䯦Wh  ܌H hAA8t]a:]y$hmS*VHZYح YBhe-5(k1Xln1&wҷ( N2@,V9ٹ$4Exطa i2pb`[->أٳ2ӧcY.Qqi3ydרۯO뀅$'&&n3QSiz&s$IƆ+<99I(D^ p)յ5KX[Rܗ^[rӍzΞ=˅ 9r^~ ~O^ҥ1G̭8.[Ԓ$!ISF! 팿m@1I#/iw"OIޝ<, n,~_9-ZD߫??_Zڄ !2_v7%IRh(Үw5р3%kiyE7N:#  ' pT؟T4jĄ_ LK w A$R. /Jc]"=tjdD3==CcrR!T*c|cjjjY Jw%{>A[kid6&~ JjM  667 &''iLMNl6i4Op2??Rz^ׯ@ZlrUZ^4}bXcHҔ-WFZk4%2TҔJJ$un6Ο?ǰ;Gƾ~cq+Wr|&ZiQ;fI_7.1;o?p)g}_ewt"P Dsz$JQ9=Jڿ_/0`ye%:*CWJ>=EjZ Ɔ4ZsWf{jm#WAA#C@ cfrN(,$dXP \T *XiLbIT1X)n)}33$u%J 2Vٹ9Y@ŗ^W_'g^o6. 4l \^/VtnnCoE ׉ J)677ҪTh~Z* Zsl6QJ8899ɹsV|GEY :kktZ7h48yP 05طͲ$Iƾs݉aq<(??Ņ g (}wW$IVT*daf/~2?ޖ0,/]g{koŗh)|D!/ڂqc_~cx,ޡyoS3q_}21<ǭ޾n^S!YPVA}# [/ ڒA{~k%Jp=Hv>Q#Ր(#oNih6;_'|sr|?a 0A#N8ls 9 mNH ׅVKZ #1ʋ^b* |,PuJBBrnJ BZ埱 ByqysU677!?y<C{)Njqp=< ) .yܲbE)PZݑVkhyQRAooo19Y$IE^gffM>sHӔ"{ĉy&&&PJb^cԩS4 !eJ8c-5.kk2A wy+O=0O>0O= 0w~~HMf2y27%C !!^{'i5euuU'r||c~v߮jV*_j4_W)*˼mq|"WA p$% l $MEZШ̑jyR9UEVnA#(/AGa%~VEIh-MZ&s TyC^~e}Y= =B$l /kmQR3`")b`Pe_祥KgJWCp2Mxy^'?gVe@bu,뒿;~EWiM5(W[^hɖFD+ IDAT*[v|$Icy F-)J蕞i!|-?ѻjEQ__ElN$,3Zf_ ߼|Aa<, Gg0??j5ZV p)8\~7<Ϲz*ڞD/l߯u?~Y^^I&Ey"= yo077},k8u׮]cee6ӯ/J'TY!{7r^}U{9$;2vd6ݽ~;Pkݷׯ;:~> [}-߄ܟjWyWWS|A("XA4%yediY3P[9 4ZcBEkѮGprA EѰ |.0,`c>VajvƵ_2==Դ<#t:G?.O>gu  6uiqD}[hۀVA9$IscLW8 lEHNŻx{x{7_ڱ|>b{uJ_-6B =}CesYd0o/'eKKΉow܎߰5QhfڢJ. `+t `eIY0_AAKdMAƂnyei+/Ӯ$0VmB1/.h srW9(-$B]hEY:iޒz@i`! dۭ6W4S9"kkk?#=O<8O=$z}TeYǯMӔ,ˊq|;k-vW!3 .D2X+IDhZ*O?essF1m)Ie$Z>ż|yeI^ /;s睷EyJA%w sp$ſ"~M^kg?cmMJuVVW|F+w\GZu֥QJZ/;7#li v-ϼ%cMA 06%pI`5a'@ 4ͽQ(`LA' (H`ZH`o|;aEYIYte0n`eme-fTPuT666K/'|;J"8.H zc9J!1 .J2x_3!ѼFR^bW/,,,t_5Z4-No8Y(/ɋ{M]wŋwsw0;+e30r綯nҾEE,}`/ ~_%/]~C|_)|T_9kШ u(U#_寛c54YI+Nϔ   VAA+ڝm-P$i$nZjiZVO[,nQk*X19 $K ]$QbP؉A4pEKErck*S34Myy9y-ݯDwD#Rwۅx[.1Tk\  pw[ sssE"j"v(ybe[|?'ʕQ酈 '(EVZ4N7gW=upI|!yۊ'Nɓ4u{ڵI_ c\9 }R%K排.]`+_ sҥ>H*k{+`OWIFYz寶3*}וkmZ-16Z) p>3S  I6$ $0$N+1ʠqNYIyFK#56[Z ,__*w/O=$w}W_Kr J1HT0&> g}&kх I*Odp9.dX[[c}}(m-$y9zcsX]Y]Gǡ0h^5_Z)U F{^p睷r"gΜ,]>mNFy|gggr +++/s($)N|d y =(˼K\zOnYZNjwU{.٫J=0 ߣx } 'O.p?NUK($Pz>{Z+ pD s0p 6}%\$pXÖġ'E}259ɷ?x!BfDpJ~βHEeɕpQ*×~RxnN]^^. bdoLHZ j˙? $$CӸ nߡtXk ,XK5Z 5i033vM}17==+5?.== u[~+} ޸s]~kVVVx_ʫbc}C~eeyNWRǒr;tk 6+ hAcaKvk;  (-">~7}^bEkɆ<@T>]3Rq/XRxƽp}bHr,X &aykaAdeXc0~ cR0;K+3g255*ZkY[[cbbG G~|a/- JU9[~O })/{gkktK(h{?%;^XۧsMCk+9WA="AḰ lId; 5(\$1bXZ@Ee4pO4-Z9R:sgy;(ʆ )θl4PH-˲B{0z: G,WWW>>(]4+8\%~IR`nnz9szNRaqqQ^cn:z 79H_!RqI |4{0o[‹|2h΃}Z>xy뭷-Vs/Ѻ=,FZ%AĿA!XAo[ (]/}YFvJ$pwX$Qe40$uQX5>5L p[xGy[bjj2B׮޿%! JG֖/Rb$Q"rhlhLj`AiMnV*(nfVcbbS9y-pm199)O0/ι?1|PQ޸oxO x[a}oˋ//>\Օ%677;'I*Qį~&eܣb;:J}m*_Eo2P;-}> AX XA%_Ơ*I!I` <, 켯-aCظ,,Ƥ,0IpEcuv|~wJqyX$NXlRHu; `K7M*iJRa$t7OLw cVTUڢqEg'ŮruyP7P Qr7|U~Ӿanr7 _^d_;O.__¥_n:`6Y]])HWwǝ/:AYHZl!E pxAcIZMe JA+9EkUQH`_K ,xmK(HFc-Z*sTUyQR].{ .߰-6 "@:i$q?[J!<0堍1T+1lln2=5$Y=~O81zΉ'߄ * =I t+ ӽo-Kpj6Y^^&k=QzJw\IpBhфyB*Q_wwjAaAcaHpV|ͰJƐC l]RXYz d$J"R]XC1쬔>$4ůطkwWt<(=_A+HIF kui!tp.o0]'o׳?'29&n&&&8}{o){0;;t/QN)ҙ;ℯ14M ~~ի7ߒ޾D第,5b>wWvatϾsܪNLA, Ǟ4{$Bt I`ҿ"-q^ ฤ/B+TE+. =55,"<7yG[Fv(]>ϱHyW/PcL1c'9_&6 "#k9jLOOeJJB… }ERyeuYM 4M9v]|}Yp9^]e ~|ݴpK˼ƿ+putuk-kZgImv#Ny`'(WZ!Q<ǬeefS  `AAؽK`SZ%q  A+H`kP-آkG_ZڂOX[Z' 334$Qx?wy}[wJǷ$dp3qh LqU,>׷:Z:m&'cLOOˋO7{>roAK;ۼۼv#fueΰq8ZƚbR c ssT*y4M lpI`܉~ I#;#,tOؚJ+33#KIaCqg;8H,ˊvop1ۖzqBXk{9Kܖp8J[^֘"ٳEwqqvM1I~E#%za7ﰷq8zR8U:z7ogΥKK Gưza!RYfUZuΕ}v=hVE/p"*l|ղ^  ("AA( B$Eħbr{$`QVap=;QvcA>>epYosҚHҹ+ޘ">|AN<9,5 _˥q"8ls_O0e!''GICpGvjju67DٳgYZZo/R'O$sb{{p) w_H`z{0j6!IUt꒿`u֕vAf!oMCq"AA8PD 0H`; >؝)/ mɡn,06wՑ7=!HKYhwէR2;;W7r9~|Eg]xLD+_vS2Ap|H4!pp?Fu.Xz9eh { X\\/,n]QD?ް8MJe\J:={JAoa;]H߯V2C+w,mdw`7Qh>_WWB"˜͚V++ ¡!XA!FIP$pRM4՚&E$N۰bVBZ`! l V=$;dE#WZEۉ>pnLv ~XQ￟`#Ș8o I<ϻpEWa9Q%N]O.泘~iqA=Bxff?*JoRË\reDZl`vffGq;}*tc#wcvic*P[ߖ^CA'$Isuq A·ֳ%o6E~UdY2[[[}ottkL (,w| sGxjμRZkJ=+Iak(W/('}U,sK钿_AA{ME  mR9,: \$֭Wh-uVyq `kri8 .Bw"Ǚdp, 6ax+005=P 8w,߮{tءp.y'_73A QѢp(m}Rb?b8EBx,qA E 6a{y= 񥜭ŸZ[\N}ޯ" 䁷~y~AωF|Y]]es}rgwWǯVk;n>G, 4+h3uo^ hmh6 T w,WAZG, % ܑ$DBj I$.ͫAkQ)Y/Mr }Q^t%P  ER;cnB#ΘH&Z155, :uﻗomD!\_$} ߏSƒİ"˿+-1 tp[88fTY|a7@̓)xӽ\kAwO򆾾(Ix ooŕ+;;f85VW;v={>%/XZN֍@e}hEog ָc^9 ڻb'#[9O򺹯7b^p^(r'ul׿7_U7w|Ox7y7v ʛZ67Y]]N 5P=A8R.7J>GI_oQWS;_W5ye9"AAaAat:X/ J8MHlN$0THMKj|Xa" Lr%$0t8p H"۷Ϫ5 al;$M^oȓ}195=r{/w4v!kp,pBsr%%RCrv+㟅dq3"GSӾsj^7_uK~?BFP9K=\&z1ӽJ:6xwywwec}C&ћ ~X_xIIyHw*h/ڗ -hp? `D7J JߎI8AatD F$t&!IV"&A[W٥=izXT!+m-6y=4a}\xЯ7p:"8NCS} em i,F]N7ٳ^U S]SFzKI}F~c|d,e~s0I㛕Qn&˲>]V4H'@R!ۯsd/#|jv:;~mv/feyv]_{cjP_Oy_n_ۢ1:*?X7\hAa3C+vFe@  7pMD  {c?]H`:v _Iʋ$1eXIYkD$x40qoHJYjDߤLMNr=p}r=;me[gˁ ڥb O '9 *Sqe$'>\ 0(0Ma#/) N1n5zS޻JƢ7˱.Ps3{v>wy߾+2ޤlooJ+~ŝ(}~$0^o-3BgtzGmJX_(Ts QQiJ, z3 .w]wŭ؋.ܰke]|H ~ YcTp9>MNduefkuWRK!q,n-| m1X_UXN>qaQd#2Q\_*ʃ[  v$XA1LqOo3iRHjBQJ`hkQ:kwcȭO\Y6VB_`[Jo%-%-:33TUyj[/wwu ˨&R=7mYt/p'-A I ?C"R9uJ |+{Bp;ﲽwZ>[[2Zk+4wuE:s EtV)43U_kNjN`K͘,sCijA+G  (8l7NCR%TjBU '|?% lCm˵sEJBJi"^gzZDQcjj;3ヒ{O;YsUw]K?yH.%K?oY8O BXGnY ڕ@~n?z蒯% tI~x#.\Tʬ~rQDoѬ>_}e)|h5[}]W.w\*UwW'`}u+/g[Z ʸ͠24V+s녮o+ B  ^$-5&jҒVZq`, Fc 7XЋ:)B_`5ARпHC~lN:x %W=iU) }YXXo;nogC qX\*5q 6n[~͔JFpšGocj vYyX@z/ J~Q"adlwIeT*s9?rME} *|Td/*C}>#\" fյ}%~CpǗܩ\UX*ФhMk<'>[b/䄞AUE_7׋A!XAtX~ns(ݝN I5VTk )$֭h& |8$,X•}܀r4)<6alq ʗ!%\~S*; \՘^'3==[s#|̙}g=H~Ar_8'tnY6ǯ6QBBw9n9Ӿ޻n$en{ۇY.p\ *p܇\9~*/^??||$|4V5v-~y>yCOוsVAߏ&U B+ ֵ_4Fq_\ai5[9j,'ˌWo  , S>HIa8M5ibXj5M$)$C,QXK@`0&ǚ䰊"i.Z \<:I=ߋڋ. <3=CmBD8P׹pwq.snXK; r,ݶ_9j(q\.MU㟋EN036c]Kq9~6<Gv^hZ\|>?C>#eRX[]jI}aWRtQ>sEۮj_Mb !寱1^n\fNihv+3AD p {Ó$D+* j4B`A2NNU^cMQH) 0,ȷEp̬$탖R,..r9Ν?s8yҨ,8ae.o}NE N-}q{ A25~( WN9<mA/Myt`-WO>˟\˗ؕ>[[j%~CgB]7lZN6'w(4V+)X8׫}׀ (* Aa3W)"U`J>AKAp= NShՔJŕNSRrα(J}1`QV ]yhkT]>(\Ta>! cJZٳ^ Z\jff0LeG8q~-O|߃uԴnYu~U>|˗%8YmS_N뒿 _7X4ZQ*Za}!kq߳n+Zvې$KNxq, #XACd7\9H{)^O4~A߇֠ʥ]hS %Fq a*$pWPZǛ!ݘOf1) ǀ)Ξ=˹g8s,gΜaɛnfQ{=;ow{Oϸ|S>3E>Gzֲy,D D~JEt4^v%ýv vַ>+h(c6*! csmjYLI_  ܌AM;2XCRKK4~_g+/3 QzPN9Kɩ(5'}19ԴMDž$I[G9{ )_{(|3l//2Ο~)VKvz/Y_`c} kBįps~X@kRc%5-.k-FYO3Leffhm1F"QYv$_AA)  >$ Фi$ZMTN0~=/(2kU_A5X\ }kqzث.YO~"]l4L̐y7X8qӧNIN:ɓTM"MfŗWŕ+\r/•/"1Yz]Mj咒"~2UZw}VIGw_ 2r_eX־oGbq߳>+Q%U+ WyV  7$pnp_w9MH'5EHEDeN 6w(6Q7'AJBw,@z {X&&G'읙iON"gΜfjjJaGv:_|K+"zv[[[o =vb~m/,Zia`R`vnWj K5 oh}D p!XALp dX\:M2$ jZ-!Iuq#[+$*ohvI$Ώoc"A% d"\a)U5](8V^g>jPw<,ntpD,Fk<ã,___/~o?q oOOǿ[B8F;bc|~M\E>DJ9QRZoIjSp2(!ں[JVJ }? گB!X!߁{Eڜ89&wLD7YB3k. ;Tj{sWz6Z:[MXl u|u~_WxxxN?__|Of}ӡwXLQ:~Iv cxxJDsݩ渃Z0wWvO{j{]U߯B!>BMѷc.Bp^'6D^'.VlX30sGZ4njI!j/00^`q+ׅW?P$>s_/Sgߙjcxx|GC$~lH9@NfC2jEuI+B`!B|9^יMl6;ȕlfRFHuMn%Wz'&8cH>Ǜt9x[J<*Z$t]h?O)lۓcq7G?.o_OyKki\)nw1_17~xl/ȟ2=:}7^ naR(F)mmʑ(-}g!Bs%X!k"\/peܜU8D`.Fe L/a$-C) 8Hh% ӑ7Ы_WM !O4z_v!b ~Ŝ[~eúFi߯y ?R`-l}1Cنh@B!>Bx\9w].ZEj9gS^`(8v$cpzy ? }8HhqkþDe͌ǯ_ B_ן<'Ql6ۯg3Ys1ron6}DtOF+2ut'w:H$ !##X!I>FAe'<%qE׵N5djKZ "pa, =pnP$e!p?Z ^:|.C,?ʝ}^~ŽWB!>8LB!>&C s $zly0r~zJ`on ',WV3B?g=,'Ǖ\Bq7 fqcJ¯XQMQAo"o}gHq(qʶVv:}ϋkq_}!B|<$ !s-z%ιECG/pY%3[/pu~w/Hp6D>3VW$x;Nc1:vQ/5_ B=JoߞOvݫܾ_$L$a߯QJ}}?o{,*Y! B!*_2ٜU:ZEtg˽)E߯UoPq lIaUEB7!8Z[sWps;_| !g}_D^;.N oyA~g380,jZҵkuz-9!}|S/+BO7.,B5x:q,\X2ut z QljHeN^8V -އ%xi:9Y~L}/_Z!od7E)nal娘g^<_l$<3SoSZV}~>^P,C_GAw]8B!>BIx' l$~I$+qЅ"ŻW|+8^YV|/_rBʷov{A=Zt\|$*YeGS߯aˬ+eW_;DBY,BOХi/ B _NTb/0ܜZcwኄ +tG|QBv3ߞb8}a\z7`gZ"h~`HG߯\\ W!?BIyHk S$t(>cC-wFBCHˇLEB`nx|x+ Bno߾Q/-Xx:KScG"'oJAMb/`}%K}_!B(HB!'}{N6 Y/p>g":EDۙH4\8o$}ϗ})%|˗/m!O~7RY7c+x/n|bW]|v2}G>S))ۢ_!BQ`!B|f.~S$4jC* m-^N"u-ozxA(c8 )"tuz")mwcv&ѪOdZ=teD`FD] "}Z㦾[#l$R!>ĝ3OOx~~^w>pљI= ~[0w7'S"72qxE gZoWn ݞZRB!8HB!ď[gMbq> УlsBt!Y}}X}z<u+p"z$"'б>NHu^_EK~SJ`)b}X8yrkVgw]|.!*Y!`!B+CDBݻ!w][eatusP1z m:g16b0 W5K['|tZxx|ajAڈ-M\ ,:xY#}EH~ʡwr_A)cs듘"(Bv[ZsE>+W!g B!9Xt݁|G$*Nt]bGB{L!z"ks7A:7,X|^-NjΊEE ZJq@l#yzxgk7I=ߡ뗔I>ܔph7&z1ܽ<G>-yڣJmn`jdCD`o[ j);-78T >XkA >|;8ffy`nBLRmlw=ӗ:;}Cx cUMxƸSsG1B#è["B!l'X!?'DH$; ^'6]&$D'AFk=D nǼq-En`i_ 6G}RTuwNukB|Rneݲ{zox|9%h)+W|\^;zap[HT|||nYsW-򹞍|g+B1IB!0zotdr3N L Zz]x-xX|6YgvD_qx+ׯjF,NGWdPQWJqB]yEB!$ !g-#Uc 8"}'6L2:G7רEn`9:}49N|Tw )lB^mXo$ w_w=ݖnnzW g֏sQL==>Hߟ{\Χ_#qkj)"GׯQ6oŵ}uvE>"B! B!="Hh29WRr M#a@RTyr6RGkn`7:9S@&7 ʕh<9c=3͆jjfZi# Fw.pt8xWvO#"ׯ%▇3_ݧaϴg\n_詔ma-\bi<~E>O% !B#X!"xHHal62tmbwv{c*w,>#/rZf~\ m_-Rw&™ʡg!B{,Bq½ W2*n4EBaVh rn /x8xX4d?E*]ױZYWVkժ'9){v}O Dl:ȹI1ةƢx3Z)޹x70L^+19r2 ;xr}\\{\ږ^u+V5]IH?Խ=]8{-et]ո:q;%g(Y|.-ߔҩ{P0Kx  oVo:Gtu܍Rz=c Q q'W!1`!Bs,#!:ܜU:Z99kn&7-n`n`R}r5 ,>+bp`$_O%|ڱhjb[ӭ:VC5}O?{fѴ|_y=׸ߔIEׯY\E]fP\V1!%-nqv;g_b9~r'!B B!WyY$4p2+)^玮3s3I=pVܼMU*|^>fb0Xu{\/!DXu!njյ!+a=ݞu{׋ñr{|Jgm oJql/t&R;F>qʶgnOF}=r|B!x`!B[xH Eΰdr >nCcc1:zTxOIos8H]/uv~u/ѽYjO)%}Dޛ9X];}{vI?6sw,ߔZ/>{~qau뷏ǧA=+BcH B!/aaut.`4w'pe Ub!&d'3t]n`0p!mB70H?ptKt ώ8:C竘)LN0ܑs"N|J}:׏7 {/ؽYbxMѸ|;=a :Xj_p3e_}e+ ;=G _ Z]'+!B4,BrnqκיMtvEn6їpond^v MrXhqK(<7ӛo~sXNԑXl)%Jon)ZR{TJ-P<'&W dze~#W^s-|:WwX76~i"5Iuׯ7oDEo=}oFo|]"u| !Bx<)X!\ׯ;un* <ܘ!yp{=թP M¯MԕXhgKxeQXXwO.z2Ú<±,5,YtR&4ǃQ@络k-FFԾȰnswx'}?eW=i_"|K\Ck!߄YS^Cׯ%s/37IFB!#X!MXR "t0-.Z/n/Sg1)7D -e^& qcg bSM4ٷyI):D?S.lzߵ-yٽ_-ޒxwW{p]v^{Lm]4wosp2~m6ZXQ!B1$ !BGBn}us} ȨVIn곾`(j,Xſ`rQ[Eax)<,; !B|B!ޖUGם pΙ{ L:9PmޜnVo}\kՏzNJ.NE0'|V9ϝ<%LȽ淭~o|^!i IDAT_Hf;{NɈԖ q7~95Rά[PD޹׀'5!Bq#`!Bxct ]BJu7} c,t{DpW;8`B v=ǴQxIm^q=q'}>qQ^$N#W>\z~!K;=Á7b JSW!x)X!Xjusufӄ!Sk)| 8VF7pjQVK8z[hz ZJ8gnr M!p9GL1KQזY>]۝O/,]`s/<^!9/ pc3Kk¯<fO9߃gZ0:Vթ_c+]7~1B!?JB!x_[nn!o2 |tÃ#8'Qm, z(SCL1zUeKB`!^ϩ8"ܒh|9];',s5a}O\rb{dE7 w?.~I8a2{:'j|[3$6 JNuB!ě?% !B]K8 ufN@97a<!BܝBě1:ĥAd:/_v/x]0^&DL_? ~kyb ~g8'\FA7[>_`_Bo98Rܢw>#e{ٽSs\ɠ,=7o(J)meph |B!P B!'o麌{!2l 玮%R1v<-"bݚP=o${v uq+/tsI=EɹX;-u'&ܞH~˯uڿn+3 o~G=77$`Aq5xs&ju܍wJ[]W_!Bυ`!Blח(3n`p2RjI@#T])gco="܁3!xw70\P|~p9#qY>7RHr{>/۟/&p 1w[YR(9n3()p -‚7~~B!>٘TB!mt셔`t&1N0 Dn6+c Xe\&_>{ܜqM➍:[^kwl{v¯eW!JB!&*u2y eck BkŚJ\xh s\8ϽF׋wy1@Zp\]MX:|a7]-)q>C v~c7!r !B|N: B!7Me1L;>wXLnR*9'NY}z ]qjW%׉@hwZXNJ@ VחJMFPk"en`hL?]$ g痧F~lB¯q\]~{{~+5:Fׯ3x{uN歊Û=^R\➷1.{~coE_!BO\`!BЬc7a,tÕpsV9@9fjLP&Z <:JvLC܍CWpu(B|nm!ޜ!^Lfq#Şk1y={cׯSk{J) OnAȝ+B?KB!X G "x  ub Cg j,t N.j@ !R~`?A,4$XOR|ܭ#;WwH8 #u'=)n=V!zrs)÷T܍P J)ys8|޹9^_!Bτ"B!>✘pNFp~ xbg{B)Rzl,_γ'_peAx  ce"QkLZE? -GFeixjw-Yt%7z|_'pԒX,\Cs2(Dl@2JBv}qPJc3'_[<+B)?KB! <<z0 ]&{XufAjºXz,tnCqυAt]{!d6]Lu"7qHR@ţHkKt;bk)V`Y NBF16p\]~D={g1D;(X՚(.Rj{~۳+F;f6w]vNB!ܨX!px{r~ZLa睳*=έg![@Nr=5Dh<NQ ~;K7 O):M΅JD:+#X:uyxcv,1s7brE|0W{~6SBm+ JQ!Nq>{~⍏ &cs0 N`[>eixc~/ k7Y[=G_/Kmߔ k716Z詔ysf_,B#B!%7 ϊzb␓~bRkV9KiH%͇F2HAMLZ­NB|!> W8~=NAMmA͆LuoNZ0v6t_{~+}i߈{.u_= !Bqt'B!ďǹ!^G:xpGLs{.JuxpC9.Ôh famrN`N$$67p\kL^, >uyx_ LBLM n6dP n &P}ƞ_~[ZoN{~1!A B|,B~$c!LM9uυ`#V0O`eQxYb,K?uyx FE=υߔK T[J!ޣV:ՁⳞz~N0g!Bqm@B!ď5!|>6Dut]Dv)Yv޻M4`z,!X;>򉏻uyxok6uA=~v5؍O}k 2~R&g!Bqf'X!̰3L^2ka^E,Hk9ɍjuA608t2+ $7!8[ص%OQO|ܭ#OwF=Z=ÞC O~xdAnl)_*v[? }oěr|g!B1$ !B\ =<>^^H̦`2t.D_G=9-ɡ6U'B0 8Z>u΅`ovЩ SPBǮ[GG78 WۆF&=K#b`yƨxr>vspjɸ$SLt$?SQJ- j~/c5]B!P`!B1~`FeWRh莮!t)&+)fޢp|1:W nzmM|AlqH`wwhuיn^<~ap}ap5sFn8}uDM!H}#Ys'W!B́`!Bqk  B51?'\AnBkMVO?uyx1tn:+{9¯QܿqZOl+}_yoR+B!~AB!X0R?gЋ#8&dMס xp2sZq R:q|o(]:~_`z>RSgvh5Ү^nW{zj;5,B!^= X!B=B>!DdH՜xI#ޙv6:g0H~x&X!K8;~͠ _ݎp֚03QK^¯B!x B!^n>^XQTuܝj3to Xi+"q{p'[\׊1Ob`t'Xxvh6olTrr}9!5BLJv'ᷚF؉; $N)18~'q¯B!E B!KWv]s6HFH< EB3 T;ܜ`7nߛ,<އvW<Ф:Tj-=p.:& Ӷvhq1swptr$BDBqEw8n_v~}C!B)_ z B!g$ !B\;3H<qR2:Y8&aTҍB ءDWbrYt0fbmЭ<8h on#^co!m"!nnuy8yn ӊ~ǘgnjy$Fs 3ڵ~~%r!5J<&z PO\]?,q6WSw8%;r k6 13;~ݍcNm e}co)\~R ~B!gӟ@!B= "0QBX !XX &wXlH܄T9qO!f :Yµ̭/ 88cXx8FH8irN~:8mv}֧x axw7 brhqIg{}ukθipB7Y Fk17'Ygo;.7yD@U<L2&k QԊ{o3r/F)<΅ykO= `"W!B| 9B!y|>8:WR3]W:#2e\") Q6y6R<4iv7AO 5fk؇u!":5"?*񱷐6g[#gN9)-}SKvH4/<Ǣp1֒3}j.{x ')B)NP,wW!B3>v IDATB!=Z`Lgt8nеXNwBiW06 }qJ|-M$qqij5oyb-罾Zc6 u3QSڸ^y. u{Bݗ(E¯B!f,$ !BBu+&!/ $#Qǎp;dkNfxSLJ=FJ&VH]C< vEWps|ۻ1+x.K ~Qco!m"!ˢ{<|cXN/@Xh3n_ :q xjn߸ձ7QZeC)'QRBš¯s_!Bf.$ !Bk:Bp,sNMv:u]9'@Cx}/iHh'38"Zb|{ i 1;n}!Aӳܙf,E7/Lm)Mb̳E(:]ʮ®8eSI!EA0?+B!~ B!#!Bp^H9bΜ*c`Ns&+xQnWp%7"H~=e[GGv,B~9K!NN_"~6kk6<QWc߷QS}{g+BEȣ®_!BbHB!KBpr7#x.:#:'8uu 5|CmУkC zlIYo8m;r s!8ܞK #[GG/xxv f穽w\w!BO;!X!B|&^*|(Cׄ;Cg3:KVmTd2X9p :s m<7-Dhlp<۷K >I|-M$~}DN;^4ڵm}#{Ხ[1;u$ny(-H7͜$Ɩ/:beWUo?.m 9WCTQB*XV SJDwC<` NɯS# xG[; Wo}]zژUV7$*i^C_JBtg' l._g{}uO<8n"m ^\ۤ.#ȩDtJuY ^ 2?)wK_+ܼ0Kץo[ob'K7}VNzwMeu̳&i ߇_mEpliKCoCoCRy kIJ,Bw KIKMd,7jz9'i\i<$}; ז{?JI*O|w_:ɧ'ok;/l.xVESׂ8H_bMo_rk ZW2ve_x9}9Uvm' \neВnKS:H+8*z_R ZRh{%HL ۋ(H㙰4q+w$+Mǚ1eL}d:?~rSϷrUV˶3\.lcu%%eBJ oiߝ2&~yC`{KIݽus>l"x閽?clKD2~/z5.`nN+|vޗ .oXW4a{-1kc MH_'}}σuV98g,fi0Ҥ|]}̳t0V:/;塣tN;'J*X>AZKL:[|$_ !te2cgY~d>!?!)ou? _LHѷ+,l@ٞ6c[R%UgCJWrt=[yN_o`i\sy^Kz!hY[S \+8~Dy2X{MepIi]' Ⲧ.qB6D֎`WDo/!';eՖn4ۖv.ֶ>/RPK_kS稾ij}%%7}޽Ϧ}%/ `WCeRR'o˦DMT"JA Iپ*me.׳7\?'{Kgp]+M< ޷O ߝyp?MD߷~ v&}s׹c_Tٴt %ߑu( pyxĻSeEMm\"ZDn^7)jQ+D{EQ4XW*:|C ve$Ƙz tQ=+${oӽ󛄯os7K5+k'uuwV94%ݦ}Cv+i_?4Aηn: m허E%vش_pl޻.`[My ͶpM.1q|>~qx֍6ciVJ;D['MC澾!Hn|xخKi_9~rc!='KD~PY+Ed 5,ryz!)(t֕RСM/`|!? uH 8G܇~~Eڻi#tƎ6kjҼޟ+,Iѧ$}cJ5 }b\ ŻӺS_߻U &|ijD/ϑTtj\" nets6#\װ`K۾ 7X4\Ke0B8.a*H y2v=}9gImwt o[(9{r>4&k{I$}%)(A|w_F&ٻNx^GϤ}>vބxz ^/VyRlM2JE賈}[޹&}g墥MSDWRBXvþKwK #~qז;{rʯ,{iQm>ҷ)ͬe]*˅ζދUQUZI{ɹߕzT 'L]mz_2ҾqޅˌqΥ(&i<(R>5}1^/lm8dN)\{'xm7=[Z?ӲRYM':)Wq {tu56IGDq`O%m=zE+ ^ɹ7X;}s UK-kB$.P^!,HaB86vO+c9 p A 什4twEo$+MgdS.l͓\yפTJӲRsl=&w-r!}~< i| m`tp7-}&\t#cT696tCXeKJrlc7z xӼJf=ѫ~qw{;*-\J3K e|95EUAQM?ݣ/)_!8KGaO߽/??D|*~UMǶ2EXTY$/&,)%W.x&.%8MIS,oD1*GTbXzNKǂ]D< vmzO] 8!۾&FTmP ֲqN8oYKYw +5|&|-[Z]+!~>tΈ8k{+l{Fْ½ RT*ڹ75>HoEK3}39U\vyRRmJXޓ٤E߻Ҙ}k\ {wTp3Ӟ9cI>.ԈF?11?!s>>syw#ɻ[6-߼=v6{&c9i_9ҲWJuowJ[_NGIL0;ep]~,JEEwm) ' d4^H K]{u2<nMgfg;rx*%uXƧWE1=^{bw_g{lo~fUi^kCW;RQ9u\'{lB64wi^b&v~❄cᛮs%ݻz]/_KvFŹ&_O`_*n;za炢wZʳB8=2#R®-X ߍUNRI emwY:L +a a>1#sF6*|z|R>cvG2ѶpJp%#ʣr*|5 7c^_U9N _ҕu^נ5~w~#W#?iIw/w mxg~RѶKBtxI%&kpI-IFg "p'e.R8ɲttvH }}LrrzPJSk:nWί[guSu.W(+섨=>zǾԕΉ|/ ^{YuZɻm?qӪxwo3X9 ߒM\)_W^v?|k|I,ߒ%uvE2K\E?ܪFYhBXzIw#un i؉]mpI K=ɛt*9,u8fAgwE}>}*gVr9Ven7|w,\W;Jq \[KӆqMO_KIaߜ\Rw-^9 +UwѺK7K߶^^(] =mRzG[y|z ~gem`O!׆m[m_DW)}HY*l;M–P>i2N KI }qL wc2f̲ŰN'yRӱ([Hw\,_/0rI>';,/&"nGaƝ>hih"sZ]y9o΢[N{IOzCw#zRHc|'ޱO{rNVhMAWz(|ΒKIٛ~ `y\hn/U|pwJB}/'wVg}sJ8HǪL>),z VH哧i4P+,5ps|e6òz ~IDATo+;{Ma?Q qFE/Պ1=zLf2vz_kZ9%UxkMz7cw G#J q"||h\) `vte͑p[::'ƒ%\gJ&ia1\u̞cJXRc)E[I\*|,ڦUde1m<>~6e.kb0o>FYEjfz4 <+/=+Iܶ94~Pjҳ쭥j=v\Ikw]sk+|?gA*?-Z}ֲsK++ƸS>z|ly1I UBWg,u,^8C% :NC&|h|'R5קnNv!}ڲϭM֔ޖfǶ^u z_H.=!y됍HD$KWιMJ'e֡wbjySَ.TVj~={Z _':`1!\?#SmB8.:HaIK*ەr,h{B GNNp̅x-[*v u+V wixvl~rc"$41T:DJGm>i[s&yM<ڈ2R#dU야5lӽRWY%nX^{f`xkSW~a)wBxI^&j,}J /MhɚGJҔ;1E)[)\^ӲĮpҲDyd ai[Jz/51Cxܦ&miT&x-1(8i)Ep'S)4IS) vuS*H߷3BnwGWikƼ n'x;m=[I0o*֭n0tؾ:uOh 嚛oזחO$zG9J7{6[}XJ7YXΰX%wGY\q{n6Jxe1s'f|yNM'+O%dO1E ڭݽT\,[%oNJGg]S)u*zmݡ\۞etq/|"` K?k&g4IeI:mV*G1pLW-W\%c>RMKvw )NK;x2A723y{ꎍ;׵}x*um?lzmwMM$oK%m$Ki^RDI$|{k3ɢwb6k^ >Ӓy3c=!iᙠŰp)%D2V-bc,IײҖ6y]4&$y,kyM+]Y, õԲK([y%wd|5R?x{rחV)[]SչɻZWJ6m懢>UEeUo ӔM7'{? r֛5/39lSa+3%V Jm8MKǎ0^'nt\ 2ЧYw<4d?T! Эsn{ bU3j (xMhE1j#ylsG5/\fyn|읯sQ|`xfl:R]vN H7VzHrRċ^)">SXĒYlc* p'wy0m-IGZ6dsLΆ([nS+'ch6aJfMoJoݦyw޺]z}=4楔|?#ϳ|_+m%q*+K%ԇ~1?Bdq>}BR4n3/ tg:Mϻzxpz73^\#s% Me"om^toIڽ޽9嚥$=:.ݬ1eit~>0|^ּ,eJ2_J8A'KK߻Rr.녱%m1KB=^1ζ᜛⤬Ew, ܕvNnrݨesyER)j'WRq+tM7z]Z>K*w8̝ܵkv?x^콲 ߔWƾ*孬] n9Q ϾH`)64'cWj: \i륑ũ uCe!-UlO ״I/qnەү7lknSvMyfDWұ䕮n[_CLg:`)29)|up~"̧ٕŒri)siEn]6YbK#<p]wױm+ZzmrmJݞS/w]ҺޫoCW%l/ns:#m˴4Unz̿-˹ Sٺ!<g#rc[sv'({Z_5 ^ 6|>^kwO9g9n,O^'fOlnQKckcɛ5hfH`Ǽk+;$[y?ep{iV.59Fu|6Ϙ_>g[J7r? 0Ӽy:u*5~ø}ϖk~~f }gOU^cܸϲ'~Nc'SkYQQ罤Keg_rl_"y_=~ѹbX:izח~E_#,^r'Ϟ0K M/o9\++o~_(_.݋漿ݽ2`?xo K L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L #~IENDB`DustRacing2D-2.0.5/data/images/smoke.png000066400000000000000000000010541360473665400177670ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs-ItEXtSoftwarewww.inkscape.org<IDATX͗1n@E#Ҁ4MN!Te \ QF"'Ab%h@>)fL0!7]iwx<} 4--"`&",V~2 -)0]U x/108} ;/Y}Y].hl/f笁INj>)P{bZiؿmZO"LN`P85l6z96Mײ1͞C{{(:,h9t!_͂qhΡI&[ƨP:~C9`Ų3guTD3#,b@by\qME0-R,lPk4ʝjŖV2,9,˅\vw:bۣ{ #/gIENDB`DustRacing2D-2.0.5/data/images/sparkle.png000066400000000000000000000076311360473665400203210ustar00rootroot00000000000000PNG  IHDR@@iqsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxrIv]1q/;B/pqt[;IQ$jL_d&PH6K𜈌"?K<?>Ȭ>K%[+ظ}1vKm\!C A@DkغMrjrW=&0݊]<`mp+Z{qKCHx/6X@ l 0tׁ{&kĂ^֚s sELYbs G60vmV$XKhBVK3V:s k=.܏:;>2dm>zVP2|txȘw"`#ֽp]I ~BӠ44̨9Gs#k#Iu]VkyC EA!C"#9*}H C!fAA.SJC1a&Zcj@~zx#c~ :X 8] GA*\X @anbfhqf#&Q0b"fWX7I~fs=G>$!$G}@XP@OB"  Z0LȱyA^1> DKkrw"~k_88#)!1 !#${<p+BF .FQFPՐ5FrG#\ iaʼ!\JYOn؀v4K.KzDD#yZ~-၄ t;@&v+#Z~ h )_w+Ƀ&IxB)3 GѬ\EF'؀i#dKBĐ"0NN@GˈMkCnW DYBCA䒃2f-!c=Q(xp HlK~i#`1~+0 S`Ф|lA/>J8xQ =9sL0XČ*HI:*^QPP/El]mWh^|NKx~C0[ @@+Mmif,I"#b]zw`g"CzEJZ1THMNɩMWش{po4%&bD/^?1@.wɾݽ0#-:cG;h&CÜŒz~ nh#$f&>۠X>}҃XwCJ "},LPpA o/=}`~#wfǙ}eN82"!8$D!u}R_PqB+43˃ .# p$ 1c$r^3ĚGIpH@TzDnRc ^PqbFt6 h6t#0$CP#g|K٪kwc03OyF V'R1 ;~)>;f2Oދ2JЯCn6)3}gLx)36h/:))[&EӣTB 7&BA$Ct!<@KQ<BeNK =H.  R ˀo໴k-N/9XU:fTnv~lĶ*,HY5&}VT}JÒs<1*V6 %jĀvUZƆ痥wj@VS"u8XoKsPKV* JhrpBĘ1 TnE4 + Rk0FLQ̜=['`g@I@@ *Kµtd Ai0 W!֗ж 1 Sc*+k \oQV k=99ssXqLQ`xtReuܠ}YF9>\w_FWn]P`NűiôC;He, l y993N&)K͔99'<1 9 @r4̩1~Ĝc&,W}Tc)%3^Q(*ä=ڠtg&a g 1%?qJE噠O|81 gLxJwZsT (!)|AQ?a")?rĔ?S[ I9+  b1IC.BnH[lz0r)'z{*F3.BH$ 7SB Sthʚ(3r|T7SGWL $`h V%4Ō &戜\pKs3M[%~( ?  ZPnJ*5'HcwsNxĔM l&ľ2&a>g=!!p{qg2T:6Tr3)'5vV31]Bzt%e)]0 !%"u-I ǐ0fsjfxN(H.{ˈ6>9h[u=mm|f8hgך WdIENDB`DustRacing2D-2.0.5/data/images/star.png000066400000000000000000000104751360473665400176310ustar00rootroot00000000000000PNG  IHDR@@iqsRGBbKGDC pHYs ) )/"tIME )$h͙SIDATx[r[ױ $De+R '="!!L=73vqRN)-S2 E8ݽ(lQH9U, sիd <~8 y fHD-3~$/?\\DijgY"afjyvvVDdDѣG3i8lo <]]]=kV5G,--9}Kι[3Yl}}G0H4)x|CDܪjKD"rBٵZ0l64]tέ2PDVyιU"Zsέu@A~H$1{*"+"+DιA4M-3~ Ǐ4M3"Zdf^%ef1sFD93/DPn\7 *-M$3/ъ,H^Ds.]ZYpelmmE)$D$,R,W_^WEdVs =2JYn޼'y?aUfEe޺@mf4M`VWWmkk wrY9#W,Es|~Qy $I|Z W@\$I?M. D'"vr^ h- Wh$ni:ߏ͉H7!+e|hؐ3 39ef9׾BDEd|ÏF#iWUUdY("̼DD%?ςsOD3/uAUW")M{؋-$}$wD䎈9Pr_И٩>WFUDl<e-DD>xx4xmm( NӔ<<DilG̼ 5~gf쉪p އi+BWVVk !ĩCDcynnn23˗_~ɟ~<| xx|`0HU5se٬#UdYv?Nw̼."k"TZ9A9g^y{k6fι@OUMá ɓ'xBvwwO>a~#"ꬺ,{βL%MS)eYT5Y$wy s]Qs9>o_D;hHԪ:QCl""Tι3 ff{UUu΅m3I<5`f})ҥif3Bιm[K(qe9e1n'D1s`!Vz+"*"1z3̩,y'*MlRDJ"E%"DT@MDd2isAU<ϓ(2"ʈ(ާf^JDι "*,w%ѯ(p=Ɉ(@ c "e QMDu(4DTHsR:xZODι~x㌈2뜈+gs|u!3 " f63HKD!b"bfT%"%[H9Qw;\06!"JZ:1G, &D1-Nb=b@ 3"o "JU]Ĩ!d>Gkr_"ڽ;Cw!b<.D33"j# AD*>EeD'~dV E%CA.>U?;2cI TD !ّNͬ_-SDvCmёm7zg=3S۶ԉb1T\AtL)zbf/blh8N={|i v eYEAEQ@U:c?)Eߘ٫X;ÿ)Ux;;;.6Lj˺sι Ya u p/T ȓȄwܩb?|̌/B˲茈9>Df].$7쨪Yԯlnnt}n'[smsev.3+CiY.ݥē'OS{$IJfnDsGh~wY*;t\Dz:߿fYq4iDDUou͉HAUUw`4q>:ı,u0 <<,r=^[[,fͬs@ᙙ]dι @ztt4孭- X\\$I$IBD$s'"צs "E$&UY9=?xj4`:;^i/) Hǂ4MSeFK;P'I"!oN !2f.9Wԭ}X4M,Kqι2w;п'6-]%8ꎏGwiYnqqcsOgtd Ig*U4Qt|E۶Y(K \VuGgY&i85ʢ\v;"jͬ2{ ?٘Ot>ʲ{ȏGXD'I|דWe5My^mϜg?dW^ņK3;1Әdzs[ZKU$Qkx~@s1yAD%GGGW_u?.t8#o~1v#l5@DΈe2󁙝(|cCܪ0(n.D!Ly3{/kkk|qnEUU9fN]fNxye"̬0#SlCG8`ֈh`q6D<_%Dfm$eY?r?1sG" 3pPz͟Cwm2پ8MӲ,giB3Sf*f,ĕ=$~uO"*%,--M["_~_ϲKPT<KU="fٮ~/"?TU5Ndi9i,kTWZfD4e2jGk(u\; xqGGGp8o߾.:&"o}]I]EeȍGn7fXUw۶=TճB +++o%kog<OD~ 9":Pcl6kI4DwKGlllȭ[aE[`%3jљu}@D/ݻWrZn n>j[wwܤ9!^}`c 2GnpscpqaXtvkq~Ye4o[n~1eݎsl0f~Hp|15w͛ݝzmpvf4ׯڶ@U94Mv[b-h׶^;Α ggsJ7o !J/$/1&ⷷ sMת21>i-PPc}/@{<<KL"p +ߓlo"u|cܭO9wD9s{0̑+ V+> k6@}OSS(EaI*PB(pPM5װg,wK9i]I?ܘAI/CIC~;\]G"CQXk-BX)*!p  !Gc뀢Haf%T@8~ m-M\ RM(K"g췞m4|o/%¡X%'']X@.^ S(D,!'pN]JnxvD#uas#7( gr <~nm2uXJx_xh`)W^A"`̫l]WgƼ9W>mm+t umK?~S$8- 9W;nb{c*ea @Ν!aL H2I!2Fw0{>+=H nPSpqJ kSS$*<" 91Mi'lp.c8HQB%LtĪ*L\e\p߾>}٣o1 k7 2IVqˌ`:8ED3k.[G:e@YԵQu}T 7ʺ)2RB5#˓J*"4L daRsiLDZģ,}t GQxTE0Xww3%`'ϳ;L]Y4 9@`n8/rAV^{H kvEApt\]Nf@4x@\M׋Sac,rC`䂥;JTD LP\5ly#b@Ôj4Aw NP!o/S@%:B"%|IlNy Q|r1 D>`6٠$=@o>59ܡ 1D6&a7`ϟբOjյA]eNRώ,NtLVu'Q򐙑!\jN  AUihMz!9JKǸP|Lx/ͩk2\Ue-/̈-Z-b.OswI'"'Lr\(Qka|c8v;k\m).|N9O=8w1K9/kZMv, 1G w2{D89=3ReȧAKs#9xǜ??k]' Z&vXcdqY5ؔ=6:D#t.8(NQZ>~0Եp1/b=M!C{nq8 .yYhidD8 ܽgػ>?Ш/_+}rAUTSf3,Eׂ=Йb۝˝MeiƄ)xHpSNRhzM~NR)?@ faR&HϘw=ޛ3/3_w ["D Zf &rs<+(8=ZI3a 9=ÄbZ|B/%. q9Gpop~Ni[AY_+Y8ǨHii2U98VP.8LvT$BǐXGOk@ۖ \ì(eE?] T8Vŏ!/M71gY&D܌r+Zm <=vZX#E}ZL>ǜ޼|$1)JgsB0x% 0IM#t1P`sya@Mbɀa0Dv]N_GN@s. vi4M^f&蹏g Ϋ! Q$Ʃ|4UE;@\RafGjKS80Z+&1  4b@͹5mQ JU6-{ߤQ%꼘%S:Q2On䍒0ʍ+DAb -EM&k-2DDǑvr@q5OnG<3Ya1yP"=̯VmvGtRC` }Y>!:Z3nږkO#L` 6$M|Yo_ }+ĞbnV,QPٶǧO(M)39Lgl6oI(/@eBZH@8LZ\uExSC 1Lf "/GsN Z{'1=5;;gsKl%&34Tt'^x:50qa+?~v}xp_i jIENDB`DustRacing2D-2.0.5/data/images/startLightGlow.png000066400000000000000000000707621360473665400216430ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx}nIXk5l0o~~y%4!52Eed F,l T<'NDNګګګګګګګګګګګ=} x3Wx~Wbs{iR+)M쥾/.^]^ė`Ǣs{ yW{{%?! ^I+<>/+K CA_~}]E$vc;ibؖ 4˱W؍q[3sw ` 5J^ `z ~Jϭm9b`2B[(Wx&J3|(s[`۷2)XdHDJ^ a6[-o!Ƅ d0^Ie+5J^ a<[ ggg['''brd0^I+5-'۾書o%'`+ oYsנ /..GGGb!tm$<g;k௮_u\?988H&ɀU"V V~~{%`g ׃xGBGGG^B!K‚+<`[_lbonnܛ7o:/4 B`2"K <" #+lo&l~-Oπmzl6kh6y!!}o v>rGg/y]k[_|OөO>P"إճoM ϫOo#\3_|EvY?>>s"`B`2t>7`!Nrr⺼HlrL&yY?<Gswxxb\ 㱿-23::C`{"xmK$_ Y}r&`>{s`j>c?}W_3өN@eZUkc `<bOSϡ5k7קdȯ~-?Lx|z|UU؞>$,Q@70K"xA$Jmk=$?Klt:MrfVU:Dڣ|>L#`}D5iu6wf>!mw~4z}Y2 FN?^z!^`R"W bC.b9: ߍvW{&͛7/^_<,4x~Y`4jr*C Q@{0" \"x(׾MϾPh,WL&:Q$^|>OH,K_׵"`ϠE@~01=~6(H FA{$Yx?x~Y X$PB4uX`0<oW#>CĮFA^ϝ l.xN-_!__/ʲHu]{&ji *`XO zpe@{CD /:)7?Wb o;om<=U!UU,|>/X ;S3 " rj%5L& !JbHMOKύCc(y|h4rwww]@{(\4X}-HEQi<F @և`ӒqȦ-Ӷ-I $B-+v<||}^_we$M{1+ʲt ^덑,+  dаL&M]~\lHXt&tP1ؘ$Ę,rEFn.ݩ 6=;;+$?A-[05 _sXd޿`8 2!1 PRC;#> $Gm΍5_j_^^YZ%u*( \.,M :odEZ & WJ&bL b9qd C>C.oZm]ts0ݹN=ۂ{{)@SBl} FDd "_ȏVw5aZdF@GV~3v݀=`gW~nPHc.EPpV]( y PT&`ӿ#5!1&IBN8O6^ xj m)S'Z!]X,,5$?)*@+E? {2?Ts{Nq><.E0H ~PXJuYZ푍X9h:OHॆOE_ݼ>ݠ;Xg7n/t"suÁ,!$9FQ^Fo)(Bp%8`2ݐt9uyR2" : 鴻f9rӽSǿ#J@$ι,aVH`1z!)!5vfO.٘#K \\\dI@$"L=:gï;.&w~^ZTP$-"Bu"V.{3R tCa4UVH#`U۳@Csw܃u}4. ,kKr 792Hk$U7iX}$Tc@Vv [/:)H_k]eQɲ,˸Ěz]d2)VUuNEY%oPfb\m{_8 ^s7Nd2Jw}}Ņ;::rڱ|I~WFCFt{I!I.J}GGGO<w}}"`LiX4ú-ϳ,&NP㶦iʲ,wA^&Gd d;62\P_.(|]q)@>(%T@Y~:1 ~ZgwjFw}}@x|d;LS| {{{_\\syyAH~mG4|J{+k͛7,;fO?"i+E<>6, 住 Ia/ 9W'ޟZE䜬,Xeכ)yYu9uC>u]j Xhu&e1c6~K NrH>~=tC/۬8,5l6sW~YsaгE$2 6!RB )L~Dur("~քI/ϊN[ IUL&1$F[fe&IK.IB.|\l+m;ɉlA>A/b(6)%Ɨd2KUU_@g&d9Ru,r~)u]VU$k-2Q A2DRЄ*sIJmY HW_5\Z5N]*9ۓ& u=(~:m@Ϟs. |-;iυҟhohr˺>/6## Er|&QL 2҅"b4֘fEn$ N ~78??wCTڞC"Q `HC/^ߒZ$IVr\*)%藒>[Ec6{AM yktME\+@('$9\>@T\#{ٞS`M1+n ~V.s#9 kT1Eׯ* tUx| v:iA ;*k{Yi:ȭKr)dX,\ C A0zI6pbV|Nꪪ4ޞ[Vz.2L .0F_xyig\ma+BE\%@)߫u3 Ue,LReSuuG!PY>^@ yW({ꙎأCV"y =Cy{s!N xh%KŻ[=xH-f.2=~ke9rUMw㽭V0A7*e @V5AF#7c{"KbpCVk= kdy m{uut<)H[q,_8ݚMyZA}_HWǨsl>)x[/*@ 5! V@rK(01uSpN |) <<,K[n|<i܊-,_ZiiEQĥaH˾PPEQ@I@ x&DGj sXGp?[ &= 5bA! 0/BZ$6zD^1Sp?ib<7 YP;qxû yo,';'dΪ lZt&8lp\5'.w;U|MW}VmRF=Z.t}UYXsj\gRDى0QI 2Ue 7Dp t>{.5%2}ĮK¯ XK~n49JƵj*`xx~;$^{|S'*@KTJ@ ?uJ" Aj% (9'*DԀ˅^.BtEQD/Ba5 #.b `Qawww/~$ >x`Y_BĐp~x?uؿd3xN^ -2丼>o@"$ 93 .ȹ} KM\Y^bQIB#ksa2TukxwWǏϱ&`0(-/ck!ַูq=~Lj$`z; 'EVU`?ڳJ:@1c252ch%SBºj ٬`&`_lFIJ6yiq('{lneerc \ 3Y[R| =Z^{0v&smV;l{A@ݥ!! JOH_P@#V~xx(JA>-;kdOXP"7q5[Vh4د|V f(.˂؂<.h($+5YkгJPnu]sFceK8&_0F sAz^<j7(gIO0?4y 71ÎpG({QnZ% >P^7U1x߮PsJX.qx]Z%d>Tx zfT&M&V@ ϊ]lHoL!_ 2$wEA7 }QUU쪋 c ufyk[x.*/PFڻOJ-y.|JTyjuصn]y윋p!EHFY:Pb$lj,;|2'U(~ hm w%a(WoF>MT%2_!ޖe,DϬ4-qBf% (:J "zPQX@7bǴdQc^{=\߈Gq/ |z=7 I T{XcP?@.A'\V7MAk0}~.kː-CهVkf <7"FB0w BZcF/IͦiVźSWF |>w! $xww6 s{a@j Cdx<I:N<,J; W9' k@ +?WcU@ =X}#qIxM,'v40II/!*@#͊˥/2.àB0@H2 4|Y@;>>FcX}T$G vND@z +\m5C 3u[=@̊؀bLUK@) !D y}-3$P53iR-*4M&af1{&/>8?T;J↘=&C~$=5: 9O_`N3Ja86kFGYu-z{\l2IC!y8Cm?W{!Wv@㋾Z؟q?n=Gjy|]\M_M,~yֽAP!#.O/]_XiiٗTa|s!!Q ~qx IfiU rGGG/2 xv ƍ-B?J˫DFB,Kp=9@dD၀vZEB"T IDAT#UJ29~B)] Z*=[߀}690UX>w=0R^VJ}U S#0x<,K< x>,u`37C ֽtHÀV*rZ V^e5{ae=^뼅P;f9Nf€D Ȇ=; xDc(-xX&5+$(vd@:ɢ!"@y(ι(*@b`^zU5 ò~QEgB8d%~ M!K5^vR\f& *LRش+hlͿEq,>.㙔|~h"53a4c{$ $j d wa {tx!B6}?{\ HPGa^ y;&>ކ ~ t(ui@G]~*1Q$q{4 y2TC9 Y.2'ICyIM>4M s-uEz Ժ E7L49p~YŊO"%7EdY/ϟUU gՀx{p*v 6D >+.jKO?t;ڶz\&Y[`C6_`3'V>a伦\%ñ U"y!$lqNMT[r!z0@>1 B8BbL'S% ?ݻw;?.K95/$(O=>m%Y[tިsƔ*|$U H9J:pR$#^4rwq=,N} ħ]"Mj\ ր/KIom2K?Kd?gne+C9`-bdSm1NvB֋?SM빢T{‰N/%YB9\( 3 I S3}ih0Q<:OvAboE*jIz)%ҒX> dpK9pz[kVϑ@TP7Agg]+{x- kXaЉf6=4g 5[>_[8??d2Y:|d[f-!Y v kTMCnIMID]ci\[Yß `EB~H(DmHu-eadAUbKk^Lϑ |Rv~fn^A{Y Î&yKa%(@R==%$;v&$hMdjݛqyJwa ؄Ȝ0\WU 'uM][Ou࣪'#?f3ӧld;MkeY&9dRFP/%gdj+![rקOH '`r@oy}s@T1KnĪ@&lM7olbk6? 1pB_cv$[a v lId?ZT~kɵzQ05X責a0uG/l)gk=NZC_]]\@, xJx4ݻwNjvri?R4w]##gAM5D@`2b:>O9uu x ʲ@/#<0@AFCM<880|<x쫪""G6zHgLP&jy|(Ayydk$ySZV'@㱣Bqsstpvv0U@ߤ9mrvzz q- 0j[W` чzɌd6=|H }X`aH1y[_TKj- @Lj8$Q$Zt ct v`HshyV'%]-ȷ!mvQ0j]#$|NPAN_G3sȀ_ e)Q<@h&i[r`tsBH[n (ms& mZsc!1φ‡A~( 'gSg^{ds"$$F%i @&M$d SUU媪r"ZD\__;N  < <)m.//&mLA$/p*>3Yq"4|jǡ{Ѥr5$ pΙ5"0jUN sN,@ޚ_Q2u8GlضK'20 :M* _7>_: c@NUVnݚf*(DI2*@^ϡ%Hc d'}]3E2yA =^eIe-5D(P1{*&hbk]u Ag?8I 4%/D)%U*@ q( {2Ѝ޽{׺R̙H^wiHВ ̚L09 2L p f|ye5 c?hɔB X*@u.p DUCuOr$:Td2d 7 u~j39'sgA"(5o|ඌ!>&_&ܬ{3'KI?=VEc% @AW.@B[v@ >w'm,10sMahmπ 9]?G^ֵj+Ϟ%Lv9BRG! E p`2l`6Tր!P1z >{7:gq_nuR{fb~|=r.uO-2M6ޡZh$&m RsDun(*@!]d2*`::N^]]lRifWc9zd mOok) kG 9ۄ*1dQcq /o'y|?ݬY^/ZL[s (VGCB/OJUP1 !%m@&wmj;{MP:V">fhr>Q~`%d$AJ@T$j!v+(89WX$C5IMl[%#(b<Wc 6/yr,^O$Y9__'Ogam$L>`ȭSRt,m!*өc70l+h `Ȭ'"}cE&jxbUUHϠ6Dey@XZr]5DP1,B_,[GY?'zFz["Hm9ׇXH KаBW JBP CRC;pX@NUض*pIB./bM@iz<IR;'E1xT( ;3 덿0}s̽Y4IE+>p@wm"N\ HX,"pW]U ZX*!<'-ZRGIݹV h4r,Z7DhI~*к5@$pstSMѡs[ؠ\X?ƛXrqqᮮudI`sp̸;[@d(]`hyq9#M ~}\KyX*G&>WPt?I@w d wZV;isbڶOK@Oԣi62yH'&RX_b.Qtk.6-MUK.)(7y]c;UC_?&r0gk'˟-`42%.R{$luq9Ϭ(Z!OX:_6j@-%_tFOn@UaY\1:MJB{ :Na޻ཏu!F6ԧAXeA/5ʬ,z`ouG9|9ȽAJjA>d }4MQe/ix Yp9B޻}sGC믿8k-y~}@r\_aW=b/C'$ϏeCΓt3?,r5 x=ε-t#}$/ r,8 .g0$(7aBm?KnוqÖ!VߕЄ< Iz5+ I*`:.´|:S PAL; mu]AU>Ⱥ*S@,9:RdA:LByQ2 ~gEi@{LM9?ĸk/cq@gX.u]'*: +Nυ>0\wrMbI\`Rx}@>DA'CrTD!j)nX  b>/sgXd1]UU,V\:^ vK`5侇Aޫ 1?98|&u8-OߵtS"kJqi&#^Yc`q+n'Vݿ;pߒfxanm0@)#lV=hE6cf=6變Ȑ7Jo-uEN-pwq!>.>DS✄fY2b[{*0ྉOHө@1r 't֑rgU'lgyx܎ o, þLZto}FQ/ۤ^p43 9~GB. gPjٞ~C㤅':Foֽ6ޘ_j}j$6XARYIE?Q7t-q" 9-nr*-/zqǴ#U?& t_IZ 2oAoy4^v%d{3B~+İQ}lj>uYQ^Z!Lk{{{ `{Kn\??UU]ڝFD`s<a`__3qb&mzxgWND gޟ?zlНs دρ,=sKIwEZ9狢eYB/NL iVmQO#f30__!X@=q Ph~nXCWx2#̉fqڗ 4M|߳*2z,|>m,א.ij'!slmh?K@ܦFEa ܤC`9yAI@D{]} xrE `ܗ:#3C}G!uڷi4/2οw?!y94/"Y@]בWU2y>}{[G;iudiZ#~b -ҌٚA& MoN$ӘMG^̤3^ bo?CB&qI\AhSe Tjk{YMyAyo?,}Y~Zk?L%&Ig6}6?Dn ޷sLt:K*my[t~Xȡ #3yV,}YiK߿&C* N@4~4E0ϱZ<NOO{˟޽w߷駟rdI"&ܸboqO)I`璀]&m@ 2/I@K'E`Gz,'1>kK-VcӋ^y+l IDAToOk*X!@=&񯪪/_HgD[H8i1+2ҚǾi,K4 *JH49{(va8i:تi?4EدX8B؍[ߤSK}rM eCP@+ARuSe-n.2~o <2|h|\.އ}~X|# q`-T`6y`>0N# F#/ 2ֈ[}QeP+wx HA[G 56Az\9=6 Эs@Fo~PHU"VY+( yV_E\.ZiU8L|>{辪F€|=~~_>Dr899+޼y?W['G&d9QsLj](2! ʹ|.xRq^眫C+^=[Q6*@5QtN~D|n:qf$~Zc?-/Ͽ1[$`y$ &~ZuX2ӧO899Ck00vU$VI9eYI,Q(i)q4 ՞H~$l@PVoJn}4oykHεb|]b|)>xYZ֛$-$7d2K33@c UU%sZa4jy?vX^xx"\r` Z7o`*д޽O1vE _?[ݥ8@e\z~oo/Xwww1Ltt!uc`G &bĄ ө??? $ql<]*WU(zxjZ&x!$e \ǟ*3YC"DZ(N1^lM dmq|›7;::q?W{t <==a R |fdpu]#"^C뛍{=4ja@N|߃L?M;k\!u^ruca 0~ d7hspp$_wCmw_~Ž{N"qtXw=;;sFપ H eɴk3M ("sYNqesqqj'0 0!eTIdQWWW1Ʀ +j%b{V* XEQԖCZx}\"el*KM.P?Q(6I)\e]ǡf@1,Zm}.?Яtbx<遨5NCTQ#{24Rr aUVZ H-;Qt.M>3έ?;'։V% ޼yupppc]4סq΢(jՔeYg@D`! @ ..BhV#%HRۄjuyY W0!;(ح2GGGݝ࿾?w}:M` aS!ө_.~oo\8/k^0@D d=?ڄ^E$g*E(*&_QנDI$*A@$Agb?`G(~_[_-?AC  s$>x meY:u]sěÐȨ& !Kj!*]J/\V1 ĥbP_{t*g[olos.>~ u{kB[͛7_ɉ?>> PP@8.Ѩ dC&Z&(t-@cYkZ"]򽬫KΡFݯJ/.E~M. ՕGGGzzP[K<0/n ЭltPXqןCx~Y R ѿAVLKd@?@=! _XXҙPsV, h!Grҭ_}nwzz]xj'j_J(X-777X,wuuU^sssSq=$z z~>{{{Bq<YuK5//iC]\! *·/qL7q]5W#k j~8>o h{v錹4 rv}PGP@"yl#Vuz~j+5w]gУ JS ;>>vﮯl6s2{l6swwwn:xE\VU宯 \QUFʕe)uEh)XH)()pMӔoYUUCoι2@YeQ(20rΕkbv#zi­V`4wQeT\^ow[4 Ʀ7`ժUuműrε:?ޔeY&PxVU_W sCCOc+Ap@RET!IPd  |@]׵!B^@ ʲ\MdJ6I9nެҤ˾}tz>[*@C.V=Cw~&rIB...H@@:\-hHՅ ~ud;'P^NWn9T^w}Klr-.8Y}A[C0.D"eho!0d,"暤O t?w?0㿳Zm`=i`~mB("_ܸ=w{{ ݹdy x㱫-K7bZhp!a!(A}!/YO@8F  _${-ަCd:g! g d޷뺪U4u2'I#*h`I~?0L"TUPeY|^(q|!H`tGZW )LP ,{;{`Ȩ&!%~Psyl ++$r5 D H_Z)U3`)V3cݖK{ +\Y-0@KYT?_\\~߶M?5'X<5:1x~~Ji5 BoPIr)H( Tsι hWe/%s[í}CjܦD+/ϔw&'_E<6=Khu d6.%Z ygggf.fN!/Pu}V[;ʦi4sz./`%vBfe`Hğx}SU{0<]?;;ݗ?מg(3O@;' "Q: FC ~i4M)aEP!B_2/IYc[9Jo X5\=?B@巷Y-s~]V PjD (r @fP[G-߇:L[T'v%uJ4 Pm-q?,Nба9_?G]ܸ Ҍ8sǘL& &A($Eْ(s_@l@6M\RdK ɘ+;-tOqdU_?|9! k\X`݀n< r0 |z}]Uozj>/0osaYYH ++$@!!x ~h4ooo\WWWݻwP {(dP'kݻ@_"P@+0H@`xyd ~>j?VKg ,f@n?!җ7QbhFt׿0E3^_lՀ`%BPjwyDՅRexzze}tt$-ؚ999i5[p5eZ V^j,UKߓMF*ιva=.ema?Kif7 W4͠V|HFRϯ9'01,'I3XM)Rjd*ʎ4vۅ<%`+\~ ,5@5$B'WU L&IR,s1K}+LZD_Lu]( Ξ^e)r|])V( yVo.m/lZ vImK@>,X 'mH鴘 υ:'0$G/ʲ,siNh=|C $r`: ;' CV\HzmbE {̡$܏D8 `믿 \^^Ld}<w@K-fR%#Q=}2_3ey{{~1{~G<ΐ` 8qHE`?|Dfܩ~g}~- 2EH:-"/P,f\ʬ;R-e"E:q(0^e #Z4E0&|F[ԿC:BɲXH@6eYF5 *@oS cԬQgaNOO_\?^bzm8XWb UB/ȫժL&IqXUeYơƐ,"D]Mhq:jҺz.z~_P(k1^6a>ܓl ~BH/^?>PB#c@`XI8<<9?A#NuJo~'$ȓ>~(ٙ4$)=L&x #<'LKpMu./ʳι&(/hٺ.ڞ\R4MCGe9PB0\KS[j[x, TV 6A_C yXAy\_?D'DPEL%R5 -?2>烃ĺ_0_ %fO2=xЭ CV;F#J@AL p_8> (Yxh4dHW^؄°d2/$#1 1kQsޟK&,ep?YP\0GL!&GGGQ#^}t pKb? 6?Gݯ޼y#C@R3@hJ$,A7@:A%x(1Z s9@2q_ՠH?["4C q3e}Z &*@J.f1'-7eT~X`2('@2CN衇y>uH8?N_~q43G3'r /WWW~? OSI>IА(&)%mm\Յ\/5WE9@`D$yYf]жVs ?i/W)؞jIbDc,&~ɋ">o߾Ǐٙ|@.Z 6rLEvԀ  lp:!5V $ ,K &-u]'C|I>65 s뺭m>&^0&&ybsP&#P8FL *MY[K'LֶmKIDAT[9Zoޯ\r<;?sh [=d)ό~Eq]^|\.c!m;,?25i٠3A)u_}+|/ğAt:u>}rf3t:Օsa4,]UU $ F#FkAEZ/n_V8.tI1Uuc {de~#-^&=%.ix}RF53'FǬ\ _j(VR6 WUլV+4_,~6,b8889qq'ct:l6a\/cW_2Kƚ餌5 *`6O>I(yPB ZSI{"~+^@{l {(MiG<3oEo:ГyZ#)fq?[{_ /^ X6(d (C`[f9==l6ԟc2p@CGT_\rh4 1`ߵ+^k L"(ꪪV\Z4uu_YIBdi#փ{7$NqI`Hߏ=$.̣'Lx=~G/P54g# BR-fY+!(mV l4!/ӓ;'˥ rۯINwUU%K޷*/l! i9Y t5 H֐l IpM`͇P/ Z!#T}w!Ĭ*BP坴ak?tB0(\^^ zUUqmᜋ7TOs){z*uA r{ z/@H`oo/NF~K [e!vs` /aЈHWWW~<7ժgYwww6S؜~IA (A(MKgivl!d[ ~}ɵwuvZOAF }3b?Qeo ?^֦[qjA%e1yj2L>?bYIdIuL$$68sAFȱʲWU2f Zmu҅VF$ZyZҝWh>2>m}p$uwߐddQ R lpB }"$(em^c&WWULqn_Y%4+ v6 pv!@] " /rtM25|zVb5D؆z-wzeM*$#,d=(66\FIo_OSG,fc}s!BCzSNyYlCVv1%9Y8_] dR+)rSmH#m(X+/k>%4MeY[3$G}>[eYm#//Oq\YS ~>@"n5@YA)z!,vEM- e񛛛ͦw, ic%ggَ'뷞l6k϶OW/sϟJ~ Kc}*w.h"}nXb] RZaϟ? ˗/||,~JYEYEժNTUU}74YG*taωv˥Sޮ? %X;>G]ֿ?98wZ B^@Zb9n l.˲0,</AMWb::PwjMm-gk@+н^[b.,UË0a!L&nɮd"WV ςV_}?g/_S`Πyq{{b(eфU!LXE$O/X2Bi_=b-mp\Ph"pwwCaEV %&ղCp~{o9ݒܒ)V B X';7QY-# ,V R!k!=4H%m0@8v !ćd_.L m(D҄З,cwH誌ϟ?v[ !.Oos2Y5V!v g̅Xf&!#E20.qIH*vq_]O I Rѕ]dMϟ}{ Oz%>\:! @QZ!l/Ola%}c- (@אPcba0! Iąb061oR '|*Ra(|d!G]" <1!p'LqC De C*o*2,pn!]1$PRl_wf(to|¾軆}I31tc&Pe80TRTR  .ɧ$ނ}>z ]/pY^t a߬xjKY )~wG >!! CH t!ʈvǮv֢w=N|,-1)C`]Dݯ^SRl`&?\@u)b`> 1\{u=, Xt%R3]}LjUeCay]C|Rϝ=$O1p a8µ\~,W }*9}H_8ڱVo%GxqI'{&k ¡5)s ߁,m Ovþ}gr!NY/X>L7dd4QͱD!g3^Yp)>`%=ˤH{;˄>G}dH8 IENDB`DustRacing2D-2.0.5/data/images/startLightOff.png000066400000000000000000000532321360473665400214360ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxgε'(K,YN>&< <d7 'y)S:΢+2ewL2ߓiLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc`ʔ=iLc9/`ʏ(vwiH8\(Es=xǎ^ ǔ'٦Vk8Yt8b4.)_1|^[=Nr#ɭ$׿~Nn}O)b_kQOi1n4;$ޅƸgi{㎒Lr/Ƀ$?' $ҿN"$o(yEr3Ѹph]~A$L#gفo$ ͅƇ{$y$&E/(i{~OIf1]d1'Ig1I FBi$]`.,;, }c}M]")/Ibϣw ^ŝ?<^ˢk98\ ]_mbһin,/oe1((Ͳ>ZwfH0qY >w`EȒ {ʏiH {eىfىȢ6'Y b,,xo},qEn /Ҍa =:pm<82 HdQBwb,QOiS}!Ww\y7, k|> ?O55ou,F'jL#wd!nϑ'M @G,mxZ^?Mk_OM8 ! Z†KO*z?_\=X|${>%|L忞Tp!^Tsm6NXaqLҼP_S ~w& )036ަ:Y0R,ɽ44ANKu4˳E"Ȣre+Ǖx>KxD~_dqq܀&Q~^c, 4/|LB}LXoq,?ǚb[w} ?\ 0zXy(N_Ő]bdg>ɢ  Hf 140C9b(8'!ȔoiSVa8ˎe9vdQoӃϓ_ A6izݾ}im4<&henw\s4pxZ * )J8̢0^]:!>qzznBCK(Ї) >>4+zP\&I)L6iݞǨΠz)yπ8 IzriT d=$ zOC H8CZzi@ARҕd>4ӣTzO9s}}iV;i2P}*`CvvLlc7ssM vOin^י,t'mwuQ봢0` & , CㆦbFޤy#`x g'|Sp(.)̾YY@fKOs_s>L:}3{"ffGLsdg^*o]Fx NtnwXb{`ԟn?$mWq(p#ˮYΗS!y=14]} 1Wv06Ik c[1>"I_.\Cˆ*w1z<+఼^_S{x7q),XSkʰc=HCwX{7-̠BaԊb Yq vפ'ģ\ƻ4eYx"Dα2 @Vn]n3{9*uFdSM|}z.&,7b0~OGe³iR}eI3V<" 5X ٍWӛH5$be*F\fuK{I3P#FP4݄INn,0? =bD)T Ӈ.~ir0"1Z<.eb#*D2AḤb4t,9pz I9 ?\_V:yr#R;J½^ēĸH9p(O>HSn;@]yI&#'ta&1#<*ʰC`ՙ{.gLY|> 6۸,ښ$% 0Cz}˴3٤5 -~a1iZ86q]($G<}% >"$c1N0fe&W`bv,lAsFzaMg!)7jPq#w,E4fc9G7(}ah&#J>`87Jn6e[K8oGڏ1F`/ NeHO!g}';sZsӎ[ {ླs{ΏW4=oȘ 01kqQu@(I;x3H>Hc&  ҙ4vLp!hbʕ7⒒nsO>$tڇn][w Oim\7 Fίң\+,m28]v;^d)F8vw ~O҈kc*b_ DWX7{"A:8vmx 5>5B/i꽦33WQHyMW I g/i ;skje٩H+ǭ@' a'0\<+ϡINZҰ C'io=W U+k]n볛euWd^k]TC[Wicڪki#Dw ` k50].{enQA!n8 1xt1=.|56xX3p ;zlkt˄=cϔ{nsϫvXYx%ף,! 0wO~Q^#$ axXڃdcC iF !ՒlE먌C I+W\iNF|vQ NҐoWy`|9_-F#0(`D|(-v@{0d/Ppe3D1Oc[. ~Jx~w >(4}m J8)빃[_Ղ+mˌivMg L[Ф{^ZlҀ[٨sBX Ge,c}6L@%Luh?w؇e@Y /TD\Y`n[M |x I͊@MR||.wv7i$%%a(>@J^60xkV"1 + cK)m%Ԓe<u&O6o\#pe @@*/NbdYidm nL"RV鮼?]*g7 6:@ҌgHȷF%1:?0(wɈ/A)0wfe{f0{D&U8(IﱸޤwT\aNT9撦Lc=Wb\j,<8~Q1' 8^]n#A3݌O{Vbt l(i=ǵd,1ix Z FJ8c`䲩?V`*i Ë!!vz3JSw/[\ " ,Ѝ٤>s.5'o3j9dQT)Sn#" ̎ Ş.iU2  n|{]ZxT\NSZ xE@UutB v Z %!t~R:NVcG?uq"<]6WNayrqx`A n>B.JΘ@E]}m<.cT=7iG .2vYd؇{k=_sM=5y`:| N3 bx7J[0p ~Xp-(X@1"I`UuèyNy]9i& l(xDE9y2n^J&Y`Y3;<7\z0OSf^LŹ^1{[]tb@%v=XnyMǛ$C9-}% ,tXRU-_R6* {$$Zp=}U!8 7 {f L9'Ն\H?F(xCxȃeBj h PQ |S2!8׋47bi ~xRx4P!8 I~sĄ17Me`X-#!2 '!%ˏXS&-N@WurZ{iJ[6{CyE!&.L 7ebt4 CUAӗlu+3vyvJ}T;mZ',%-:y0iƈy\L8BEGlQpX#TvW?q`S,7/g+ ; m9#"O.P¸izsoY T; 鹇Iq>#\fl08)ϊ8.wZ&m1U'i̳,X2qj8w6iJ4 ;JLzL??0fF٠Ē4/4Y\IIuW41.~݃89X+5mqKʯ|.rSQdnV︿.Z$=wN4+Pzƶۡ^tq@*3$Gm+xx'LXHحS;*4YR3;d,\s`cLB;-qv\ ᓀLnXOV0Z(lZ%_,"-$ A;|m ⭄Q_4Fk{{:3atcw_!3Au_]3#+㝝pxVɦkɎ*-W Wk6rma9'.&|{&YhNXAZs=Nt~q\VC,OѥJPwx%L % N&'4 e{ -{zz70nC0F!.ӂw$}Κws^yʹ0 !~w{)vobޥp xA\e;AHAO!MTC1iedP D.͘#e(r9=GFDGtӔ뤱ة} DTuI PhcFl8ӦARUw_.~wԚ1kZ2;C']A:J;gOtI; X{$=ywe]2(?.<{&mwڼ;iy k^̨f#o U|sMOVMpߣPHt"@[(x `#ۓ*D!Qk;/O)4e.Gzz)7K:-]b^?f!F:/O/ڸ6+ɭG1Pb vJOP NNF4-NJM;!E|<n=]*qzVJ84iiiϲ;EX{u{=N<B[V]S+{*)IOt 4|\J\ŋBIuwUolC:}/9Zgf`*!qAΉ ^eI%4㲲+j~>xl{&mr2Y31͟4ax i{Q.ѻ';dq^.ՋYׅPPƠo8i9y.箳b*sf'egxu5` ;~X*]7URw}Rbd(\Lp|c'fJܴ<}B:(i$7+Ps Oc*pe @gCuaMIꏸ-}eB\ rbZ=wK7Ytfb9]Dv'1纶:IKr=,;gPHtqkl]Fȡdz5HZ~~M.osɪ{ r ;(F uޡ>ǬD^ÕƔk>Փ$=:1t:Lw*?<<yutҗԑx 0 \ZS ɵړ.)PF RKZmmyZ`I3ڷV4<Ӌ ^f`9]Z~[!uM*,11ϲϳXX`iuݠ4JɢH׳(F/6Ս܇_޻V$ҽh4!s(No{I{O2G:i'g}߶ ZD5D$J F-mﳱˎHJ@?p/Ҕ?<2nQxĶ-4ITsI)qI_EIĤӌӨ][竍jW1ݚ0Փ\dC@l+.ݬ .qzPc$S9D3Lե')t+ݏ!i!*xe q\p< 9~y>-Jwqh~.Ņ+ϵkc4BcW{\@mXq>m$mR1xpṯs9qs}@_JY* 뼇PpTEb&)GYv({'m!J^w#?zy\>B \],izT\-Ǡg:zm^>7?zQϫĜ!Ys,1!)Gtqy9GmP?8[ k嘚qn&z\1uQ6y^Ûͷ+*q o󀑰BcgJϷ1>>q1{qh;eLE-Ė*/tg/S`?+[nS}8rF÷.H+?w5`f"[:1BӭTq 7@,@=9a#ǸɁFf8Ƶ ۰";apɆ:KsLvJ4!wchb1фYqYX7h`8y\tdڗbդ8p*#0Ñq !&!&̓q#_cz7`V< Һ yrtm1ue0I]Xs7smyoo4ЀVCK)VOx{x5O \N$MHgt1"[\E !oPG!0g>潮7C:bCì-Wf}!x>#k6d̲3 Kkke@(v \1jX( mObɎ${|C{*Q5@lɱ(jqkv.ݮ]gQ\,`(&xɻ3`Ǡ8ZME7FAU[xBPgc}6QZ ߁aNH\vlhC49~C]@3^l~ =Pp^BGquu2֭:ûSU1>\J\@㉷ӧԜb}̡}tc#ıA됖ZJJxT[=&FyX[]f90wm;W@e+eÑc*ͨFguX/-> Uw(߲k`'ư-޽]-Ȑ,TT{ x:WH{4t!;P`\7iMu ytFNzZ̲~Q[= T~ovZb& {W"ǎ]hHأ{h.;Fyvխ,BzGpB1NuBcꡰj(3 ~?3`09ϓ9-Ze.Jv(xVQeѦձ:\R>=) EvWǺB]Ϡ`م%n=FE7^wQ ĝ{G"[<?UrE!JKѹZpz򝙍g6KsqI5 )@0{O=첓 -F ^PA4vU]wB8v<ޮ$PH//1Gi1M'FCf< ^dz-a$܃6g rM_,;g+GO`M'y]=Lf6);RQK cm?Lk4HE1ev @7d!yE*jbdq68q5UnV+.E]K&;h9 HQzZjȮP$-"Na߻cgۡC7 qX1>g05簋NùV%I@NoL1杧YZ=iVk3ss ǭI۹7(<4)-~ 8ݭ}AxB1|(P(h,fn {K7 C" wPu֩f>IK_Rk@(Da5d6\KZѯeuzѼ첓1csbC1Q NQݗu߸Ix clyfU#4@<)v=Z@غ$}kk9Lu~Iw}s f֊7S_=3cTGuaĈ"mP"dU(YiӨ*@8›Dh.;i.a͍(!SwT6\!U+0Do+?|[aU0*ݐ!@WEɈ݄C2̆;H5b|{Bng΁cp`1^x ;0k'ǀUmf.U&;hhS,=VӀV,J^o~Fx nAʋ4; ߧ+PX%mvz#F<lj 4zWEѸmgBXT~ 5Oj1""v~we!&g[ťA_IߥmKʟH6 _%a;K̬c'%JW ;;ii5vZ"2j׌HP`mU,JUSxnZI9v@2(&UfbfҧN}:wutT\@$߁ӟ`MTL aL#xwԵvQ u[MKk`vRVn;F<* `gezEH9Yu \hbx>&vI1p\EAh"a Ԏ o6+klˍ1ͮ)%Φ_ !.]7{P(I,j؁Ӥ` gg~saQgj-SH7|Ψ <5='b\CرiFɩO~|gVPx>T ޣ co">rnj*%wIv2]yoXk0v.7t.QA[*)'LvmƖeᑛGQ ϸnw]SUo7$7VHzE2Sӄ!w0W{W|\q!4 ~MK4`vd @ңӦdݕb1 iȇqW -[$ p㝜PRkͲ9]nGWp% @E!ԚŰ$ȗ,9k*`8AcF>4}IU6iʁrِ@Oj1J zOGq\m{ ކpOҺ1yIxbdV%=o5pư2uj%q) ^#| (I_*γT䰙8tC hx#-&uj ~8oV }ܓ s82J<cnIF3ښ7_qSO0BAJ0ÀwiL?<@[Ùb) 6aҡًKr% @ғ\0kf0S;$+v)ha  e,=`r> R}S\T:rfvƃ= y[kĘJdMȀT^H 1NID5R* !wYZy 3иwЅ7)BIC]FE*|s%5(euG epvbT=y/@Ɛ|+ }`}d{z"u8?"&S]" 5"ˌ5 un>f` CJe2b 4C Ql3,GՓXz%mc~W#ޝv=ޘڏQCʕ0I_ȅ :bIDATtt^#VT Infx X%=Yƻ(a41cizc!`@)8{Z^Qq R g\ِq^r0ƀw,Y(1aH;'?{x.B%ow ‹p EpjG_MH~x:ӀE $}6QҒ^o}uM@M*&H+hx2 lVN,@qi)MQ+񒶋ԆFy9Io֥p!|Lc4:d%}:ʤd)yƽ&`7ϩE3^7 >SUq-ȕ2I.`um'~EQ6 4>K'-\-4yзX``( p_>k]-&2U1ꎇao "k24<v0/ xᇴ<vndx<ЃM\"&W$mw=_ی .zy}~7f(nyV8mb'N#LJ3H&0=_ ,v < ě"'7!e`vY@*`0D1˜}vVěN &Xr|ruAw5YmnT q5TW\cs;Y(E<qir.[ {Z>áI>s=.Jf7)N`kf ^%qU 1Wv*.x͛-vj(o1i-FM[-uk;jˀ׽ƾ5Lk؊p0ٟg H^+8[yׯҎ_eo - a[+V u-.]Gf jk8.), `.ɉ O4&+x;z0u2P./pZr2gw|k|`fSfAUn:8Q4hjWM Qݽs,Ӆ(~R{yTB35 0!N'{``p]ܴ z+DV;Oqkye *\lʏ|E추,,%j@!_KzD%(!3 S1(YT^K9/F@\-7]Q7E gi5NaΩ%Nx(#T_<{By g(HCPST*ubE{Ay~'i[)'4~Ӳ5t=XT`2 =iƀn@̿:`$Yn9;ݓ,4p^ji dۨLi%{`!VW~Tl M0d8QrI61΅7}di:%V=1fUY~U2Isp *ⓚsSmdU6 v1I$6Y+@<[ԵKhL5&mf^3a 3\r`*·CџuNCNw!7*DŔ%Ҳ+uھ(eo @ҧ0nVwEtZaUr(>[dp>zㆎ\4vUrt%Qqi0#A_C sW;}}R|d @ EGz΋8YSRٝ,;9 U*Z4 !ȫӗ͚F56yţ|~Ũƕni ׈Ga<},=Y[*{g,^1)( +AZ-1 Li鴚$PJ&I`S35a.׳ܡ\)"Tw,Fs~8R @Me8Qzy6yQrJ&% w1}(m2 G4XۘxdO(*Tﳛ?iY[Cdx!n |Pa=1sY7x|I3?6~z1<"\ gg;c:I4w$}c3=`/&x`q&3u1Y>50C) 8f90Cܫ5w؁u5IC!߀_`|eb1 m(1D8k#*[e CޡliMAA NxrT'nuC^6C ; V5FVmLJ B`D I EfK3 4pU|UXE̋ci )-EgƜw}mT3H=;i*?{xҐ"}Im6bU~~+xg cIOË!.>Re9L IZ=2 @ųTb4 4{ǺG PJQ=|Amͨй1,d"%iA"(S1]Jk>0 n}/Ǝ>Wx?NǀgUL 1ϜICq ŊUY/v|vpz0 ã:)Ʊ^j-^OM%aMi7ab L$lݏ jǡj9G(¢ǥ'.~v\̂}E~I_cNHTYrT߹EpC@0#H.€y8N#5VFjjv&k3%La8=sJIz$ }iI+3s?_<] +aҰQ p kwhx.tg|_zGBfcz3A Ɇ@Le-݉4(p` ʱ9RA` k 5?fQ*BpQQ8 wst#V`X﩯%SٿE8=t˥/pXv|]y>z vyׅ?Ê=RX.FZƋ <=sQ݂_J}2 7ȶEe@;]iWukx_G F4G*#9$.%$b:1 RF砙~ocVW΍βx,fbZn LS:҈[qp<ƒ)ߙ2h.H:aBCFuR a<î4eƃ 8 wNmǎx8´ #m:wi8fk 6b P]g15/iŕb~@~LHc uy}J6ssvex;`0yB^ D2 Wf7ʊ]0s!`6Tv Fna(re`&iTO B5Pg=nIFnd}2 @l릕N`ͽhRB:xo%C|sU,4?sq1$`%?R,[E;eT i_';!dzcC=fXA7[nz~kRsqd(? k@N"3?wF(_Aͧ7ť(#C5bL=&'0|=@%1=C TJhl;ȉ>s=w{~Lȷ->>S]I+ kq1/{$f`7ke##ë^>LR?/Kb"Cڎz͢te73ZYU(8yPj*}1d"rpkD_?/ b>=q9;Ӈ7tQQ3R)qATu\!3 D#Dc0|\`u?#Kn4/Ơ!7}UT!kb\/k碜~v ؓ^3\MeY0pfs׵Kk陇%OT>i~%`g@H5p*3eQ vFz:8HՖ(" 8zI ;8d[KbCӇf䡈'i ڻl(ڃ'ٜ ^ \<]+\fͬrw!uWqd0u7701uטT+ HY9.<%nI9h~C ѨC)WAE4j}(iG]|0V{)CQ"xopMu=cSvKar:oS'}Y|?2 UV.sM]`e*~hBӔ)SD2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2ee)SX2e yL2˭ 0IENDB`DustRacing2D-2.0.5/data/images/startLightOffCorner.png000066400000000000000000000536541360473665400226170ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxrWϥHQlMett?ĹlI@Rġd>D`j#RePY l`aːI$+O!CUn+ I?2dw}"V?Z n2 e(a>-Cl ^z/C *C CvJh20 2 P!;,nie0ˮCd7 P!Cf50.C0Ȑ?dv0ȐO6C|F 2 d P!CP 2+d P!CR 26CCt0ȐoM6C FT0Ȑ hd P!Cl?dwM1C d P!C%`(!\g0ȐY?dhC@N`(!?X~2^\K>;zu0C?P$zʗ!O~ RWd7ܜ_\$9Oq{?F*K04Cxr%oUB L7^; A|H>C&#p5f8nG ^a6C~ī ;i.,Ȥ$yI&y=0L$,Q\o`(?2){C&i5ϟiIe2w2)$~4彜k&$5$x5!TFʏ6C73ݴ~&Eˤ˴zd2^M[??"̀\?^;Τk W*x8p+? /nULB4V뇙w2)$/tLLLly&q4rܳLFÆ2Gp`!,XQ`(+duU? $e?K&ˤi}sv?!p,<~$yhܜݞ?f<ngDve2 aK#LKÁHgrH2)|"l3i `Ҳ CãL~`(<+2 E>cUfka/fLf pqyρx(P\BBc3+zuI22TyOϑ{c?w:)0KV̅D#}ʿa1 tܳ$VCNLǁ;Ϥtx͟y;FZy=2O !ɼxiD*F0 6;JU6L{%GO2Ҕi@ |5K{P2)Ӏ3W~b8\1T#'lǁ||O_.J9cwӐqVFPurfZ=Ǚ̀ӀVw~C^IGѽR^Kjg\TsajAnˊo]&j7DO)E+LF""(ȄgiF|/٫!4 0;ػe73)oi 1@GI5[ +?L e~~Ҁi9@:>:Onݫ,1|Jq%^>iLGnze|'F#n >_cNEAX8x}Ȥ3),0x*- \Y6(!eO N+T 3Pe샷eSx/z.pN?C5xU]<4/_cKjXՕt[a߻Y6b.䩤f%0.%ڻLne#jD2CGcbc/5;kQSf=˅մW^0?1irW6AjLNBQVhqF l4oj )PLϸ #K )meNJ vQH Kp LӨma\X|򻮽7<暓놞R@WpApΝv'9hB,qxe^;Jj u Vq&O|=%g: \$pNRNS`''nNV= Y~u^p[=^AR␋zf2meeEKSڇ,SI?KiD/ӊhb;qOZ(û$lT:ytIZ: jd>>1A9&gi&y4JC \[c@z8K"l{:}V LHx;;2I)aջ,[X^UX3fr?-6ˌÀaVe'.L+ɓPhU%-]h#"i7 `sۨ<?5Ňϸfarb?w$Lx@|OJ5|'j} ڼ7y&4KPCG`Yy>bz*n+yeZtJ+4?{v# jg` +:EE@c$ɲW"FQu ) 4n`g߹ndy77l4 0?L$KJf 6)<Ľ^y@:h=mwBXEv֒UKrd(2n62º0zU6핫4VZi,Q,gqkT\ٺ^`"I3Di~a*2FJݏS]9~REih4uY-B9ڊF~؟ֻiM4 ,BgQwe]?輙=RojӢ (5{ cr)og10ve~e?w奇\3cen!9ν7[ToʋV`{:q8LW%VQߤ)[sARzI)Àmsi!E&nfpaA㢻iٚg Tn5 _{A=^F`g SG nj/+?,2&Tݩ9V^R;L !~ ~ACCaR..2wՁQ⁘MYǖaМ@ڼ϶0viI Jηi˜{`x,CO*+'i]< . xT4#p/HgҸ£iUޥy*[oLuyݡe4z0)^$זUD{Yxq̳thc`.Bls6V~JEi4I.D?4`:g0ĘnndFW BJeZL@ A@xgѠ ?L*&K@W_ ;@u|)2wGNoƦ6<!n˾ Yry(MJm8+HBٮKZ}K*yV+A84pU73e!n/ |G "%~@jo j]Y.Hb% p`d fߛ˼;rWJH{u`R,dy)f{b1*TB ΄.({ $9 ݁^=/ {; ЧɼԂ(J\d禣&+17ja, g>inU ֞2df% > 4&ۃA>@̜շQ$KzOEVg_+)@ߤ!ci@)~ de'MIbJx#XD_éTp$L`rf4sg{L|Wa^A2(/2e5\~nl0.3NVXEyX);A4"} J49Ũ>C8*|b \v*`d&P@i}e;{4~KmsN%u@ } 1oml132vO>V @, Z, %e]pPrmP}fs* /}W+H1,P-Yӟ6fIKfQh[z[-YWiD/Rdsy;'K w-Y-*{?}5H5p\g'mkuPB\_V;V2҄J䮲3IG0=6ugiJ[[ˁkq& &ƭSsܔxD P'tpR 2ɹ{87c8wd0Ch⦠7< ڒ I5IΝA(ۤ=3Ak4 q9D:Q r`bhE=Ͳt>O68/DK|fGn<< H)_Ayku3POD-? ?J @7^ndhӃ/.e'i]nwZ2eV݃3dr>I#٠xxW xHOyt6x2h0$> LCC C yb#HzrE.8'%a4'Mz%TC5fEKV2-7ZmTӄAi+FzqyxĘ9 A.B$ r+31hGi Ɲv!bWtq&r`X^A"Kk7Ohd13=aSe ?N9vo( D -ȲaA7'VL^ 'Q|b ) cùD68RCaCdT'2`27x1.{}mS4e&,ý6U6Y˜m^}qgPTv<-3:X)J^JVSk.q55L7ͺoz̜0 b; me+!8ݟ%W>C 2 /zX)c Ng$F#f^yAvxpɵ9WQrN_1w;i4+S}*klkp.u"n+*s|u?feA1{"TUd?iP5`j  ,M4mx3kvZIVENl7Y=M3RBcYkzR'KR% o(+Qw~c+o& Ka_ij4 u .Z=Z쏴B`wצ+ƖL h p&ݐ8.w۱?.W)+f IDAT'*K2.(ӧғml|S] T^IY2Sْts| IK:J=>~߬MR}Va}H'(C!FRˊ=Rpҫcvi"3qӃ? 1tųefқ&\T+}+Ӭvb .⸤@ yE%&07;(:wVKbF㡎fcXdny7l0UX]Vk49iE*@T?Iz̡NC84Wؙ gJ;:Īb96Z N{m0pL5~@6䚴aX87HB> 9&w :F^\]DpCQ6G{V̺Y n˅#fCy[lt\U;`LP0NVr/1|}>Ǹp+2't3J̡mYV0&a8sO2@߅iu 3M|}MYz*51ȽG/6BM(,cQV?3=($3Oa_j)1(J | i0.9u/>+QMGѸxXKVbVg nM]'ށW^'5F$-^R}Wx$UwƵT-*~ن_n:,i+a8> JDg\BcX^/cC%Q?K3vxb4dj&[]aWR$K/>@|p>}\J@(f6{e՛'ېk/vFD#Z;p3Q u'q̓s(;2بgQxu_p0i?w"kyx[Q pm^)1Ys{*B\6WPdXn,N{SM^M#?Zn^ֿ 0=MqEYQ1 (y7uyh;ڟcg@}؋4w vҀ^{ \w8PWP@VZ3`йpI`a]Mʵzyؼg<%${P=iӀ(UbV_6Ȍ€'Y Є#Ӿ/ξ.{ڨ]]d>[p=TmLb6pc]Fo߮elPd@!coNr$V..6zky,qY! b5ИE STm ΫLJ8au(1mȬ PހO65d8 5x;DJ6pSzPXqڽK`  ck!^^:T[q3Y6$K=Cus:A2P}Vp:# !P,d}pN2W>0 <B{b0Nz2iX=*8FqjҾ6)F sEn٧bY6$}`. k>YJ^\CRO,/bGh%a:S4^7LT.U{ &ϥ,)p*M{:ωDuj/:4<Iu3.J  `|rݬ赹C~upsx.Y-<WF;dz+4$.~Ax0x4!eY7EZl/yjs˲XE@| Wj`VD$CJzHk>fAlԘY. euÊSSg FqᜇPwoxa*2@=CS \_!Ġ+`ժk&>ϒr]yIk@Zuy}jRݜӠ*^ND~a\ϳv?>WPudc yw2=IIa<Ȳ?㟩&Eǹ.2=7h}x Pts7Ku2)ҭL |އSrݔjSH:JBǪ>%GYViʌBj'I9W~/I<<[r=a\{W'ӏcx%p]ec @ZX<eóZ^_ [~{ ľT>a6^jaIV}]8U7b4VFrOm`օDFs"RWi2½u 55}`mՑ{F '%? ws8^9FmNrY /*XWE}j?J d @9P\ [_vh P^g 1Em}Ca +.-L8nɊ}5|<|ܧ}@C=WW/]Y 5ǹʟl@W'U5LOJK'}{5覷o;(+҇iWc]3sMu>p{;#Xɽi9q9+vFPj'[* \~L>uͺ}_T.@>~iwϮ`("2w1?u!U Qg?e 䩡h\|E>{ J微ww2<ɥ||GF f)Q{Yv{!6yhEΜp˰C?cps zƠ-QGEe~ d."\x[p`xU<;w#TA:Ҟ?na ʟlHÐ4eB%֛&n`cه}DžG>D}j1wrN9g.B1jɕ>, HLrcrY躹'ω;;{Xu,e[r,?ۍ_fcO}X >htlÊek<6< }8^O1k10+ɒvL=fKq`Xmي[FJz<}t\ `V<-Ƌl8߫s?^(x?콲n{T2uX!qqSdFm)5 j)k0@ Fh`1( z5`.\;r/WqtR*gz];W72Y*Ñ5Cp7!!AbqN4_tU{ EH#jM+[ۍk9GV:Ykׂi Xx,p'|F6@?@j=[*IVij+I0FXc^;&t{H VOcbH50dd ?RCVnǻV<#7 eZA\*!䪼yAD@a&&Pw/(dԁ^Iݐ{TAYRzp0ޤ]^PufFƝ؈!-@p&/Y\EMV\o5]6 5.m_HH'UTί~ؤq7wY'~73}ϴ/i7?@xF(74}AI00;9xq1r|]{ԵjaPb#b~X@*r^W\%Q(׋S ju7iA]'6jKu6Cpi )/˾ Pقʋ6 Y 3gIr }zk/>oxu]]"LBc6-tv^ť3byX+~* 5ISLW|FNCi@ p~BATڋYVZONzo4A<0j^/!@%0p*wi 1Xek G$qm[se 'ߟUzpQ @B߉ML66m4i@ʂjֵvqz_'Pq) 0Dp* s\8 XTrfO 6$O6$dJa*M)&3gߠeY.!p3th1+ܦBliH((>L2)UMaz+q)_@2(&,،AJKԩO 7IT,|>8 'TZh(/y(pG]KnW]PxĤ #uhw"@)J;+ + 'ۋLӡp A&˘T`@p,Rn Jdi+{w aFVc^ll@Ai`6-uZ4A!hZjP_nbL=?47Om4R3 늁 'kbM'vUt\ܻwYv0zs-mjц17zHiyol0吠C_MާB` Ve%êj}΁Ɋزt\jVz3q3.lmM,4RM l/uQ$#|87bx7x+ޕďe[(BUZ<$=K,8?=X,is@ &a븫چq[Y1t8+CJ׵( Oں8E U>_ݬG}``FRO@өvykLീ;bG>"mSmF4@<U#i^UpXM5ǜӫ7UI8uNGY0C:f jfRlC~ yw$d&6I$K,J5 sUJٵBnƶZ#,sQgWSvOA]HsC5Q7G` jQ$Nj:cy/ 9S yy< m [ax؈=3YF^9Wdi`\赿}RZRWZ / UHA1?Y#|x:܄Օs0"<1<,B[Y s$nmlH״.UȒՃUKG30R<ѹ6rjJ}^Ee5 ЁVCM&:̲88׎%‰KVVN9Azv? mݘ|}o:dXyZɵkMq(Hzؼ->huall!uh..^xAIU#H4cnr H[i(r8?Oo2!diClWEOSlfmpoǀ-@qZ2!AVv1s`YPZnzz[a*m)hrǙW#gMSVxtt|5:gYlB.c+ϟi!{:IP t.Y# t{b\ Ⱥڈ;B= IfZ&K\IjN'yP75lX).+'i]o\*γ'pTp 'a`.3 Gk3 e>hJd4C?!'Sҕ`-0+g@~zeQIĸe o$;2ʥ7o 47̠f&3<*KKji>u x<(+d[+}7+׽G➘,`Xg2$̺sZH魀7k4IDAT$Yfx}I@M2ny2ˎ0ŕn] :ZP РT\rnjTR 7^K^*{Ȕ`` ى^O+}ےejL#2!mW= 'n BW@U~WBe?RLn '&I1kP@<>75Dc=ʠ{J6RM0ˎ늁V9|_]9+ōlĢeVdiu~ҘڏbBrS?,SiNbd#.vxh~ƕxI[&kCPny9VNS yyXrgiZ]gRۭNGr31l_ׄLớsj0ͨ &QbxyҌ')Uw&O$KwE6" }44 y^ЉuLA ,;c( ЬD۸ȺJSZaW*%BN2 *5O>ty _UvL*["_'[g/t^nx8TǴߵĢ<=`0-7X aX^ՏM9\zرJVF֌ŠeZ5=՝ށt`T-V< quFe%5`cE5b^90);s 0 QYe o@2ޫe^4l`0^egm 6-g A#.W`PwneENJY 0̂tCI]"S*{5PT@<f x퉺Qw&$F :~7d!,S(.cH@~4~/NƭWOŸ5!p<{fWϦ|\ Dm?IRr`i'i3 t0iӻ8H2nYkW`ײx *A۩^ˁ1U|O31˰)T ݅lXH½:B͠+eg @La߸n juCO'}TWVB *9 p Vqʼn]4۴>zm0 Uë2F1aev/Kŭ"(vE܈ki.#;eU^ 6N KfM#v_Z@rJUFRQZ (0i x㸏،ۋ.4Y[*;g,~(7c7Ь=6_pCe^MW)9 e#Ei\~.Ԥi*<U2ʅTWn%D)J\s= +W(vTפ;JmԟO+ QQ(.r˲5$ c΍4 * f%5YB N01]s}ߧwmN} БJ1$s.\Cn*.mmCeΜ8ݍ\G~Z1Pm+22+z g4%؆=gB s<c‡p#a,ą*^-x8m40kVTW_w- b 1kO $K4 b 䮉8OR9'kqY էS#ttmĶR|Tؕda&^4Yz2u9* 8.V]P. BU)6XQ $m+s 't6``&:l:,xxЮ*2 ~(=huj1|̈s!oJ=hV=(ӊˤ!7 uUbd]ǝ6XqsZ\;/ ; M\z;ui@O !a'v%&?vA`$.]d#~[Ob@ (5Zѽph:ʫua{}1v|7x?nc1`xj]a$5HϜI3JTAnM+ݥuڊ 6<̃kQcUե4Gኣd5Ŗ5Br]}cB)5Sfi(NdBq| xe=.=2J@@V\x7p,(L9L3wC@0҈'YvIX5Y@AQB@B%ct#V`ے_"|BWۙV!:2z P rA:/YƮ½zjDiC/)UU,w|jݤdoӚPÊurFB/Wk^>d/ubFJj_G i@K^ M7%8YfJ* PVLqﳌ BSc:1kUvV(;)5˼?CyԠ;iYW8 8LBSJw&ẜ3'IZtI*L) 0p208n,qCLF1PH_ڲ# =|éӌõY_4 :m=q X;؎`t!{ cd$6ny^7|ݗ՘Ti:DA5$$qi@exv'omOX}'IccӇu^^3R @*݊]pZ Gm`݇~|(a~&1k;eG2:;fpPD@L<l=;L 9X1PrAk]CCɯ p Ć Y>$ň"2{Ќ+֣0ȳ(39w] ÿ2 57@){8E/~:`8o701u62r=e ApZ4 )F@@C!MΡĖ|<ĽyCea6Pj ڤ+\;vhZy'Cb\`Cv {9FC6K`r:S'fwd-UV.}뱆l 2}Nh2d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C 0d0C%Lr/dȐ!?\n&,e IENDB`DustRacing2D-2.0.5/data/images/startLightOn.png000066400000000000000000001156621360473665400213060ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxv#I4j2PݥZLΝ$D?<3Y};NT@0q빭lٟ}%׸ki+׸1k\x`\zk 3^c׸5g0q=5q1k\x`\zk 3^c׸5g0q=5q1k\x`\zk 3^c׸5g0q=5q1k\x`\zk 3^c׸5g0q=5q1k\x`\zk 3^c׸5g}sco,)W3?k-c @YǓ^cx&o-p 9#6% 4[0Ȧ_Ǹ}nP7x9N ŲmuwY?<9mJ9# Ǹҍ'=16pOv/KvC9dq[׸*\5UH99LÆ0{9"FuJ8 $ҍAI@Ц:%4Lu:c0qE)LxSxQذ }8k|V+y]#Z Es(Em˺u]㞁:|`\k O`ń10Ơq4X-V1ab#LlfPx6S‰r$HVѦM,,,q=yJ8k| _,׭1?3xz ka:%ܶ-.<Mp[!UY%~pG&܀ cMJ8?Ne2!Z4c0 ڦ@RŲ`A"H#n1IkQȚ>3/Nn: ޗ%^mfp#>ǨRBaQZ9`0c]_;ۢUb(,L eǃ1d2@_,p8"˕aɒ{\5?ai^[rQs;NsQ൵crƥز6:mvfJ` lhYns8 Ckk䌂',y=."FXcPXMﱭ% *%,bļiNI?yvk 5X:Zx㛔Pň'# '{~?:f|l9mqCT1(sWZƠcŶ1A`lsO18,(=,)ipZ8c!-- ϳ\c.3H7ؒy  mqǓ3]q=^89c”kGa{l8;n3~"+1%/[ nS /ˮd9R1g<ӶŎ$ugSCBM UJ5N(Ap#^Uuzۺ|rN6X{ }8I 5 5uJS.rX$c0gɲ=f,o>؎ >RO@</o.$OYC(p4Xk[7 N&Mc`r\s3-miu51X8" o[6 >VZᢪla(%,G<>߯5>׸k9cm>bDZisjr !S tBsqaL ? uwdbUSUus-S9Oߪ u-U1Xp UGP~.U}[6ggwb #ϟe03f,3EbF0`Ќ#B;gMA Йg(!* 3}{.Zc^7!{kzaNUXevZczdg›l!&Q{|Gn\n z.LY SPLjEbn ;μǮx_d,b1ĶJbƑ뻳׵uTZCh؊`jk vFΘ-!vX-^QoD=[HK>gCJ<5 1vä zD}\4$jM5C[T~Ji׏9ci{jKpB0/K>8}%~0G7 V1"rS$Ux, 9Lj9,kA2c@I+5M).-%+q#|1p8+;17`lW=)},9で|f-Zq医%g5{&(}E R gcpN-̜ԼhN 2Ĉ/xfO Qh %rZ ו aИR/ k[s!%ísB6]J#ƧA8*!W1bɬq1 yWM4 z v#ngM#8.@Ƿ1,F%b${e*ݲpd^l-0#uFQ9;ǢN 3Nb$<[1kT1A12k XH $aKv2-K9,;Z2F->}8'KqCʫ7LqEԭ* ` o$l xֳJsܭSU\LWW$e7yG|m+V__1mc)rƋ >}eUaѶhУ@@<$bǺiu%^ڈ)2}@p5 >u-x U2X./jܱ}XZâ&;,/Y jH2[4<(K :wZ8IzD `3nRU.Fxk,EMN wM˦}[f SEXeϗ9wVN qQUkb `i-^#*7$Ǭ*|'iMmqN-,8Xb\Hb1/~|i)PTxV^CcR.Z!ĈmT9mqV8*"Qxg1'BOZ{s1i:D_.V JC[r^-X!wK[<0d9⧢+Ŕ|3A7ӒHZɿ^E㥵㇜tyX,tӶ4pb3vEݒ_ 4P)!`-D0T=.YՐiERR\5~욶K={.g,qolmlSnm nC .50b5'{쐌21pʫyy#1eyca-w㝵xcdV~3ɄS?`Sь kϧ!~Q[k!mFOH&Fqܼme Em 2teW!`@0/k8?f̶moy=0HXS,Y!sNs?X/X_7 پm|iN&`!!W9sJ8KnO$?|=^X#<#m SM൭Ф4r+pO@Y,bda|lJb%0 tR&,(:RVI>EJ8W1mn&pMjz5}|A'*pK+rR…w+!g4 F*N{uJhbę1R[.ԣ>g1U>*)aRx^ta_Cc2Sf'-9V*s",jÔ: |-{d %H Z+ c>8]RGIߕ%M&^ݘXN(Q+)-o?Sc;6RnyRbӿ۶6ym8FM (6oiu4c fsMyJ2r- ϛ6B~b͵c*g3(YʧMV+^㪪DAϝ8|N[( 4y~Yȍ??5gx4{-c. =ojWfa1`I^ ,C?Nd|'Dz/g VR؊p6'L+yy]C.mNZlWL2FH=;3i7{|^F}o[FH,SSﻌ"dt,⠋kH1f<ɜK%`Ac $`ʰ/5NW+<4Ȣl[$@iDk"b1gSxk{0r Y+a!vClD=kPfy EKIl(͕X*F)}lbOgeFfm9@[i/[Z`-%Ȇ;n[ƈO'#JvnR§ůtazݰf=|#V1JO [cL| IDATbKmQ,m:cgdSvq =1)aDm!0-\>3DZ-'#_yWV \P8A5|l9sl%8?|?7B&Z1йsz659?j%Mdx8d.ƠwZ,ma0|kFiUoHdBh{s߶8Y2Hȣ]m% z$:WJSVgߒXLAF3g[zH 4Ɍb~SgdٜpYڨN[\l{y7`wpnasuQv]s PUJK51}/6FN%T VL kQj|X~XhBiRJk9}ř!9&,7e)S~[Q70s#Kc Kn3"I{KmxߑcC8-rN)AE@Ժy]w-D} 21A/Z7o4GC1t"'n NYk-*ObC> Fm]$(vdX}:om:HIJ |@_5Si`\+HI:D^tId7/Rdԅ6) 'lKf8kl6\t"IipٶCly=W^%>XX1B,G!t @*o1d3vM 1lfKpB7滛 )_n vvk"d,ޫ,H[g',CQ1O d0@<4 y([IS"$ٜŨr'z7LxA? $d٘fr4B:L fYgf{Xjo.hͮU] #,=/n:"Ptp/C6iL<2oةjN )LsO(a][}׼aX+^ЗA6 >V. (@{5y 9>kp8wN91e1`}aܙ?;N=N$%,Y|lPxTI*LinJT~ڳ_5jB4⎧sE!FI+nޚ-}dxD ZI31Lj|N|rD$R_\꧗!v=y+Ro8`u9+.D'YڝHi ]{{l-bO_X,~ ? dz96j }`s{:Ck^(i2 peT)'$eY L&xV7g5`+ik F ?g* 5e=*cpf)卥m%x{`X;kȫb(-Ek%Et,gFqՖx:+g9ŰYϘ|m]y7v1v= +,6 ~wYZm01HV*xc:"gwI\~R?_*7+#jL\aj ^vdf>p|Pl8)'t+zU,ע{':}vnZ}߶p :P8B-E:FJ q3>FiAc)vZAp>%򱃵iscm$ӈ*ͦ?L&x_xI:ND+\6 >7?>猓{gkLA21p)$} ACq<; pd@c]5N9= ݿA\~=rKn!Mx3g{\pUXQ*ﲸN]eCچUe9|^hTZ[B6<0`ub/_O^8wI!PnorM)^c޶H9KKwL~>z1^Yv*%kL/BNdNIĊ9Gl0>!iUᲪФxEm{/4@ݶg6F\KkoH>*\u7kP)a3sƒZl}xsIs7 CP'ՈBS8XW#HU6 N_`ke,HGM󺇸󜥄D5 rnJ^ggAnǙ")izM@kEY}Y`8hj-PX&Co[q27ՀCe+1gEV^USBK3p=Bo~M@#D62LtfQH|`WigF5M=m[ACkLG۾p3%ݶ-Vd%>ޕe8RO0ܩF,ӫgr O];Omgz>Z,SZ$B"ԗ&)uE6Tw1b4`ݮr`4T gaLc잫"ZY%8P $<91-9;(Uؤ4ByZCO95(y4u9uSxjJb [UIѠ x3-V^ jwJEgNA2^=UM @?ҫN? qN A?Q$&%<5W㏒7Nс!<[_]p*9g@K%O;0h%1LM6^,fmlj}BickƟQSh3 k!e:g-~w{3H,rhǟP_YMcj2 5@/( 22 i-6[Ȭ:F|kN5MP8ARB hFt:NyueQ`.߫Iq@>էf%FA!duѿ3,=<}4(ּGr.y#bĒ-Nk4hIQnMBSeapնs+@(4M\׸u**uI]K`5P=6nrƗ:5*ojN8Zl -XhA^OW81r)CK5sk xJAiȾCP DǝT_ixjZB-l[ň}k;Ϲ;kiec\7 >U #,+t_ZqƍB(/ dzzJ5=duO4tKm2ģ4ǪyUᾮQ5 !eYte!`׹6FG1(Yӈ._׊ZyecIg#U9㪑IUθD: ιKB$݇e7EэSzGزV E+wlP?X< 7=2Mtw E7]U/E_m@ls6\+#֢u,ԏm03gם!idhfJu ko8{!'RUa ^W4P謪 CN No&2ka3(o((PmSŠ\3Yp5e9c˶]VX!sbieEϒ[ {d{|Wx;( A&S=(| AIJCoI+Y!SXipNk?EU{2ќxYKWm/M@[ع̔Z^z݊[rOEw5ugD!C6ZǯXz+2\o8ۺƊk}noY0Z{iJ!&z7Ǯ8$oK OIl.IxҹM#^$Oj0!e9lIDQ>B9ZJ-m/;"Tދ_u: )Oa=0enXOn/y[#I}EIO'o}Omm,}0պ7%N}xdbY'ݯcFyOi{|@gʱdBR&?ς,Gtb w9Cc'G^u4 =G!ۜç:۲{$Pi{Z|d|-Ovu^,=a:GIrЖ2Q7VJ:p bVo'.b?Otb/"ȴѩ%f-2JlX L&y:eTKM;Eaa jñScUHE QHmES|nW4<7ď)~n耋xn A6תJŐ\ofn!JfK/Y~` A/MbI֭fxo?+d}M{kZbxEθl[\xeJplJ} t"9 UOI ΆJAY8mNY BfNLCwPgYTjph Oiؓ =?M:g*63 Th?Nͯo|?^0P@ZWF*ejL%~) Mev]:`~,_Ӧ8LD 4GZm@@FL8 ӋGPCD4B , N׉l [ mQ5p`-vY*Ml|2h5Y<vA`ٳ1Fca2FF1iUaN?;$P Gu.|E2ILNybVgjQr!ˋ7l~ @99c{+K\ً ޴VNp4tm;qw!-O a F1Ob}O]$֮LϼҘnj|{/&\`{19(:`NV2WsϛFdʶ7P":gkUQp@ؓWd< L4O9>mqc (q̀˶ǁTX؎3*X+u~| `iE& lfse M22nմd55(iZQH_7 zkL9Ժ֓`p^pl^U-2XYu筌Z2z匝$zz0* NLb; PN6lk-)~CZ؂nͨ3]?I[/wI5< IDAT9˂q XJg[e [CSO&t2~xBݬ?)1 ʓy9w=ћZTu8/wgsLS2ez0M뵐tR lB@hJKV};S7ɼ$)E5hnZ10K e| YѶQ[Hx;Dq-l{.5@z-ނL_K6Fܤ$؃4X #Y/b4m. $-c1₠gIEg=,ڶ-ZwOKa?ňy2( )'F&Nyw3jh[8s''[B6'i(Gi+ ^:6'ף)U琚쯃錥LgA)WUMv@Z>YYG;b7*i}-N[l3>]b%veci! D2QXr€s!_&n$tm<y$4Uv0l'XK_V|/L:wQ9\zjۄu 7RlOiqVUBL"^r ""}` z^_*=N>L'1b%=xB@S30.9$ Ή˭VNgy.Sq64$^4 .Yj:~>sM&o|ڶsBԴ[( ]qZ׏xכrFÚUm * 96 يDy~~wE=ێܘyp=Zt뫤W_2"UU}_.dKOi=Qid]w—UJ8+.,;5>VқY7*%\ӝj [ H0~ΉC $?uTHi]<6gQƕm֜Ay1x胓{Mvz-<6TAiWii ,t|.S\:Ɗ@W_5J֘GN?۫1W)4h+4peo:+2^Ԛ[^*if.L9k KeVS,M]69K{lu1V1gzfexikqݧ,BO ~&UM5O4X3OUd)JCSvps%"6OK_ň˪>3䒨jBc۠AGC?C+V\F7&lq(.FlqNuvfQ >ϊUHҳ2[9KMK*slzߏcXD8!~F`>  ,N7gm99j zfwuZE[Mi|KZ&#&:{նef٠)cJE?{Yvv_35ix-x1 =#f|.I'b-7bۦ@DPxQxQG YAuMUu}(p*.kT\5J+f'GeYw4(nU+NP6& q0Heପp^{%^%|Kkq<˱_x1(:dhŧ]`@rT & qe!7v8(K;-oƥu$+ <|TS.$, nâΜMO:zlʛy(hx⊠XcghW8(K6mT)N1gVim]woEQ!jT ?fx_+ P䗤-6\.|4p{:ŇUk^J8_sK2m Q_JkMU'2>I3lV/@gٌlW/]ݺf3bCMRcaWS/n6뺾u3ǛP3O?Ϣ.LYB5^n>/>ޒn8rLlWu]:=aAwY6xDiBȓ lgD:;e?ASb 4 x3 ;es8?X=^v6󪒉À4<p|#VF0a9?ksdr9yVXW|7?Vۑ xXI[Hw4eSdvRx= n>< V_oǮUᤤI !ǵ5u6^f\0pN:~k AxދCΚ?*8 ߅ x\CJة* tQ!F˰U$^``fy6u]F{Qkbu]?aŀS"`H+A,kzFD0#cH ֬$M`-gKW1ޣku]ĞCЊ۲{t\I~p(%xfcpk,sFb"|B( ~K#<\Uh̖)^=!?b[UK;^f"cz ?Qᕵɵc-fU%{ ˪O~*ۙa9?:eiq>A+ 4uӹ3ֵna6/uw1\M[A8 X~ [G,9i#WZ'cFђw|3sZ^WM0GiZMDe]xyͿBJ09-Z\+ !프gk%n &O&(Aᬪu>'1N k1fQ'9cp׼fNFd-Yd`OHC~b-vR£8Et,U&QzD$U^T^{IJ-AUl-B UUx̀4glϛe/q= A_Zg9cd@4EK,w9fr3W~nE5 f\G\#0;;R_q C&dfɐt@:dnSQAرNt]Jae 6R|rX#mk=vXsoݲ|k6g7 h{y*~~V]?S~;f‰/@v|m5y{~g_CX"Lk}Yu^S s#FaJ usy B99G!5ft-ϕs1kO^Oe&{ks9߻f*JDZňEJX@µ1]"-GZq^jl@Lo99OO#b#9سp(n!lڤxMy|[Z>ɗ R SX:x_u|Oz͂Xm׃ 5>e? 4L.^cmv^DqF4ƈMHoI  8ǧA`:_q#w<5ts0a" Ȉ̘jx|\sY3g31i%I8'h1Rf$ÔϙY`I\,Pd?-~]4r5u0צMͦ_38/{#g1SצժcJ% / NXmJ\aY"hٙY8ʉPj+_p`9 EuY8 nxCo\i<P"nj' o`o>.8n[bCL 9%F%PTsU=nĺ'̯U9-}_j99-Ĉ]VZɈ9`ˬ XW+|\pEe׿k\QiIIx}] h {v"קdExu|.(u4|=aACF);:^ͳU]DM"um"b!Z,!_gL!1Tΐ.!ۓ: 8'0,NL1bM?ʃ?fD [Yƈþ"%=nX7 W+=,xm|48Xb, 8&<{@г5`KmJ8"),a {q眰bl&$M4X ~Ms:vjUDF+'x^(7J :<"y@$wʇ'X@*)~8 <`H̹،" SXync>qEpEط<(ΚF$AG"PK>OLđAzÒ$1<pmq6/)O v}\>q*԰Q`W@n$8j[q"iuIjy8? ͵A3﹉9mr A9&QOG7 M/!k$~:1OBQ:M3-bpnm T" 6[ULKZ)褆0GobO ;<3o̻{,' X܊xhZňv܎YNwtڒUAx*-Gu=\rIidaT5j״: ^lL IVFUۢ>坧$5mZ})PSs%קTSc - >IYd7dzlUUj>$!I7ztd1ʄ({zxk X15)K;!+Dy6w$moA[rt7vH[cypY&f (F4[!$O&&%\i0g᏾TF噞iZn)-P@*4,>hGZd99:W{4<9 @لOĉ 5ͤSUрYE3@Ձw2~Y[_+9#6_iSb:vlt:^!N>ȾCttI2:aYjÏّh& F?+Zxh%j2;a4ZM^Z éѐAC B<lц̋WèS1 xp yKqܮO1iی3\swIƇ:;n\zQFE8re MD%z@򨙯Γk*+"{<99 hpˈI[bnʺV(`^܏xJ+^2b^nU헮Nf8e4e L8kT90 1%Ÿo(SUxYxYUxʞ ͳ~ZXff1'fY] 8Q = x@njYMc;̴g۾h9 0Eʓ{㲙[״ 7>Ch!=Sє33;8Ừ6 dkƟfZЧ!Zf1^b4lBى4!8Z<{ޗ^N 49I ;4J̴n/H: N,՟_ǔf =J$Nx^y19yG(b"{]U&Li0UZt*sL}h"G]3dJj6w9^W{_n5|7~`LeY}nkZ믳~p3;=SEb,O~ښ׮xW,g͍fvE{\hӏ4 b7Zbh@܈ߏf95^fxSxf{u&ky ^c.xƀPㅵxB~* YN7y+A@6M{~GOĢ3v)A ~;?q{kzXN^X;?zp`J Vu6û CsMGm*YeoNԁM'Vxʓ;ZfNCox bf=~qm휈XTθK^Q)k !=>sDj&؇|ӛoivR53x0" #=l03Шӱ_(42 #v:nti2#KI Lxkz_0FD0V>h;frnZf+k32FFUL7n3q'MX5ZY%1JU I OhS~6›HVm[?<}&m)/?siiqw+J-I;pcv^U(bpJ65z M]AϜ=L-k=A<^f5~bR:粀ܼ>ϖcB_=N R|Tyƈ Rj{I3cc03M8*7O(&%7)᎟,mθN"LFsMaYfB4gIГhf{S*ލ|M={I7Q$)N^M~\Q׃ Kn5^kAfvܷf[U"õ&]E8'Q)kI1ʔ-yK?@ w IDATz-S@Ǝ^}_N~*l=.N7hys'AǀZ猏1CpI,br<׳8H`K#':Ͷ0<hwu:B9{ A^GÀOlY⏜(l A"#ق,tOȋ2: BT:L !7$҉g:+*MdzISh`7,M|!UF3)Wۆ'^Snr͵+:%\b3 XqݲtEݍwdsDEBPH7/_fC: jxub?{_D4oٔTIJxux߶b2r?a@׎.M9 Cd(vd^x_4$g|O-kc JX5K";\_I :+Taˀz21TaIxޚeULe㋦1N pțg` ,q t9 X0x3>v"5$}? XN=`cFq5| _hvۋӰM3{Yô3ԷWI^J"|,-h6')T`JE)rp6 "\C8N"}5aSh 2[e78 ~`z{ NXg!ʹ|a)}z9D5fwM70A`S{ TTM0QN%/]r* Ig) kxu %Kf3}KȉbL"&R=.Ϭņe LnY,q{WSk_W׸d0Daio(EKd+~g]WpŜ~0>%9ͺ"dr.FNi'?l >_:7g iBAφ$Dŷ'o^1bo2\þqcgDkEUJL q:y9Ad &ZφZ݌wLGхw{ims!c0* '^-T1fנ^8ǂ}6%}{kţ>F|Q/9H ![DTl70"eTJT0}#.'MnJH삧E"O5dr]v=tc~^m,0*𿵵"4B.鳸0 \g9~ A<;|1A:>P'G8.cFႍeӪ32qmnx*okx,>3ҍ!vsιrQ [ѡx !P*pz`xij>7b]`)p+z3VNS*M%.: 1x^qhZMC/Yx.u'ts;k8:ID!0N9KҨ9j='b HRH0Ҏ+_>3@Hbd. CHZZѹ~JG=їAGdY{ͪBY^rY-ȄBQWZnW0 WQKV7[26;'?WX6c1yxJ ] z锖9c-vfXO !Bi]Z6ZʋӜI`V){HTP2=1;S7 $T_' ʑUIaFk*%߭Hd>z/S73C,Ws؛lv|yF2Z! )9= Җ r=Koun󶪄jULL?%! ]}DUigo^:sldy q亹%QL] fQdZu>W1d[SQ 7_H=[w]A*3Λsxe x%H}kWU!5ԱUՀIfΉQθ4?@L=4F/36B bw4P)OS 6Rjg2"bsl-.9,e9 @/! ]#o9Ռm/.Ze&F}S\n:##Ԃ{36LFD#xÔιcp2 &wĚ9,-PJ,7+(42xHfRQK"ʡ.F=g و|O]5q3Ϝ:|f5fJ 1b9j ^}/ƠuP5w 3bv9Ie83֜C(P{-T2lC5澃q8'}a7xh+Fp8-`$hyNS=f|/0,hcaM509cDknF;cpm زcw kq٬k[ۜ/'XϪ ( AQv7֢\r47Mqݽ!\^N>V8 Ϫ GRjd*+ԖM `ٔMlj2Y;9Y8buя*~GD`W(a 'DmZބc * i]}"C_#Qe`ƚܘ! 'dUSQ`oUyJnU#L-' g-`-s< sK9 b g匐yD 7Þx[9c"dK+.w]Xe!N^=sR,xX8Ĕ䣣Iw Ͻ(%=̪9g\X tujg!+g<90Ӣ *k6ˣolpyM+Tłf>Vܔ3ּ'4  K/-87U[<_M h{u T1'XckѿSB,`1spĜ!rƜd *xl0 7YFE53 }LcJ9p?Lj(d (#o`# _z'r*r.\AۖQ2gr2NI\{4W:qʆyP6͂1AIUYYS*HAm1ӊ:1Pfx֢5#Z.Esz|S~Z[_&dMtΠ)Ϲ|V1@9-H*zYz}Yk6y4!jA" ,.F`̋*%̈ٱvpSOk|o}(ň;cpܶeVUv$%#rrY1F3zfT]>K}00BοiL[ O g t[}8Ƥ h NX_ĈUm~6+c|3f3{hiJldsZ=*=A͹I OUEswO$A{,96%\v>.NyY8dkӀ f81<:u(IO3⁦U`$5Ql#cB|ʈuLؘR.wp#R*Z)Pz S>L>KfR\Q͆ض=vYY?EQ9b@ﳩNJXQ\;p}q1>{|{ci[ nl9l,:вο5b3TLYE_{@H:y2»[~3By_!HuJ8{,RJ4 _}x 橣/UyxBEwNba̪UrE׾Ǯ)Gl+GK/e+##8y heR1sF Al! E٫..qו&UU3.r'=x#6ha5wž>rB}98 ǔ4SǜvĜqE׶> 8Ӻ'-5Dh LO]e>9Ö/p2?5Kq.'!Z-D7y_ʇO:t9 u  R3##ĊÔ6L52 ylf1H[!^ň+24a xI|`6qu!ȽgU-FEj>ʈZf*D9@)[MWɖ8!Sgj&uJLGJY܀>:n9]f3XxImZ l!@S]KFQUKxmEptԛ)J PxQ 񧟟1E#pڸWE:&7e{6 jdxbs»,#3=rD%ڧ vlg (dŭxE#QXň* }Nx20\j->,BI~1!nUaJЗ1:sYsTfty+'pd7p|ft} !H}3 0 &PU1XB7rLk _u(ˌ`w $J(R0:<ˍ5~*=(ƕB{5U~5\L;@JҔRd#fڻڴk8[)J 64e=|8l8+㛜GYK҅?V8jc ŀ䊑t3&A6#bп 6{8 ESe#gDcS@3YP^Ro4=HΡch$cj4 _xk ӯ47&_SAdDEx=^ϙ*,;zp=;a^;ՕZfO( ŷ霔 " 9=>Z+$ 10琭(l˾QM.F Ox2ǜq"A B*Eъk&ֲC)f#ޏϣQpضxDEsi0omE?qߝ! v#ΝFpgw10wŦ8IkR^{m5ԙe?<^{$>Y Dk6 (j2Z'#><#VvEMjچJ;Q=-42#: -GYcp&}4 2Kʫ?Jb rEV[ N@9dV?B8lDY+nV 9#s b(j;2{io\}>UNb3}hLj}/L2ZJw7fkXb܎d%#]h䌥h!1MΘ;9<Fwc#._U6bW|ּ/>)'dG Q Xl{< B+ܐjIrWlEO, 1bbd9:kʢ.~zZ?B#(+HK4XƈӾ#7 M0IDAT* *v?cXBLce{TΉpk17h26b#ӈ58a?*=Dc/"ƀ8sqRUº sd *:kqnL1CUKk9l[jgkdrƦ:k6=/Y0r2` @zxYU@bqAݔ}]'Ӆ RRev22e l:=Y)drb-H CiNYӞ׸?AF.F(tu#?R&=aFHE _99)i) 7¸[sNd8Nb rݜz F ߧ,+OU^H<k1Z7ӪYߋثB 3i@7EQʈ9ɆحkpwڒyXR8JӏP # s+F-O1`9~ljC~S߯S`d I:*כz9fh*Y6bX6$|0FT5`HYV5b,_s>\T]s*@'@PvJ#hUZY{O FLf={)%D3N֬-iπ2BٓcI3v< '9 i2Bu>g4ZK䘅,K{.GOU},Sc,Z);5~ ߓ%79Љ3jp`@g(فW$2g_8;{)QEڜ 8'AFb}=9{4BL:m31ⳐD)2Flj~f2F% o,briVϫj<fSM4 1px \3Sg۹QPu}fL2f@p 4M%!n )' Yȉ 4ٙsB1Pqצ*41{7q3."Ĉmma18% @&JBb^ u# !ܺv+ g1NjF:V{`l6gy4g&%\܂;<ן2uOԉ(Ʀa_"uN:3 t|r37ў۹ѳka1z.bǞvf C@68zHc14xz|'lU6C6>9NA< WdU~*րyjPoPI*c6!;ַ;kzBF2OvgE鉯JM[dqR9;SqR=jcpRX0 MSu7ZfB(n=]O}_(b+k=;'@$ ! |ipAVeS`,fkI'ɨ_fW37Q\ciJxslg]6 UsozBMEAM>h-7z9=5RGܫ،̈́|L3+cpGߒ.M%729j[ "s-ݧ$vA6h7?N d:B@lH֢&5'YNS>ɿSUx1]8{db,'F-Ώ q|Ff"jȉsy\8" ō}qjD6g6c.g̭ \nm+$B1կjCU{-pM0$Ѽ;k[|H4 κ-nDny_c1bk-nR~w&$7BVϻKRވvӺƻg6;ҀU;6g<$˰9ƈ80{<  / /d,30h4cJH 0ۜ0-#IkykrGDyf;-e!P|-$lzH#'Zi u"g-!BU~Ͽc} 5{M%{!hr䄤4iUE]h%kkUķTν{n׾J &2Y{@ K6rUV O: /f3s26/q `s'p'?oJA6>2YEq Έ4ӺƎsSxiE Cj }' Q* g'po)FCLj0ʖ{ZUam ?R{9@8uD[6ɒSY/`gTQ O3]@*Y#J`{/@bf>ϳ~*"$XZU3\LNK`taV !;\ؐ YpMYǔИQ`Ʀ<o["s.ތk {pZU"INl: |f} _xk0:0&Z?5 *g6vԣ8ιuچ%ml,(laXO~ ߅YJi׌`!മqԶpK# H1 7lƨsfсFj"-v[mvBA6|KΣ}_7Y,e*#8V-&u\׍=NAYo&%rd>?[Tܳf{@g1 qe-vЍ7x+RIQXc?cc"Y1}P<Sr^4w@pug`;ַVxM7]z"w8_ 1%P Qn]\Qk9?dsF4 좫^lΌ!qSqU0)7bc:1 Vx wrf->5k lXÃϧ@M^ܓ3w-??J Pb2|Sxbq2 ҪKQi1+ 'SfP`eELx,n§}Ӿ 6kj{$Y[FUwp3n )[ 0cpn˚U9e ( 83\qg_3ܴw,)#u&[p彌i21&>Q.GxI4Ib=g'_5^ӟO<-|:|n[,8+9OV~'_ _~j} ?`5 f2%\qCjv05T݊'zU6'ca UQ5 a=@FDA6Y3n*Sa8 އ /@sUUg3& ȅ ڶXP:Lǀ)CD]OצZJC,%\S泧k»9F|憾䜱Rl\^HBΙJ|}{EZ۰E2] b<8o[iڑmmqyF6glXT[>4: m8g!mőw3"Ȉ*\mxu8bZRUhe8:|n-^o_X:kHz﷭S)Kg_26Cκ<=OEذ+"FPgP6tXn ՆUK*~AԶx\puסcͼ=B6&p[u@# ōyψz!gsk sPSFweOʣI*2mOo_XS]*%4nZd^Ĉs/ o)ˆt 'ÀcpeUYg +(>U]"<2 Kb:z48"d|ur6˪ _wM31Cvg1&tP=Mθ{X[F'MA*7_T `ňctf*ilpξK..y94x2N k "{܈ʮgߘ[(ݹL\f;i9kr7yfNUlCUjBHR11}6Bu\2Z,$> KL n S-KDŽZ{jv}ti')F@)/ ?;VT1"a@f~m ?xE P3 ]2߆VlfN 'UaqBGmkCkFGkőKoߴě@aw1k#=@61,D'#E]roH 2c N2߮/ 'M\9GUUzd/朅@1+ @nuJr{2sq`:Hqϭo߼h9MAI= P}Jcؠ ܈P8ŵ8 1Xޅ󜱑Ri:nt^Yxs\hZ}:QZҥ*A!45y߶r} {Ψ#Qvƛ;@}h0r; en8q0F4q8HZa {{$r1Dăr(UYN,W:CT?DdΥXu&Rx4KБLA;[_XSÁH2FTHx=Lyڊ(k+Zo*ܡ\9E4֌, ȧT Ơs@M]sHHIp rALR/s{K3KbܹҠW1+>v-/ip#uW:nz2^Q@ f%S_y=P)36+IT-cy8 'z xH"7t²G Qm}Ϭoi[vvuVp 0@mEHp 'Y8!rxZp=`ϥJ࣪ĪnDtD>:xCB5(^ 7-/.Qe|G;k Ho3 D_{F ad+ԃ][(Jũ^xfwI^d;s @/vir}Me.]^]JRR+mpOI['XJ֚tZpp*mxer@v5Ќ_tͷ}Y笻YymK3M~u.N3߯*u.P=8{}qvȼjj:uƜMzn xh7dZ/y3'T޹I˅^kwtk]{? lZ: ʂV ֝% Ṉˆ&%ݩl>g[l=Xٱw4m{]G;;`zVb5Iө&g}?2&D,j젌/ j&~~˦ѻ.]|ăMߟl\Tt/WI sxw>wbE¢7ldS^kcgv)f/3y粤7)'[^ˀ_6`?h&Ek[ok_go˶v= [:ܷI:lk{rbk_ۓuX;ڞ=v=i{`k{T׶6<v׶=v=v)mm>v9mk_s k_׶>vWοJ\׶>vퟴο ׶kX;oοmmF{L`k[ۿKX;οοοοG k_~#mmv A)w^G k;RKzׁQ!70uvk 1[ KgN 挘3 jŘ5pkwX;?aCZ_pBu~o-*k1c=@)hs`vƋ>'se8m[6 iI{|@O`.~FNaC/L 1:!*f{x앂Sc-s8ᖵyfpJA5yfqױ` /ßib>RZ|Wua}Rp#~k/Hm??0=!wTxœ{Aλ'm$ީFbZl1':7H`ɔ&gܖ]m\q,R¢,lײY:|3㯣Gb;#k1"na<>%` kl:UUs3LrƧ=10M6gX:\8eegq޶8*89aߝ8>F|д+kq#.Ŗ0֢fbΠq3.S4%R0!˪[8`He:u:00ǵzO'Ct㸿FL>O],rƔ_3u`n `^!MΘtN?q4gn\xMJg猟W]&g8mpRJJZL˛ O(D't|k O!@?.@Op<!ANg{lw.9y8?v~jm?4F7 b`ΚM˶ۤCz59`(f9p48mLZH3aU T8p`Rx w1b#f$.WxO-&$lA'(󎩶3{#^WKH1ۜRD0k)%ߏFxÓbKYP >5 1i$:Htu:pt8r#k9gb2>|M%ҭxF9̞1gu~L!1o1}Rp#ncM!&g\$3M挳çYۢY`c{`>]%V~/Wʋ19[d ga[s^]]/d#ڨK?:Gle,R^3 ю=jcmh4 %좧UEKEvňôpڶvSObĔ 4kCNEzю5Ȇr?b&+:UMgڡ>_] Ft@I 11mi=N=u݋q<#@aG(+hV #kᑕ#I9/ieg3;6FECK|vy $0 (t4־x=^:#e%QLÉ=N̛\d d |J \:,sƲ4_y'wȿ3d-C0! 쇀mDxkcDm-:q˚?A$ȴImqնhr5߳ ,%3"#Zs@ Ouħޮd4єp3l!78/)4%ܦX|҅Vb F)}<1ضzkC)=Zi; s>OR-~Z.q\bҶX`#Reθbɓ!}01hΘf#I_Y6|ΉXE3nM ']m%ncD)Kg:vn`E5{Sm|4FY 3/]6gTⰪ#/C."Cτ/Bk O x9k<XcӓdE=oiJ8&#c,<ŋt~X.qrnxU}6N#c9Z|aYk6^FxKcA/CS;vw _"cEFw1}xXm1O gMcDőxΓo㰙>'cHK"%\Lj{@}1K㘤?4-_Z 9c3  Y e%L=󶅳V)agf(UyYb{<Uؘob ` pu=AQ(|0ې&e `9T:!g*xٕqrK=i'M uuPfC[ zvNQ]C\Y x0 1a7߀{>!!(l8R_B@$NGx`RDPgR#ҠŮ !qQ}&}VLjb"/B1xV 6Dȩc^ VSaxrί6$U5*{ʻ cSULjۮÝv!0&bm-lϽ7!;܈y8OXizL|.R'6"{*@cqPx3O1>O>m%u{JgSl5)fEx 4`JP(ih_DMv,sRϻQ([M!=˴n&v cZs=\'O)QԖs8r/ cp8x >ҹ:n@U1J$F11زu.lsĥ.k%1⠪_Uئ2"t.8ǿbB{ה"˹/!5"g3#;ap-{>hanRUθ~K!~G5acP;[BW4T-h*.y2 <2 "- ?S6s;U!'6~7/+$n %Ŋ5xk=vD?*|uΞx[)(D`)4I [{|˲ '2dpٰ'2pݕp#>v,0qsN:S{J+ @|Y a 5ˌLs9Y})Pg :vq1i 4&L%EOi]"vvJSOoڑ18toYy@g-no#T]##x%)pCk9=Wb|Ut†0h^Lj =cz:-?,HE#] QCA1T8j!ۊx3~?-NYyWaO1 gq Kq+cp]x5vGy2J |Ӕp#ν.Ggi \p7IH[ؤSѦ8_xkc }kQ{/7SF<{\{;x @ޫ =<W!S8S,iW)m따A'YdI`uD%Dz_5^]f]-z+\ekK޷-~X"SiĉT1lO* q} N`FǀrJ_RpYXƙq|u<}Գ|Ȣ4c|Ga&8ϭő18([%ȉkɖ_iθs C,|Zc0w J1[X/ Dȴk+줄15T'f3`Jxnʹ/8ԕhaf4_F#|_RK@K`&ȪpF($FVqR̊MJHK8 7*[ XMθj[SRd(TS=NU4~ ϹI)plZ+5ܣ5&Y@λRx F}oiV쮺1 5i\@p]<%l8O1D丱pHy=ftDm1Y(o ·U8(xpڶ:t `8섀}q0$$2*Mkk{2,6!Gqjʊ3K MA壗%5gw9LDɠj-9dIӈxf:=kZvQk;sl*Ӧ%2PdA,p=쉴ffdd ab^XCket?䌉! c6FKs^8#c?(A"k3br)jf>W~Qj4!{#Xy\_CP>`Vyj#iU΂0OjMZ*8t]/uuB2Cbw{{QgoXF|NQ9'k }fObپ{O*l1ܦO~^.q4H,Ψ?vH}31:|=VzId0dJTT;` @ۅjHIr*m-B|=YKm)Bf`nXw/a:|M3wtX7iz[|!Cyw``-ZސQi&wl-[9Yq OmYθHGkQ 81gY$/x1bZϽ5  tX`u5eCT~f@R1!uAd IDAT+kCAʦ18!I?!h@/(`黢 ˪7u?]`j !: Ik2 $k>3l֬bY]㛍 ۜY&Q)Ww!|A`C~p:uKnv9V:wlHSI :5V1ǦǶ5:6)mJ2E`K+N2#[X҃yo3el(`0pGe~h-]* Y٢{b-KTAzTJ ?5 >-!@Yn{Qw.|="Y Ӕ@X]J9fZꘆ+LY}k:fEDpe_dQd$˂+^GW3Tq)JP6Owj` Cxo _yNmc&*u. 5!5xͿD 藕ַZV>ưͫejθm[,sƥ8"^6Um9s藘 @=((ꚨk/1 A<{=K7t Rq5*`RԴ-G\Caw{̬hR0-S0n'>rT$:Z,tuO`d3G_K95}̣yU+HM ck0k\3̩ b"@NQ1aS[;c9l@L5>6,D%IdmhKs`~Yۏi/rE)Ywj .JAEb2}?=5}΃v=,?+Yۊ` ?'\xEUh+ ,0,'OT A圧{Wdu =bF} }qyA)N !g=Xx{CqN o ^캧Rp#>rALE@)8/D >ء1}jߔ,;P.WT`d.ǖ5K sf))FUqw<t !% +ezNm,xz" ,,V'ܬ6NX":0 Ӷ:VZb5mmuW}c Pr2`Xiemmq1ا!n4 C>wmYY*!g8:"ilsȥȨ2TU/ӹnxR߱l8m}xvLJ{'xcel k]`1URzHUkk`Va!$I1)t}@@{Ʃ32n#\|X|A1i'= NT,XSGY'WJUC!t<peDoJG?/26 ^zSo(rƶxt;b7=<ᢎoVCb(*kqk|Ɍg0}4ēzB>7)0ŋRYVx-cq3Cq4"$RUU}2(OaΓ) 펨˫,%!mk+}{A MӶl!۰n eca{0Q$ 1v!(|aywz,{6!óh5S^]ZB$ 4sfm^ "\pHߏFd6.7<寚7Q^םފLڎsc/b6pb\@ U&nx*6(Kp4%@LGď=|v`("%\PѶ+~e!\tϙnr s.w.~vlC>s*`iq̵*HwUUo>+6Ayf%a~ٳ@5FPg 8m΢f\Ux[s]tq܊Xd 9U]pICw**f"1PAĬdɸ=eR+bBM*M>5iipӶX@T3Q Ci/ӎ9 9mMLC"_% (; 0v"J<33veJ 5e,Z7dM(Yv; B͐3WNy>P!`d0p3~d9m:y`WVX8ǙsY$xA :b'zSm,[|FdVX:I`e8E',~℡Un"?׌jݎ{Í2WWK7\p̀dr^Y)io72uo l捀>dcVtȸn\e-B2%~Z.q49ˈ RrǬ4 6"˴Y, WU{b-b`d-@!ٙ1X0k=rhj67uZ/g8s|]k]"kWhRphWġ?(=,63+vlJjDGVw|=ۂ"Oc fUK" 8LMFm`c«#oH660qv@`tz21=JIbcޖ 5QrX9z||_CU֢R1WԺ=Bf;U/! BݰQ!ey(6GG .GD_[2(Ztfa9phEr4kv{7;m[|l["dldz}:wyS "ga kđsh9jsy[QP xc ToU[nb~6ݔVv"]CR[cu\ g<CGg}c7)٦VfZg'޴K 9cr`h`w̴7pUMem,<:Q_GfC:MOD)>~j4o/(=!m. 5̓ |:y0͸+9g x~4 (1>ɲa%ltx^gNHS)8Fٌ2|`R»EM_.EIR~~KcG V[z?)F1-lnu8mYZf)a-xuǦdlذyt^!eSS7#LjӜa9!Pvxs#pX-Щý2C)s_.B::c q޶{>/E498FԶxO đmHYOqRle)8p;1+˱#r Xp[`ipPSIV1)i? ~,hQ[a<0$ tVj]췛Nv۬-Y7!3T8cp!V]n!P +kKYm)9\{Sq゠97]-Ohu];f#tT_sP\CS^,uUfO塔|Έ)az6gY`=S Jn)sڡ0a[9k)ɸQ :\K^g M=QdQRZ}J"_~C54ƒ哪QT*"˶<=faϮp}xu!TYxKߗfg `-9is9p!H} `s(3ckrbu ,sڡ: pe=skqX v Aa-"|*/08P<ɢ3SZ2{B4DAPY-2ѩCU j$L Ћ9Я9;:4}6u~PpS >ƈfZ qP2o:Cҭ_> >FY>I,Ў\OARi0B!}7YMT9smfкbКTVu3Kuj]PҢ~nmdS_@w,x"FM/ʚ9,siv9,@ i*ު,xL)aY7!Wy<ƟI6_B$vX&銲IC/^׾\VqV'< -l~N|#v݊'?%0dqFH ,;+p҈(om)e]wW0+r+dH}Ds40u`j\4 n!W=[6 iim dx=gyn멬h e__7),%ňiJ42F8|YE<,6Yo+*N6 Z5{;ST_ה[cQ$sxaZȦm wmy,[ Y(qmz!X)$]Ϯ{}y٭bˀ<jϺ#}[Dg'\L> : >.s+kIs/cGz/Jpu8[. kEfawgMgJ98x=ϣ\~=y !L}H Z|l) YY9QUݓZ)f1lU}q_=ωD|f0b4*2N\XIݻW"MzŧNV)LQ'(:~0;dyβJ|MMREጠ".* `ʓ.cćܵ7p3]E>ם~֊𵗕VRd!œU(f!]-].E'Mw>-n[,Y㠪e]˲NolߛO,IhD7< =eл0!~V0f/ vT! ޷ ܩS2MUj1fCخ؅狺w1\;T|*gt% ]0@$l?Yz9E>-dG_Qo $Rh{6lݦw,%L3ğ6O #,m<\Ux=!SB.چs(U%T]DkP^26FusDWT9Z_Qsσ"Oe9>jX3f᫘l{7us{BAЮÏ](4F6m7YQ^{I-|jwu?WXrH8HKL])$Q~ Gȿ-qXxUqDnUG']\Jsu ~ܒ5I_k 'WKF`wEg7 <*jibNYH@ӮC,Vš#S3o8a@TɂT3TڞԔKAǟb*t EA(FOq̌T@W)AWBQ!E'&ge-!#'"@~\~7[۬Y{X(K9 Tu}26o ]Lw(E"N)6yudS䷃ݵvSNwi7:oZGXzr^f)c@1%U 4.g"vi j{8~d} o+# <49̪ 1{CC9W@sVT1Y>)7_!3 ƉІ%1VRETZRtlV=PRMßU߇VY]Q\ܗP + վ8gi7tEd}WUxq52;?u1H;d}+T2zf ;-2cJtX d aQઔZmi=MojFAuv]2$n{` DO18ܭ;4?cbkΖ)@ˌoQ .Pl4 &|h C0b(Vf ۣ eU+G@ LaZUN K\燪)& {㫺Ɵ "g'݅ Ac|e7azǛY)X@sc0s.Gw߽7V#/scL]eK)Ay ng@4,y@ϻWd0W PL4R#n8\=m7j"|9cln IDATDϡ彶`ӷ-O8)ڬ.2#vCI{_h i1v=^q03>ԺB1<xq?^Cg1n>c>\,pܸZcpն8 cwXK@JЇzr&O˥K@ޖJ /oX2=xDX~K!Oӱ01gF+;,꺾)t#bf%A(UkpmݻޜqKHk7& @*FX +. h{iwO@XVthL_$cױ(UP2.Bf&c/t#%$|#u`()/UYc.c mG̈́ǒNJ`uaFz$9+p'NS(+֛|:zQf#OO̲wn\(Mr)eEr cpUJO$ 9k㶕1HuK@Fxm/ŒZE9){nF̜@1(P)Z'v'PeZnE2N[zjfm's@!7It/E@\/>cU@`<ឈ\ $tXzƥ0d|2=xD@S3]}-7#+ r?4O(XlM8gxK0NÀ8y)8?Ĉwmߴ Հz $k\.{"9>AoHqV8.HPU<9ƿ!ou5tbFPʊY6m{w3n`8acN7ϲ@zS"Q|LB$ #C$n(/CkoׯWO%}hM(4(Hk]m%Ιnθ꺞߲OdfdV7BR(?,8k{DfmXc0/'a v,N'Muf5O!R%,dWU/Y sӔ#@|ϴ9@wi΃kPݙ0LS)dƥ]aUD{ Ξe7] "2@,\gExUy>צ&L52ϥ 9wdU3IZ.P s P:ȁV!:#d'j!gCІjߧb9vF\X2.6 txn0*?Nn'|`C@e2@[=֢շWX[[yZ\mQ+A]I]c{8k3> 𞙄MqW,vʕruXThǦ|wzJ!pMMy}\_h[0+elRϖJ2 ? f3k<>$<oE4OP< n8뮃7F<9Whvض{k1o[ g5Lx7%׿G<g_n)MxUUT=~ sڜ=^u]xà2j]J :V~]ti,c$l9,8u)^ֵj0\F=*0òu6 3D$:kX^@g}MSih /'L-;cs8^N&x3YU sχ@˷1b9jȨdPOL@(䌥s8t݊ea4S|_U*/CM@_Nq6Ï ^]cYsE'UFށ{K~3`@w)an:ŏ *C khthzu~[/*-e]c^O&Wׅld ͌[C|5^1 Ή2Gq?nBo(50.ioF`y 0g' Hܴ;"gZ gk|K6R;B_XHwL/1PSGᘒ?7s.zK@XJԃ:t|VYxcximqr:jP(y ~Rq(cfQ3Z\;p @ zzpI8(<;= YوTV cpJufKN@gg|ʋPÓ$*_bC/ 0rzJ"kuu9ϲeDs.s˪K /Sf2s9i-^U^;x;h-Ơ">cRwEp !9q?NK $vՋG)3$d †pb7>/ c2%SmzBf39XkQTe@\-xČpYt9Dϩy45k)c)\QG>G`QѺ*`qDn[qELs.i;p{\B:dn5J $޶N(>%8WYO b@pdkX絅4H]9{!H` x6>N,6yަ}`Cga Ϥ9?Fs> szi}v>4Q1~[,@Iw/?%@ac2=y^0%rϬʟ^zmV1lkr.E=Ǎɼ>? >ks30 ^Ca,Cµ{@`MdY0;#b)#BAX#!=Z#,[3iiI';j-,@%,{cH 6 ~Kwh6WUhhN{)@k L%TǔԷ0>c(}3 }wN1Tצ\,wr]㢪 4rn:Ul.9RY~@{߶y@Cx"5YV5W+Xm2H u]8=t_K9X3ug!qeϋNyԡE(L@ MS 2[匫$B ]~j%E}E!,ށܕ~Y,pZâ9=޶y,ŢJ n4FB w}[.;gYYxur%IbJk\y/AD1fܕ1Q: hI IWu}Oc Kʇykѱ{vHAB^R\klNXCF ]88X-/`KBzxQi}ef#-I"S(9L?^jUêK@#"DA0Wm[f) Y}rbR)Tav2c8\pն<9$dn~ǿZp ˉ={<\=icd=ӍTߜ|ü8TU&~tNN$׹''>ʈ\q+1m@wʇ'X@(7]#T8@ipljN>WqL̹/-֣k|v"7C9g:֚A1oKJ`w_ ]q*ָ{\uC+0(=+}mq${L_z;.baΚF DSPJUu1>^pT:+ QqA)=z3L0vu9mJŕg2A]c? /@9ep҅iYbpELULyJwC:pcutp^IU34p@3$3gPw;4h-cjDv,tړE՘BGx4mJH\} ^>8KFp5/k89N<ЁaP\W1⚌)w cD?r16 iPr@ः%4\`td;qW$cR[;:QA@fS"s98WV1buXqӐםÄM8ssCfU[a ֎ ֳ*eay< J AUNԸOIN XwPU!2/Ap()G>~&*х@?_xECp9ȔwӹL.b,rp,QEy#>C^^z"J M`i+^.mUetfƦo ni\죠 B=I4c]>{섀cM9tbn-/ h qgܥv350BRw!?cxAP+#z=Jp@ BK/&'` oҋiyE^e]J$sɨ0?ZO ^Oy6 Kp1mס@ӿG1 eJ|u= ]6V{.,k;JjY:V::!7^ǁr9}kKY1kʫLB|r]rmb!Alӝxu,Ĝk8f3焀c\4ԷXԘ:]2L#蛷-K﷕I1ι@r>FӚAdu%\`m{n0o:d\~=Y6c" Ӷ`{{7^5V`OPgfk1SuaNdoC(33nka :Q{=;[TzUU{{@Q]2KmUpӋŦxBV7-s!&]9uz>ؕ=ƫ/ZAx 4d- 5T=k(GοZ^fx^a6u!`)݂):{>a"OvjRn D{b>6Fs*\Ĉ%3ϯW9!wVi# cY ;F ǝLS+"D9s"َpwߋ=VΥ~Y[kEl x=6 s}pgN!ܫAh;9 pgAiFiwi0]3"0b ,}PEe'L]]㧪+kOgշFbm^xVٜmԄL {0w{| 3XU .9`3lbbL衮!gʝKGZ6?ߜ[,haMa"yNX޼P= IDATg]WRgM1bxyLVKS$u~2"97O p ˭fm@]X1YZݲizW\$zl"-}8=Ĉqg7>ay؋sG=]sQ͜BSjAfkƈi#`mF0IS "9,FG1 Ze\e4\U}};yq}^;' l]_2TUwݳAq*i=ǀBQG8iSQikNxV{|`bxjxyJ6"kkфP36- K3 RE {_0B=@YYOR I"?&Cα`Qw'UBKP&9LxZ>wh@Aw:%\'WaHI 79ف /Bp;rPŊoq8ҳ9K 4C?^<A'kd\c f0gj*EUxB94ƠOAjP!w˾(y ͷ+=޼p N&[%b+vKMG9&%3CJD\L&Z\e1E(-N,E$Պ" [c>fnDcf[=1cpx ^=νǧDdifav~$YPZTt4zSjU,F^0(TI%}.yY+6v7@[>K{\{@viHn\܌sZъ=(r  P[w 7&(J7!^D9/z,k(=51DC1Gp2mg*{qbEx'qQ`${^.^58I9Z쯭kY>K_VM=]>\56_ǣ `'VN۶V{,3nYKu؊uTRK>o z]"F\sN8YAFx}$8'LFc> UIbt ‹p.S6Gc@jg.qAL"<D$@LO8 QDeeuN S8WI8A<_=.0Pa~ #:U8%Ee&*SҌK&}Gb rh"2Fo{π،B]gX;]U`a: Sy'^*>s|bTᮤϋbRq7_wU]c{XܐL)hV9<%s{k#>Fqny08MIRXJf vH&#xJM2*%a)rRi*27V1EָOI 36,ZW,G. koI[J*<%L -QCLg̓֠׽и@2ˆYZtCi,~Eb /eދÔ(`XŢ*F\BS> DHz4B4bMɎ0& 8exubj!-ݝkkMД5Ts1hqݷE!L۽N=@="&T22 o|E8^¾K ˂B<``>p~6lx~:o 0ZOFm]ǺƷNrn|wdx^08°5HϹ!*^n%NUV4XT@^r+8=<Y{!04 uSVUem.Qu pUo.՗o+чϜ+:M!ʛp=~fٰB, lJ> [N$t\ĈKoyB#*r4s|kx/0tG[R7 IU"V~Luԧ͙iUM6p8 (K~%>_9ƈ_d1p.xS<"Fic,~Ig{Lv2wMJ8:0GxZ㖖VLY)^UM2,:N}_8N:!C-jlY{<Dv w}U}_x=Y\O}V;g@Ro`Pv yĴd7Max/Ó&Nd Sf({p`-sx=uόPpc0ycЄ- t8U6Y HjxӲI9sUoxKf 7aL~,ux ѱ.j{6 4,tGm[V⏦MLŶss/nЈl)@4>ts;k|W׃Pqb}Yz͹rtƠbB4k9HL u#l ]+zf+Q`+f\O /Zxnpwܶwv \Ӈ `hEkc 6sZJywC lm{_/ؖB1$X~rP6H,5xcA0ULP0F=(תYRCvn%{LƯ[AN9o8|=V{fH٣MѤ͆s~tgc^~@uf$zc$C[^4(0XGЇrO&xBڪ #+S;ќS3TƠ :Nw)ykBܢM׼(2ZMci-mAaDCЂ)>th00i t\VwHֱvl{)!Hٓ&Zu)= X<{uzsqɦ,s.!+6J\/Bp1'r}8x/q#k0CHP%LIL7ti^c<`RUk9qq8ZcxOkȅTc}FH]]`zȮ(FԷr)gL5k~lݹWZ˜=N Tg2:J]'z{N@.R#{ tܥ^>%ePXdZFFъzدk̼/c\$˔ dQ{X&!mf\u? +F.To~;_D(=NhOT{Ú|+fD{qnLi$f>*w[Uo]MI @⢺aQ iXq!Z"LƩ:Vo/T͆v:ir'Y1C'פjvSUO8U`#>F`&=t`skʋҜ3!F/ -Hx,=wmxeLlZ[=CYU~M~)9,{H>!*Nh1>uTm{q֚|+]6T\Jeu@-ukpFdGT翲sHڰlxRXwN؊c-43e!t0.&A.v2u7W WID9t~-{h[|dƑ}evn: `L}Rf:ŏ *QD_~6]EJ8:[5c[{FhF810ދaXerspO(N o94`n-L9nΥw ύHM=jѺ1bnDT㊋mqtjAGڭYklkYNjNH8Sm6(x06V0e#Љݪl9s**wp4{r}n>Wx%;nGdD! > \1/ rCGٽ SuHHBmcI^7֍< %J3 6j/Vr8+Y_vxvV$~k=qO틔?a6)uUJRF䌔rA_@r2$(z,2(W,Qq\L,B@0ӔJPu- Zq)HsL8:lnY,Ïc I?sŜTM5 &.I9D|<; Wp4es{.Q{~LT! EǍ ` BSKnU wM"Iw Ĉw#ZL+u:cPvόga-3P1,#9}x1 ?RWP1q, /A9FEV]jdA#GsȃX \ݟJֶeFeYSUm2%ZREp/mi7 %_D(j314ås6݊kvI^(4F:髜cfP]>K!}Jfyc*{˝wFet(ڱaFp8QY$;1gYQ$1آAwuC L;H _Pgedfd-P BZR@Js׼' RR;Hpڞ;{T4AYEe| .{QS܋׺0ϙI-nXe<>ޥ/BCY-9]lrAlz_ ]qw"0]3v}_z ʘQV?}($ 1ܑ|؀ҦUp4 O[\uF,P2E8H'V^^ԅk+/h9_NJ}Xzq6&swLgl ʘb#d*s/g$ԆPFK]m"Dc,P ^;68巈m[ͯGՖGN) sۉiJطpI7tupBI3{u?7 >5 cDm @w J,"Kcp:0,cs(p!9uQv`FBU7Č Z4A7vK~k/&C!_P&˺r4~X䌋/ ዔpF̯MSyFԑmEPFD-`` j>7=J_M@M˾) 5BĈi⊳Sѳd u `ChY :c,Ƕ|Il{7,7*'=L3"v)bI^住+}(ұEg_)6d :uw+sxe-XEBpϴ K/,#,7whmFd2<"+G 0;ZT 2 VB|9ljANb{8BYuĦٌCZzE^7nmbVD=E %ufB! 5Rb]6B g1!}QpE霻3 BxGx#C'cp4eT9 gL ǎ3m\$j>і >Nu|q@ *쭈K Vb!sCykL\D8:fb>BæЌ%S\߳Eά0̹yF4_zQ I㨻/)j$A%«. {kE?}?hiCS[fWRs#Z<7.[f98%̙,c,#He.vYOB7$z^Au4LW҃z=ןԩcr|`|XH*=yy3 $"omre$ysG&Dy] ='y A{O [xcD@-&H6pB\=PȐ1٢gOM]$1%|$o^eTY9 eYz9vߐ8F 5k1uI`4EP95B!!Ǟ6Cq1HG=.M gLS_E2:KM>{(׍BĥpH}VעX[xs9|$;cY{U^vlCS ZPk#,cD(RUZm. 4H%,xmV3PzomŐu`UpO`"ƂyF3L3qw]ˑBk" ܊ umL/ǹsR:6HM7dٗpbI}iCֻx"w?1\h!M]όy7?<]EEU_?׸HIR33)>Ơ΢rf{tu ` (l޲{VpV79.%KVRR\36nb)Ulr2L8԰Ǡ8 Eש*o:WʙNBYP^Ro4{ushGHt0vB-o ' }3VL6C>+HŇEADŞ ~Z,9\ycqrc))XW~l>:ZlŷQjCh|49d+`;sPmGMXPdԔy/y>d,p2L_\` *ӌ2eS=?My#ޏσQp4p z}R{irq/>_Ed;ăhL37XCxTs 3udS ݖiyml! } 52_zdns)QnnTӮ8,:<i]d >i  G}/ O+lG׼p{EV!h)&{)a;papEiN iC. ٸ(_9| f5릭IDAT4=Sn_kŠWo_@ʪVٕ ;-bges:=Ud3`FG hZt ]1)'YgQ$C?crWIv5p;BEH}Ahbd94᫙kʃyJESo ]pbRY[+=KZaEccS9eC|y/>C߄໪*zhgm]hp;f1U/.tkkScRQ>zf-,,C9.ȋpF(,g섀wM}qZ008)%5÷95x@"ߵiƠuͦs8"|Zl *jk񢪀j1K8:J<V|L6BU&+~sNO,-Ae/x̌GMgM@}(D)e-9DUTkZ{Au6qIpڍڟ$0U D ^=~n[,S S~JHU/spG$u^(nSdC cvŔ qɝ>F15%0>F (!hQ^:R1GDmR?Bރ]{H?UUaB4ɂvCӈa?@U~Q~K/>H#nB:k[ёc:"m. RpS~٘Rc*Ǽbu]1Ơb~8*gvrݜd|NYV(Zv i^1,jkeܨ]'V_^E9cƳּi Y;(F4[T#D$ȁPz/NJ2 3# SkhDb Y-sGO:u`sOyA Vb *x*CY'kx1T;18N Mθ b4 N YfW9;.{XlX464)KN@Tt9Zň:%&"y˹llΣЁ7++NA{΂T@9;ض;'6e됌a؄[fP!Sgݭ*WbT۠vMk|ݾ,Q ҏ?OS񆍫8kNO)*T=vr8zTŔf,u1fDH#'˾Dž1ŧjb2zNMHBY^dg㮓ZB@s$X_|ONUf`Y!5%QJM& C@ARN27>_(ٴ+te=WTJ@2,ru9Fsu62v0׌"vDT]tv@LNd5f@fi (U7UB[k*B0'ΡA@(*41}6g\|E8#צy \sEI(;=P Բ|:^"eHK-(UqB>S`Oѿ=Ўa&T:ȋlT^L3?DAblZd5޴m tgcڅWhD)x{l?]j%( xN(zGn>q|8 l2 s$v'i-Ȯ-H [UF8:!;Wɚx.،0! ڿh֤M<ũ2n\A+;CiS4rn;%ЖbbtבOfp>̼{&_-NEs.,!H(Rb#m$%y\ꬓ=/k8e!s8-ST|pe syfIa-P(_tAma^yƩ 5P5!+;T~( (hJz c,̟<TyhWY[FKv|"1K=>Vuj܊OiPmk9r"!{s焣oLaspu4rb:WXy+#!2=Q>b fDDpPHrme,mqBO361E]Ĉ\eVF8/,dtѫx`s3!!dhqqU\N)fapPاv6VIpYvE-A:#BB2K zV,^z1G߈,Z;o[|C*GQ\ Pay\w>4ts}Uy36 osjUCƨy挩$KS4 .I=i2߿"~ipN09YCCyюt=6H W+-Dnq W,+I Nr-ǀ b\)FH@SΚ8kN߆'g!V}E OU%,9`S*d<~&@`%ҤK9 nS ⤤FU,3kILȂx 0kCJSboXv?k| E(M%`g>*k?ώk0L_a7QN58'N=ئQ MƮIPSA6wތ: 0-F k6\gð5^VކiJX˹,ڙ}8k7 aau7W,F::"Ya: 'f8T5?NҮceJVL)pa8.I?| 1ݑ MZtlvĉsZqՅCA)чWFLKe:TAl+(>U]"<`ҜleV+5M5^@1Eiph-ιPUV}bHlHO'5*zEbc7h[1kX@ۖtͼ`g;9Eϴx435E_s11q!*{{3ks ɔʹ9,:5P6+w &0ۺ Y˒ !J긫 2}ʔBVDUidCa_CDŽ]J-1b S)F]ի8(ELJ8OYx;EU|3.Y+ Dw %hؤ"د*LdBsk xڳJX\G 3K>#؅[;-;ХLR_5 :jw4کr]tP\t (CJ9~^U~:ŏ!(I;]ߣvO'|3;҉ǁcnl%Ys"{"\5[uJ8*\=w7{;AM>2S?]51rPgj{pbqbXz@'wTO.;2^ 2c NL9f ~z]^ƂE,7sj<$Ш!tu8u;cȫ8˜G^?pu_@PRѮ| UY~-O1\vZx=,*Eo-q6w.|crh݊R2\TB-kR`GE4IdN4)aC,Y>#/_5:jqQ w4 0:`۾/Duƈ~J?"ƱaE|{$+$OB[133V Y5Ҁ[,"3 5|˒%6 yUXk!?w| ئmqȴN9> @iw>V8eZk+7Q9:c]аE?ׇnN? a[UV\8V}_)gha]p!߽*-rW;kIImJj$Vf~ȷɛ,I_(^<(l<F[aW!wz36AIym3fmۭs#W 5xo'h0n"!=)[SZtD9+3Wic =>;vC`~aǧI<)MzR𦀞qvHݰH㈗;"r;u#hnsJKQj8) FYJM0%sۑR@I1*( T;s#I3:ZQV,{ހ Tqԫ+R$xr[=a p}i4QNrGZtpOS#\)P[*Eܼg+)4Q"3߽ܟE(P,2V!68hX =pX1/g?Z`VR9BAV߁֛ 8?VTZ{A׮HLG +`Zdt8ȩvTaO;v01DT L<g6ұpx*hv䚬dlCje#O@P׾MJ R*)7QNlc&vX?vFGCNY2ɳgHe7 |zsP69V$ Xa*4@,1`b?"FIu3F*E*!$th0z8 R)  Oqԏƀ2I GJ=A8G#ڀ h4[$g(hҀUiJےl zTK""';t00(ݐG43NE1{P"U*E* gqF}q3A=1@:3ڠ ɩ  !@D>1׏֤nr#jj|q0ހ!KҦ;ӒEF~"H :S^=icOuþG=}}nу$y.w4Bg2 IלTd,%qZ18U9gړCWj5v׌}! nAFew\,,@pq>d0m5ʲ`9ɫ9qR8c8TaG˞8P~`&caE"(6mU ˖3椨 |<|oA`/Z$q֟ |EF<~$as @f=׭WWD7`"R'THqPƅWp9 iI+RB6{I#RAPr 24 ,sSqTr{yd9yc 67ZW,v)cI8Ґ99X$Te 9iy?€aP `e¶1j?,<qϽ sGW#@R6#Vr'G_S#.285qQWj`MR( n2Gn9"I8P(FUNYTN}MD`(K50O/2Nh7sӡQɧ"8L\j t1QJ>5#̓ӜU-ȳe䚚%u!!{rxMi cXC8 KۑQR8W32ÌT3r: *8 LL `c Ee8ju Biȉ'?4( pyLǿ4ֈd *R9pGLu锪9CGr?*Tw `f+E>RԷ#L ȧʠt=(F1@R=3qMUW=+ɴ27FqR'J˒yb;C/8V"8<@QvnIR`d#ޞɼx 4 NMI צsN9Wava叽DIT9cn5ar:€6I8 Z|Ǵ'OjʚLH1IҥGw͒;ը FI;%Uiw9kF]GTj 7mJm #?\T6'n)$ڟ>Z$cInC08DdԼ8c8QRe}z@!,ujW q~riӟ߆F=z c:4AXzWkN90F8۷iSdmrOҤ2p:s4Bc ސLS#$M:t ;Ӧ10@J͑*ؿw܊\cI\7n8D8*P{'8Y!.8n :ϽO,{ ldG)A_0:w_PyAԍjP{{Opeb8Ho `^i͌@ǽ\-Wbg$x'ilg7ؿtcibəQ2}UƉY6-5sV.r-@϶q v *+4hT+Iy+AJ`0(H }~fx1|R!N;S`äJF}h6L1o֖=[Gu,aF\pOjV w94[,>QQĎNyc@}ӥe/J}'a8 ,VlH ڱ9ҩ 850Va1~;tl1r?)IE 8ZpA3#hT@1Gt#ȩ1N8`-NHnO8BC1bwƴZ GW_7jM$} =@  }hB[y@2Nqژ(L78 -ztH۱F lpFi sJX#(-H<>>rbqϥNqD,sԜ b~@j>X‘"haX2TqjX3z`UFh2b۽!}  ܶ<6R 5UEB:P{H'Q` hZlV6.TR&6[v BgԄ=6->0L+p{!1 I)!,>vnF S۝̥>0OUs2|2z 8늮bɐH=p=Z* 's=ƌ2 gDɖӭv@ WB qd+(F|pFO ͘r+J6 Z؃d@``OZCg\EnScLA@{TcfېISTСLEa)R S{! Wb`cQr\c?  'k e} RU֤C(fS 0@).A<4 2Ocd$tRDTrAR9~@,}֬c Y896?JYcd@]:gGnsN [$l^InVd=zԐ6A:1>F~`K@`.@}h&bNR=*FBێ\lUӄWx<ۣj ^H rhX6]HLP4 4M ʱ.N5@D|dEk>4[4(Q2jQƟghI" f2t@Ls- Q, 4#Hljڀ"U\G!ĪeT2U:1/y$xh k;I R,oŁvƦRk܁w0dA,'=q; NPN#A9Xt]mʊ",@:W#ƳJ)4NmW.UV̑ĀwI7Q)S$ٻֿ8ώI.H"&2߇V1A0lWu,,9Ċzib o뎺* >xe1 [J:IC{] LY^?ierR!_O ePi]esf] (0Yզ}b Ϋz5OuXJ6,DBbN|zy`#[CFOQF⭅*w&g(D!K(HXW1&PlO%^4$1$D}bLgVG[K/eyͥ Q[1px@ !z&zbbDES# &r@5XI#6 (Iݔ7LR!E:|?ೄE#.@x$;3'c?23 ,sXoS (XLF^,LȌ̮Os]fj`LUw叧+F$e+nhv`\G&i1Nڙw\oTifR$ tmD'M cEx#qjع餟ܫut$~~X%{*ұ%7HӤU] ,}E͒X$^~qDjQ5T#n?4*xBG"~\TdoL42x|C匆gs0fu!xӘiV1[URߨXSX6ka}&_*x(j?Nq"0GJIJxbH܅EJC(g8ea@"H5!e~% mjkNpYUePwL-U_!=B:HmYo8\YK2^CtˡU*o7ۡs(/pXZ8;W'&"ɮ"(# Et& o~<#4  tѯL3*z_Q>0k~ 14@>ۏoU^/06䅈6NoRGFW] |"'wzc;j~ V˨τGXw1Sv78LxUՊ~g2мڷF7l==/<ɗv@Vz,yQM?}L ,tC3veqv ?42zu o|Gq0̺+-)| %:alhn=p7P>6xPX4\55Cc qǖ iUD*dqU{ߠs߀M#Hfh^&WP:m7?,\,jt Ӝ&2dP&8ID v@E[qчdagNJ1c=ySF9HdžY rPDhaW@;Fb֌~:>ՈeO~b\lѺAz`0t$mj?\MfmU郎9 rⳲPX-< lg5u3VkH,3HYT >j5؟ȼ69N=UH*VJ3 JY\Vy` + spѶgBҟ&cKV8}Ojl^^\b6 ١wcRIc$U%n>~zBј%;aqCM=lzsX%E*}91e/v Gŵ"T9{$/RɩZo"w`ұw7en%şYݳn6>iwjW_|<f$i#m3˼X4*:=b#ş?w<C.|$z~N7`t95co&W8̽CLKkvĚ5(t:Nv3ck=!EW{)Lu"`~"Ձ:semE@/}`@vT bO!qAvGN(`b],N(mZjS r`P:qؔO+ TI|2缘'H O,P5AcdG:QhN.$kT~YX,3Pm{G3FfQd \0kEXfWq㻑#F#^F۝ WR9=hi7ę"+ۧ[&JG7?.?lh,ӿ6l^n("Q԰LO X+f_^Ñ#;uDztTqZkhd ͬ$eI~z}&c/)8<[=(| {S&J3)ZE@ N6u"4Np c͏؇fDMu/E>7鋻7<*MZiqg<$~"1zF%oy~crI7Whl 1 ~iYGolοW@aZOPvHebb$+Ij' U&X!bܶ~<(MRU#;G W;Ӵiۼpkm𖀳rB0'@F+(2qIådp DW\\9Zblf_9; Dwc{2gTvڶrș `˨_G'!*EݟcGL$UK+ bleHcI(Z=)vWz`Id~v&N@X'o/\7~ #M]ڍeLH =FƓDMto9=pE v@=0̴nMFw(t |} <(1ЇX C$Ʒ(I}7m bdl ^4pJmyH7!AYJCQ^یQQ w[c uQ*7i͂)O^}yu%Cc1Fe;Mdh$|.НB[%uQYb]53`o51 ,‹X·=yu7cm8=E5`MB4%(ro~³zhH;V0YvhՙPmdzRk^q@L$Va2@3` OMXМ3!2Kdv@16Z!Z[W?}`"0!ld_sey0ͳ?X3śR5G!Ȁ%S=EK2D"v L_sbWsR6 i[V=f2$*ZUJ#~}baY E9@4oߦrewuƷ0*:H6HG!T4v]0:%שPP},M5cBi+.b զNvx6EO Cr6vƎV56q4o{ΌVT%#X4+)h'k妅\PyS zm>lXm *&N,E >f%g(:DyęyIw}/UTMhg!X oʽo&X2: 0Ƒ Jg@WkRz{}SsO4Fv&c0wµYmqX?ߺRvFaIdQ6D4!0X27 A22LDϝ|ƊtQg~x[, U צ( ʳ[ xƂH՗U5?\Y(`lH #,#x DH6Ӯ3:{U#[ޞ ϧ8P w~]U1,HX۟\rH`yĒB Qа/aԵ@/ An+>) XRxXUu這ci<@c=Hҁ%ڦd=Nc<[ `( :yDz":Jw][s$l 8*,֦iDoM³ReNp%6!W>8+3 w<deM.Av&QX e,F_O>0QDH̺F mcf$kեO:E_JWGEU .A4A,ؖ;| )mAjP)vi$dQͅj<²N:~oS \+i2y- b(ԉfF ws뀌$! [lGwftbڷPFn)"h`VHĂi,ڰ>a Ke65_$H*0{[}p75$RfLJc}tp@dt -@7~Cd; $ f;N;kc-k1<'sF]*"R4 ~1'hvf`fTwhS6kCHh&Lm\ob? AH(ō@sǗaoˀ!Qݒ #afia#( .\6X- C+8 `xQ2BdOS]>RZYfs8 Df)3l_,d:,X`[Xccj ׈NKkR$AT MGCtSCoQSiӫo]KeT5 ǝY$ _L?#<:Eq_"gm`%r) $#= $e@]t:IbU_\/g/LHDŽۚcقR3vo~w'K 7I0KT1*FO \|13 qu5;o,HVrnBI{lEr(~ |YuQZSVCh$`i^T;BD|3Zt sr:E" u0ZBY͕ z e,5?*+*ukԠSꂐn^?=RLNmY7>̶`k[ 5| *2_eFR6=G{- ,ui†6wn$)A>3{3JMlRr8j 8W؁Kz5A7` ƢʋFDeio{ڷb.):Jr U8Gc _zJވ3FjP 6<3S"&dK$l[JcEm:t$?=?SjhZivbhï0IRi]]QjnwmSqQU +_qi'_̔sGC4TЅNo84W]I$#V'tZȫRon`>K**x'Q}nc,#kqAқ /M^biq`4"V-C|rKAM1P>GD圫i(_NZG٭B07|-! d {`tw g+ StcH6}u H sr(>7GpjĢ@ndEy'qϞGܱ˽e]:4Vy^ 2E^MV&H]$CbfTJpdL# ST\ݽ|a# Z ,@ B'+0`&@ǿ88HƤv]}$ђT3u4~u0g&+o#<l'nՑ :uz GwXc֡ SHX sA:I4DUڰk34ozU8Ǵ"De]@XE-A8}. Zs#"OR.Î "!²cMxvLD#}h#LCe]G|VHbYaԠh%tׯ톘!t:SGn/,V[2ȧ/nu*$H:ʃ[}F82J < ?9̙410h@YJݰ==%E4ALU׮#ͅœƩKfѱX|eɘh҆\W!QYY"Q'yRg`b;Oqbh@U|YUad͙$ڸSޤe i@LN׊`Q Cxd;l_'p|0<2ْݘ䔀rS4bX"BU|%]1]VkZ$FpP*( )XZ'Y$o$aٴAbA;om2U<,6ě@8&K ]3Rn/Pᕙ\ѿIްjc&0tәWɡ%EP6}?bb fҭl p O6?QC".ubX͒5 0~eT (6`{CWyPX)& 5lwk%Ҡ>=l@; bKbXX{㒀b.I?n1[ hB#H+F7Xj'튈iڨ;FQ[H;5W1Z[UrȤ/} bnRW}F*W F`2 GM%\ ^(bJu"y s.G50a\ rbfڈۡ@"P@f 6ft _HdfjgKm&|5!_`~+1 JNS9|TzWSkp7alrPj{m[Ed5 B4Is3UrT|Csb둏zt_;Ā#5D c_KcʒCvVMW!-ʯsRLd,#Кb`B$`Ī"UW/`Gv;.睹ۮ'9"H$-ϓ[fNtB0(_A,Y#IP==0yHC6:r5yّʒ!Z%0< wi5 .1>|seeФH"*@[.?u $eRhAFi2"86dY܁}1 \b0U, nkn}$HUD-j'^%dW4%l*ŷ[a`7%"3y(a)PˤT9vddCwAoRшa#*ߦ42RV,D *PEW//5`"3(Khs=~zbfhM濧86A5kŹHQlĊ_pk8L`(ۓm&k`Nq8A@,x6#G4Db'L3F ImߞfƪN^GU1u{U&XebT8d@#iMU=\r]Ƃ&QM1e$ap0eWD!֭Pzc5$њ8Ip1t:=jːhnxmoԒ|#0 ]yCSR$4c[@l:b ΙDzډ AO !쨣v˰uw??4i%$p7<|12: uèw+EG XT_lRZ>&uzq 2-3E5`= 9.hE$&ofӹH^' ӓwm J\dl^2l0AVcP0R.m8[F, UbߒDHc8V 4=f-lhB'`3j_h|ƚwg:W=.aF혃cȚF&#=!;uW걣هN@ո޹2,@d>&CSn:v^XePRg*Bŕ$bF-j%U]#5\afsƋ mZƄ Xr0|zUR*GNq`ʬq(l /qcc($a{zh<^eV CкfsNrs3K;|z⢞GfUYk$=}1NwbX:1s=K7:jPv.;~\7rxt";lET$=48܄5MW*Z{В7ˋ'>k6Zx-pv܀koN5;=^!0ƌ/v^56p{1b5}(DLXŬKDŷ ~qYFkSV~|3֭F`;NZˢ^حHPA툌HZ˟|;V KhP8Z齓, s"uFЊ('d#*Hbe [k54dpn2d2xťLHcCޗ1x Dл2oĒ5)ԚzP4=~.bs)Y4NrF(3<"<܄S=yZȤ@r,t³R(T8'EJvb$kz`$9aVsܘXzxk[Ψ:6Z.u)Ebٸ#fW [YT$jw8}0t2IAm](*W=0S_+nN14G od# (>2}q|` $G^tGc\gv6]k4њ=6vp(1 }4aED7G;|hD,q*QT +i{I(#}Z As\%.\:س0e'_ ؏:3q \| +r7h)5So/=zD -\#)z$RNlo29"I1=֎_>xyFPCʏc #/{SEk#:m/fXzMz 6œ37TNۊWbQ/!Pt$y|P054jq ,tI5Gf5iSU>Tٯ?,mdH\h ; rj]8|1mm}1VıPlڟcb2ݔ7+!.U]-CsǗ, }2J<tbDڤ /?nqGfpRWC*QXɕE q3ea u]f$h̥ I^U"dQ"*1ļka@6H%X;xD gdN>eY8Ӥ\|`lrlcwܨxR,$cQ` n #D$~$P۞//L1H¥1@:1ٻWSzNmqDj& l6`:P#dxr~] _;J)z=#aW+D]/OB̑o.T2C4oKFl\^ 5+C˨$Q"CݒV,w'BMmPMǯH&%*l[/\ӫD]\FY}\KJ̩JDH),D >!ɠzXZEG1e z}X6TndYZGHTn `aaP 'A~XJ&{(Ѳ06Ml' Xh"N1z1I 0>}2) {]f䶁.߁OQ]6ihDYlJH>Y=O\Ah̒n#fCB N|n(b9~5 ;o׏8eKwwd: :6BT^V?=<&@)\UΠ/Mv%^/f.Rjm6KTͩ[QPZ~~ޘŽXE v ScP:-F52P,7UmnjlX~m8t_)|o^bC+` 녘Y5wn q"tH؛U++IK3Bo)gVmQ;{1ФBn|&6 3G-RUW< Sxeʣٱޖrk$\ 83F҄Y.®7mwd(s+,y>ذMU54cs~{yaH'd/.YtU]W;bhk61AW4= X .uUsKwZ(B}0x|[1X j f>r@XA%QJwCcʙ2"d:}hW-{(,\Fwc޶4l&+ {1@VI 0A\ef@| 8HQsH._B;Pꁖ+<0UU!G釮B5;97~xet@gK@L6 H-H4 1kl&gXzUSbHrᦑd1*u*40O}2DHz=#q=%; DcEe,|*鿮4rG3$)c9,,(F@J{dwOm!Tl(__㜨L*/wXWh3Ӛ41{cGlXir0B Ҽ뉳IU?1wk5%1,$95눻K$&bm*"H*Fӏ|Q/h ȉ,iv`y$4U*1* l6؛Ưk lLE@,6q/f!|ð2;Dy_A6#4Yi`[ %j۝]q:m9~XD[kXܩw,If1]ECAInatNȁJ]F#"2X]7+4NIM)Urv邁w%tצʴ|7%#?<^%ײl 4dVkUZkӯ8B $2h J'UhUV,HAwE":-=o̠O@c%! D'b XGl@۟,riUh)s`+遈WAԋ:o rvTuyxτ2*frhP NwzalHwTd6|㹉cH)E?LPcX!Ө!I^{FcUr;f-V 6T7-;v^|50 o^wbQYQtqihԩM-g\c[Eܐ5 RaGH ټ@_S{ȑ%B6[~` )MK#F eѳ`:={0@Һ؏ٿBt- }qAZ=@*VTbba`9v`Lͫz @G2j&몐Ӟ ̔04z-n>~~d2D |z01$lQ?_0E -vI;~dugI/@@][uDustRacing2D-2.0.5/data/images/straight.png000066400000000000000000000020001360473665400204660ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<}IDATx!nQ@?U1l 7ՄTN=G=4?~~nq8^>q> ~n<̯Oi\>.,݁a˿Y miZ ʖMzҌtIENDB`DustRacing2D-2.0.5/data/images/straight45Female.png000066400000000000000000000025621360473665400217660ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<IDATx=nJ)JŻq&\/pH%d3!C)X²,ݝ}_ɻǤ#K g  ق ي ْ ٚ A`"3~j? @=@@g= @G @'O+ИӒ4d&?=^ΌN ^ @eO"wP3lllld@V0~f!W2~f"W0~f#2~f$0~f%0~f&0~f'0~O DbߌDP\0~EI?/.D᭘?y}ScsS2rS:zSa`0~Ͱ0~ݐ0~p0~P0~00~0~?u6u}tt}uu60~hYk>~ㇾ>UCo`п*0~0~Ǧ0~f0~&0~0~M0~?oUpuqUrqsQianw6N`M!RC!bk1~u; '0~&Y^`g)!b|4~txyy9!5C70~>f8"Mu ^/N'繾SqǏ988~|xnt{ GL#C~񟝝ׯFyxxbӧdofzr%N' o__UUVWWݻﳶ,W?boyzzW,;_oߌ_0~7~0~G7~0~G7~0~GAAAAAG`?`Ə#o?`Ə#o?`Ə#` ` ` ` ` `Pv C0~(4?B`Ph C0~(4?B`Ph C0~(4?B`Ph C0~(4?B`Ph C0~(4?B`Ph C0~(8j<>>.:(~?Nt:\^^*0yxxHUU%$4yzzb0~(%~?///L&ugkkUUeii)kkk`ee%6~(`ss`ww7V+v;% {{{iΎC)sZVZVgpxxfͬd6e<?vFb߿?dlTUthnkP'MFQnN5~(&ggg v vkPBup 0ۉC1($NfXO9,/?^R+R[󷺚W*"u]?FQ@IJ RmPhX?j                            o^.IENDB`DustRacing2D-2.0.5/data/images/straight45Male.png000066400000000000000000000053161360473665400214530ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org< KIDATxIsW#I6,(*U`&d@%$ _XJ+T6]eGW-cjJ ۓ^=z }ٳgWё+EU_J@ @Ȉ`BE"Lj?r`BBȉc @cb|G0a a|C(G_?,`|@p"eW?JQ5{ҝ_`\ҋQď 0. ~TB @cBpP#?,1e ~80&[`l ~x(# @aBPMҪ/{{/S#~x)1"~# @^ď0y? `ď@1!~8 #p 0ď0?"Fp#2 @#B D@X@\@@@`O)?C?' ~`ۿV{M8W/~Ay5?[@Xp_:9} ~nqK^vaFd70d~ ?P8?+^ָ@͗7I:X J?P23Y턻@Y^&j}?`G@@e*UJ7^P!~"՜ZЋ!U+wpJyp(ݘ#~% @/dVoJs}VDvԯ#~m|??ජW-VxKl/Iz?&k[?&K+P)e/13ʎ{#J*~*Ue*Tik0hcq!~N@_}r&~P&]S @. (g %%‡XE(OK P>=^Ɵa> 0uCK [(K KHs!3 0 3 p``0@gUPK m@? Z ъ> D   @N@* IJğ NO/1I׏{=%3A z}mĿE!%"~L_Ғn=$KgL_ֲ^&?ؾLo0I+Zѓ' /7NpIZpĿg~b cw98I&k]78{pIУGڹc2 N1gĿMͮj N0K[ğʙ?>[۶/3H@L磌m&qq@ez *a*@LN56)/R?6TeF(I;鎦צ`P WN$V[!~8*W"N$tWݲ}Q+Oe™GںKeBZn80&L?Mۗ8'L3SWKMm߰}{I)YJb0 r3SI`iB/>Q9`d&B #1]\'x 39ƻk(N d,~ÜƗ}L'Gɛw 74 L?=%o _*H2񺡕 Q˅bOV Ec"g3 b&J~O$~12[Cs @;޷?[Șihyz "ZnHHƟ%m_)Df?@ @L?LJ4Mbf# @qv4拦g? @`avAdJb?a|IENDB`DustRacing2D-2.0.5/data/images/straight45MalePreview.png000066400000000000000000000067271360473665400230240ustar00rootroot00000000000000PNG  IHDR\rfsRGBbKGDC pHYsu85tIME #]@ WIDATxkS"g᧛ xAv3?2S1 ( * Plmm2{S/$K-(8YeY 9!EcQOW~+_UWyܨ{U^ׯ_5 u]cٶxhccCkkkz"8j5'%????ooy[ ժJ0 ~ٵ,0l:^@'O ?1~b @'O O O '\U~OKu?q4_?1?7nz6WXூ3O =9;O\,͸'TH57.w?~ kw('s'/~d/P'lvNO qGKWRv$ ;?6xD;΃;r]'z)'NoDAGW+?>W\?Q>?txë~ XůOx' 5zx ݱ~ ϮeDOx vF' Do{O>E{'_ k7|gOO'2tOdG|~Od 9ű~}D??h8?Q >?~"C<Ɵ~y(JrٯOx jDW} -~D?C?DoGW8;' /j?8nZ?Q0!>o(xJʬeOx\&L Dg9WrD'we?'K{M{OFO_jp ~7|>tg?s?A/IvlIo/?Do|>͍ө>~fNF}_ ,B}7ꀟ-L&:??WUד#}'{Of___k8LVKGGGjZr,R)ş?Q_]]LGGG::: "7>}DxxZ]5 m9wq-,+fTn?Q jZrҙ [Tno({|ߗuJ%mؖ)ʀ(HLο>K W' (;mq9}M**H)h4('Q4U,'h)僟(`өᰖL&L&lml)d4tyy ~L& J$r]W|^lVҊƣ..iwt~D"J$r**r&] .>nk_{{{' |>/T.U('iW❿;?Q{\.D"!_X,u]-//+ NNNl6urr`~3b'_rWBOHHDkp1X< h4fW' t:}sQqKNl6eYF' h4*nh4TxP(x<~?>>kͦ۶OdPgggrL&Odo߾RN:V6yT**' 0S]]]-/JPTy'2l6'r9mnn*)J\ϟ5% q_>(kiiiBD$k0Ǒ8 B, D$k2-˒mۋ~"#K5'2$'2$g!2?@d0~` "3Dg  2?@d0~` "3Dg /IICq[ZMŞo~NDg  2?@d0~` "3Dg                     /~ګigg(gggggggZ ߴ;?????1~ "3Dg ?@~ ????????????1~b @'O ?1~b ~~~3~3~3~3~3~3~2 8'5NşdD>z+өáݮ//?ofh4U׵zf^kٶeBr,fdNz?v~~t:z]F4i>+juuU** rzdIͦjju?@?gSёz|͍lV,S2fJ$D"NjZ:vVn?PWR5_IENDB`DustRacing2D-2.0.5/data/images/straightPreview.png000066400000000000000000000016441360473665400220450ustar00rootroot00000000000000PNG  IHDR\rfsRGBbKGD pHYsu85tIME &rO$IDATxԱja uS#zsQ !T2A2 繄-Ij^=<{NM)wHZu]CJ)ǙNi6,$ ~?WQk|xvzbfnK50Md>6y=t9-_,.~~)%^f^;uc73?@@@@@@@@@0                                                    $%_>MIENDB`DustRacing2D-2.0.5/data/images/tire.png000066400000000000000000000117641360473665400176250ustar00rootroot00000000000000PNG  IHDR@@iqsBIT|d pHYscc`2tEXtSoftwarewww.inkscape.org<qIDATx[yxSו$K$K61;@&PR|Pi&a d ɰ _:!tlcȘbW&`0@l9-k-Zrۊdg}C{ws%RMJJZ#BHT9˲Xh(HLL̙31iҤxm %%dZr`0cIII<a2t7oFQQdYFEEQa4qU>}:NJG0 TWW% Nwݞo yVuZVG <Æ C @FFz=u7xݻwGee%;I)~4:\0|v׵l]@NKIIy4hĒ%Kz7o")) [nűcǠhPVVւ<(" BRPJ 5eqf X,;- H f>|noߎҡ( XI`2ѳ',M&Annܻ\Dmm-TϮ~_]]}nOmѸ<)))y… q ܾ}gF~~>E ?#24<xylʊʪ*|?\:XxcZya`iZ{6ypy8+B(--E^^^"0 x0wL46Ǿ _8_}=:*z3ne- h.e7Mp-1gΜ[;_?fM%Y`6B(¶>¥˗9N(`08,˻fy^d`Ĉ;w.>c8TUUh 2 ^|y7OR .^,W^]EEY+eٴ^=zd5ϓ?)3_V?_/_ƦmŸZVWWD^/LKK$~:1w\_`#ENիѿoHP?(2`JVfZ`sӦ͉=YJ, U:j~2yI/CV#==%%%]vhܱ Q/+xQٰewWޡ <=tV.]̨QQ^x}:222kkkQVVa<`6-P,]c|$(c\Y)e\d9ƮV9Zdbb"4:ahMB0zh<30`@ %BR֮Z%$7W<۸JG^h6[]nt:]˲ӁFp7`0W|YYYطo>3?gWea(xQټmʇ囃Rzb+/\^vjZL?(U5=qSTO%;K~'b8tjZ=e{Eb6l<&)Jɉ'eǺKGq WFϞQa,ۋQTaV: @qq1v$ ={F))(,,*nAaail1 èUANEQ둓V#G OQ Jo߾]F5O6cBTQ BdYƑ#Gp֭p BUVN( 5K 8E"РAǏcXvmԴbv(t تv=a4YReܽ{ᣏ>0D{ ŠƍիW˚b 2~z|'z2B״.\$IWŧe͓&HҲ292,F p8 rSNEff&!8@ii)˲'fpW`a٘ѣ3 !=+.͌]q#*"={n(J#X GI'&wF(s'*Z|!̚5 ^N$PJdY VnW_gzCHOf&2h;Q<2hМ>܅ |Hq߾}1l0d2<\W$Ef!EG-?8!.a!O/8t(O8XlϟN~R(R*cy)q(x$eS'OfggpSA"@aɓ ٢V|.\UpA8TqTkz.b.%`%y+J֊KE~/G b",_EEE8ujk⩡PH Bn7e@'V, 3j7Bz> !dҷ06#ɨG1eL0V5\VWWwGQ/Ơ(PcG^{Unڔ)!;̮BN2e믾uxkqiY(_ٳge`{J_FnI+$ObY.ϧNE-6{ق!?ųlٰ)Þ=}ng'O o? 햀1J:]ᷟ}_ /wޘ=t BSC/wUf___7lP(**$Iظq#OE_ GF`0%555~,2t R[އj֭GZZmۆ|򊊊>Ej}b,jQQm) >U {#GP"ʳ}vlݺ>|8rsskln]ӹ+N)2Z055uX8QooǪkQىDNN[n!==7GCI$l#PvSd ))i^ߕڷEa;hON3gv:WXE;x_,IJV7n E&f+z3kkk` s֙VpN1Fa=گ 8p0*l6 .^gϞpq/y.PWWWt:9Ώ[(@;b2^ILL>v 2#}?&Vjrܻ6 ޼waV `֬Y(,, GWZG=|'{}m:@?X,Z636T(b -FQpfjAAMM 0yd|>=z4\ Ӣ(NoZ6G9-$bOR &$<֮]ddeeٳ9r$V+_ޜ|n?)̶1 !!!dtv+t8K/Ʉ3g੧Zl۶ Q8~t:3cIixi?S U*U7JVMZ EQ~(.Y_Qg/O? dR,;eY+˲ƕ`PQ ʔRRe$IdYϚiz *@uIENDB`DustRacing2D-2.0.5/data/images/tireStatusIndicatorBody.png000066400000000000000000000004751360473665400235010ustar00rootroot00000000000000PNG  IHDR4%;bKGD pHYsxxtIME /]IDATX!NCQ󞙀dM,2Ј.]W@p-0@~L*IpKYoxmU$1@+zuUINġ|Ĭfğ$OЦ!f}Q:v`;GpێñU|HrWn=XU+LL7ո"X`Gwo&UH#:FGIENDB`DustRacing2D-2.0.5/data/images/tireStatusIndicatorTires.png000066400000000000000000000007501360473665400236660ustar00rootroot00000000000000PNG  IHDR*( hPbKGD pHYs@+tIME +juIDATX?K\AGϝuHҸv _BR[FHN\vٙwSqNǴiޏ;L1~=-QM8U}>NiۖI\_W.! 0ofqBl`"J-EE{캪&2¼snb{Fu_1u2bfcda36fFBP( ›Ǽc2 RUUGDx=93?DCunk\MӜGjSƉl頪 uV.xOSE2+6;9"b@UU|2̼3g OI}/ 9IENDB`DustRacing2D-2.0.5/data/images/trackSelectionBack.png000066400000000000000000022216121360473665400224120ustar00rootroot00000000000000PNG  IHDR5؂ZsRGB pHYs  tIME2p IDATxڌr$ǎ-#bI:gh^lGƎuw1ݱH%nEfFx spA|DLDLl_70KLD(T9P#'O~z_Myֺu-eIU=IowT.yIY+Wog *`\"/.6kם~1ϩㆵ /Ϳ-.f~ %De[du_}_u]1?_{(u}}-,!&Ru{VG_yT./c1Z,YKXl-G@U{{5V* n7]o[vux"H q^[;7n}YkoDLh ~q+gj%~\3mg!6ǂZ@{:qԟ;?mVcIx^$-ɽBޑN3Rۻ8?\N6a,]"߼8p[_mn +̼֒,L]Z @ɗAnx[\ 'A}Q"#)nVx/W<Ÿ8:~%Ok]rEd[(11#7<ӈ%zx@_}ۢ0߷G2k6_"sd78h\wT^ G.uo}?k㵱Yp<^/嶬% }ǫ8c׽5;4< U2l+RQ=.)CvĻP^!(|i,_%HQm(_}=r^.PG=۵ PpGmZZ׺uk].Y$`Z)p?:hй..bbE/!&lU|~ v'"%׵.kIXs[qm ,|+(\Z/7b9)A8Qܶ;BzՒ`3%h!e|{ *$^\j5?f#7JrV/:}P̭x0LGP^ǒ=;Q h5 pYCI/?>t~>cnH@ЙONe ۷7n @'<1&l]mlB4k">ztg%l_q ]٣K u'V5e5PL^XıfѪ4"sY3qߟߴnk-X-!(*}: {,Y>-CQn!&u(*"QD:ץu1)psp~^/orX"iu$<}Q/ץlEhUJq/*[9;yNKo @zd"̣-:=ʑvle_@N|sf7z|&c0( 䪫=J6?J <Ďxͩc|?8.|C,VeKޝumr8KH$~yKq89gcp4@8!@;F7u_u].{H=ut}N5E5³vkQu|qhI' qגx.Kq&mū-aeZ&+Y1F,S=&3c[CkA 8B%LޮD1۔,x/9x7hNҿ]q5l)8z iS,vW! @$fn/P GS}B9༟,ɔ3r%Y +lwD>u#p #oowߦ֐Wdk!oACCJq퍽q>Au@R=.F{u4 NQ}7h랃ܠkZu].ߠ#0SI$ѓLÀu뺖%H9l`Nt˜_V,H;4[+&9Fk?n/>ǯg?^FJzHɡV \׺?_>~]_r/׵I6doZh^XQMֽm0{[ xL~TД-_ 9UmـbFA;lWWu}HRaԂ2|4u' IҎG)~[*nnG}Cc >;H~.?!a9b5*%_a'?1:~_C[^^^k fo[YaWm ԒB8Yjzm98/ gQHq]>z*Kl԰k>G_+H0X@㑠V)ael1xo@|m^j)fO_FD+Mţ}kYeC͚gЪÖŠI,b oRړKELտ_JÖ4 5(pֹ5v\%OTioڇǪ'O&c,@.;"%}Lr,;9 $ms~?g""k}]kk]A@{70 +?[0VCr\t+=zuCG_'"1 33RZO֛,ǿd],&^>>_c]/"mо!`>DK.}uKMߗ^K_ ڼ:zf1.!Oʢg"+p{v/SӚcEǜ $B04c:Kܪї+b2xlc#k-,:w}9~?)d )- .Р8JupHԾxfчc 5KgCcaj\bzo{sBԃЁGγÚ*(N9O/ JՇ$*G\^K-ޱKiM@MosG \ ZdֽPlCUO6=G1Բ(u >&&4_ɴ*Cb@LvjN7CQ AOHJj&}ocnYgWC$y(ExS/Zgj YR7pwަOK~ddO{jJo=%H:?e`Rvd 9bh 1#>pF'o)h]`0qxhU= @%~8àJUq:ҩPR5T 4tPյVxs((+XWe8;-@-?ֵ.>F1fk}ޯ9ʊ֯ׯ_ŋ.s}|^/|oy^y-ߺ `0*  3/!+tze99dĈJl,]%e - X ()J[F}vC\]© NȖNCa  :UE)5W2'b@Yahq1CH1xrVcS=@ʩ~Qiz?l? fcLhSHfq,#NBwFk6ͿUqK;I: }^B |'0h梵"8Q, ZPE+I+¶BX1p0;;OqIP2eUI[ȌPA@,հJ꟝x\&6``}\n%khrAhQr% Gf2 zS )bh|{sH >Ta-GfCMX{!XG 7@s\.j7(CQA6RVXXf~GֆA^D}uaoj4~e| ­J`bTpznm:y.nCIKx`B}1/u?(Z}~~_??|qZDV[P܈4گs}(>߿>ϯs]%|-.k}^|y|nեJ-trkW,ut}^{V;f~(~"8-UĤge8| X 4aq򨆣&7}<7,;"`G3灳 !Wjx. xmF9ON@S`*%C,0qvLՠЯz'<! kU'?+ %G͸R<ȽVNzNɭ"ɖ0E-\kª4ΆnOR&[ 0  F[ec`bY_WN ? 1!#]4OOC`aGa*B6}*BvEk%a(k}$x-$zc-+ˉYO$EW:0 r<oT{aH49V;maY3P#:M }.A- @9@g.#9rƳdBU^GBg.2ے^W6&`Ul!>`Uяw['9\;iiBˇ٫7y!&nPcXe~*F=lJO l c̓?C<YqYFPB1J l IZU f|=4x Zm{qkQ92/+Pv^R^qr#Α4yn=[u'%!FL*DžY__K]P0z0YAVCϱlS XԚ ( *ΖCt߳ +6 WQku⏋+zGr_C[XMbw[HkupeŠY-vN԰15'.VMJr@$t1ݽGJCqEH£o V MQ JLJd`5T:T%xp>(5 j/'Dom$ m!u4JV'7&7P'`a}޸3ҹ1f;fvMyLHÀ# }o|`VH+'*LMR>)Ϯo!ĶoRJ^vo)aIt!L>N90]Ӝ4gA{ԉT6=. dLB|8`{%|] ҶXDhjFqdN:Rwn@E8ذ >|mY_[Q3v"ky}Z~'_L "!%ZćEKr]"}}~O>YnЂ 8]Et`] |:t^ﳯZ,Ӏ IDAT0]hVLt@VJg68a>X^P'<39Ux-nq^$>롽`(ø Q<3OpPj-?ӻ:\i NzA./=ݸȤ;ځLW \5ACݮ'ttĹG.W!N -g>>qzQ#(T!DAsFy n0ձsp%,ܞ+CkLD럇uC Q'#u3&"U?*Ǫxxn[Q_rrr|}}}">"K,Y{]su3f#Xʜ*[^2/񔚣$&죯s_|:&^)~}~:ڗ| !S&RCVCz%l1:xRzDETB fd:Dz9,K,,bbv֙>Rrޭ[ c}x "5kl" &>z5G練ܓEN}rK:a̴nW{[UT2')@%}1awswKĻ3Ǩf[G4Sx  .W5uҨƾKن_D@TL qjg9-OKX]dk >mP4dccbZ8u %Ǐ=tp =߯/MP&]pEcZQ_r]d6F*%KKt/t谠 9 Cv`h@!Yr3|Lf\vl͟ Qd(-Ĺ@g iYG7C c ͈$uY|D.!atQ Wk8E#:F8wO$e/hptHg18^=vp W׸Mď!&JN:_nQVfza`9i%\aV퓇GBrsJPê|i[Je=T}İ"-{}O1v܋YrDzF0?>#Kźu͡'*<3'Te3(<3DPlpɽ^^9c:ߛ_['3DֺS~O|%'CpT"[Q|0:AXk"z25!:*| ZsXcRK\Tq6V"=PbZ,GԳNJ3kzj `me!/h-E"f/m^@B Pg8hrQ6] ;ξ2BUDߠշ 0 mR[m6cr'FEsi=@Bʚa#r$?0Ck BYk"?ۅFrU#*"",8QGqsD(xQgP U99H'C$$6,{gT>@%uE}Q矀 qrF?|-9rsv7G]>0/ 0@O C^" \6? E8!=t"L剱E9D4=2JƦr_|/<ïCoi_[? K7忠VzcWY׫5>p>lHz}%תC-|a:v[k,*'i @Ұ(&8Vȉ[,g96G',xz޵rOO].e"`ﲍɋp@"P!f}G @8 :d]o>/,ċ^=9 WUPu դKEzw_>>1lݻ|AL-93>1ދW9G8(EFQ@>TC$➹E0s1NU*GJ(_\hbrZf"9~W&%HN,'iՄkSI;yy270$Er_ q_w2|1 %V]r/̃wdTOҠYhp:%m$7)98֦}(1G6}vuTT䤙Hv換>nܗQQ. #5Ū0)/8 HR]ee!u-}NMצfN1/E׭'C|^뺈˦p굑t` )CpDxKD- j<<9N>ֽD/uHFOe@$KyŴD6.ee9Ps]-԰:_pD,䛯[_/}9Om'T= (%EGPUCtCDu$4r-ᦽQFcC0'&?)[+VD޺7/%zH* Jvoq;֤E&Fz_.L:FDCGh-UI"TDaE| Us;&\ZB#m!̩ )+M35rDDa{%<TOAjj}ѽ^i5G%8IFT?H| @Je**[纷SX%G:|-eUVK`ЖsČJr\Vl)^^7DZ尅Ixhf5՟3 m¨>ep»KkRuLݪ' 56oJ ♆%jPK;9x pŕ̿CT:֦5:t]zZg^p}\f6(HCl#tX`d8㤕Vz% p-dֳ$1/s" 6Q._͑:U]~Oi`-,gc>v̏)_~3C+3Oqr:b7jNS(nIXV6QfVXK`"ߢ=-dC4 WFoB.M#׹7_pQbSTqENQNW ;#W tO]cʇw᣼C[,}goaI@qGKnJǙ0nVz[4_р ?m* љpAUY6pk-S,q2[ ]|GS%aRV>q Z(Yt:U4RV'\>0Wi"ֲt\-P *{m! ̉j@i.*crdH !&}^ _4'ߞXr0hq*?V&gJgDV [Ȅ $̜C,4P7 'y?[|=Z]O6M6]1HGx,JؚVpcIOe"%Yvxӿmt Cgkj$&Xq "eK|tש9PAH*Bk%6҇ 9.0C U|?$^[HRĕ$`%ȂduJtj[lD>H!*jt5keտ;{:w'FOד3,qƗ4AME58ڈ Q#ra٪ǒ3EHXe^bݳKDXQO"]P ܍.';] ?skDn,Fjk0Agk dܡkۏ/A1pw)M\1C#>|^fqe69PZ;?e ?3;;kL>Ki4h*#=ze_!Gfv4\=́W1Ձ+:/ne|ϔ'I!]—b/ԫYS*1#[u@Hq4h/DH.giCx\RbsSdFxwJE(3 h#..D+{)\ê=ީ1Lmuh*Fax z`36$ifs6{ "-OO/烼aL Y^u`^`(BU)ޞ5RHjp ۇG*|=d}߼N'&;rZ"ZϠ"B0&hL|p8k1eM1D#T GG8iZPb]lx6/C Kp1ySl꿧<eS[~%pmJR!E+*Ez&xNlBzOilBACsR?czHVIaOM ݼ4.ܢ@_! ̘pF;|1劯ŮV ȫkU+-A;,(>@%Gjl 49b)Lr*֤K1:JG,CdEp`gy CKp[7Ư( N"QCX-k,YCAv*JMi au*vtcG<{CGM<*CtIҐ ^Ҵd\s.̜[+9r: g`,v+qpJkixWk(͘p51*U@Csx+#$& ~>=DQ&= l*eOBXX#t[]mu %D*t }(h Z?~™%$2h`:ZM#q;HP4J7 r?+`n@{3F9)`E:oY҅eq} gsQ%LvqɴOz<% @5aX;}Ievڼ Jt$rnG_FYߧz̅*(uRT |ʔHcoZ7Sn)Tl`qp=9AIBةD9lP3 f$0͜R-zxNK[mb@# $zaac8%OtiBuw[DAxlLbFfWA ۂ0f;vǮ [K /ҭP|pOqfWe1' po3/r{[V*{ނ:[:i0MHzP,ب~TJ@}7:2 H`)(T @A+1ƙ8/W¢uŪtP-$MKGeR]?5jGD蝼]ߕUFXZWL͋f I4l5<.94r5Lkk*hܨ|5=@;%jN#:/*? lv\%f BaͬUTt#ZHQ,9-Ødf~Pn=Bj"ZCMBOaRBEulOӚIP17 7`~w]fܢq^hZt"} ?wc&I}f9<`EhW,'9 :-Bɓ@ I]i0(@.3gL9N3-=aa+&m 8tGSlKa{W7/(X0@q-܇t׭\JJ7>0k¢F1vEkLd߀,k2@Ͷ& G |T"`Arĩ%`i,rZ/hs"8 : v,xYz°pWHA8-h "_ -4 K/q cg(i76#6sy8H(&I9Oi{I|T9b-aM'5`Trygx& Se)cnte IDATHYlI%ZDQs"I˘VéJd|q+=#f3'}_ظȪPmARj!y U:Lq}^/}zaU&#Z|*ǯeN|IJ|`d7$ճ i^fCB{GtT4  : |zDjU'u3ڜƝRn}nJkhv ^Kk%̜ƃU#⿠dT)d3J>?ib4L1D_3} ERJøf;ʠ?s$Ù$$f( Rd7۠Q()eq U7 zhFc91{$j2z $%Qgl&X:ʍ_U @LO24~۫Az(0h,I 2zT+eV$$v9f~$S;+)nG.pUEFt&3 hۘtX5>DrG6rX-4SE@"KVÍ`_FIlv0م.ZGyZ??x8Hm=c5.#JNUq+ Hs?]Rc팀[7jP4$)$װqji8ci+ʴk//}hCY~;fG٩Gb1D0BNF wj\@ʣH8)__[_/|t7vzMdFf͠3s*#BN`Qό PX17 \b˚7tլƴ*eQI=H!!aUʌ4oMY-y|A.ogaT¯[v5M %=&E[߃a0E_{?&~Y'7$;.5+{' g\1uq˙{PkʃSb "=2I)PӫԭwrH7C6uEh!/SkF8YnY Мv߲}V!@]?ƨ7Ɔ+IMۣMMt%H4HܔnR`)-enFkѦqړH`2> Ѫ̈{5 1 I3#ml#a$hKh-xo^(OlSs [C<M`7N\HԠYIȻexlƙzOK$_TQ,ad ׯ< (q2  28$٣b$ (<] @1s`tpIEFQ)Ƒcy'<ꪟJFMdSNMe}CE qhÂFb/*˦8TN2{Y- ;1LduF]Kcڰ,x8qY$?M,|4 *i0#~!iR MFK7iA \J%95NkfZI[/UALaӃ^o x{z]wtx&pϪLY3Soa3QN l# 2\Y qhج@:NUW**P0s.MzmsR߂A~!gV'zAu^dCi"mf?>F*C6ˡ&A| 5Ed[OTdnSBZFWzNEIr-]'rd %?E5m>'zOܺY4)1a)@,m?%Y"~(*2CnND9@#**-OOUTzj2+ ӊRBfrYs}A$8(2>Z JGCf:$%qV:)yĔ-2XQx]HAw|ǒK'0+毶'${jT]!n~!0@AB@\mPtX+&P] %,v$mD _<β.3 X@A;MH3O֥NɠA,*쬌K>!}p<;x 1f1ӭLSDњy^c@uo 5")g9wPJ#Xjq=;0z2sa*71'7{wbg̸ `ɨ(Kx"t们`=]4D0DNXo=e@Qs(w+tُ!K PيԒF.Hǵ?H4\*~HR28aH:Z4a?8Cw.3Mlqv~hi@D OEk/~IH@+Iی,(j1qes:j LԨ\>& s<ak^3`p$&KG>$WB7*U=kNA@#KjܭIz$g'ӑah'Y=CLzP5;R!Som+g 41$w[dCFL?=6֚ϖ2c&?T]upj)d=.^y,bUf!1 ~j7x 6T-F%T)6JxvnRh|M٤HQň'8dn @=,ͰYaݒS|eИՂ:V4>`YyAnUif`xQ3 s9/NtQ:]4]i dRJM񸪣6*rr"I402p)* X(P"7RV.fm2!6xبD=zLQP@$2&~a%dv}ehfDwUmg)&z&6Rt"G^FK,T-z*V{-]6"mjJ֬C}E y5S ]9oA_?aCV~ΥުH {ReФsDWJ8p @s>R!(FgCW^1>Uogކt5Iq4; %J͵'us7aHZ`Xm|kнZ?09M wk@)2kȼĥE Ðo'Č.T㘣ȸmkzr'+]gdzmߣ0̖JǍ}dN g H?c0lv./混o@\Po&`4bCee6virBN6L9E-6cMs86}vǼԟ aZüʬ"tyr1zE#M1-BkZtJS7QcKE B `F8qx Ps NۀƉI̍97}7A4 J*5DB1ѭr\݈4n'Vb|rg4e>ptz#>sRi12 ?/%8(}&ihnC~;S׶f— }_0p ZAuEyATV T-#NCH R}gIÔ35@>~rx{bxC0hI`TU\ٗT5:Vn<ʹsv5*?o{S֫f)[$ (F3VF)d9A+6+9y-<"爦|('bx?i2!>m:F+Os>$5#쨱)@|GuZ!dN}MK9F5CDJN"fy$mk,,]/ܼ\CR5q\0% ƨYm>HuÕv+3gz)ƩnQđS)`jDRFx8sӳ[B+(!~Fa2\AP-,H)n߰0 .%i w@뽣|V2hNpe>Zp(##ጃmV`:Vc.PÐ7QDՆEBhrGQY kx?dɍO7-Rk "eQ R:{2i3QR0Nq_ͱ61` MK@[HTa*wk=1c0vnV=)6Ϩ/eIOK>!` 0R}ere(]!Y $:3*E4kzaѰ4I^7a @,>MVm䒂R{{fh~d Wfw5޻_ 4!rcr"nx,ݘCkQ@;qnVQrr:!|?`ҹw۸bxe-fn"gߨ =tT=kk6bz]X tQ˅s;'=50xLcjҴc[}m9?Czps@p j!d Q3!\&t6?kRR9np ;WZNF¢(!c:7Sws_]DG1(=-GHkZ8!G!瞊8LJ OٻnGrʚ<i Ԟ5:uԽUd2MӺ(Y<5hxQ̘}r^Ė oh8 V1aS{:GQ-{ꊖfR:[)H[r(Ҙ4+#p/ۛ2ΐ^eX/rteK/x`IQ 0I3&`d=+l H l޻+UQCHf :@ 2O~SiȔB|!o=}lBlM%'Bfg?[=f7 AnpZG "Ԃ긽+M1A 1u85QďJh@8~៥DJ zlFu=f#AO´:3{I8 R ,ۓ dќ~pvRseE4Q TT8 {`JeO1 η3w~B7d :7T] ,+!hS::#,T&>j @tYj' 59*)v)ZhZyLmt;՛ƪ@l5As02 YU|qo|~7ߨIm)W^gvi\8sST)/a211J^ z*Xf c^1]gp*x'΍ ) ~7&Sl-tZi\gzΩX,?s^re|aGu!E)Ai,BW͍e&h'#(1SݝL3rΙ[YױHf!z Л O(bHomgXvsyϬH=w  X=ڣN k,e;&|ln6&F6`ȁ40ٞFH<(_AB"05^o @QCR25`0 \Ay87UR0g&F&nŊ”{ oϦ$ȪIGOnBܚ1AQmѢ&}j5HW0頀߬#|2Lޣ*Z<I|DIpbvdkh>uf4*MM!z*wia-%%r\Q6A*ex#s| 1LmoNsd9a`j8 {](1\s*vףcqѩǰV]1c5KZ2m @ 6 xI4콥rÁ7R OxA.Ԃ*釞=`jhpr~T&c KZl4S;鐚D=<~%h} (4еT4c+ y3mjI0@|7|=9oʴI"4FVll&ͬdof?jK 0ZK[*җWHOOifW6Pƞ{f;C/3i~4.bRZ|:C66K0C3ahA8 *7R (XӇvߜyV` yoI3k@*w WvGfc**yDn3^*C¹PSt,뒕ӝKl ;2@j}U0$6M- p3rbbD@Dp[7 ZFc3̍rI'$bh^Ӄxe"]jU<7Rѱ(&%p]} )Rt{g~[Ť-)$M`>ζ,w]>ٿݹ0W-elDs샕t6 IDATFTVU <`EOEBemԨQwSKQDJgjm/@ߊt:MRGQ8#:mWL1jjj4:Ƿ'.f{#+{(DG4i}{Žp~s(3!lW͊vͱ}2 lWwpn=8T2{aغ=͸}3% x&DX3c{ nٯ3tņN 1 T;U%YNNR'.h]V5!b_9J1E/s'к37-iгb; 6fiᜑÞVզxqS$]J%^ B@cX?ɭiM(M9#m-<  OrzOZf|ԁ9{-O6=L`hq:bO @lgP| } /F 5Ar >Y1YdAML9cxܹAdz:J #!Ӫ(jRV])v !DU;U+ v5 ;%@N 7{S4RZ|wpΟ|?xF+vKBȾ(P]Ba0lrxuQAu|1 @yj,X< HQuT$:-!&70S:>*] t6uBvZ.8:[og&H!wKZ{ j€֖aMϼn~ig*}z#caKcsaвDI p(&aJ6uvuZ HYS)!,e@62xC5P$Ǿ8La`RRn-z|O,=ș2]v9'uHaf|h}IK}.`maƓEJU,tV t*&EEẀ $ 0䗁)`hm+*?7Gƒ*Ӯ3&Ԫub.x4Z> bU:MhMakXGl/ Pgha%q~* ZR0240Kd?453mF |SWwR_SJv3u5xڭ Ƶ:ÌT5NdB_JMvqqۄ FMA~-bW]g@ъ1NIff  <^62aW^d9thf Sp߯)yAcv?+%/%2#=鍋4;6z :.meaj$iƕP@vrVJw;ȆI<-ƙ‘m veԱW4]֋;ҡ5Xi6!>d4nPr%ȯQ@S'h7^GFDtᠬgdH&/Hę_~ȒM#>kh fbRKddsADW[v9|F]@<y3)8qٔ l׏QO! f%i6,(ܨ\H}ewL*N+jV1g7Fj> @Ge^aX\ɡ SWh7wy.E$m!-UH)h02L݆5ቃnEk֢%9 5s{\WZ'^b<@ӹGDj7ߖkWJ@R :Q@ T: &HܩfÃJCa\Yi @9KQ;$榗 <>O&|&jHnS3?pثZT1ʀgC;něOd| K`6m`aQ(~Y z[_XN[YRDx\k]׺ۀ-4(,\7!Img/CiUyJRe=-3iL2#PQ7pCf(KZ2MyO 7!E~N.C]2jtqu}<.wj3ֽuͶU]]JUA#UA Foo1!KDJ3Y$ni'w܃  fɝcDmY^ 0K G PYfq?94yLxP/!q1ް 㚿PPeX[%fҹ!oh\;!A#%x5sʈQFO:$A19襪B#ThD0\ :a@yI,~_ܜ6lUL Ak $QV 3Вx/hLɲ %)G7ϐ杷n`;MCBхlpU4 >Ŀ@ek׻K0{}Vs懀9k2&oJ RA1¬*7Ĩ;bvF/Vw>0;K+O}8 VCMSnJu3Ҹ;aޝATLgLJK&fw!'eǮ DQSQ<ע:=}ȎTBA[6#>؋ŲHW|Ml|Қ~0IpGAY5l*٢SHyR34J-Hh2X\hNll =^Z;0מa kw;?7ZnϪ -H 2nCi⶞ =81_Q_kCf *jNh>Y}Rֵǵ5ݺ_%7TZ1DlLגǒk}<Ϗz\Z7[_ﭷ\k,ł!=0kC%sxw2Bgm8 sJ>(Sns!'`CI\yh/Ý=!m o'JɪdEE=l 1nmpc8 A%&X $7k[`F?YiE#+&ǖyl\aj GD3|zҥ2N#0Q'iD$㼷Ql 7JrzO*?,\Ms@iM>HfXs ߡA-#' #n8oj:7@6WtwD<6co΄K`sg` '-䀪*a5"$\n Cp eBO59\ŬY on^h?T*CƐ HΤ6[.4($%U9( -T gy'köǺ6ӥsF#raޕI0{K@H$DM'?$ B|; [ UN Qh#̨9!aut\VϢ:7D\ q71i r0ܫ7 5 l`#+ptwl&S7|Œu3x`wtɱ4qC9i6>LǨH."!^0c%d#3Ve5K[e.>x|~<>KDHuG9tQ DZZ>>Xn N0P~[^FYل%տ~ޛIo|Y Q]K5g(X,l,d -gy;OXZ=K[/pӺ}dTtpjW&1U+Vjb$%&:VjZrx>sf-prTpNJi[4cDJa>wȢ(( UX:8AeqPkIUmWb-b]ܰ<*qطx @c \kCA(QW<2ۛʆp3~~aoƝaV:&[!ghlG-5sw(8ɥֲ ְŻ*3kӝlk^uTM)f6R2R]o_YVq)XޝKi67xC-I4SVKߦSi/shFKzs8`BPw07տ@`WŷZU:2f]5]$oí " af"7$BḢKx]r6J/̾_"ey ߨbn}'ȨgS0[N>21x&{MckAl4hEIEVfȾs{A%x2a=ZR ~F2Frot3DM+2KRznAZGL lfb'`0se a^u {3rɧf6H~ CCdP4ٿt*| "VsU>xisGX /eyP27(r@2Ck~=t@=~_~|<Iu^t~Q6= Ϩ/拽%XkKxz]g{\xė3-K\Y7om10%!Pv8l2Ĭl[  g){cJ?~\7~},? SbeRfcY8My>آ(CRdZM /98k{#Kjc{H!GTv܋3Tzw9jz4etNEo <-kA&V?jS3GkjuV6<Ԉ_S \Z\ 1: OND uނVB2gs:ɰ`fȌOEf0T^XoOZh?NH8h,C`#]7|=Ee^Bә>U?0ǐ̔Lf&5jg6bp!'18@KHVҦm  u- X껬s<++Qw<PRfa4Vtx Í7_\͒(.Jى$X/)6o1ܮ`[7[l 8D T0ų6c|A EY~ :VO3sH Xi%NL6n68G"*pev$`$S9ch'ӥI8MBޞZGOEr3Gm%1C@aCeZMr$yNȶd[m;G`8h$Bj$4q,da(;7i|R?F=Ө]~NY7+_#55f":]B@SUZtP=b$f!b{" 8e(çݕgl-MC(dd[iozN6|Ig} ~3CdRWU# )%*cp. bkvVxjAAnItq6o\%惶WY#qE_5I8x v!sc,~d[rF+ AZ1<+="Bdn Jqq/? tOգ0)H~vp:V@Y2&a4]2ѻH$P/$b{.`n^Tfix6yB͎q퇷%M{Ӑ4S 821ƌEt!F±]ؖPOiFMM6`cHWe1Ÿ "XA1H> JKh6ZǯϏ~?_>?>b6y1}?)s,DF #e.R+ -KZPcYk1ƺu{/Se%פɶk7Vxܵ~&niB2:ĜY>W!`<Lk2@petAޢz K㉾6֯1!^ mwwTs$!}&V4G%$}C!@;T6##TSAZl5տ^d|xRH,dj'+$LP2g?Gdd,UI$,8Vu^`-=+t; `yȜY/Qn+]~b=Bbj IDATxKb_tb+!ҊPJ`s^9uErS}Uo[-e6o\7!6[6zΕ{]ѹ823tl|a(6 53 ] ѥE'psh *O(cJZcx,M7E;~=ן97Wd4*;Gb$F4Vd) \dfs$ĢKktd@tWJ$‰W7.j#MhdV1]dgKӎgH\v!!R-]ckb()Un8g ZYIO)r#6X};q% cpmNgӟHȖɀHS F FΑ>v`H;恌ԴPD4Cz2@c&ҪQZa #;࣏q}~~?u Ѿo}>_,"Z3^:БVcQ TS&[BL.xq>m% =t]OuY|7uc_&@tX-s;Gx. FmҙAElCbl޾M`" y񀚎S[VK!6irE#QŌVEdX~_s==ɱ {٘VjeqK]qkd#dZz5;qC4଺QJ}k&5&5J^׃V٣jXwkXbb ^^0C az4:@C:!'\xi'r\mQA;D)#}0"n#/#(i&Bg$}#NNS~E?<<5XYRepY`ag+Qsח2%@Q$8>1/b'VWҟH5D>R)昝F?N$tN/Z\ lv@oך rSc=IoJ@q+庮m~_~xM_+Fbt?H>ycHsm#Ϋ9Eo#[H_U7$?%kd-kbV=%2'{ )&{\cb${"t ԋ$CC0 ^)7 D3&F[Ơ[7WD\Nvy`XH.2eD+R2bnM",Olwo2|}X~1B!bW'I| `&{$38[´m~M*`xO`gfEƼgLPې,~|̭O^6Tc? _ʣ1POp*O=Ax:q6mtJN8Nm!m3N5D1]0 p9QfW 5`s%w:Q5Uek0!2+Y9&pjz=vYHYC?lj#ҧ%kVYHY+O, |w>"ߞt{!%nT;ȪtBĘ+jXnj4ODl~C cXkLIl|bL^N}Duj F*y"VfP"24xьnDzϲ|gp 3bK9Tf2\ᣉ 7qV #\SJDl4h⃎^"/@J2Wn?369Hn 3ܺVא* Ee~\|둱Aï&^Au2)go봊+q&HubTB&,Y׺xM~4 =T@V֏!f3J%>r*=Ńă$>66Mhz b18nBreZCg|>UC25Ike rr1J#01Z7mY-8U  Bm( T K  'VSכ0ցTNZJ WV78X _z-z7\K֕QPuo\H  IF ^B/f x4a2un"^ZZ3XuOZ.@]6'z+^n6`oWX"MV`*Ԟ&s2pg?Nq}uԾzb@Nڀ)&S_Ե.l /JÑ,Yj.~ Hh:F3ɫqdY'@G#0 R+bc+:4]hEdg6w8ۑ.zض*o%6Oʔ5!AC\̇*,cC>0t2!]Ovm/[J=t gtfX>P㱺 #]AH+Wpl0CQ:a_s-{Sv !5~G 5ZR֒0{{%O/y# q ?}tLBEeάpiie 1&d"f8 mvUHQPr u}?_"Q&?ϟy}oU<oBɜ%2ZC&gʱj7v3!F.V0J8FE1KY&:Κڅ93齨DTXyX>vh¿CQek `k5jTuJ?~Kz1Ufg#s\R1bbXY¾&u]e$?ΤLw[3[>!PdFq\ҟghҨe5`"Ta͈2y^;ObSo})  =ܰkn(LDiM6^w:8;61ЮpMm?wNCjD_/Y\z(# H >ߞR J.!pma12lf>R zNWtT ٔvw|4XP$ ,^WTl.65J|uAdDz@A z3ǷD+$i ҙe?M_4/0O:}ZjcO|NEl=S<^hf{W6#6h٢bq)ochg0bKo̦y|'k6O!IX ^a1* Opg+PȺClT%T#I2-ДP`8x0;1 (X:}9+bzBv)pz'.q8Zz됓 ӎjM'g09 ԛUpzRV/ŐN~zy󨹵4+ȴEḡkD@\]IB61ӀHQvj5?;1ISe-xhq-tDz>"b"zfA?ypQ3; q/p{ #\ AVeœ|`P57nsry|: "WR$a?8 _D;765LqzG )˵{0Y ؎mU).^XƟjHXһr6pykdrKC gƌZlJݖ.йpsc4㩖k7 /"2]%|gd *eQY fR|V;12ayMh~0@AǞ%}6(4a@ {o~{p\L S0k9A̴??kɢ$l{㾟ϗ&DŽa}f!:7hh'-L!䡦0dPbϧ0l~yP'qb^w Dg3N,usŴdPff6CAZ3VI"|v @jeF̖ʹ#Ld";_\a2~sn-K?.Av@α 0ékfQ3 .Q܏ *2P P&FS@.=-/Ó<8ዣ(޽d{1ځΧfX _ywyf cke`eg<^ ԥ T&\hJXōfBxHduz|䟭Ǻ矯?__od+䝛嵚.^h6I1T(&ٍoP)3 VA$R[o3_?ϗ)^sߍ=z!ׅMlsy8I*O 3 -z%t$Eќű62%fCR_m@*!aOI}hlVr߸I"cS2alugM=_JYDհPZŦT )F5P ҊQ9F)QدPc<~CesgMU2JFج!dNU,漣0˪6<#ح/X(7u~" IY>{/))8`OG(5^0t{l + (=L`ȡ?!#BToZs'2_:Ođrx|~>|u-f3U_M1")%ÐThB {4bS^/渖 ڟYٝ9tSbs0.] ʬ,l IN pY A. VgVas`%N3kTr=BOm̗u0bPWǎ{F/V+.su/n:Of |wPWtewL ӜaxRy 4Q+`('jږMvJ.8vwn5T\xD Wmh.BIu2~e40 63'nȥu/ѫIn)fl(,؋PDS"RE?Pu,.yu0)+tsDl\$qox/T{vOu~dnfn{_?+6D:,BNΨ(Cʵ3TlvĮ)ħN ?wI>b{bK8|aƜsF p[1ԡ\"U=cדE\5Hp!^RCNZNXtd*@ą1V3Wr[C$fJ&F*uL[<K3+ս@^Z|Dff d iɝG6obKˇsmdP 2 ~AӋʬ=v"mS׫Ɖ:B6E˥EW 0%(RЫZ>i ]^ͨHDyBț0?*<ُg2CYV 94[oJ!=Dxk D 1-$t,=էHjX:d歹j,:ks#39.z>'dD$f,FHD4ٯ-)"zk-fV|~?_{?mnc1)Vs!ʟ ҡ2ͱ?94*֑>P^ w~֨a /V $*)̔tnʖv(6~{U ȵ!!'amvwl?NzLbob'ON}F4K$AaOisC-W׌%35d=hgl]}JbR:1(6 z%IPcxDG8#>@XAƟPxM*;ѨGXw@eCY7[dN.$2N=n1+;w\ѷpu^~uop9j4 j#~%kY~|ϐSbs b\qb!4̟1>u,Ca PHͽM IY5 M !q`,1IF"۫Gk1~bZ|-.|Ը2Z>/+k`ݵkZ3c mOx/L}\Fvd.R&bFi(2!0z_G xtDHYY nULیfEAS!W˪m b"Zr1;%!O[Pa-Ħ)5n!?13"eI(jd]yP dJ.Y!.gKt;~ )нz^/?}% m&Fb~Ӧk 3"I.=%Uݷw("Fd_k綾%7^Iidx~=#_?#|)XY˘mci 8-F ^R,_u`\ ]urܪ=\j9DHv8 wz 9e`݁ӑ)ȸ]L,&@JemFTP(wJ C#^%S F]0J((kKk#ƝxԒ(t^TTVPnd΋u"?e+MW 8Js}6R>%mnxpp-[yCK,=#}3‚I4;s?i'Ic Y3xGjQo\f: rH_d̬$LhwlfbAm 4=utS0F_o_o4sfb00w 3 ?rDCR#&#k%qOzϚv9a MI%P=%V uZӹCTep `\sQTDfZO&m#ܠH0[8CCw~MEA(1#:Z|-~FOb!^ɝK|ʅ0*:|v8jMdh"s&BRgsrMPBbc #ɤ"&mFŠ^=0Y'|@q3*$)*;"j+s۴sh􊖢!î+'mp MP|FNُ_Z,I@S 0߶%@)!m["<6,0}eV!ݴC{uy{߯{QU|J}ωDBuo V˽~ya Uoyz=_kQ~ hq[?p#?XD}%ʐUѤFf@9,,,h5r':t5lG9[iw(:Ao& * C`wt3yWQ>~%66hG[uM`@%Q'mU*ю#KG : JDWݞ*; J}h-)7S&%|Q kvn5̥#Uq̟\i‰tmkϸ\BMp7kMTKNqN"˷CwYo[(z:R|StV3&QR&a*mc 'C  R}|%*f}}}dz2[Qh*?m8FH?γ ӻKOǡd4c D#}h~Z_jK |`_3=2FvVM̞vPq$GRAX,Ƽgz\3By AWko$qɊF9 Fjp<(OUGBRn3۞PB5"I=5V ,e> Ҭu2"3v;oz{ni_2B}m &:u +2)QS =KLeF>Cz;QFԯ @_!y`LQxwX}S)7MɄTIc Ƒa$9_[ǘ<ďnfB/9 ަk׽3USbVqOı)!K]i+N6t K^iSlCzli# Qc*A <4X@ݱS$"?iihb\ZȂ &"!i+GNwh^+ݓt#XL|?UP5dXX2Q#EUHNJXHLc]3*[Y$ ,]z9 zc1&jwc_&ew'(ם xβvu*lNC^'khbE%2egB3ELϬMyr5g0Z{T1}){+2<6co0f]ae 4͙^lj&6eNA svq R>qwAXs#s1 BO.iJ(T8.H)a'Ӊa-z%LY,w뾟D5gBxjUCغZ/==Xnjp(=3YRUCBi s?X)Tqi+gnRG@4R;scQh 4F@^I~@^K:dmm&G݃js$|'J <7c}ra LGq.KOTUJ +w:@.ޠP\˄0v\WvhS^;hbP1#@aC6if*i6$#!U-  Ou렰QF<^@RL)PgЊFH rO?!A`,! dvKWfRYITPʩz@hS,0}*^k-zdiЛww4ĕRm59z_KՔ*$YeoYvjM6.sAl/#ԈאsS"q4OK+y2 Vz}Byj{A/ҊskfZ L$:l[9`r1҃`7'푎̔#vhT9)"dܶHrd 3yɥQwL2m*'~)pY_1vBTNϧΞqbH Y;QO;JiP͇؜)$W%Qι9M ,3Ӟ(A:hjV)k 0tx7aZ> TI|WO9'%>6hQ{؍pu^|\-%Nn$oN (GdӠgL?xӣ$'ĞYef\~{J53nY2|\a#} .^-&u;(?kaUL7z0dAllj7[2nkCGTC6*FN- Z 񉐵$)AT[+lY-XXt-h=by]E-.8]y~g8b&bћ2˲`ǜUPpW"~c3{G!KC;Z c)+|X}P;ih!\*A%=Sql^ś/`"|9k\x.tvD[@LsA~WXe,ӅM_ŃOT&VsW׋jlËxׅ’W(w 6+kP&*ظPdkCb>̟!PD8W읥:&uI:ُ8d1KA Hjn]W3jƋ%VjeDZkH զ_i)㦖-Գxt3۸3H#GRmR{IOn}}}}QͨO U\YT𡟵V)n|x9a4ۃ9T9~;i\Js.뼏>YҔ46D7I?5YjƵWe)#VWI,~ 6e?}\G_#-Ѭ'[y:6xvCvT}+reP8Y[D)Jj؎ faNtw3[ }`EޙVZwJQsm 5 o<*-t“Vk2?%={^lKN%"uSgqzo?D=@BYQE89ye1ߥ'XID?hݵm"+A3S wPLg,sT72RO = 6@DNE#ˮhǃyV©#\WUc1@."4mǶ 1QhP#&򥜡=3$^A|vk*l1$i<4I=;)*6"t1l:ҝ8S'oLkA6EhsV:ODi2y:>0\޸ AoZBK0STV"7l8Q-~;~v|Xv&e[Zw}jYP`#Έ=j:GN?7V %EY%^ .8) x!x ,K6*BmN8ʼn~cVy0wu"OTB㤸+OHJ {wG5ʈhBy=ߚH =+UkrOue]%RC+}=)D fQ!9!A~:E¬Qv ޹I ZH5큛GR֋Zo2j}31Gމ9hW-ߑO~ZS/ΪYUs'0>/?<vZ`\֚dWvܕ=U 31,|- Yb@=Ёi.j Ch֟,!*~>NٞsjG^%kUbK>#rUbcQ䩽S9'U3i+XFJFa"| QbYzlh3Ygg=(4f+Ds\-UusDMF*ˠ;zATbfnLcIu11kQ-ywЧb9jS`Xm!TcUR(b ,[4,pgeƸ(~HX.] ڏOAY{=ZD?>2TxZ=ЩTEq|^&<#S(zFa5;4~_20Y|Kvj<͐ 0-R\˦M#p"*2ZG0x`J8퇙,` *3&Q"qӲ+~yƅAav2#$2H 8źSWܷCvɒ@Ec5+HE{,9QՉ'fc61’{azhguiۂ;nSnT(ޫ窬hNFRK<+[?$Zщ1tv%HoTŵ$ѫetJ$h1n`^I=ipNey?$rON-@Ҟ~l7glLI IDATYڑ%=M.'+$JNa^d&蛭4m?C ]BDC*cD^ z%Y|^l;8h g&Z$+ob̷^J3+⥗EZ2! V8Y[Ŭ9-iDÄ 47knBdcb\ɻg x g@bU+?'d6D7|)N1mNt:EòRCniUui3URAV|{'}' um"ȼ-Ij_!<6/(Wx>)dLYm?CÜr)-e2Ɗ6Ki`2^[!9T;~LJu']8Ny#5 pVZ"/QvWݏZfЊX-MWG ,h.d!rJ5F/˥qC]vtPNjPxfdί >^^hi~6Mh^+tyR 8%KZDNYɊ'3ip!:_7{3. Lw@ ɦ,#DHf@ẏQ1( G㍵[dZK@'|T+ziwݵ9=*F!N&ϻݬզLrpw*hޣΎ%o> zT JƳv8,.G(5Ӧ̓PƱ2mR@:iwR nFXFTR]j^,R M@jh; A\4uh|I7bu :6d$1WOeXkzY8GdB( Ux빲}'KJkztG9l :[=eK&45-Ls퇓6.*GZ6=v MgNbѦhC0afMvW>IK("\M!HIFWL O6 z-jSZ# 7z~{EQ˛c>"8CJ~!'f/{#7Ov! NJr؏K+Ism1J kJ*FcؐCfH8 VdfzLk̐ KTU?MdMX%受)M@ h).Oڊ\ʣ;% ޒ.~v\jj 6Rd4UqC7$JS#xn-h}~HQUY}ͤ^Q©+\2'd M ?IB)5^r,/{t,jʟ`P{,KJ:@䄺ڥfU6Wf;q:]d$*eru2Qz&suvH{QӘ!6atJؘqefBIcAYB^ \}U[w`\ZTq^g];*vpNLLjf%Z=T A%ζ𺅋@= RB{4Q9ţe;D5u}3[L/<ګA WN"V!vA~;o_<nHɠP 8Mz%ivfuSy,멹 G&-K9`ݶi6" x^*JBЇ̣QK Tl]SGśN4xЖGsK<-uњ %R~7Hco  K?e\\m]^oKIːnoS?q%5(!8Dj) O\q#SI,܃- [$ nyOY93oRy{;dfӰOyCMwPXˉW#?x,b9f.l"#C'MwR,96+BcO|=_)ܵj#amR wر62>Xf 8HpZ:QVFx_ɎPL؞C9uD'1zoA +džo]#PHٍbn2D-Z`=҆jmc,a_P27|GQxa*;hMp;V59YBk\k(<9| z&QUfO2a` SQlTU T9P]Tq^,,ͧ5f=YL:qg 00믬g >JiDe G_,aQ;e•U@y+xsy$-'!a3Ndx59S Ҋ~ frLPLɝ,EOj 4mNh /yndB_|L~7Ks2yˇG/'s C4"F/zܵ.xcȚ&Y%2Sޘ:[ڴ~Bm/i+AzLw ]Thܬn4q*URL NZ0L%Z(xȉxF,X߸^n|gA'eUKM iXjR)K31RxgJ(pJyȑԈCCD`;J7^Qn g䢇u K",xNap)἖rDٓ{]{u:'ѯkA]`eƶ(@?2DOM> A4G,=CL:DOMnm,xc(~Fc GS MSg\)ЩUG!q\R@#䙺Q qčfGۤ~M  Τﶥ8 yCh$瓢60'$E)sL#` O&k(7S::Lp4[Q7[)}1$F!_6Melk7R~q(hz_"Wbg{˓4:Aso.d'8Zޑs ub x2|W M)*;>++W /9бT+7QgAĩ/EHo  j'/g\Z7?kғ9O7U"KeD;p/񫏊c]oLSoCS2ya/nZ&4}ڄ3r j^hkH OzQrMb-w+mjD!Eo{OG忦̵EpHΧsLUj)CWq_ڏwg0Yf &IP̔ HO\Y'GEXy 6#~w'6bQjf_aNL:()tiL)ia~N Tn-khIe Qg_ x"TjtRv(D|ĵsd=lrsE6XFSRc"[QTr9p'ܑzrC6)_z&d!(kf&*rl6/?xZkyL|tV |{;R`,MH㔤pEmX#GZ?F'aSj{dYǧm E"gzMVzEj=5-.R& ԛnimJk87֖^?L2R+Ca qDv߰ Wp=l,%d̘%]Eu8Gv}>0׵fIl@LdP0!on@V!aD` R܂@JXa L.R0[! W#z*\ 8.#`<2|څԙD$iHc8{ _eh=a'9`xCYse;}#$#tj&,g;qKGb[0wyl>HWu)Ma Ec›ev04zjd}dug?l`GH XeCҴdjvF-V;3/3h5ubVfO:A8Y^A6@A&ޭ WQH"ƫB EKVH# &^\YWzOܶ ƘC^^?{+z%ewW ,xEdA-MEz5u4+,_|}$*ɻt4eM޻tZ3W"Ae}>v*VCR3"_`Bұ6MxHKTZeˬ$|V1d?BpɁz v)&BZJMs .W,js2ƇR=g}U#FJJLNYkݟcЉtyœH˲ήZ_Z~7/6;F#= Q ud:Qo]9FRr_|uA#FwvQ\ ƒ/˃$΁U:`x`YR2.p'dK3Ԝp+ z; CA"I.%tCVt@\jQhU^n-]!OۤPDW+4"ՓN 0wXU̼Ey C6To˫B1_yb01p-d)(YfZκjVnǧΠ2N Ttc2dc;hۥKfkF(̵=6- &4?Kڻn~qPXV$C_ze}XF u.P:zH#K0ߛւ. ;P0MPD$~}o6 ̤6x`8P9kG YK \d=_ɹ_SN$fJTY_RjYL@˺"{mi.YVO9Uid%4{Yei_f~{JgbDð6_zzOw3I{}埙綷,ùEQ6b-P?@{ /g:6&,u&ҤBHgyv"6AQκkk%}{1qu ؤ"L*&1#0s԰"|^O[FN)CXD$깮}'?dV>14sUW ͆|> *?N;`yU RnqRńUyNh,;u䀛@2$=}GCex(V(~S:mX^~[[)MM!S{at3C1.Y:ǂ; >&uPk\9b(.nJ{f֑ %&ͻx^=74 N frsŒP$ԕ<|7&j@:k>#J%gzj MM[d68DκfAcmZIs&.8TڬzޟI@.QKíu+_+M"?lTpbJ=Ź=kZc,貳YVqa2Ny) @?^u]`9RsspR5ro>A;i,Ot;\'3:>',+P?gnRZJzf9.`L8 c'K)$͕CḼq݅g:sWwW;;^ƥSf,I^JU_=ç8b:CK5m~|rE񩕱gS?avV<Β*~V8+S%g>.S:Fh[pr\TV h.*mQ3-2?8>-?GUqu<*ϷLjA H'$ qȝrႷw  r)+õП;kIn^_@&sP6*\b[Y8Ql WIsKzk+ԬA됃9A㚒L]bsf썩ּzj!r!#fp" gywܡ2C; Țl6 IDATk&J9p ۫ӐOiuA֖;2s/exVT^ir=^>ix0d' 1Z UV/Qb3ğBM-`_탧ug[5`8E[~_jcI.9a|tN)ؑq ’(Ĩgl榃VoGi>ȤPɮ|R 97LP/HIf?XKϷ$_2QOY>+mHÖ.֍ 6%6R#iQFtt^hW֧bIz ˮ!v 5roo:-dn<G*+NG~H՟i66_č))::.AE HrE?['?;x誋xK%U9)w-=aYC1#1O)٣]N3eT`<:|\5NhG%ט)a= UydTB}RxP+\ i'?&rWהI^ޥLd.*6YNllF[}1g%\ {Ԩ-=(Z*\VOϧyguA SFt{_;7g cޚYLD\Jd/Z',ZlրQ/V$s3Iq pֶp;e>5pbܥg,x\+#+]z}`!i %mwۄE9@aӡo Mzf*nj L`{4J Avp_vgHNȓu?2kɖ[/iPU|Fu95$XU[בM>Sz(ڤjVncHc?b y>N;c d>i\Ht)I'jkcŜt-dE.>fXvުW/^ ƒe'PN6m&a96&3H1Jd]@Dcs R~ >.o㣕ANͽ_vQJ7)0`vVfFhyBx.<' ikzr6 :zMaF֑bh u(VR}{7{ʢSU!5L:,҇NM/xیg&p-rP\'w*;lFc.k{(걽Q )N<.~D>=1}I~LrzvσN&NmXHpՈuc_sIr-9RHgf5iz#V/u… glsrMTLʍ*ke:E>S(gPЍtzw|1FTH9ډn:!S}D[ 8஀-rrKjWJ{Sܩus頱NJ 8ijx:i5}hj:HT6Gsohnݪ`H%2W񖇀>g =x ݰn:2"T߶p^Ov5*od$\yG|~0dOZͭ2pw6c7Y`v'FfXҟ\ciMR@a :HB8ۨ\YK_,tɅfRXɕ2 ;'I 0OdN&5KߔǤ?=SQL%,~ z4_m߲xjM_ C܆쩝B=ȸFR)vUnTc)KX/v[.g4c5Nl2Ad=YsB"2ư;G21i`dvZMt֪?9EԜn RRkI4'[d>ϰ)y/Ҥu@ݷ-oDOBƚ;B {jk{lE]bЄGeܼ3 BWLNl0Bf$Rc' \,vm<:V yg6םD oe VCC(4AǿWRϙ cTݦ9PT( l_]l|`Ewed/*mu +?j+AuX G &GCeW+?U82 aAlH`(.7#{4ݮc]Q*t 3 R a (*2'jPk]Afbңui`o YsGNxfqIi?oTO z'k} F9YhNyw:4]=/Snǽ)WV8̼O["C]A,.=H׽ͣ?iXHPJd;Ԥc O80t1z}1\_Rtǻ D")sHfh;&AP.O\VŽRتx)m eYNk~~NNgĹSHiCaNx5{NXTm&&1K Ɏ8wk|2ѢW:7:&ǽ}|"f7A*¡l&~L;`O[C;N7_3Tw~5hj'$ KGº-QNCp`֡C?usNJHd=i\hx>1vx+(u:5̓5j]|hVWn \gTf&{7MPEϮ2bFԿ] @㘵(' c ]㗆s!vm(d$ k۠|_aH&-j>otldEeL 0w("uRTkgk|ʂ[f)0ZZunq)׌e< Dj^oBJ ,4 5"Ղ8jWhM?K≍B [t: @^R$/_Rߜ(M6L݊ R=hpg|;y|RE2wEя9$dzZ.ϭR$#P8*v?pcSv#[}k]"9SDq_xbTX{S8iB3_ux1Ώeh)DPPZ~qHK@ DrJï{ޝDbǢdmqHcӫƬ]L-l2Ex"NXa VԾpOZAՑ;@y:ƨ |$"Rc\m/K܊帲 g07uykVY<8k ˛?U U霬~qJS)Oz3;q4MtU…QuCʘ9ѹL'U궁m;%kFΘcXK  .ъ'6?Lah],|V- w{c8as־S+0nj^u962y(o -\!]B4<Ȱa+ZS"̤ds+V.ϻ"3v=}쒐uU4y;KqztM@[\ϓzʙg[tl(Xs_UOQOU@kfRUr4_ ;fR;6\.jYF)FN*)Vý piݣ|GǬW!ߕy~NFDhW)Pe?t#qN)1~|I¢pn)~:C(Į`"} o^l\MI^=PʓfgG4;#KTЁ+ 'Oe03׹>x2=Qz1 s;,0_0)qߟ”n#܇bG2>+˼'1jzLjY 7Kp6 8i1N!mrOַ2lׂ]Mw6&$r {MH/at/q;V22͂pKE0ps$ɕdуw BKbJ[9hҀ9)x=AB ٔBy3CPj= ݕ~W2pVa8>^xzDȞ_l1|'݁U-bFB4NuR=@N(~DZ4UWn;cg2% iKFW #bvYC0eŊs0E" qjAFijA*({ AuZJ*CxA Vr_2Vf͢6$õIK9glW󹲢 M93#_Y]f؜eN祉zRt_o^Dj-Q6 aS B#b$R8_EԣXI3=ܪ%jpMBe+2eH TSpHjH _uQDH"v$ӥ?hÙ[4hNV,T#qhox ]x&q95(UKlx e0DgmG50Qk*Ws?? '\ZS>f50[ʍ¾ULk2h SY>uRgXR6;wԙǥFK:jMݩ)WɲGy4JjXzpg!@4}4Vmo=Jb'Kjzi3U  s(:tsU(hʂ[RbXd+4 gT^hRxO2;q/АUiKKO9[+Ǭ9xvogFIM;5໨K_#D`|n`!#-I8u8_!Yio*T=Л @<_=@>>[A<g5QF R%>UZ?|S8IEԙY΃1<#u Ir415"tc`6vw9&@nϦL`` M_A:)n2l?{s?Qx\̜E62s c@ps4)4tF&u Wj;VO\KG|{cNC0$IɤD&-Z2ԎVPj>@*7:2+pd4l9S<;xY:zs0{X̩ţǦզ:VZ$wߌڅVXSl;s Kֳm:AٵV״K( "A,tj q̀x6{UH^B)4uBe'!d_ b#mt-D(oK~-Ր1ѯ9 L!T8/OQ;G5??ܾOE|0h)7ϱ1{DMhڰpMp֑EMzn{ߺ^[T+ quP]HPܧ/0'<㨜(Gqω̈L>+RHBp{T\ŧА:7 EkQtWe EC8-xwh(~lوeUrC~{5oSrZ$PdssО'u̜`%D6ʫBm>,򸔽mq #kL`zS^3(TN/>8i,WN``⮟23}ZW?F+dtqe`sAY BM Rc bTC%"%,Y9Kѩ!t5myޛl~l-JZR ۠Ae*1]G?arDoX O *NwىUoPH qb+![@dm1rhŸ>#5T0 s1%9*|Ե?šVQUWCEY{sb/.[@]Ȳm3sNWX?ﴤO4H څWCš׀c#wU_FQ} IDAT/~1L_9 5llYtQa  2gͳsN8ٚC>ṿGv<=KBk f~N @\h9MGJtlLO/4ZZܩksX[U_i\qU9ƹ^|#sY6ynŚC_Jt< 2l.0O<>SDgꨘY}qN(_Jb(`xP+jxdO+=3J/TnBϷ{vqk׾_oF]0܎'HQfxv s)>׃/T{Ex!ݶbL1kЈk{$2^%6dKp^`( SkS2XOw%;걍9?n;%6,LÁ{D#0ɏTV3VefQKi|ilJ*v1]V6b3,{g$z)u/6s;%V/iE&xj#FwԕIdvUJMutԠ.Le|o꺚Ƶ)Qh3ܔu@g4U_?ژnflfUxI77r la%^Ml'.ݫ姝 :AѺ jp @>i$EQI!S4^ÝC(tekR׵.Qm@7k!A?Zj uG}PjVVAd,2gK\]Ksl"6cm@,~/' %2Ϯ{Ġ{juf7q~2q[o+kq!nI։<{X*A{3XKʪ+r5&SxYUտZIpa xQ-Ltq+QJl37zT|>Op{eۡzuCs<3xFTpKJc;d݄Ǚ[gqÁ_O@Al\t,Vr~W:TE& aT+HGJ9)Cl3C"';KQ5_a,\C'q2v;%X`8˥ô|~#nkBc S񇖨nLIoժcjT+(E +,F|8Fl?[PTUXΕ ʳۥ'25ҼTa42B*Ly]thQ|OIE])D{Z?*;tLmͰr7eOJ`®n)B8|1A'ϥ@E({8+O#b9G.!ff7z~ FYNo k{0CN$RōV?V[ZfŬSr\Cp'/I-h8e|h/ 9W c{L磟|>qUj0N-E9IBmE7+a/p￈b-OG kp)}x) 5\νKu4jD͔9[J3eUjfd?Q"Q+]-hZyuXS4 וAU\v\su|sE.D@n"V$__ni 6`NQQ3Yw#}WfaIZ,H 6R68I5pyYUL2׷ aȾ+D˲{pO~of^ x1Po@B n.myj[su8ƀ#y's{ySnO#{3ē3$?(.1*f4Q 1_!NTGn6&CWt&Y Ό<"wZ2_W5oRj= oa-1D7N%Ҷ7qEG;Gx2r>$b`!|2ՃdìQX?w; iO^s S[)FQMn'tk.,8ÅZqBow*yYU~p|uOKMM?u|lAsy•C4Kr33=fOR٥$W גF?+s1høc)&wvb9hVs߰CYпv9荊U/$T|Oĥ80ѡtaXlۣ@ڦѬd,4WC~2,'c IN uvEE.$EڬET*Hk`[|,MiLO?&ft-nfBS[}Dh,J/KV`\WE"deg7oҝ tp6+E\L;B91#w/g@ѭ$&+RZšF<ߵvC z1)!?Ve eϊ! #*.rx紺$ip U8$oTc=(À&H&D7LJ:e/|>gSF6o4E@cJM,[Vzz4Tr|9LQm(;+Ifl̼R2NƦ2tD@Tpb)প'D cڶ8V2CJ:oYCXrG )\pf$j9 ;! >fBÐ{FΈnQgOc#@ xrɫt=[]w*Vg_$#)wr?` E()x@£!f!@McCG JOTEXrt Fu6KoAp@#uX[\{_g/tg&8}z>`4bJA6jhxo&T>Q[^ A#=vGqp5f2Qu 4'[(~:.u:wdF9D8>r-wD4Fb?u-3տɷ&߇ ͛2Lxma96QV !V C'*)V~2c|j9kjʵq[p,Z^ꗔK9Y| X%%h4P@N8Ac,CaJddb$)E֫&ku:ʙrKK;.DŽ2}=+pڇU^;Ƥ3_",|sꟛ?,Xpj:Ks-&eDʵ@2E~YGMP; K_a;T+Ŗjz^}VNZGjT\a{h*H`pxS4''IiRlT;Fu༂ԔHy4Ǥ5- ,UNqyXڗe 8"pk* ko  )`P zVs +C7/|#c 5 IzMwcȺA6BEPIrϽ^~-T S6JJ۔Թ"2Ws潔@(CV]@vsst"POd1$nлXl?h, 9{`F! upVBRdB;1$Y\?,!fWqaGޘx<Esvp[eZOj*zKe͌R 6vcW%)>T6Q }7 ǯ P8/d4f`ٹ@j,Q<II+aYBڂt2˵h zY44-$!H# }^sjPQF2Pʉ:,D1Өr Hn?b(!# PLD9hLU`!}!>G0Б쪏')Ih3db.JGZi霎~ BAS5G;T'O9fYׯ , ]+( v9wN~V{'8]s3CiM|"M$T&ɸbB bNaI{,#¥q(=&#ulzUfg/;\IqD;"lMkL+#~`/PjVR.#u9_!%KꕯԿH7'I~Lϡ6B4r{_FqX+#ą!oV\-ِ8Ӯ9W##m&!Ib<znYtgLDOy`3,]7UY@uj@Ͳ #&+Ĭ-+F^X9RY[N]N"쿇q3t H߻ә;502KF+'O4R p83X+E/( dwYۧlAq$&XFSnl(N/켎]C:Of=fIl-o3vWPРp•JYHQ=O<:BOI!0Up F\N{Y\{^ r I|!dtJ^ɉTβAg bXWEmr@舢<_MO1B"wBaZ>h ܣ <Mowilx;qJ5UGQ"_.n"}"&jjkˌkΨ: 0oǜ&ɦn(Wb0&u^cמ}K5"+8 ?LwF5Jn /Hn!3F >q@|1֢uWP E5qf,`t@7ti&ePAk֯qNOכɑH#HJ3HMf8ao,fc9 vj^| )$7TnP^! ۶-%nK֩BW8ʇx%9v.oa=Ԇ&CA¬\kOÁ_*589{pi@klZ2#F 0g\vg UњWn{l?ei`KfU'>kO'{F`R{Ԭ*42;bEZ^iY CNXsdz!]~d˽wc=)Io|۞~NVoӸz@"V>nA&dmɴEiRÒ\lH6-%[%{" X=W|DGaC!0 Rg",o&ٶhH:kU u-ʸ80 A٬8jS 95zEL{Duo[&f|E0졹K%T.&2Xh?b/erӈʵ LqlYԌ\jŪ~XSX,Q^z1Fd?- `+'c$+?PR&W>U䗽Ҧ=}kYj}Tj nUa<7ye's򘖯 |z%W<f9oEOɛ׻>⸈RF- ¼J*m‰6ydSɘ5v#H 7B Z )%G02uT,<T\{]v7>5vR:kE IDAT9Kt zX_4"5lRH:lI05pJ9f|nd~O$ck\XM*zUת7_o~K/yed_콬PqP=nNq], tn|ϟ#!C|ެu5X޴̅MLٖYܖM;{sEH cT1ߎHƲ "?0тzA ŸX.%"a Y~f={!/&]+R&lX ;·i4IbK[+*Wc.<3ű1H!C}{"HpOs1-*12ݘrp`ԑDnyX󫸥%Fȶ!@JR{2k25ƅb1rI$j6x>;l\{/͖*_,m"P!C@Yys ` NܗSwy|F\p$-S)3 _ŪW,@- F͠0i'ys5nedZ-;,Gl9ZF-(оE&CshTљ9TsufU@0%QۘU2.LQTdִ=`$5Eu\8zp~ֈYQo_}ie0j7)K!a7%pxJ}T$ ezzd,dR0MfXP3yƨc+}F VHbѓlcL%ftrCKm,bvna=7`9Ii# S5w1sP{(S7C􍾆ifJ(gW:ɝ3QL;xЩtTzʪe?]_ůMVl<8|iah0zo A~|pncZ 5J;Q"iޔx,}bQ5FF:\N´i89Pտ"p~v&ƴ+/Btec]iU.#kY& G۫GK&KߧcC-תP{XzB rC  g\ Q.bbu7kѶsDGޮ] 9DT!iOH̝,)w̝ۘ?&_K,2'iIiVƗqn; %_T9*= Ywv(ld&H! UR n&Ra2yɃUr,=喽=@dȲ낣gZL[h-ޠ^ \bMtHn3ou;piMW~Uy~A~xK3R^' &xpإt?V߭DJG1ăc1VR,Qo q 7kܝȑ=C歆LSUUζTIiAI<Li%,Bl=@WwNt$.V]L(ұug&ZǷBJ@TyuP)CPvY_H[y-a,)^(B 7v_n4",d;?h~Vu]5(Ow#]j3wϾ*@jbFsNo _\Ϊ\1B]ٖp:vDR*=#ĸw*KI|PA}]BIX>;DF~G@*$@i8w*OVfNއ&#J ]xslqH+RCrنI&NfΠ%R E0Iwm  E-FwhՐ:7aV $YQ3X6c Co/Z ŸsJ8,ozdXخV^fc-(\?|dͩ=VRae"#4&ԝ0r0V`1 Hbdae HX^C} cq#-$i[x+`VٷC(B˜7fVZ16"y=`%CECBC^lL{څm2t!hH$ >w`8%\0;2 l!5z2ГZ/F]T"a * fsQJ 6VVc_j®T` |bjzjo~'.Ue@ymš0qR$DOߥxͽF3  A!!ekxZruChZ4scȈM #IҺ3 f&:UN41)Hk@u}LjRgc5@F7ӊٰ0u5:ejvAXr?r;ftE_J!w%L-1f` M# T޽HS߹Z/l,6 mVR!6rfxläXj} PnMk{gAtnWEN(& "D歂in*[4Hr1n-;;>L&?F9UJؕJ0%< UbA-%#mr5B,jnNw?j QQ I.7sb3)/+}Q:6"8D()ñw +"m֢BΩ0ԈA&0l|Ah E4pMXrR$L4XBxhTz.^ni/ C,tN,L%CxK$B2)x-LyCJGqY1rg>C߹bp[rb L3CcF6kߪo`SC{Em" [duN~* eeGLxm2uPf t3 C\*33imV3^FLJ x|#dښF+M!x皷1|39OKŨDhyXgĉb z_4rq1uob k ' drd'wZl5lZ sFe|iDYܜ*SS(C0+UWvC. oA Aѐv\:1ff 1K^I#D'_!(}<%ϑg ˪gpKMGW+[Ofny7#ox'N H9=,#Er-%teK/\?뗾~7{Y&]$ , Z%&e!Riq9YFwkEM$L* >u Mߋ(-3Z75FePЈ ʗNfRsu8%SyR#Lʪ>aNJ#|u&7j# !iU'wdZj< j0&T6ף |Y6 O[hcжx B+Vsq|*7amӏpWigq{7dK *.3A%QہY6SfdaE3 k1KȯSԒܤzhYWO`z/۱\Ҭaef R6! JK%.؟y"Tf)奅T.g3Z}ώ)5; C*yG7=|+fⷥz3\<_Cs)` %Brmg®9ˢ Y^)#O& L ox{ 6R 1*!"l&ݴgTx*3ؔh@RtȡJmr\LL.95uܼl4Ȃh Qɂ,IM޸ t9M>YZљWDȜϴljdKHr7%\*qP4$._7O08ižg*FT9) $Xb\t\*@ (\[?<ˊf-%߭O<a9o)ŢCC4E ajQ=grv]2$ܨEQi5Q(7n XUˌ[6 E>E2ؔǓtTˉ!Gg]'| f  -v3X%]@ؖ]ڊF'Be3S7A%z[ON@"w'M~$0ìB*QD=1XWnlvMTVa+Ǫ$¥ K- EaM³^G7u<$ bwQZBtd?ɂȐ닓$`UC j;x=ۻ:E "`d(`Su-?5J:m|j3YI9Qj vQԔēXIx < 2%z~%&WI>̗E|$B*kV`#B\%6OK,!eʺDbQ.H[l[ O-\!^?LFFW_3ަ=񜂎+=f̗K#\8p$Ou}+~xs7׹u?3d SFj#FpkOʹ5O203*n›f$U;')%AQ m=ij [&zHicLz$(\*-ϮpYFm,E(Srd `Jq 9K lx҇<ᣨuNЀ 燔h҄8=22K8,ݨm)F`03WXdZ*ں}u6-ڳQR S5.Ը[ `*$a0^ O`s$/beQL[Jj Ѧ$q `ȁr;4s4ii#[*fᗡ~r!a[JŘ#B*N4켱җ_$۳N)3b ΍4zi Jz-2eTh:{Dg8'&[,+K8b",bCî_3(:Tp=aM??|GEDR4 iTo1][?E,#y-[c",HTH`*X,fIoC.P9|xj3 uD &+D7"QZ gAဎ=*#iN3!$t^3QƅȑVҬBDIsơ~{P00-)d˜sÃE$$¢Cixۛ] Ble>DŐ-ΫbM03D|ѝN[s-p"^`笻Fbe>VP;]['pSɻl A ĝB}"Uo64ʵu  wۀ<) ?b RR }kR\)|wmYM̑ #G0BEY"(uAsȃX܎k~8*;p!!4$ׄ<(pA&tŮ&"4G>z#zs=@lsa~*i掂*'g)sp ?d;ATGbx8\v,%X^ѳgBf2-9A7ݘO ZFtgz0A27P]Tkg B@fz|׵zŭm5׾ֺl >zG?G*|1ĔъDn; ɬt|]҂{B>YܜbX[W ?(TC+qd^cŽgpV&Ϩ1_I1NaxiJf4AED/avXKsZG=5:i3N:\Ay:sFD>iu'+!|h-:%G(!W45\-nx6S6X2!zfȉNLz"VhM|~H? l.+RAB>& 3}gIlEeފ{*,od 'R mE#ah !)Uw=Y{zЈ3x$M|>>o~3sy:cs\EzT`}V킞D>`7 ,ەvk[wdQm=P^$y" k˲C>s97BmGdqXs ]MMl.C܂Q L-g-{#5l7 "w+F+6Y_2T: ZTv0 n;1[ '(&Sh;FR(xL'ҫ SVl1s?I꧸x졥.L~˂fp4rI>RRc`rK o!197 1fP"D6C0)M%֛a|o|cX`-X] ІXpx[K G%\(Ќybhxw"gxQ51FF&IqM^*GO#9ϭph  ق.k Fp4KuKboX/L*AΕӲ#U Uru# na܄,@d-9/shاjo(mP`6-~b_K9@RDzpwsr+bԉ:s9,խ/2O1c#ݑ^hrt*VN/ftG紭@Co;"'(ȼMpg׵^{N򜏟4.,}KҤ+qxs?>om:64ACΝB=CHMou0軿j 'wӠ̩-_ruxhH*uWc$E?"_s;t$f'EX7)V~#!UvV쵮u]?߯^/l sΟG ZukD6(>}>ܿlnr"[-5i j/s¼m((f+l<7im&$PgA#n'(DP iR_QxYo'㹘&9 FzْψVns3Q6%AewS^}Q2YeVB@ƅ(SP#&'`37 eξ;X/U4Fxj9+mP IE,)NX(R ݺyGdPRM h/#mH8j 5%HQ/UX"e Y]oNS5AfD_%IJ}]T8:ڽSGcɨ+[|}rt٪L@[$n,2rfvXpԝt-DҞ@Ǵ3]BӋTcܾS/˱@C,>˥7L|'|lI#f^ꌀ6_ߟ-e]k]kֺ־v|}ھqVb†p篱%5}dHDE`ZPG{TJyOsU V#paï}E#2֙'0fd "{]`]$[?܎!=x+Co(]хy)F qeL#r͆hkbDj7'=5\rZ ѡϬaˢz~=:0l_lY{}~kޯe+ۀ"KW<-9ˑ4HRȤ >`s߿믯pZc򔹭G&㊔C'>?>k]k""緬i< 8{PU +ZzoadNd LG(\HpS)4.NXajiUT 봲DKfbqެmW07ƿF~TNĴS.ɑմ a3HKH8G~eD'Iűi(׮hH!4h^+35c㽽@awUJgv<KShץE  }UAG;F +tZl!C1.d#Ȟ$!bU d ($d\3N&7%W$/Kg.3|ּ-5z匦 g%+kʡ{~x($o!BAgF(Q; 296E/29;Io =w"7C\ /].G`=/?-k3(mb˺eo}],rʼχxo?->1'ej >y84%-L7Vy } c4~|m*hJB$Ék*J ѣ>l[]m)YX `O)Mslyۋ̮}F3jmOQ;yrBԥr{jK{(f9ws=%<ٟ&`XRے2~Z<{Lzt8Iz<@I =yD?- zkl:lz3 Q.pAE='7vp26}k^aNL*pV_Z6Vh]E0m 2ԟB$lP[ޙ8:; ɋ*gDSO%Ύni4~Av?!:/N󒀤3vq7=GɌ`)[rcI59mԕ徟0N.n|ln^D,9 o\[y~?~?nH"{x_uY(mZ ಟ $@_zd ϟ}ۣ+~Rf͌Gjfy@y :b緃i}5"Kjie™ c`3^ȵ˪do2h?SᴑS[&%K8։@^kuZkگ^De/b$B-k\,RX˶`xh+nR=epm. ;+DϞ L*ilw̔I,6Q @}n:1)IJEa2d.R/747L} P,Ly JY  `W˔Z̾a-. 5iqzҵ. k jR lԂ0 nlVBH#?e,k׸30Rc'#t?lސzw PcjТ;A½I;񗯨dt4bG nz+ç_xsN^!p_ 2y >l5X"iW#s/E^$L!ZL65@j1E)EMEU~s3tm=)y<4Lag>MQ-U*x8(vZt,`,W ,SM #~M!<҆6gJPbV1WH̒= !#J;Z&nj0Ub9,a =УWM6v1 іjUFqtq)Nv0c۽Msu:gew;!GdZK!ZӜZbR`==Vz}}}?y}ZͲ&үkz^z9{l:Tw%~x.C}nQn֗^[u'Xd`"}LwE"Te*+cJ:']&J: /Oj]WPo\ Fif+ۿ| KKjGxnQ$Zomng) ]t[2%Ѯ`^le9`YՐ-Hd' h9!zg ܐ>\npڹ0B]a*P\U_x7}_m\F<}VFMirx%*{"Crտ\49SC9푂73U/vB؞8w 2K%sfԀ,5bXY9,>bcf#eʩ݀I%n-_3k9$A; ^Az!8r X _ls<]!x 3" JlЏr&R' 4؜qf1ji:5Ϭt6Ո9DFܞPKc'i.ڔ`2!`QH.z0Ng&R7hG3Z؞7Qm-{5rF=ij8УPyD eQSR@|Ps\i1i*W' PR߰+Y MPt,Bwu䈞e;(b IDAT,:,!Ri ɽT3W n`~)$qڒI'v9a8$g-.y;~s9?Ͻ_z_zx}_kT15^˄@npʚNB@K#_z]_O&2UKU}m:1y%h Ϫ/=@qx`ijw<|`BGLy4 vj b _{z?2l[O40LuU4w9:*i Ekl%{SU-f%G 3QyLJ EW H :a:BF!BhjyO]<<6Y,th.)2_G,7}XMr"ST9ItF?:﮹]~5٭P8\0 Ys⃨RyF\I=`y 3bz(&r>XF$NV}D.,ޥ$v*| hK+-9i'ÎylX^lN@2m#TbQ-ksSLr " h !pi, „^A)]e6eĩY'.PJF|\J_e'0:U㛤Ǯvj'Lz8;Bo\Mp!ZnZ{E6HN`uqVֹAdy?ݷ54T,˥ʌM)ih K=W qʝAɃ9d=U^4w"!IO#Zi\Q*X2̈́=ϯϸ%c-w3Z{Bt.L@aR4MG9dn)\XfFQ kgR5{֜^( mkFZI KlU ۯ罁xlK(KbwgJ%DD+~͝cҿ?x1W=4m*"S*P{Xc鲧qM^7^f2/'5 ek]?~گɶIW8J6uE'<㖬;nkfsfXLCbyhY^$/c6P :DTƵ(0&+{[fM}- DԦE?N]/M T ~&ΔX"6@ʿM}Vk8xz_BT"Lʍ,S[3mO5hsi\tM8DNQ6dMO׳QOW[ACDǞN H ^--(1 o ݐhi 6KPο"+XTDn;`~BW A=y23JC~?MC3ք#Ѽv>h/teCxSѦ5*áxmh<,\"[ϐaHS2m;IX6gZa'ȉbh{\| UԼ$֍DF%9vFOxm]`eVRmM[=کI^ G҂?!bB߫i4CQVyboqø3/Ki u-go0l*gZt?s2%m/jj 9?w -Ûw8L=p>>ք E_!(V 1%{Tȼ!zECF7#)m6@pxUJB-a ZitK/|߿Yk]Ka:"rue\6}XHd/{/B!±w9zs9jH8sz QxD^V߱U/*m꿶^/Zk,a;)WNN97=f:usK9jbqtrRGuh4YW&G،1#5Oϝ+'(X]n#5!BַaJCU1 Dh-QܖMzzx>%9 )kE Ѝ5;I^Ϲ"<$@W%u##=/}f;v1- "vX2Ne +n~q- fakS-O >% 'ז&H״15L 7eڊ -P =W'~M2!bբ{Zs& Dd@uϤv3CYۨ!KS I3΄rsvLN9L r}9n_b!؝~htHDi .gtsd˥$.oz}{<" >?s|  68/}55Z&q}nϙ`-&iDb&/dq/i_zx]_e젝&6QF bDL:PUN|!a~otRiqpH~0$zvY#1K;Ji8m[\ƶ0kAScU*"_SF+_e0y)#Ot19>&s~[۟5S#L}J |.^-Y3WE\e8^1YMY!(pmzg]>3RҖք3~dƋʱ9p5h@Qen=IHgQe1zHq5Ւ7"7*p|(;`S'jj.Gj>7v8 PCrtjXHɄ4UTEn3,`d{ ((/-UJlƘ Ѿ*P?7n8t$nb~ c|jfY{3yp A:`1/eF8ԨZn܀pKS܄3 G9 @-2XQ 6vbUK>c1l."NWjqc&2+iS?eA&㣮"j6Ӡ"?j`$:ըAمBu*SKp>jpI ݴދXww[?%rÏth[Β^gGU\kަ>![ FOKozmz=VvtjHkpoi5X :ʟ_:JmگGUEֵ&s>>.J\{سDչ|ylc)*Lͺ΋bH^$/fk̙akz߿޿~?_{kS˭ɲnxdki=gK*T-5DʊQ^NYnm^DT} Şhk1no() vHe.f?D ̓RHnsU{_Z8 HT4-:#=AiGᔎ#g"fL(.Y5}~2u{m{r6{6)be~^[>sL B2LxP׸1o7؈yC_8QvnJtv嬠y Zd%#޲"h7yc*QDzفf}Ǻ(iO,N;!-͂VlOlӶ}8 ]+8jE?Ɉ0NOS)^.CD.fZfPQQeQ ]#m)';GCEeYۂQWlNJ"qL48g.H /Cu8zI5Kܣ ([tGlm]6W)C"39A~{_R( #⤵  2+Fc>m5%aĂѰ(fyzg9*%W|0E'cD~dv5iX)XhiT¹JeNZQ2+t. SbLXR%6Ltxk2^aˌS=1U6-ޟGya[0Q`8Ѫ57өKdR]`ԜΡ'TY`1*K{\a"MT _ ⒴gZ(hfgȼ -x6<_r=Kʝ }o\Ǐ?LJ.]u?_ `ֲme7| `OQ{öױ|>}=^/b b$Պ>~V>'GH; LXzk,2OeQȼ攠N6ym>e_n&1FzQSfpY!0c.J]H Ky__}ڃikk"HO/K%mx+V-fW"sy *>&l1T 'hgMx(b ~K)aNCM36=93 ٌAH~w(@ZVzPFK#)[~}}s,~PmoGhbgK|q0jb,mw(&!o] ۊ0J(XTyE%esKZDcֻ udMaV匀2|ԭPW6SL"j&} @fn LL`ΕJ':oH̪&梸6i©SQ˃Dp~%6t2Fn*Ď<0uŏ*oh1o̮:\^id$qb&{6d8:3gn-CP}sε!`|N|2sr)),35c0P.gլYILQ oCyBt)c|ݔKlÀ!AgD--/3u"' IDATkE! ҄ ܅ՆIB 6R썒G{KQbQDw?sqef[D񺟯uW4ĊIc.<0@ׅhz+ *b1J3`5qm^&QܮUT^돏~??ofM6U@ޯ{?S@*fakd lZ.*|d!WI^0r#6gFU` nE-xRV6L8T E+,tyC<2ZneYugG}ϯun3Q,Sڍ)/sE_~닯/r?e?o孲{씛f$PȤ(M?5?Oeu"#[˶٭u Oϋ-V@cWa^%mc҉5d7.OQV71 ߏf{V8fʓ)p^:'"}eow]!5Ү&SBNsymӭ+CC=*cPo ؒ7 !ԱKc 3 [i3Dbb'r+F cО+Ckҽ1N sfϨV̱@=c9]/D7U5Wk~,Ml+M;^zե${Mz(dH72edH`hò^±L=Wx,fdw&NLߝP%j/@Xjj('0IU=%Xxjj9-֨Ǩ>3@s%'M ї83%yUҨ^7X1\cף&Wr|=єE}๓s57*A1QEȊN[=V0kpU,ыJUEUMa]:7l2SuGYtUfZ!Iͪ51c.2N[ |Ct%*M%}<47\ڎ^p"Ft V ^7Vol-E>(wR?qϟ??^?t ~z=^ϯ㺖h}^u^fe0mcgRnp;Oo=@,tpMr܌9 @lp3!mCnSdQQ͍J>ِcrtuACFhAXL)Wup_Kf}^iLlK^0E݁zW {{M]ˁ;j#HJĨA1MoVbjc @h˜VA]Uሃy$ sDoV(FtտMzRq(+ĔeHM;ƻUQ BçV ׯHbA`dIQys7XfH'o 3h' 3?m ZdN1gڇZ\UHm^#_A_*R?{BK)D#I#m/V!*q2J &b~D=@EXAn[E6DŽ!ǐp)Տ2ib"6:&6޷/$Q4<:FiAtm@-TلzB\G 9R[ӌ`-$S7_,=L,uR,fDtN:yc/6(^e[P<3"#%uۤgX3bF1#޵2GY#m )#6s^m<3Lx,r4̅^zGDf~͑M ɷ?:F% yqQfnESds&7@{'FfF2i5'Vzǵ>g~XׇwPȚ7شEk]=>XB+.YҺS@vGan[E.A#`U?Ǐ?KM}ߏ~k=U(m^hfn.RqfM:q5?'=b%s1JkU1!pzP8x~ VuU>L$t!%A }M-ݲ/_K~mShaO޲P].6{~~q?e^[6![ejP:-ژqy4zD6#`}bYA:R+ /VW;PEl<KVz#V`َc5tĪJ6A1KlG7urt؅HiszRզ gy}RyTFzo>5GhF)=-~K9{:"EZH)ބvl[%\(&jPٲ VʚY@pesf_j&hGEfѳeʖ?9IqAC?o"C Ҟ ZNeFhVM+r~`N G?Y6"|VAjZZfv+Ƽ Uh{9j%ed1dF-׶ۛ}<_5 #'bmqP87fv1-L7Ek}s*l39Kh/sZ!XRXX7VfWG Yh7kh 5W;2-QkNHoM|5E xbC/ph =66J]tnWqlR-L-nRh]%.[ErӇ`\3i%'s `ԉ01;i Yc[v(ZzX?y=~k}:Y>b(R_#WNRu]qa-Q C|6< AW@jؾo&0{3]5d㺮k]+n;{؆.2[{]Kk)B|4Y`b_.>qGYHx2*F K!v\E%~[9[%Xn%m]#D[ǎH2N#"o(&e9Iմ;PrPEԴu ݛv-1^ږɞ{M_%~V&5`>L\)g3(@)#` egإaD/t n Dfc9$IF''uݐ0c}bKB~Q`9ѵ$2&q%Ù-͚[MҢj:o.qF:6}<34_\eLʛY|uį@905cg[ gQB-d&R<wuQ P*I _ MAƭpQE0t~ s9+-(Q XMkz]EvT2z%?)%&;Ck: _ӑYR'17BQj(v:L9CÃ,-{{h9FrȽj7޷U$Ci; 9%iʌ-|D[0֎Aq }#.iPƅc"7Xp>&34FF^)*Yj?q隢g驤q\rh m籕7!qVAt&DtZjiEȄ_|J4)ј{M8nGAGh]q<;tEk#Mɯ.3.C>DQ:ύ^k㷏||xv=~^]"__^#}| kQ<($$'B_rO9,BTj2Q`1ȼhE ̳14Y3RNwILiYg| >q0ĪcLFKL-b#SQ4‰%7 x߲+cmC-i=7V\l$*Ifov#W3YlG(%HRD+0h -?l8r0jphJ.9c*,\ѷ.AEǍA{v4Tji:)'/O<7sImNMw><#be ft8-;WS!a-6g?ԹG]a?0]#=YU9lNqt*/P?ޘnl*)MbRv8P2P*elAL{u|e<E+VCu^v3TUMW 'hOClчrC02޸mҌFC1b6GLFPU_xLo#c![OĆBu]?>>~㏟c]0ϧ yl8]nQUx]vȾQu;G倵 υox_zgdzr_fϽ^@_֥A[ ~{_?;ȗOr? X13 \KN^>!HOǂ2M1&f%sD{Sx OsoYۃ NBH/{QUq%^j V𠣅Żh}Z <.1;xD-9-_+Z9XN}2.< > Fefph8uzqQ*n(%WH^~ V89*S*.VhLd,=mZP\.snl0ypPt?fPֆ|԰3~߷#{KQB5fqe)?Z2$^g4Au.or^bXCYLCSD-'&?=± 4dgz*iN!{snTmު¡/U3Mjs"OrO[%M_+}ه+1I>qqlYU4raB* E@Aq:F{»jH1K<G&H91<#&\E96b7 x0ܼ;礸O  +KR:^I$poέ>|JIC2¯Z @bx觘HRH.yNi6/傮wco`oKuTdnUKj/]A<񶗦??Z\΁װ> ܆C8ȵ}C.!To-B,%x[\Sg u=?~?~c "f^;°}Ktiƪ6(1m4mz~^_\7QL(Mk׽eϽy> Q ho_I|~|{߿̾hO_:6z,P A֙^߉'qȁAoYV~ _ X.fGKr3Un`I&sI2b5I?FR!AG YkFdol3TG&̌1SnMnj=8 (Ӛ rAY:viR(3fX`` ?$d 1@{dasHY8RSmTM{t}bDAF[bf6͎U_9T,H1B4!LC}"A}g_$G USe#T& ;ԥngIk:F}k[Ftk2;P)EFC/3&{Lkf= TQ4Sk!-uE|=cTAikA (; 6~d?>~|x\c%BF^T5&oڋqߟ|< \\kQU5~"*x/u=_}z>~~z}߿i%y)^1qJRYj2S?WT2k;FJ"#5z?__f/"[ɱD 'kiyR' 9dS2ӄJIE^$hkYlR19_ c8/k&hjh)+RsS%E[`[B-VPyZZѧ?Pv0[̝FC$|i&] 'iw|6b^s|7bAfry"Gj FIab#fu=*1޵ي5 ֚KR:࿦vk|a,9>d5/v&QZ,V8zNV}ybM P)S8\~5_mo x?;9Z P WS3o7_azvLTb yGx:`'K,Ccl8-uصu$XtsJ:eѲJwrRM+ L(m` +eF) ,ś'dNO<ԖYck2N$b0 of@6ѠJJjj])ޙUNǩPOA`lr+?tƸ6gUa"u+.$K+1 wNKFumvsoKsB8ie(ϡl/@p /C0|=`TeD?Fz%pg!C^h1w6_Ez+Wo'CJA0aG! D{2@ׄ#+(kP#Jοm=P..S 7%| '4{ݷ\__x_׾ױ&wb\[lE#Zzi}^_Ͽ%)\x-nK-QU_z~?&pw+SGslL{ϯ^oE؋C=&fwkfr@ l&F=<Le)ب"dڵ,9U{aiKyqg( H#!T"_ɍjhMkGV:d8x3u!Yh 6>,ϭfsN/g6̒I"nO=7ܴ 0ή`"2_чa~woAi(W 7z|Ғ笁SjK j^.#1?λujjO[rE{׽k.Z%Wio=PܸD֯xԀθ  ͵=f9ַq{'P$AuT,72$7b_" E(ӜhK5vyM˩y" IDATgsm~2(˖j$6AK#&{f )MTPPn3Rd[%rZmOmLĖoy5׫$Uaԑ"zQ)/oU*.2%T5'Oͽm/Fg0(4121p<@oŇڥ#2W Z+Lmd]y@ 0)c+ SזL!]}SrHUܧ9,gE'D9}','a EFOʳuQm|~ni"b~/ۿl?I޸O|}֗Ͻ@t]zvWh1?X+X˥\KlJ3nޯo_*_ K_XvC-kyZ- 4x>(Be\17.}>__>"?R~h^&m]sW9\Qj 3NGZ]jr%!jF7cai~c佷dPR:Ii%C:X sќet5xI &}T<8!k5+l.²NxoH95D6b7A>(23%ZSa$ʌګbtZwK 6܅TicdqˠNJyj僙.Ht ?c{;4 k*`&:(qNk&Z( QeViZca)ѸZU b?$ZB87*ɩKBZ0mr]#!vGΠ=a 0JF||>T0>ɵluRUxeߝbvN@Ϲ|"J]Wt5eEaȱ0ɩjЊsW9-XU {9AԠsm-~_[žTEh_׾fO#e?~󾮧oz:YikŔŢe.,Ou]\2Rz>ϯ___Ͽl-uV=~A}I_׺4:Er]ٶ뾟u?_w _ƩY5(?bu >=[?\s`AC'S&;ۀY`0+&ڐA"޸$AN%; }c-ՠ罓pDF>^ ^ ;n1wˢ`.OKyMI!ȓ)hi>iPc5 :>䧖6Ȱ)\)ƴmK mQ~36Ƕg&'ߚPcn`zBVVgv%}{O3?5Q6'3ǚgf)L?Θno-#c9+fdW=|goy6eXj 4rhm7΂N 7YI~RFy?Lk2,>aZǼb)p5 ܏ffO,W]YIAu͈nn7 LWSAOثǘ4f6qKk2gġ{pqg~\B4{"YK@ʀDX/Ye 1*~{Fso$ZapVxd'زyi\n[zrh;abK갭1(wt.6td#'/^C8amKF3-l,Z>+" ؠijdԭ֐:8?r"t2ODpY+{8 LDISsX VZoGCg (Rq\-]9ĩ: }kphkaKu_3gz^k_'[i#8ǟBmTYTibօ#JVܲ&^%In١V8NJTKr([hl4 G"k =pHe޾H?P*%+q7/l\R2je;Ngg6>Zp ˀ<ŸKpf9`5<"G+=$rTsJ6M2YSC cҗ7jM*xjLH!1!i?I(NHh-ՅEeR)l7J3Xxsh$wĩ@8aX?7dP@~ 60~Ờ<%gUG:|[A>a Sw|-2cKa{U;Κx}ͫ3$53e?nvkUFb|)VU QrmA4Mc&>JYyr hq &H_[ = Bo)o1C!|؊msh=E:Z\/̳eSW 9 E.z\-UXAa,fd6_PY\~NUpsEIvS7S#:]m}΍(DWUpm$pylBYs4YԸWm*qdbgqhZYPXY¹q 4Ux}L͜~B3nsP2!̬:};_UGˢ)nRw$  źEnG?STPJ?*$0uЀziTQ-Š _±ūe]Qn<+qz'whJס(9jp-i<^r|,YC[y@Q!DuMNQ9r td_`)-D)QZ!4oMfɃ;rZ\2mv,rGD/YC!r\@~TKx#XV5&\q[=\J;ZEnVt6R?ubSPI(y( xHY fL 5 Ý 1ח:eN UHMP`qVka8(9}x,lн7*bitY#B֊ bTR$N{qiR_'3iNWjǾUkIm%aWҖ *oNUWZc3<ڜ0.%z U^%l|^IP.6'jw6ܶDMtSTi!lmU滎3Pp?Jr8^1:9k5ZԃЏ j9 ,P1,Di@@_;Ano݌UVbJ 8Heo4,] ĥcnq?Tj*f[I۵<,B2N3r6OUfU}xsٻ{ꅏfcQN` j*$H/ac8Wt/}$hfp.ЏJYk0 :T# w-P4'EOJ\`JWq?{G(ADS\2-/:\QItxc"Lkx{'w,IX}$[""JX[^BJm/@I ~Q$ [z53FF9']d; 2<ͪBH;+*2LGt(6VY"N_b*$o rںz5|/qBcj f0ar3)߽]q%K#Pd[#$LܷÕ'"VH6;X(toQa8m!D(=Ps@$$ʔ & AEλ݆"3H\0*w6dL*9"[Cc Δ_ k鵰VDXk'& |AhMпgϨC VG񉄢I9&#$HZX/g~[Q0F|!aFePk|kYF7dHLc x8Fr6Z7"RM0@^QVb)-0ޯ VijA_A eD&*=b9Y50І"raicEw.&+b PΑ\@=Kqd c1di1*q WX&Mˇ("f?;!nM}dz]8Yf\9jIWCt yadl2|xwYgƤSWB`aJ,d]'&6Fx.kЏ:nfe21@9@6 jf+Mԟ=xO#ʯ*bo4Yw ;k?p2:m8^$xZTwINOʕE焄(Uy߶k9Q X'v\Ej؂ E|ܬ4w^a"-36^4?#Z?jd#=3C[,r`dS H:瀊Aҫ=p΁BcT|&8,cTߒ ! f.[j OMnvc/lJ<#M  MfKWmdFstP+E ňҐC\}j&ZY+k@gR#EZTt<ֳ5ΰ7"Һ"PCbs-N+ո498-yiFg87n 1QF WR!:ߕtķ[\Z˧CAzbuᯚ6Le 4y;x=ZhD%xkb*{VnyQS6g'Կ<t:;dYӂJFQ6 PzMvEjAOlqν2!yuP=D:BreѲ1 Bv5a(}m)%D h6BgN#黢y+:E0s?,+:ΨFj/Cd  @$C#K 'Lim,d /`F|vj03?YsWVvȨy&]#ynYI\;#IVȩjYFE=7dC{֮T 3n~G> 0Nnĵ*T\a]Òj;AR= d@oig}R- ZLv"sqmag1>i>8VGdT3rnJ !cy+uz>yu'荒S!gD;%"XPRe?w a4_X}WNcA5ѝn4 @Y\EiQ Xgxb;$bVfn=txq=ڇ5cB %''Ύ7TO=1+?RDJ|qQ9p B$<%$|҇)[ .yG2A@#Yq۶0?y.HUupɊUE,It@FKPīb˃XNU kv@¨&лMK"~cLP]tDچ/6$4jEArIzϋ^.-4-FTaKC Fq"h3>k}Fh߆dtRڀ  7la5]By.^?ltI EFJ;;}Jna4xVf=qrw["Hr# It_ d] @Oج;qrP 9fx22wb"bד,-e1.B]_'m؆"x6~lYC;As( i@ %:D6ryU lupdTpvI2L=@`!q Mz˰Mk&f+?ڀN7dY`Z:AצOf_jh4jasfq atX&?BtRw pͤ:Jm@QRJ%5b\ Z_5j;ec.{g(`9ɔXPsvOʩpxSTƯ֜τ 9PZT%IR =TB0T1{gBެ}UUBb%9*(8'~sP&78ԡ-sE2RDƴ,D ײ.)!1 gu.[В q6#VMk G{DaF(f@l!WsglЇp[*{Ok@ll D7(j\{\q+T@| 5iqoHANX;q hhOZ4ґP;%/m?EϠz(w Zʎ_Ь7#4>)azTi-׼l7iK\& ̲@k]ޣC>3Pϩ[-Q \zBLDK,P,xh͢`"3m ٴɑ7m32QTC3dܑcI1 H[p"36jMf)O [fm ]݇ji*U\ZgƦ&:3w|9}ıkbwDw>*э/VpN*@A36٬WugC% y`ο-yhSbr|7y4Ͽ7Z^IڛѐWawk+{p"BAStLۄ,[; b`|ߴcQKQP4U+ž"cVJY˱X  h%Lȏ8jƀe7VH ɤCH( :X r`y^z > r=t$vEk ib^7O^7b @d&\duULnT6eW:137Hza/ܳ FvKOm ݥrca:k=K4`!KקkPӣ#A,:e&fCym'ViYȑJ;.ϸĺz{+$gNLC(ђYԔYdL60K*v-ZOT)L6V@Q5cռ?}seEI T֔6], wfho^\cu$V%jX KEo@Crmp4s,Q_Ot\Wјo ܍䣮a;B9A=T=ڇ%=Mq g/~93-~~"ICi Ip.AP ň4쁹>Dd.ŋCܸH=bWiM&G~0^BK}.͕+ɒWgbp( \R]Dƅc c~Vz?oc_a X'&@Y˶ZMIc))tuy&WTġ&b}FwyO'z5Ji-c,!/gs֘,sb/h*ʤB!KmY&E 3j߲y2BٰP!H- vm=)d&Cg5֢ÕfXҌ,tBOH ^`& :|ב#Ɇ&~}yDxwgmdJƭ`{L57PbFG)T"`X(+j@)EfSF`{ 58],GH~ĞWr# :hkJ8Y/j e3g"IJqXw@N3GAXtvYѺb8|l8qM8a&#8V WxRrBd|ovQEI4Rd! bXXx`Iη H[n7.=sCFwx2Z9+ɛh<"1uѠQ,\ݺf`yUPf@FTS|##t&o4ٚ!AjD/>@2Z nu4vjUՠ:Lj9Z=<7|2C09%-@}uPhE];ۤaV܉?-XY#9驯% +x0~\Dd=d%@U=K,cKUo8 .[|JNfue~(^']'YVd?38p u0 p4k[IǤ@WƐ3bDTwKP/XքnuN)N2I^lIIK]j .svmx<ڊHZ-,MqV`\XS:p֦Z2`dQì#DAKDD"OZ>t(-|sGETewTd(Vg^窴S".XZ,`@Ǵ=9ѝ~tw~ dC#ɴLn;ëj8c9Tƨ3–6ͷH1:iG<~xLF,X*?8V?aEP?PkF.S MgKyiUڴsELwX~Sj5Np!VSg!$ΟtVlh亁TJ\Ә2Ս.{`{tEgW8uZozx7G͌?S*RBrg PBTBJQ+&ًЌ顐 !Z0տF􇭙vN֯䎨%^ uO֤i8}gcA:-%Z H}V)S#% zӞM9)"t8hsV%XF,m~WCFQO"FvnFIJWo.>.[ZM"J]|-p|fKjIƝ}F'"{ng_Oy;S⏓h/>E;{ەޏ mU.9ƿ^π&}Q0i``(`hմW|p{ѣ_F)t]2 4=gesO=@ rJu I+F+a k-Up*1_Mj$e8c4Y 2 =1z`k^mgտ@ZEBgTuuѽ@WdC Mid=B*uu<N'[oNo7Lө[K& Ɂ2񑌋"V/?eHBvb՗MQOjB"^kxZay>:7;)l,N2㡮'/\{vGCS+Sx{oi3UQdR&KD >+409WfdOu&8kjvuw:z;@*Vu&\)&yy̶oI~ՌE(e 7nQU &N6J:Z3?6W\uɩ4U=m+MLM30l'ǭ1 ~6\b(iD}jͫğ$.k!Iւ}RI\eHQ$SOnCRA.њB4, `hX<\?ˊ[GT Ajh=:&t,tJDWFh-bS\gX1B29IaӣΧǩ,j<ΑsuR)ȊjY2OOIl"/ȇnR+;x09B0w3{'K<ҕ#=)-ѝHA@'åRyٖ&"/=S" >rTywV ꐣYr7 OP5LJ6кi^*e"ֲep_| fQ(ͯ:b\y*Xx Y ImJu"+ۚhR2fLDmϽ#эޑeg2/CXjWG5 :4B$) Y`;nչf/h9fͲU>ekAr ׹ܰD.wi=I\Gb@lNe֞,yWNQKoxyzLڌ8g IDAT:ЯQ} _^) Z[pex!"F˝NN3Tq~DU zAk񤏮{BGH<+,Ŋ"'<ez8KIml3X6|E-wklz 75K䈾^f^Bt@uy&v4GDE<7kAJQ$FV+9T |#^F}֫ص75i R@ ~+4GW(0\GU?i_ xy| XkPUE =,Dku?S׮cd#%`q=s੝Mew5ƖDɨsC`ylckI#3׶S(Q:;&io-s(]: :VvMV*#5B 53jiChx}$I\h pgt)5&'C{U|(1:k[-r-~ ){Qc."NXI];z1P#2㥬j4-]_]\j9?)DXNHNL #zߓ=Fǥc oA@^cZEΉMVBV+]sLOV} ckMYVɯ8"5!5 \=',<;ٶȮтfZYn&4X4CL3 )+?{ &_Ep*Qkm>mj9tO $N Ksu f 4O l;Kȋsgu7*JU7*pj)hkLHaD@ kseH۬yOb)ԯ%UKPk@)(dtx!pq2{u݆$ntGyS6!$g蠈;(m/뺫ѻNB'^`LL5D r^joFA#fH=Js9.5rT~-Ǘ3휻(!'/TWA6?&pKrrw7tqAHES ,?s"I{E3вO!zO㑬!뵷QP&Yv(%8ehQkrT|Q^H4ee!9R[0QՑo$dJm3( .4Y:^,akk5ꂅ)1*iJcT@ЪW7~dEFԀۤ1> CKEk`zxP̋ e)KQ1n<|PE)?@T0!U܋[q(TOP;&l:H}ÇArd/N."|t%A<eᚹUs@9=<Q&NmR`THoG-⚡4QQ\G4zwy 5u!/؍:B0.LGAIeK&ke);BQv@Lʰxݜqurd&)yX%uޱ}{z˽22jg3pF}ݰAqKksȪ)tp> MH/A` 92e b;9Aj)#U,C5f{Q{%Sc]]NrwW 8%ѡ^=G ӎ PU."x,EۃkTq=u/7WQ"n@I,Ztôށ򰵵U|<tkA5ɮ J;vМuuebr[AJ+e]mC5Up&^@ʄ hj h5> LD '7!$DlvOG %!/pt}}as&Y{ڵ3.ɛhY(x.7}=-g/4@##Z(;@ph~rl$3iTNhbfAY!&W^fͫUZ:'90ihȝ8 :<[* =)nkag"r%_'t щ-ӥt,wG9{z^)4[\9@"(gqܐb έ?T(-ƭq)V-|:ys3nWXDn6DnOlj7urLLqY.uN@d`3S{JH7~{)R,>],' uԢ+x+iG+4W3/6b J4cJ|]+tYZK;1c3ܒ89~KF-F囨z=CDЌIIX'L%XD;3YU9=>SwAX?ȣ0jV3?l1?և̷t$sٹ:v1R'v :.W);v5u.Z~SǙhk#_ 4LDk?>E<<ĊZL|QM[;vd;܊.%{YG^Q5krHT? cW^dGNAd'q>>;:5"a[`,ek7'V#]%7%$Ôn0㢦\3 uF틚(~ĕSpa.Ho*RQK2 R9"Aq!jnҟ-Ren.rD 8uY[f$U]3Q' |F92lJf2s3!+׊uV*$d J;x+)W:뮞oM[|e(kϴN P=qUg,e6l%ZG+䝝N ,bZaKA; 2lgL}]ʹQܷ߮~C2D1e'g8Atq$.唐,\g TISm @OQuջw36)^ Y0QCr|TR]qDBN&G)bc i g#y]PrjezGr7#ɔn2븇% ӂ&Nc2!pRF@Td\}C22W>UTMہg/LّANտR]u [w';M:bS j1qiͤmu:s>{#,Y1D>>EgQjSkLw^螾f<.6O7@uuZ@s[p=y!qݢ{ۭ %Nb z v.^R7BOD[LnݖR?Ǫ'XV1Ekӑ;fuKI$<t 8CӐ1.oQacdUU@.y"Ғ5awV% (hfT,c5Rbr9lk6rp}%wlgkr&'$XjbM(('HD5swM&&kLC*FVz>\7]Xap7P1B١="?_(GJة3@̤"]?- *rx\2yhok6+ߦ2t$]U#vCܱC5IL4a]O|՜-Q$Fa&F)ijmVA!'Ox*&|ع~~C'Z. 0;j{i*ONBsD'4] ȡ#a*r{f*1GJQU]q'7J|NR 7{K%LXOIi=AZ+iw}CTr(EU:(,Z4 5]$UAdi61zw73rJTV'VGު 'n "<+R+jFX4y g;zbEs zIV@UPٽjQ`-ygXu6 9AegNE?Zymϊ(I[=D^YsmP$kEg=9A*8VcY$\ޑUKƶ"s hK+<ٸo:֣,bZ{)]+͂ڸd33;u};MHDͧNIԤ=mZ HZ?165#UJXPe* { П_%!|38 }{3|Sm%N(=iS1c 9́_RBy/Xm4' R)XUA$A20?+L2Ғ۾.hKN)4X.laacfX7lJnLv0(Ү` ^Q(YYF'5C%r0QbX9: k pb~u2&RhVѴVVc7qx>79dg749æG诬Zꐼp!4k |F(7;2w$Ŭkk<鳓֎zʥht'q81"ZX;02IE{ Y)# #i</AUT Cx,lǓZka͋y;MǍ۫1rY j:J[2RTCnrF i5zDLǹcXSS`J+xĐ]g#]uR4^݉7޷^zClVߊfRa}ֻ;ŤoŘ(~T7J.eNBuT'RqĽ6 LDaD5Y7T;C%0c7 BjYaCiP3&&HD6zIwE& KfQtHk$w(sX#߸q0=E^0XoLv&0,%MsX D0,s.=GgSJ$ՁTdsFQL:K&f)ra?cbjꤦUىSYh| ":}tC EE[Й7/ )/Dig& ՞ȁRG3_Sw/&TrÜK,.S*/!nU8RsZ=G.h 4Nsq0*4XT{Mw`Eyם& T;1S& l:u]P&~ݯ-ck14p0,%e(E_0Qt`6˖V\Qil$OU?І_#D9L.b\/ RowL׌ӿP })WsNPYH9Pfzj6u԰lkP"z]@uיmXA<>e H /ޥ/2ՁبDD+ 9Y{/+4HnڶB,K'+~*x:Wr8NCrM"+3l՟aO 0&&^}Y:ֻ)3E$='oo;~;SVINTSNf;gR\*PtY=bg|O;8}NfT_/ :zĐںe׏P{*Ċ ˍ={'"ĭ*)aẙSU;fR%+7L-b K[' 8ڥPy29ѣzn#Yڕ06-ޗ6t/ͽ 9q %ч-{kmK4k)77&{\ꮢwİh'dEd$"ijqeJI㞇̥ S.t5 fQ^,L̗a^=)\r@2lV[y+2Ö54f#JusJ^omPA`fc^$ 2C\e!Maqլ_(F+0e##7ώ^G)/?&#YΐI@EM ;Vy-ij)GƘf[9k ' ,u].>VQqŭ Pzыӥ>wWUw{b_ZŒO#̊`L*}2uH;ϹKTlQ(|x cz2l<5@r{yn ^y-tӓtuB1(\q#i }Ҕ]2>7X1MDc~vO:рt5E_.;orFH`2~iL NVAى~QQj~yWFl}'XSL0ktQ' xqO0']4̃2LJ5hOmµ/ptvu67Z#Ej=ݡ'BsѕXR Y[YiQ7ZHIVeˎ}ҍDjz#$ƕWvcZZn1z6nZf~/Y,hE4څl 8gv3fSDBo^uFDDжw+)q]-QFH`5sRp:!UTεމp༦9MJ3W7hG=hL!iLzÃ+ +(L.hRAi酣еΣQ$]b=K,kW5qٕDnYaK)މ*s { %toÌI3BMI:Bޮoo?q?oi߿_~ϟ_^>nY9J1w @bOj^!\0k 4PK$OF,K\c>(J 5څa-H+l* TbTߨQs ->IEҌ/J7-e&bVsoG>WMKe»(Od+%$#1 Z5w)SGuj!K|Åq$&1+U<3?:[ʓШ%*(k +U4Eϒ^K|b@9 .B+@;5Ә`]-8oJRW! MT 7=y9J<覢UHV9I*xlS+јDri(=ES9CVj Í)wؠtvdx;ڌ aB=NYp;VMTɶ!\۷׏?x]^~ϟ?ϟ~ǯuyB],EpA)DH^҃*_L+S wЬ&0 x4s1 $py?p2&RٖN0,U W.MB+ix(U-@G9Dۊ6͗GTNxX\?*҅OYAXlT6! |IxW@#3Xj.+(^|fIQSy)+|e;_&ء购 $UUc ^u -j, FjּόD8gGKh]~ ],uѲk \doZVRM𜎙/J=S^0z^)IaJҿ{WvڢёQ9%&ƀjXϐʆ1hoKa9Gҍbzƽ=>PyV{$%Ɉ|֞m 0%7V|=ϧRTxeF-7҄'FؗE TVf(b%jp$)ad -6ώ$0GI '|MSJWTܲ4c>^K9qYA{Kj5ѣ}70EX1 Gˏ19"L(0D9G`X$.'֞[7QDΆ;+u &Rmu*7ؖpB)}P"nZ$&Cd$lVD^I9&vT]~٢X٫ ! ux3yjQf FhC1<],Lj/qQuvN=j0Hi6RzQ}m*D߷*J3u.9A3b?HLƫ86Pz ڥPGd@+tVøl]8C\(iRqq` ~GY#t BFh 6䎧`Br̤|kN:2Vo_6dZ\(+gϐ'Q\v\7@_??~߿_?o~q>^0_UohH Lۊe_$+Z8Qp; R*B[I}BVغ.0++>%]:厣{QsHJJk= dw5u?ŷMY͚R;1x}W i; |fPUIGV 9w6]^}KV鰞udǦ oouDSJ@p=On45 MjiesaלS'qj_9iToF|m>!]Ӧg͕~㽏7w~5x m*un[q׽7p?*m:pOa–IO56 l2tf'!U}LPn;Lev8 v* TFjgeY+&lMz*Gk ӡB4*f1D<m ;EZs t f bPQ7j:QkRհ 캳/7H)Hkl"JLVȭ#+hiQ3+7>tDcރWT_ 8I3#z'Y-e_W|ر] Ӹ{fo%t IwƥwWw<& J尘)\=a3:| a>W7O8F'eDVmXVy q_Ɵ|k@Kp |oT/(reK4q'}1z3V/E2M\iQ(sn:{2"ev:۷o߿}v߿y_߾vz؇}|z.1=P5UפQBRhlNBG2WXP-nX_}LiNϮ😸ZC̷!{Nc~ 4ARIu`QDODXL4 :LJЛR~.UFRl,ĥ{=Ȱ):j`h=2}r V,*d qhIE'{)jn 84c&~,0U6 Q%dY=)]|0_Iwrʊ1)a8?}7e3GWRUTqW)@9 ng$"bDi",1,:_?Rd2N*%oo:MH89RUf\^GoEQyrp6@UvAWIGuJoZ8Pk5o)?,'V*X 9}8x?GJ+D;0:mEM_6 DY\Hb-}zDWzv#^[R Guqe+wNC. 3հԷFMPƔy `:/h3#{-Z<5SiaɫK^e/~CLe[4>˜WCdriFooxZŵm3Q5^1((i GNɌ3^ɵKvւ5Yzlh)ś0enhplPNb RѾI#FuXPH{Z/oᕣ-}^_Nݴvc޾߿ovدcja**ExLKo)zwFbxiv85)-7o(e@_32xZWʖx=FTpbtGaIc ©oZrQLT%S(k=UlyE+fe`V{U_z&elZL@P̧- 5ߞVv1{L fRg wӪdaBx&O GV Z*5@6XhNAd_=e]V=g?i+KR}Ka1#g8͉3rkq//tfuf2Zh2A=+L;݁Hj,yϳ.#x^=ղ &hcDa>c7ocu@VY`T8dcou{cC[Y1[=H9>:KF@-D WaEsͨliΦ^$NBk8HTS hhoBb,Xb-e^x#y-ÐS&5G'Vi6T-Cbyth9ghąh|!-pEzEhjo&}Vw5K# %\?*9ނ"*ЕFqw~BHKޫzn'89v5:*c1xZ>jV( gtq`-E3X:;^> F*05 !LSC`!uVziKfqRHܑ}TmإkK3PrPttع$[;2 @CM6}=buGE6joԄ}N|RoحYG/[gP4ǥk~ѤvC[¿ 91]Hey.Mp;R_ -xރJ1WRd@دFTPq]ƐP)oKlzu-eBh ֆ:Zk MVtC$  1rYjШ/9:ou?ƏCVܢ7J+A=b,Y|䍂2:Je{$M 胴K;|[ic\ wu#B]<@%TEf .v\ۓ`F)" +gq^21Zpo8@:/{g2pba)Tk_="7UgkH(*p@wTIS0{WwdpQT%Q!jdC+8y#[)TѪ":NY: kP4R΂+ uff5=R!krjF;*^X .D^!t~k#E3̣Q/+)z s[ "gEM︡ Zܡ-5 VV\u?STJBн IDATA3 $LRjbh|X+6(^qv9Qʘƭ Y+*:aA0F :vu]->BmT$Gfhd&/ @?*uq)hgT([T;]2O3|mvw=b/&HCGѨ@ 1\)_ѪCQӐLWB]|^/1/w&Vi(EhXE=U(uBԔj֏#awVeWeYW\2B;zp0lGeS/d{>a-$XACNlj)Q\Om[8gQhsZXdӛM3̐X@ F|#))dR4tB5^LQJtjoO%@!.ꊨ'!0ȭ t!MDϮEQYWwDFHl2ٕ^Ry.XPo/t VcF}@+gqee%2,h0I|y\ca~*{@:e0c U/繧NwڂvCj_?> x0f [4 IZ1/ :4]$R/**&L‹г/]Xg:>J tP zP\tr:]ݘdorff62fqf7?K$̅RZsp*Gcl9.%3ktfS0ዄLx6w޴dǪ̩Wd`3ЙيY45 kPҵ0 s;*ì_fh;|Yo^isޮo@tBZiW75(o9= r]M${-a  -lco1~vX+m8Ə18)y0 m]ȳs% [ -#K4J|*%0n3%)%jCEL^k);m 8ZՕuAT(TvKD"pXƤ'uRHĠ ٱ"[' ,ED)!#|ö뻸-ITosђLճ{ ʭzbY/CٶF 4y 3Z KlFubA0 |Zwݤ.|wCVQ) ЕIDaZ)+44m#z%G- siϒx`y"8}D-xޢ Dڐ#8ӴIY5@~/vIJ7X(%/NtBNJCA|j9 ^`-ݵqDJ]d*IMI:ru>jol&8p{H@ l?E :g|i )ɭdVx`:wW&FWV3kx?&P6(V"> )+?vL!5ZZv,CA,L< ,v.I7Sp)n ]A~*"roNUU.kº^^v5▻ a?ڥM]v؉HEĀ<( #=jk=fn^ǦdjEUn걄b9: OylȍVp&Ќyhh]'4@[ ύi2ZD;I•" R?GFyRֳX>SqQ#^vZ4P< {CέDX XJȠ&]ZAc/W¸Ҽ7K#e:7< i D$7t9Hq|zv5}#3 qL=l.-9\1q4h:0V`jN$lzmrL0;LNskg 6#DqIh9Vϝ QsӕV gp˙cqA Q8=^z CTS(k*#egGAETRe`;'f*mާ.A&`蟒jRb\G'ZP da}KV; TT|6=п&Cb0\ vRqE8hpGO@7h;w?﨧Yda=S/̺TaʽЇ9"E8򀗦)| و-[%Aź+-}~٬idz2hA)F [[n}90,HJকƊ5P1at{FIʂJU@ 1h (k+D^8dY4&ӥB34)1A2 LCvJj+& LJ X@O`5|PpF$N(,>W_j\ɹffYA%jw2A&3堝׽6U3dZVef%EgN:5Mj[-|> oB5)+< wNL2t[V5vTa0lC gݶ>C۠FfX)EwrT*mq^-Ӄ:d)+VudŴrG{ R\Uv\P+ E@7j`|Hl=zC[(b0}64ve GGLfBM)eRJR:svn΄U׊7@ʥ:EVnfu]ou! `n&D76GE u^K6&G_?AU B|O mᵕ<5!'0URa  TIٍEY`jA9}fL`5W%YJU!YLvηڼ# *0Ӫ6Y&N:i8 Z90y-RnZI9$ӎ%$By&$*Qɽ`B@TEj _3h 8AVq1ȅ='}[:|fVSD%e%iE,0 L.Df9L1' VG3W)ՄR)tˬiI(ڕpٜKUG=K76x"7{#TS'JDG7ҀGpOWY ӎ୅U]Ոз\yV$")IWQ`&1y隷<]psaGQVA=-a?saMVUm&eLTe⻑mrH%p@:, ~jE0< Hj;RRYLlё:m^EybbۚGn_ā e-N4D73n uA\6Z]T[vFZ+3 Mnt}SSpZkx~; տddzH12ki *pĊ3D<ssFiN!Q$fB_hfqf|?IbXd̋Q(Ϝ/&"(%;n6-oUM*'=@7cx R`;tc;=O#fAXGAmwx095+v`˘< =JS ?J4pKf\lGV :beqI(2҈!1lkx?S3ʌӡ-NR<4"uR48g <8/ L$WOVt){gc"K\Nшl=f7%9 փ H"NqxH²Bg\|xdY8B?ͳ!*A|P ա((FXV^UnL4//0%RJ LTXʝ4Xae+0&mɹ9 _! d6eP*lxg;j3u&rvXG5*E=cFLep"D"ē8)sr|^-H'~4R|yٵo}&Z3bTEYSN(;_7N2+ a!IXq؛{c"E_E1\% Q8#f,sCj@, d=$T)c.d&,1_HOYvy0P+b#>x}|^^N;^mv{覝Du CY!gF¨T.1~[)d*ɱL]ΙΈ+A#@ǁ3b+'G0\FBy(y]dU^]X#9$ - A|=lr} d6n|q30 @c9T[TD-M)J#¦NG\K UmXN `V27CjgCtg x$<<̯Ըvy;!lL ; 1Taf'x[R:3y+`4NկUc)Kr(2Qi3ʡQ,9GV#Ȑ=LDF<=\іaf}״+Ff7C91ȬԩKiH-Z1{=R;9AsӶ[,g4P z_W``&3njb{wM}Jxii,wV z#˱"ܙ)a̅`<'+Sb6Ncƹ|"$䝒@tU15mHcj+д:hkrmF1Ks%Z' Xy@sxRJmq]J!"3ؽBGbrO8ZJdZzRLZmYѱ{!56#N"5tBjjɚ""ҳD NB-!WIbŻb +a1GT `%('tF 8/uB.^|Nujir +ϟ_)WҪ#40Y .2wUljiۢo̦a^YI:{҄$>T!S]B @\' SwKţh~FGNO(b02D(10e_P9☕74>s6!Yԉq@o``OK管67g>K[3UQޒe尶%7рBL]SbNG q̨B!``K]L ]K;#,@5ŨCj7"Y,`=\qB0>>>>>?[Qt.TEȋ\V?+@3/ŇϐաesKb- t5V7|xUqpѼSSyck3i)XGob0>g}WÏGvw,D~"qaMe*糀em}MIx+Q'7kII9 CAW-#Cцa\9W=t8$%:FlxL%{핡)skYSEJJ9 `] ;xdOr@{Y|Q'V|yz25&3DsMg&.x)c IDATK:M ,|8Utxw{@0fu#82}zGSl%g+yCBͿ&SRˣ@|df Q(`ِeV%#9f(P| w]F'qFbl{XQNf0X\ 5Yڝ0|iOrQ5c1>-ULuiɚm$']3fb;Dsj1$?x*u+Jp>{D~Ny8Ɣ5b=`,1Lɮ`ysCfVK\bFC>DRԫ]I<|^IR!8H)w<@ѿjsIj!}hyAG'1!FhwnR2!kcsfoUqb$ZfίV4ϟY߿PCrዼKH_|m%ԖZkKuCUcι)Oδg4I73!bSָсmBݡۡq/T}H J3l>T?H*yξ|jiD:bՈĤeY"GJVZRf93kؗ+Q9ǙGs5^Z?S{^5yP aՀ[ģ;@dixSX("+qiFMTsQ^v`M^;IMrnE29'ݢ&T2oKB4e1?b^:ۢ!_GM5r(#t@EnVvuf6#)h*X2x'Ň)Xρ8@=A;#KPc̦%ԙK-d}$'G\]LRR.T^׵TW.T0(/h!2?S?^m\Ky-y-}]u}^kejqGZ鉛ij=oҌ2>djܜƆX.OT@l!Ahre҈43^ӯWU^ahXd .c% Nyӑ )!Fg0tuAwؔ'E6 8qY;Brfdv*BQse{B@p@ˮuA )"WO9W6OP4~kb`tJjY}KՈLmLfwZe(ԸmN,Vc~C g2BCxNκ;ÖXz EH؍($b"rK5srZ`?=n[ێh ?8&躮+}T}v.r ʋ6$zg3UpFN(.^>>Z\TM}5>!>~BA!W3n>jv >'׬x3s;YB4hҽtoMi۶nN>?$#QKJWm"kv{*e|-;,@#"gQD$3]LCہ< =ݿ`Ei+̄S'gr#79?B`^$7Uܦ9Ils/؆G)',v SD!}0:ٔCS#7Y%LU/1jҕi2CL?&mӦ;b c=HuPH֠б:E%8dk8(N\.e cYU:m==e0r3Y!ƽwp#뢐^V/h\͢יz\>A  sT=GLΰC]L K5{d'M Sk9)-+m6t25H-s誏0cv$ʚǣQsP(XPFw]ۦ SuF4V":Pqlre~p>QkRkQ/M9djO9y߰4bhܛ͐$Acʈ*Ml6nm[]ub_R}-b1͢H:h m>Rr%O" *gϹVũd|Uy1W uJK$1Kf}̣]C9:W"s Hŕ8sἇB"FM R E%Cc\ DŽ ~\"/rV"y`OBţ2Gb-^%e<ӎJ$49>o7jmQ%mmYr?[Muܛi^f1HE#s&bF?'""$0W"')=1"}Qi?FD%g"=:'r,>tF <(PƑ@=Cؘ! Z=8e)D[>2u0VIy;W*ؑggm^M^`%̀:Hwlm{VKXČ@g)Vwy6#:nf@H9᫵PM[ P6&}dG=`xW6F~" uØ~[hAkodoT6+by!+*QzG * IxOAr!١wM?ٺ&[Bẉh{N\ 2}@ˈrQ bٻ,ŀ&8|s#{a/혙\<-6,i1L3 4U&gD^ 1*ms$VHt j:նh' ʵ` ӇWrVt^&y6K "e+ThVÉ Xˋ%K]-ZKYG7-<@i 5)G_>^˸;i:e"t('9>>׿^\>?HDrjPl!ϳUSz.J“;r=.Cq!ȝ3@a[qqfBb90y-Rrߛ7O!L $& B 6UEin1GXa 2Ϫn/cܽ,Tw kGDS/a< |-"1U' %{hoi]hn)JqҖg,=n`(Y6 ,k mDv&v(u!M)Q2 ^OsSJ<sa;LPzC8^:)8O9m Ŀz\K(U4?:BEF(`p?Q'*P,_QW~1i.59[hB% ui1m6r$oz=y`Vwy䈶&`ųᔈkuyK.N/˔xN34 V'V?~~vRnmqQyZx!#.p^\YZ ;~~iCP6(pÑa;SuZ >ʏ B7wꪝr S^oy7V E{v9Ǫ &O8zɁqa8=+qQtdkX8 ¥8Nvf7y_h DE=ґhF?a0V̸3 X 6Ҩΐ"?A !*;.Y%c|5#̮RblBa(ReFDpʖ;# <_ݫiE90{:F/|n[zU6S ޔ5":\f'.kr ?d9b_{j [7le'#yf)bcfCuh%i@3$mgInR&)Lr>q3~Q7ORWBS_o [9(U-F98Sx ^H"蚧QyB^6=<7m6{sv߬eߴ-QwVipSzܕyZ6,ٚRQqyT,q8ߴ%~TEnbɀq˵]OM>XN vMfcTivSgaUeI fz50oFzf󐜧ٯ@jUzzyĤ&ߞ 5fqDFgG>ae8&0ۤX"]2Tfkd8ȯ@m֡/V4]H6c/Tk!-eU"''՘*?fU咹ltz-qcvqFSgg~ܵ<,CVn( snGyǑ,7({&Ic0%y]`1涴$T:th儎9v-?hC=!4B&i*o_N?E!ɠ]G!{m--I5xfSODWѯ$K^* Y|!}_MXw6.\?r;NÕ氧]@ANCqSOaIWA LԲxY#k$uLdY눨 BƊy<_!%%P]1ՕP,ZlrDG\4.Ce3JWso gR|%C<% a!Fo[p z5,Rdz J7?߿~~X. FַVYmsE\PL^[rQjWS31S- cw~ H>4?7}=;J$df} K{Z SM%o!;H>֦8+"MrZ#u;fG1 MGs+>˧xJ6Gq:L`s_`L{>BO)gUd3?̚?{Lr턛ܢ9?jIJD4CS~6EB#4h_)ZH S U0iiRRJZm?1J<"kO'w0.$/7[{h3L 1}R;<\1'L̷g{)aaT^H wԟ:E+GIa{z*iTɪP#F}[ V_w &vii-)1ZyKpRFU8 ,@XMؾGeqz)@tK&:cGLTfY,|{CS{]:|~XUsAY*bw:Д]KҞ:–O(ULⰘ80~@5 IDAT{; dc{6 ױRc]9b\uq/ UeUC~ӌ>ן/߿__~ފ iZ)y- <^H֞1}o}_R -XvCoy]uWQ}"p 5̉Vl pLۤ4|Ele>rV,u]/'V K͖5;s({a9ǹȽ_OΑnVeaIl |#3a$ euns{ז]"!TnWV Ded |r9% ݝDv~sgh-[8Q*ĂRxEt}/;Bt0pe{^$G`"j3.o *bt58A5 oVտٝ cj[`EKV lYskl"CsyCu,,xvk3WC$e94&`-𿍲47o E[Ehu׵^;pR_MXg_8i@W)m=@̧RUc\d#7e[+\R-֕;)RdjbY-DF`8=pi>0)C?(+X-QBzuiGsFf ps1GĐ!zʧ 0 3j#AFP0KM56(c!Os䅭8˹$Q JV8R|آ9"}פeuvHj6x}U6q [G+;sNc;,̠P雃$|RLZ6F:"-3'yS#l枏 |cHʉ|$&u0 0XЇ+;)Ad'Q`$.S,f`jn6)vڰJr1S"25]}e$Cw_꾆?Mr_B&xd=B=*# RDVt?,:=bk}9J4wg"A b*%N/F2c9VX`۸G 5/Az^.T\~ld6iFHViSh]ɵhC`MkcP$U)>oLay42j—pV[eqG3ʑЏTJҟhc*R*Q6ayqdB _SN twt"Ǔ꘵p߮ ~\g;kUUJ )}wsD]k˵@|~~}}~}|x\kZz/UM!zl`C_H46 Xχ UjEQbg ƱErg)>DBx1b{ZRϾ}Um-נ Wz4F f$akLb*XלNc}R}"Գ9Qï*FظY&1 7vRh5no$.kaCԱ9P";~m7wW`d\)EVs1Y `b*#s*s\5u_ vV,[$r c ׀3{"V+ypb{}Cߔ}^(;X!8Ər4PG}ɮ0b@tTgyu;AvuZ.iVIkcA~o8xEy@0e3y$CΛ1b;# pC'KA J;lcʡ flYAA=nÇ#ar@ϺLvA ұRR2Y7>+nU|#<ͲrdZ"[cú_O7: >ysEVɌO"ƓbPj :CtGIl}z͇(6;B(Ca8+ k?,*L8993S~(EV懝]N3 PWY)k<إa`o4g.qØr"葙0{:`|~Ipߝ# ݁1P`jHfHb"VΖD8G_03\/8&ƞ+'c7Ƴד `t65x>F* v䟊,,i9e3W*sY;Qb" XKpYBOr(Ѳl<+x>G4GQыz=s_r͠Z|f)2X<|kN5֪Nv y#=^ 89)-km޼rdLA&L%h=<棘qqneIw8HI՜Q-E{_{'V,yV8g/Tz ʼn?__7*z Fl-)uo/)noQ(CֺZZDKJ m ըC)68s,⟕Z]8R,'Ցb~~{/W!}N#'ImJ_DžT0ϓg&'g= ٳ)Cw)]hڹ_tX:a˘4ƾgW1o);`X/S!7(iPu3CSK(:Zǽw5"ԹOܣ[꺴rh1Mf1xr5Bu({ iLe:ş{[T('򬦳'<G3Ia"]D)SMldJƺ ᢒ&w,FPf߲L=/gWIev**Yc6, M̩eXWÖ6ry>daDQ.Ln=^8aS7Qmp"ç&qJU L|;@[y-zK C{2=+adgo{g6(#0[ޞjF%"%DŽ*+6 %*ɐ.8aQUJJFڅSA cB^g|m!XQ*&WI:\"P]k^OO }}-Է(ޢ;r%rʂ2]oo7;^&p|}^zk_^zZT _|TW_Ĩ'cA..QؾU>ec5H|0E9RTj{iutGA} (ģ?bS?jF? z'<!4ڒ?Yj;g8~K}^-sǭN˅YbȽ{珪ƹ(TDTY >< XbGpYY"6No[4(2;|d^Ʈ 'ɇB[g i XQe2r|(^x,Em'S@$&)6/GE-%tA6ξSYLڦX9RUf}Gn,1:rΦ5w?C#G`,y1O2 71 ̅-*C.l6nɂ-\:K#6C52{侣6 y$-9d:zjDMxRh^t?^kE޼!0ٛag4Gk׶{*JN="ӭ^"7y/%(4N8r| h;T0YvY롆]KZ=zoO.r ?]m*'cwtjld^:{ HIGPF A.MԦD@T7Eu՞\FF7j0 )!#s7a#N_ i '*4aɈMv;5ogV,b72h @;q虏mAQ з-8 Ss#tsf3t:7u"DffA@~+DZS5`8lZB'Tț f|j˴zPh/lKqؘ\~ؗuԣ;=h*\]urIj!1Y7yw P-e#GIU'%uzx;!z]kmս|+^lN]i3n{Sn[ 0}OӼ X`H)q6sbUe50I9@X8a/dnXF!x-|nUZ z,d)F+{L#~J.cI:1@ S36?(J1DT S Ȅ?H??Ҡy+'רK249b[ꂂ*:]ai&PNg5:8̟jN\ߵ-l'<92~Mg51 ;VN:P'=b4wH]{AqVE{:Ca'*)JhG8o aucGlAI dٸ?<%GƄSLurVMz0ymtBъȊDSƗWnyܛà$[ypZyFD40! (,wrfqzRRz76z '-Y*xRπ tȓ1}w"*!1D_1^Cq?G:r虙/} zό*S_Gbq0͈*?D/Oò͹ c=p(Lz6#hf"W*)2tqplT@RV/C02=Sa9p8 1*_iq Y%wk,QJAvJ{i3&<bojZ~zaco'w%Ə|~^ן^2}3A?ca`lM(&m.Ƈ+p!m:05җf͆* )+{kґxhcbi6qoo7oPR\ KO<۸ɷ ܪ5"1%1Q3xd,ZX>`!5FSIz~B$,U6+ i'DGXԚD@H5nP8vnBÎD8s )&>+J.L*u^Om*q IDATޙ`]鵄Q"V:<>bZrAUcɳaxW4]^@<>5x)g;)OUG[kݒϧ8b.؊ҿ='+DM2mfWT-۞v# FuHy{q^MZUYIJ嗐)9|mqIѧbo+NK , Z3`9̩H#QQ'^x $FR)H V֨?9}2fJDa3pI1Z;P tsYw@u']D1f?!"mQ9{7fd B).8 ~S}K,X8#Qs$+-6PC/Pvxm9kH~s-!c/JUnieDk *}K])6φ ^W.ԉ_ k?CZK6I{z ΄H[eE! 5dN8@Ո遲4l!&sO8 9|"6ը/M7p+yO1AOvSU3QOUcH$Gln!T4諶y)wk`g,O%ʨ9?ң5ahۜ٢(je,:^"҈xMJ=zG 9OtVd>^΅K߮jfE6X㡕1i`\KmOeрha::\B,xsdR_cUjILԴ=)"5PR6lH³ߺ5JiFOj_:,N V;8 @N rZobvYLu G d zEX~AHR; eY&G2vK=|sئb5;퓨F_65ip4Ih~Z?y,Rc8Pb|KUUW$#QA>4 EH1 )S#_ z$#n(%eѸ K:=ZUk)I>Y@ƯER~Fʾ"6@Xw.}^u>u~f` ǚ92M+n܎hm@ÔVBMv.mCV]j*)'۰>1}܀-ϘtS~(J05"}.(#"|˩Ѧ{^Y$H"}X.Nx̃7 mf{[6B$AbRlVtx(v^T^ * ^-cR8;bKo}hŝ[d๢I&FB܉ !_ЈNmVLJ;deb/gMGw#i%D;0'xV`x%|~ȣv^:G;&EQ:{L>0MMo= DȂ׷+V @ Y{_V>Qadد hBGjJ7+J.bI<)lJD2cKN$l%$7 sSNev8ovOAyZCQH{ՂZ$Vpd5RҖq0Ӹ~F鈐XAEd]˻b`@VCcuHfk⩻PUQ+&F -R"SNYGp3ܙяD̀+fy@rl5uvL?T-=e~,Q~$hV1O2@lxR#$`?EVLszĊJYkxM <:#C6T'&-K[(бSZua]ɱ ģߴ36{1B$wxʿmѷֺ**`]t_ZꭎWj 5gÆ;eX̸Ry*% 7EPBHz<žEM̑4iS˾Ɲ9҄V戓rj4冼* C Ǭ~rZapJ[h u'~_[PW}0E3 {Ck͸L3lLiF}(܇U=蔳6"U0.4Cڀb@q2 ';'Hmka*e{`rQ۸Gь ߭(̏T,lÆIy @]T#g_8՜DN2&џ^~Ԃrƫ .LgCv㚄VTu=6)vь[(Suf=A'i"%5e]0LllFm j'MA3˂C_ %81#ix:`G2 ERYqݘI >:i"gnOnKx8$K.r}˺j[lI!~M sUU4\}4=[綥 :ZFNj$eL\!㊸K3c0V1)y E]1u sjR͞FKo2ֲt塿!#?*ꑧ\C#;6tS7ZSxO/DiUX G |qt۔{eDF+L7Q=4.@,G_{8ĀsS=@O˖ ƄA`^nQ,Ku ǰc_DI0W-_PuDU(Tec/IW^ֺUgŅfr5`ϣa 5"2ma<[HX@bkRaZ>5؞{V1Om.1wTa!v4;b9,&SSuL?8da/U_z2%sH-'ˊmƾ~ml0d{Z .+ cr灡;uGjc- Lpf6LΔ*-{.@^1ֲ퀩4X=UZD# +ybjX ֝6WPpBrbPyJ艍Dͣ9Sz9?Ӆ Au{(~J*c=yW&SO%H=&bk:v.}C:2ѱ.ln:GZ#=I#`\p)#/+s-_U~={p˒a;G tXE:2h!:@mM@&ey&XDN"+XhsjNj? #ôR E` jG@[=y agQ h:.k)79cS,|"І-OKe` QFŹ1I*N"W@u!yҵ py4h-Bngp7oq$' ޑc W(qeķ(Ĉ6dre0[/@1wU-Ņ6!Kc~&NUj +gVsC0SY'ڲ/h߰'a,М´<%(yPUVzIȂ^u) !,Q?LyT{߶qķƒn.;?k' Ɗv M2 /m10w&R ʟ}R V_ U;P&Sa2lGU2DIBy-Mqe3;87+Ԕ3ՙPh4mHIEIW6iK%{X ,fY3G.=@ YWu '0!yEkFRAyݩxNyeRi|օʥ ۶Nk? ksښ%"c4\k<ɏ=օv oIEEt:GZYCY*WSژ=-dg1OU|%h`Cu:Ma666Qc"6n6AFmja;}xQ4MX=m^*uUwW܊TwPֳ}ܺE(DƚQV7+`( !d`a&w. %zg [1Q4EBu*z]ץki# Glqʫf DFQ]91MlO lX|(AA>Oǒ6m|M,ʔ-jra̭'t&aX3 (C ^ @n'e.rƄ fc#ݵ|^K9Zc5uM..]ͭRְη[#wyymzG]S*&:.%PJwMjf>Z4j?_:eJAJ ;'o3Ӧw:9-Fqw4I:,!88Qr+ u0%uU mу$g3K 75&PE n)ݻ} 8ڑahT1HݖBջ s##As}fDQWEp8i|4~qm,9ry취p ɊB5GM-4QÏ|׬nu2e&nqd%@WNqq(4M0"mO`*Uv^}AIF{ z+T_Q:6҂@`>m S(pFWl.n>FtO9wEүδv ̐V]͝ -!@8Yg%w]Z. (rLCwE,WQ tM+UlKVkc`pPtv4cT>z.8sog?BG&QXo* ?ߥPqw1Ĝj2J{.OFTQ,c<3#vzDf%5hA@czֹD)8krxGڬVә%sl}%|yq.Y>` X/e53:k+k1ZҙmSYه#(mYEZ[h&Q;A)ǦK6 iQ}Kie˲arodF B fF'0|"5꿬k س{ہT=P\|X(ϱ14%(~t-$ ـissTE@?7`XʱͣktV¹VLʭVC=vw"ymaX5DOjm= 7$U?czFxmFͅhٙZ!LLiEC29{(/CtZG9Z-ijTT0M쮲AK-Q IZ:WY7;KV}/|:u?R4Փ1xC@?bǷKw/u=,)3> [jWnJgl"BVWjzS[:ZYH"`>פwYѣU)hp.Sc=G))<=e2, eLvLV0v?; oN1AyzZyg pѻ &w.M&^fj|o+&3~m <4b%΄ZCfRbUp0N9B?H3zkv;`9n;G肔Tԫ8^&t%+:;݇bDGWy7%H%)kVdʢ+j)l-~qoLaM {R}9gy)P\C>LS340q4G2J-a9mvbaԵ?o*F/+;F=7>omSvmmd7%v8h#¸V&|7?=9/@|JIpuP>у؊ֵednvmFqU+Q4& >12ܑ gt "3vMi g})qxoCs(Kulm0?JIDʸ-Ysp#9+T(4,&!池)$hGa36eu))ڴtd+!$jVlBx/Q-j88R|>s^IO6")hq\8Y6/b=np'9+Z+KpM9qa F?}S3~ԝ 6JI#e8K;YV+Yl1 F֨8˵aF}lr쐀D": cA+Luh>En_X>XLN*=t|=t_zcmg4&,"BQA*rP˕Un!wY*kuuޗ\K숪Jq9& b.|ۮBELL֕G@)5N,ϨwϕO},6Zf.(-s!\bI9{c2!}{@, bԫbR&rU#36KRBjt?N=&1i Ȫꯓ mvo{}-A뭂qMKفaof#W̲͏Thexbʋ|Ps4ǬBƏ:x6N$k, nzx;"u᪲$/0'}!ޚBGE/Ih6ɯ o@3 ßBglrQXLf 88 ~J4ast8RE -x9/Fut`݊V7W``Ѐ>56}$Dg , TP:^.NxbT{2 URk%IQ+57f "ƦmYZ|inpu\210{1ޒ>m-Z Og#VNJ{?H=@G']!.#m!47 aN䝡:N1t63ZV\n$<;dެ (SYnM>#j$3/~>"x03MńOJbkC))LʾDis&T#INБF?Ʀ|ӦFhv~Y[%%rk  []IUxb);^4TQC̤$h)tZ6," M>kIzTRωsJYg8E:̃E$k,P $+Fě /8c1vGA3!]I Vqk4Q-s^褂 DqTXnS'gL%|=VT6;)UAQ}&\øy7XV-0hInիv#XG+<;ܼw5[ϘDs'qӬaf[#>XDQF sq[Wd# IJY+VKm~ߒUةwzL<U!b(򤻊?ӊYX3O׋[H㓶pg'FhTu\^/KNŸȍ8nOPNQ}U`BE ;5P&ZOrs`.و@fmxW"3k <:vl;S<GiBL!5=ly*9xJ:?:Ùg+0O=@^Pm!n2PU 7[JD r 7 6cQ^iPCb;g\ [TPUyjxE;`V!#p4BL{G=YCm4[DDV Mv~GGPY.QC722NiLC[NcwEsv_İBt2ш3Dעxvtxg֠@FUAAގ/`Cck }1b S̻<3}Dsl}$=MB>qrNMwDvrV!mg."8y؏f8&M1e\K`E_ :ߩ_U&-4b^Sy-x(%OCv)6XM>)b=Z:q}Rb2݌1(2+KP1\Lڌa/b ɬ+kJ*-LaVĄS#ٚ RLM|TJ p~[]h?2'Ys0w2,:f'NL]6"؎n7)iw"DmM gKu2gzR%Nå:YSW(G,JuAͲloT&Tc_%Go@qR@} 3]k+TPJM/ 7jSٝ+Wo§pQ+-7Go4H&|`oٷ[[[,GuxyŴ?¹'ޑ0#y3:t}9ϬR ꛂ| BfDxRҜ\ FLLTe-xGz&zfװG!SkNMb6sw=3P$KRDwرE>>;![M$y9qaG|1/@`,z|b~Ne`5!IP8#zs=j6!m#Ni->TH^\c{%kEv ZjU*]"QE9`:ow8)( Gaz':;d̟GJ4pS9G ,9\"'7 7#6oNZ(G4?0AC|ǑU޻\2LLK$g=Te@ DR#.ҹ'RwKaLhۦLD 8}G?FŊ0ptwͧf~ 9$s}noqpq`m&"[8/̏;5 DZ^UA؟1U/P@H?l{˜km55{.S}a&/6MLTȁSњ!Hs)\טor6P&T󷜒q~ a6 0V Xq r_*~@k]_____ϟ????غr5?sg({%r83i6ROoӁ4v2|igsRe_ 8Gӂg֒d9hv0%&re6k,DZpqDgؙOwz"Ma. E{ZwavR,c?:gLWnBeYsʡ*1Q`>Ð\QI}~9~E\73&<'~::TGpR(6m/Ւ2H*L&.ΰmw[{ք:ƊU7a3yN߄*G/aK3%H[4KA, J ܶG0~-j$k*2iF "ˠB*7xgZf(B%YOH|4BݎaY3N|vS<<%=U Yyc5|4y{S녬 H) \b?NSe| mE X> E#ViWHr=6Z惈5(9GQlY̻3%rCsHb3ieI*a`.%4`?o _s+A Vŗ&9&ιgXusB1f40E9[aP۶5ϖnO%hh!5t?g0l{a  ׯ_~z - jtw,G4Kq?q`n5A1),o1b~F;r=B[)^q )UNJ#R ofGiSqP@x['3L[*6w֦E{/\ϋ4\. b/[}_ ə'mmU'>¨c \2ÅQfU%9Ec/er\Р9%<FjoEԤcah]h!ddn ȶdȪ\D,s-#*C @Jz3-Kۀ 29?َ!KQ]T5 lJa;r|\hSu3VǧG.GSc(klE7IBvэ0q?An X=F9'YC$Oofc=+GV( Cj_ L{ىF{1ƨNN)=w] >K$q|*‰NvQք91I]OX'KJY1.ŵ<\LF6$Wg%j+h{D_%y'D8N^_Heh0TF6V?;y.FCa +o!*lzn$Vlz)T6(ME\$]ء-?гS{+unԱm 7z>@ְU ׯ߿~7~}~ϯL(B͚"30%\q~3 T Us>~x%6cɡ_wGpwHv>:喻újzvy_ ?'v:LZ1lxneb_zix ffَn&ZT dяQ?bKR[ H7]c9nQLtT*4lA*ϒ}d?Q3L(#BeFO|*1;9E Bl7yYl6p `MKgi {Q ;A4 ]Ťټ4A^F:=?vy)UQ\{&g, R2ԗVhY6 ; m/m9NL~!hp?zL ~rp#RahD⥮ !湗J>RJBؓGN5bRwa"zS/L̆*X7 =bθ!j,`^/zӸ*"%]tt-_gLN8pd]5m n-#X"UW0#dnXʒJL[b`=bH fi;CSTPS px$*.tgUu? SdG$=_b#Ҩ^T.ⶨ {|)Bib7dvvitvw]M7DTz0ưZfd,4Z+߿__|]^k]GTvl0F6#mgC_OR%iOA܍"IVȈrNkDJ W Rv Jʧ JJ0e0kXRlOu"Uҡ=!3 T0 f/&y|ݫ ^%~enhUHőOsrfžGyJj4'0$QR*fBm[el02BWۀڰGQx r㴵{EEV"LY}Y7F,#̅mLA3cnCNײqEBZE9!+x!" 蘒yvV~`j0!!$V.ğmK<êΪ~h IDAT颜(%#uidQF({igmE|.bO'ÌVxNSF~DDg88N, vtg;c!ꉭ a `N&K o*i#;p)!-z)SZCm.qfo6JU-S_瞗D]X?kOzJh!Ytڝ oD-ireT'̀D38)m]JyNʖs"t4*H4L,(fA)mY$2lq hU_"džm6QU1ȃ7X lr  SBMWQzm#r'7ε */M Am@tanv]k~]?u]k]׺o[LӴ-6هy7Jk `?5C= 2 >AvGҘ-Jj\BpyD*}o7슙~h~QnVɣ*hFP= 4{RUZK՗.RRuY8md]Q6uyvJDU1w+Ͻ @d;lo8VJ{ qbG|hQfj[ iW ?Q;)3.ݾ@=$iCWbb2 i00T-c@q2b@Ztףj?ﭢnʵT@| 0(aL=K wn99)ĜI:^,<#Yxb2KCN^ dΏCLhⅎ, ,dZޥ#pV1isűa$|E^ K}Zkƨ eHLGZ,(i.^Q ui׹@Hoa(If|{[_en1vnӷuݙRw6&'7f FZA*Vx5%/nhy #泴<0;WȐ|^rhc"׹}3y9ƆrvCX+}wLpL7cnx'KZQr*Mʝ04˂ G6b?Mo[Wm3]:]Gf[C|'1 4<&P9m5ZbVF1U%gדƃ8΂0;aa=ܳy^:IJCOwфv -E~rIT#]3Xm|t 7k@.z4EKԯBѥ 34b4eT|M CONk_sPs)EZyGރG^]Iiم .6MAմ7#5h@zʜf~U_~+zz]Z._uF.[!wnxxʫŹcno̎/m[~.=O'$oO=~+ݲ׵<43*xGAV3HVХV]np,6A.Zz{ǗxyKI"f }\0tieG5.1NJ ʵd-XDpjs*>84Ɔzq_^mo~,bֺTc⯪k鵮Y"+jERHe)ȣAH?,B)%m3Y.&E.3VyY~hV;zˊ]ӑ>2k?HG%nۯl []l;zx/ 3bMOıV8T9z?'a?Kluc (6Ϙkm7xzOd翬*:ŜYNdPRƹ$MMO9˵p?(.G8 q;drTM8YGJJRGIq/0+ĜHX8D\x )'ui?b8 (.בZs|ϝJ6ƣmn@A!^OAH-cLB-?ᠶu#/h_ U@(f-"[JV7s.,;)pP,~֬Kv_'.'$lOǿ֢vfM?6<}>˥bZfmghDgx%2c1py[wV߷o+k}E9Iy(,z[e)+Rxb(nkPEIYCS{ypf 4[L/ؕk^Y}+6Ψiq#TE$ҿo=0xg޺[tZA ܨ^QqIsҦMMDݶoX^H$%(@eEpgTKۜ6[{0~&l+aT5Xw| {:J@ 'h w&?O߸IFgp6/a ay?"}AI6#KjӒLEftMyd\39l$s';ڻ8fx~h!BQҤ1~v^EVȓP }wB(R=hX5v-t=u1sؠ @!#3,ڍ$G@9.Te/Sf1>t%Vv-s3=k]DNa':x  aWCo?kA;2Qdm]L#Ri9@H6Iɧr,cr{3~X)K*{W٢n2Tз9kI$.#Y G?-߷[iϻ-ID~c̦~HXKL|9Vbz.CiY~2:?DdKkõ5?Zk]k z`39L` ZWkܗޛ~jox y?h0MƢHokx:⛅-;͌8;wV}L;)$?'}Yvʶpz"851 J]ֶ+Ur}r p,Llb`wZr"5ƞҖ99L )4,jt#o@#쾀VWZv,4I48='~VVu5QlsgP=뢌MTeUOdKQ*x^mSf#{-> +}^r.w!4KnYr.O0%nlS*6+{U<_EC9;91D EW2Nr,6o߷~;*]6+]P|"ń˳bjh}e:,R ϕVZ0ch+`#E.MZ QEqEL6oqksHBu鵮~9kZ/[LOuGF4h6|8#W ռU͡AC9L[DYٮ XL~S M( ƈy޶5}ݜﵤzdˏ0+͸nD'|Q[TSܒت(l}4GA!h'miOaV@`C摆|@7m#+^xDX;tzWite]욜Sn.q%<],iUIU;_~> S:~!qP3*-%+v>߀9]T*-v{˾m*RԾʴR˰Jf1q<&ׯXxE}dU#B5(ɹErTGwX$;{c/Pپ6@IxusHKPהBVcs mMDfܝRzc/j\  'MɬWQ@Q¸YcN7;&8͇sUb@]z}ׯ]_׵~wY}+[41t0Z~ /e`Lo#qGD. jW񓘴VGM$gT.QOm)2z9T-+ PJ~sMd%0؆%Mrg߹v\M9kGTQџPP<[SRu ZdxʱBwDdw\fvk+m!źֺ^/svh(kai'6S@̬;p$2 ʿ&^H 3l!0(?}) ĺ @2nPS>rF0v#<^.lKuB߱J[[̒2qW37X ~# } ޏ|) c| Wzs@{fhNleБxPj. :2uDOrղ 4✤sr)5v85 ʗ9dαFSy55SA>(> 洪;+u~ ]Uge1K(Zd %));i231gxPw o-ؽ|OHB GI@zr+K1 +<0()=T"SY5̙ `c9ɩBc@Ns3?VaQl/ ښφ>LԌA^RnǠXjf\R4icL\B*q?t(p"0SCiEO<^?qؠLDhPUK\ ׯ0kUU.@'fWOKR2n\\gjinQPSdrĠvOP8 0k(\Mb,nӏr`ac[e 8l&Lͧ+<=+CKl6\kC-F&F24)8Mz\ d1(ؗЌoߛIxfcjssLpD\֛K?֤8y^uk{7,4_tsNN(Y4>OT-wEV>aҌ'؉;RS9+߰|htDon ,jSsrfH|7˵ܤۘig=!aƈp75%7N{|U *3LExǧ8ۼ2ʙM("qplk.[~&sq2R1"YgNWl7 =Ko:V\1L珑g/tYĹQp`-U6*[jE5YfcaʰQZb۷X 8w(d2̉PR&$}F qx㘠h 3Z4 ܪҿ dfFcl&?DɩHk*V1G'z%yKD gĔ bxH]=_T\9hj7t0N 3\(H G6CɀQo9ˁcrvJcގAETq 뵮cSӲ3J"2Qܢ P4sGမl6OO|e3ڔc ge1 'WcH$RI[$s0(rz>T!!1SQ0/BbX۷ao\%Gosoo~{sE%aLqXrf~+UXMX(KZZ۩񌮄 uD1:(L(r)Tu-b_7_qUzt +?#?fSW&@>Ls`<[1"GC`۰Xˌ3s$G("8,V{'p.H2J)c&+d1VA Z}N(TUBor vAD˴R1?d#+Mt6bDbՎ!r%O|O|VtR'\gF[Ewb`Ga/Og0MA#78 -EU2A|TywuGZd60kbKD@ZpF{'~'?6TW\mcMest۶՟ϰ b!5?:>6~[fz(yQQsDn)JS|S9dYu&xL][pm$B !4ZxuFYE4\_p&d~?϶OSa*H8n@ C !L:8?ur;} j ȡ*zZZ GbK&T"z܅TME Sꥧ9,&qbs])ɌEu;qM䯦ic[Q^㍓w*j  IDAThT[e޸TSgs/޷ܷo+& )>A?X* 00qnfX ]1'gH/ VQDuP`/T՜VEΓeݖegQPG  2=T"0x=>;J=an@ Bo(,qKi, 0X4,ïmT,? l ([Ѩ]?m̷a̋xלijk?g<⚛lٲ~0jHgd?QR*T9ޑ ?4%'6Q M|~S]Q_VP|lgr*`yڶ9Mp,:n_>DO)k9ojal#+2&s2Y>鞀ꛜ.W1kvJF:=S1]*9qs3+g0hI2wZs42c@@ώ✞Ƕ*„8--u7Qv lֺE u.J0]m6A4ŝM*ҧ;? q6ϑ':+̮O` Q`DTO_wfΪ6pM%l)iTRL6)t%81e@|Y V[+ܴ^$Ј=)72yOvS5VRMv C^gv>{̞si7er4n:LEoj @D8Da WҎh)]s f o}?2\1YZ.1W65罛<̣؆~ȈkfJ~h#Sϰ5ރBj|CJϛj60Ǘ;b57wl70[ÑfH!=A:Jq({Pvo) v%5OR")Nʅ?aL4E_XG˛;|6㑬iaQ$i&J@C(PSS) J_yOamt$+>Cb-b븃vAJ!:t):=/5ZcR1(e.DncB@ *kAIM~$ת924U(wҴצS'o!"m !\Ȩ.Ky勷ѝha<#8y"Ȅw?=}B5,0Ƀ~Ch1@UZLO"L(Ԅ=@OW Q ͯ'M0б㠃;S*cs ]Zxl,UU_״ djEjZ׷}7ER Punǹ)QW `8puKQ]Ty ikg.%!ӽv؇&{99ՈN=Lt&I0ʶo?|TNh$zө̊rNQxv.7/="[{X|%YߚLd؜R)D4 Id5޶e-sUMZeA+}CpvaAφO܈[}+]Rq|pfF0Mdzm(D} 'w&?Bayx%5ԚLL˪/F [{;A 1`xUU2({B1 #9fsS*vJ˾R*+-`)AsXKEtMaҧY`jnMry,oVU/?खņ?3ď["Ti/dV[\`ط?=ʃQꢵ6fKaL570j&T)]ٜw8oUaԛ(Gz.-l\S{GɁj>j#pجa޼mŊ$rY j6Kd򇻂k%a's!" s}.Ùce"UjA='ksLA$=&=S\7 ۠j^okEOak^ySwRs} b9ju]+~_~}z~? 3x'~:934gg*) =BӭU ?)4s:eKWzqw[K#s`(šs叾Z(L\;tlqHH s0^E"ž3_is=gVo?5*03\/KmTnmٍ-#t[$@;Р2Ah 6kBj#JFmf'fG>ׁ`G8ܩHWh Vw;ەdh(vI Xh[:iIjEVD6W ~:[6WN=Pwc#w`) 혝~=] W-$`8FQ*:e/~jZ3s2Xy2B[^-N\ ,g xc)>bwqka&Zo@=pOI-E*U~VtX( $2_)ʼ-/, f!\ @ Byޘ4G[CԽ9Q1v(D&M5,!ρR9lwc@kaA[;(2]f2}>rЍq-7h OH %" r.j%x7L<)IѻNT;,Hu6p 2sJs0-SËR谶!Ԇ8I-E$"aͮyd G9oKr>bB=h\u$& ܇Y e6 *b)0@)hmgfuPsT%>0/;'NwfԜW#&>OyU_T 88i4S<#mv=6vn~ 6 ໯Uj 9KS XZ=}ЌŦH0Y*}PʘLiYAԑ 3̨R;gRB Ü ã,WR4/'U&h= Uf l2gdU[[I`)B]O:cTTDoǹT2o qp̕q\c@;n M.qAx8DfGqdiM*Գ h 0}U!'z6`u+t2kیZ biCT8;cQ$MX&V,x}Tᐳ&\n&=ET/)*Xate@^*YNaN3TكYH )Z$8?jZ@QЪ@ Ey,u/]^\E(R鵤Gfʣ *2g{3ͪe"`֓V&֢0ȯo+LGR] aARI|àAD|e*B S)M B~Ahޛ! 3&MɌHDb; Kop@" Ü\ݱXG$d.yQe?>yojwm֑,Y   D%@e ELeU*~x|<||>>~=?_x([]8B%Rk]и7&HheKK[Hh#,3i^)"+ SjL.%CQ O`iE^36gi=*r[d ڢKHZe(\=Rv~Rwn-b=cq3jR ɄNYr!סG.Ӂ=WHns-e2@ED9]8) ԡ]SFz洆kIfM\>ݦ]?6͠M9I@b$$L}'Kt/ykZ]ctGPܼTq 5X^p֟&, THbrob6!aJɶ$JY N U)[(\s*RrZ%=OxD"1@Fލe=aZ{"XQg++5BLrP!L4>DRl{rBXʣM"xˮ]^4N/|i!(eAm)W}8vi x||~}|}|>_}|6@%z'1KO^x v]Q0]#ǜ jL6AXY20aʡ-Xo:ۙ(܋( =ˁ{}jQs/"{TRSe,5yajIdv>5fe"#SYJUFvJ>"Y;Ips$tEϮ') feyyԵ}mS+0 oHlghZ{ۤm Єͣ+&6mF]Yþ*_ :5k?j\IX"l(X%4b 5}0<{d_;#&}1 9t!Qe({6 /e৽7p+~?=`a,\p t i 9cԢrD,%!X0lѶr4c7y2\fD,⥩t#0H;y!ˀkff[6FζSQ0L אvՂ،Te8zY!7DAA@[İpmTB}5;$?eաWí)Gguz۶ou:&qrpZ~Qm@T[o;]?'48&}a&L0{Y(-: x,CA$~򪭯PRW]}L(Z8J!ԫJ=aS_`d?k)H#(5|Tcj8MH\NF_!S'j,Y$h As(IGWK)*He Q1< 3# a/b757EV-H3F2eok Q1Q6ˑꟁ=uOmKl H|4@̯ƨA(*3`! 𭈐qVKŝmALaNiS2J0qq(%T,IJ<'L=zܥԽF5LNkjIxJ]V #Z=_&y[s*ky81F;@a/ {͚6`;鑁ZO\ !֩g"&?sQ^ IaWc?1㰔QR3 a K@Ր0僚xx|~||~}|}|lqXlynZd~WcJ2_r@AsWdؾ c!h 8e`]BկcSp]$_6 q 7l<[xDD1"@;'b+ɤF"/4D$1/b$A?UU Kȼ N߉/W$F%E8VItoػW[6ڷommmR!us|0GB3uMmEbR=چN6;G5\9Z&FJ=Aq}cEF1W&0˖Kc9NJBSze.&H~  dc{1I19TAWTy{q94&AI~,SjIފ23ŷi#(W%;8IQ)P{]C%2 FCX^Qs҆dGP@Z3֊wx`0L!3)m Qc v jPwKF5K.7FGEՐ:m=ek߿YmZ~=r$l/PQ\F&>~>esē5𽈓ثLpp@ZH笚sJ[A=[cs" #)ٽLkk~n/RFty +W4,)dV$gO&ܜ-^T 3E3 rہEQn%eFoT2Ֆ"xzL Ҵ.`w,l\w4/QY, eOqjBl L .[_T$Þ(~A%+] 0HϏ߿~}|~~|}y>>`AIN XjD> "_%![Fm27(k8{^LqN7]ef?+n&5cX;9I 魫j1 Zot#χhK˩?&zEclA<[iS{IXpNSiF[m ۦ\d {~az!p &3<6j;:Q'6 b*WLk Q0n/$8xKe6vu-fPaMu8hO~bY-!XT>5ɔ!6rXj;2nSeROmKlcuk_ZLqmEE?B#U0t T eUVd-e1Xg=s Br) tXc:E Ȝ;nیKJ"03FVl*FK2ǦA?Z3(\J zA:űj1"] WSdQUP0I#pM:(iAH0/pkw6Dx3uWْ?Yx~?$A)e 'L`: [Q9Ny Dx]o .gy&$ t^9>+Ck=/<̨0K?O:ݸ.Ln5tȲ{NNJ ׌Crtsֺ jS.sx:Jf\NC4xpu0kިȴ&䶆޶om_ߏrB|u q; ٧uxaU|r14a#B*tr&Xkh"J"@YG Qe_VrRcTY_8t,P0%< 5` 6(_2n-9*_Xi*79s9 X2S2e(#$e02Tz7ʹy { Rcn:&"ޘ'ޘ65mzԈWY#]V;LEِmarz6cbtxUŵr eg p^l\5;z=Ͼae 0ԕ..%1//7YNЋ,.2`9ꥼufze1("Y1Tvη8mDŽDBXd)33/]uNu%n7C \.Ȏڐ+J_Ks-Y"F)YruL còͨu(Тea%C7%TB |n9{E\k *idTahAIL(ry, z>v[: wô?\kI8G!QMJMKbJUth9Kmߵ z|>ׇ:=?:@=PХ+0tk4_ztZ]C&h   B\]=,^ x~J:$F?r88T@ţ7$=Z6H*W,=̑/O6$74):3=RPf?2,/FP<4w!zQXiG۾ӶKKf") Y~zIM`>"ElIHzk]Skb*<{o-g@G6Sh9bDf/LI&VVh D 10#'_ͽsZՓ~~ PPu!u`e枙@HnX@_Bp~q༄EV^,;ɱKHY:m34&nSB4`oa%B[hL(:/p1%%]wU%3HSȆedS"?-m1.ÂՒYBARZ1pտ~Fxx<~v۷o s{P2~dJHP=LJPf)z+/b|[t KПv=117__BT> v?[{ߟ|}~ڞRY_|[df<2= +M Xpj Fv 5 _&J{NoFYK~q]ܹ Y5I3dԄЀbe{!38QMO3|<)ab3fDL9Yk(:.CTj[nwh;|*tB]!2_rd!0@f:֠ tm:NҐ|@o:R 4^o AC-Dd+"caO\TqS?m%+&j2Xqxp ؝>*y5VSVa/D2Tac M.af^B @iB,WRxiiepag`%V3Q#%<8D&o ַ\l}&3&3hOT,]OMi #|(_}\$ (:AàLK4lrTQKbOeat}\?__|>Ko{ZRyM8idT=@X@R>o[DY'(wX=$'wtDUAS|-ZIͭ~MCun_߾޷vuݨ4. *FpJyXq_2)ծXKM\]R y|_|Hj ""} SeU#ff44 䣓"MM RYk_V2b A FOzIN*){mR%:p"Fn CcؚzR'/:uϦHp]l\`*qc6Wx20D. j'ؘ MWA b!!L5;yL%s^ (_gg! \r7mR38̘ pBJ7U.8:`i34C.2 58&apWLL IS3^O3 cjIn%0޻x>$%^fp)1;fQ([l߉K?\0H.$@-UW,vP Q-Q DvuQrTFq}cם0͟ z WI篡 J({,C* a(JYSOhS #ru2EH(ӐiVYƘ;p\?/;tń5o";bw YK.$!A^/| |v?z|x<m۶՜-:5i tk~B]\ݘ8<ӒI:iCDDSF(7RG{*=bC$3HRE{ Kطom]Q.Bx@BQؘax?C\Y!l;P"N gTUO#V-[]ΩjyMZEL9·>z uL ~MrS7G$ Ll)\m#))mnkDi趷ۖޕ3[%\!<3pCyⵇ8XJcM 4LXHNk|(ns 3*Z))IsC"%X\@ʋ!=X+]%*lu V KEn̂2[,\Pvorr)ʍXVսŷ5K|[3NekKkKc=W<>:amezHz% 5ՀK LޅZ_lŊp*vP14 oh tZ8YzClm߷/m>~n]#,{[ߺәK3J T}!-WN#ZK/xY'=Ԡ9@kLJDFj9} {nv{Ǿ~޵N&b$齬ѐvllNq)ۚpd $l8+Րd4l$fQdu55'!DXt ejՆx Puip5,!L}jr`*??@8P[rWEr+H}xº.L l 2 1LqBHk.9b#AMD"M4DH BP9EW[k7,5W>4fËPh zf^UT!qUdϯmDX M93Sr(0k)(m%?2v ?P$vc鹖q\اgl~ /y5Oΰ̃Rc.SKtޔI&EFXFaY涮HiX,)9^*P_>B{؋P SfqFAu"2|e&$s9#JBtfupɫɴ4_x2aX+iBlDTO,hq(3w \@נPET9]O>?a|.b~|Ȕ٫ZjAJ`.sTP2OWc{^еUzYmVs8'h "곥 1J<l@~/o>>>>qmwkնnUDx @*E6^q]~}1Uxϩ.<9݋Uڰ藳I;Ȝyk49ͻ@cu.5(=rB}e#poz-hZa4jYaF-]Snsq~(MQeQtL"ɨbwM+K-C9e.8RI64zs Xฎ| "dZpOhƧJ']\TP' bubnr.anE?\m8'ײF T1ܗT'aq &F7 ΂VY0n~Vt$:ʟS ꝉ.]Y^l\O軀ַ,p^_oяB>uW,^z:^$@}  gfg)1,SSQҿ:D 0#y!1&,C6ӝsRR㷊:xz)OjG8"\%p 3# wv^d^ =Ej&2WS؟VNyW_}^͑ԇ3߲!Dv $<ĪGxLġP W%V+ed1 .L ꛌ} q1w1TKgr*(< _^l 1;) !@XSAt (He;e Hn85,lw"PcXS<] #v⤌;6!3`g,q%b] )3^jߏVvS UTކ/-"R6\_Ah 0!c)iA%c<.{yg'5gIpl_se &rPEIhe(ҙP^"T#T)d/\J^*<_п8Q}=))Tn:|<>~_zqm"ora“x`¡Jx:Y,:30CvXaâ|QeAd3MWkt2Zd 3Wf,Ԇ0Mۃնhx~*@{B[[üG`IG+$*GH17hR'0'+~2 Ufa/Z@{ TX8`9JFwX pb8$f?elD_Ak鿄`/ItV2VXb2"K,ByO2 vPSN"@6? \i` RzcNݚHeh;5*~ECU _:Y5?՚(Wҳ 9@d\)% 4vP 4 {I*_Xq,A]EaTauYss~AL/ҁ(QPsEf Y2ɞ*Ce Nkey˥g)%;#*$*,tʹأRu5:;ȚP `ٻWìZKC X8_WR0"0ݿԡzR&,Ψ?2[c5 mJP%ABi,8$8y:'T-0LyRP! ޲w;H,u_ $kmKNGN$.V320| rOj]Q8dٴc$B V-xZ!7^%Ϸ =]۶mHz||||>߯~޿o5 {1kl]!D$0"rp]mǘfiU'3,|OT¦B dARFedFj @Se&ۦo[ߟ}>[Nm`94.FgF.yPk8M[W)n@k(iʌGV@3?3S 'Lyї\Wךջƈ##){ԓp'.TTa ) XN8G*NP1sFR$@~Px1媐f~QXpcxmM {GnA5Ng)w r{Fp$ϱ  ;fnGhظ !C'~!FNPP pH!@e^nmdĵa$91N\cgIRS.2.]X!\` td(WHْ ;EXK_sv@% S3Y\izmG󾐈.K2Q Au63#DD:3Y0` H5 e^Y&6B*<Ҡ',ax$B`@ތe%w5a5e'վH Pz9ai,m(sp\aQ5t& zBXKhxmj"p$?t|8Lb\d?R,@8b :ݬd:MbnI1P*Zs,%ŝE-UPGp1ؼͅ ސŒc18}p?8y2ŅUmSf=z>_m-p҈_ iP@kFqBY&[;'cRԬb0 &o,S .يRB]&r~GM$7zmm{o^>y`B9S d0 Gj1 [NBҽ$RCr +拧`ǥ  Xmf:b4☦9h(Ptŭ0=g' VGePO(+,X_U|{[Buz6BPz,htS'pjJ Ik$ =,ԎSanW '9̐7uN",_-1w $0[qGj⎇pd AYT"(WΨAMpe5-YS$?t Rly]5oR!w).D W*K@`;QEH)M2$"mgɓ5Ӣm)KJ|['i9>eb@4 Pاv $iBޖ5S]L4hh\8jJԜ+8Y7i$fI^۫g)QıFP,)8ʮ %mla\ {`4ZrUM7,##bϋS@W>У:JyÛ|ELET%'*.PoA,s`q1϶^(ֶ}?___miлJܻ5p1d1C{"2ҧ xv,erf_`{ .~{2D= `o" JY"t8ؤ^6j[nvv۷֟ޝ~o0wW~/ @-Y&&b"B@\E'OSnrmZjtkE/Z GzbUD̮c VPR}u_\"T[⟦he_U ` 1W9c.si}3veШx %!Ʃ%oJB ] CC8oй* 8GŢ+b-qF8KۀDH@"&Zg:F7; '(l(‚/t\9D/Od'"L)]T QDv aÝU6vLRr>dlMf;[ԄrWn4&x "*ZN\l+$06Md6N/%k F&DF!ҤƬ#cri_c%XU){AySHaqq&&v)zPC1߭=fZK"U i[SN U Ij08&>8/0]'\߿A>)-j_ Ptbӵ"A&|krD3ݰߡW!ob  {f~9^g#?CB\)]\F Lf<ѩLXBK6b_b璡?SIq-. zٝ]Ȯy Hk6gJJP0HClhULڍ,rF_cZ#B*hU8ř߫,QQπ̡XO\c!# Nn9`A()IFϑr|Oi"#u&[rR;m fI #bO22J$}fG&l@f%^AդMfΉbyUeu>ۋD0 "!::P0!ʄiϟ`W Lȵ'mT˟,ߌlTOx%0\x y K:NI7e)%LOxndT Qhl pkSI%L\\ 0A0&lņ6ARq%8~A^D2|IpY_B¿{2Q'L0S6EQSQn0 H:&Q1x;$sW:n]a^>(pHF(S늨,5R_W‰XpWO04XTK>'3d:z/QBLO[î R>j-yrT+[T:%>Ü˒po1|G,D&P AB[cx?fQvǯxW|Qlv_vLD Vxr" K! 'TaFG0D a۾vm۶JUa{[^!{#rm(Gdߚ\oaY=#̨ZjlcBv8J,-5;/JPfOC|()JPb͊F6<se5UU+#jp*9k栀pY.jFNJhrJ]䜭\Ww7½2!6jv1ÐKEٗ9n=2% bDe@@bP':n7݅vƦ Ckx Ȑ뉶K^ȁlD9/b_dJ<ɼ+>ȮZ?X~ISFV@ċ [U&HKtQ\d,ndŭ6j) /#eE אBê0`4GZE\;{5x HI:ҁ` m0" hz1"Q\I6qZ%۫Ot&DC*tVj2sG=sCDyt%l50"2|TƂd"/2632+,0-IK%مP"4H }ÆEk#]sy;yeYH u-VT3Pu%|aAU$SG$P|U&e@!28I_"$D [J:9 DzB:xo>5Lׯ>~x;ݶQl>eX]dY.0͌֋"ӳ?TgO\!Xo,c{o<&E81 1YQ('BQ9N.RAL8@ERu`e`AN Pfo[Zn`,D Ưf)ty\TRm&M%Bg6f1Zˌ G |MI\(<-2ŖYwS6wLKN?R2%6|+@i,CU$A۠omoZwom6&@ca21 ݰ3>X#7A /r$+1I25?ށ2?INEI? rkϞ;u99GUThA40=a BAi^H1KǪ@ $|kbjs(¨%kL1*T1 ,u,WJ cp8 !x8zkj}2L ~$!d>ϭx)AS\$wJ,(] PhYE thVq"nB>X%XU/:dNEH/ (B_&,Un_@Y Ds&@Nŋ%"\v Q.,x~bҎY *{i}AZ[O?hnaK'rxRV!LN%#`BQ,q djB n&0H8Gk/Fn<7<~u J .C&$쥒5 T%Juw)?o@te8Gm7fɀeSnB=4ec "/|[ezO7r죀|劎cQ-ve9aV]6\l?H/ Ըj$&-^C:=ĻZe(m1SH|KL,^ K+DR?#ƜA*icPƃyDO~ʎ@|"'^LA:8| bBf&fcBX* 95ZR -Ň*&S?^uJ pI_BKşF")w!JxBqZ J@Ia+ȱa 1-n[ qm;ȵ7dtQO1je`xRCxVHU! '> u4S)"[+&O1oCkDvv+CxJZA(ؚP%@OADuɈDGSztU?PXmu@o4o>)X&"]x~!ߑw8~D⩡ ;X r, 7j˭U\V"]$ՓB ^4h0"&`_ N)t"~?}ẙG{G00&U7HlJ*ख़PQ--$-}YFSuO|E&,,$TvB0߁7{K؟#DGc|IeɎ bAɝaEx' 5\hbw#8YTEIHA(.> *• e`''6WiB1uR㉌&d@0 ~Z!Jr%J)U.b" 4ObmJ2HuX20AE20$!lZo9l.t^ oߋ(dg5B )"? 0Djԏ % 6?kǞ|m߷m\4`.focovϧ <Ǐz]mmS%|Ӹ2_'OH(HV2ϯ["Wq(v ά%;i2A5N,6K@F]%G7ڞ>൰gIH`u"@rjJuF ?,!i/?9U!m<b]XqVDE CM(]V";0m W.NQ : JL 5h . . n?~\ HC?]wJؿW@\0@Bvy/W-MNNRvxj024X&Ed$/?/q|})JEN~%:$T6Z۔^j=|n녘i[=Y:@51 )ש3 {Wfsfc_' ㅘ3 "EWLy[uݒ qiĒD <5muATXa+q (c% Nc)gRaHŊ.m,c pDib FbarOt6D"hX`, rҝbǞ `42{1Pj|r]a ; y2U$|HCv~~|v+j].x8QւGHX}'(["ٴ䛘|`|HRsf{m9X 5z.⧨Y)zk[o~~<-r9X2d%WA8`oes<]Rf6=S5"8(_u\C IsɕszjҼ_'Bn_' h@B)eKP^X.) `k\*E,J!g l,dIR!+LqJ0t +7|W]`!;xo??Moٿ.!,m2YXr7U7Bw/.93ӥ"5,ȟ>REf$/Ym¯._*fy+¯oˎ.eZ`u* de\-GFpF*`@c[^׊ 7‰]/k<~OeX& K_)ὺvLzh&W"x,Fd9T2Uv5/X309=xCmPBYÃ+,8sQͺտAp⟦@\_#LD?*%=6RH(O"ƣ C]6#O(`;'WB(eΓ2(Zkt^ˢD@ ػp뼉2iKya9RRԟ,,62tsaFHse `jt P>" ,HьLĈc :f5?5<]|ۧo_>}Rg,`xl(\ɧ %gACFbSMCeVpW]s 8ndId㍺"A "]\m€Ԩu]zl?1q_RJim%Qb,,H|^Z/vB 6 9T?| \< xRT)NO<9,-Ξup_FE;US2M]f"؞wD#VAtoIkP'ZQ/2\0@ 7]o6nlt=%3Czo< ؿ}`c6A`j -##$;Х>79Kx h'io>\X˵G]y !7"џDtp+#Y[@Z^ie,Z+ʃ@ k\_||d2斳JڱFi۽^bAuyN{{8a:4x2e>:CTY̔CfCը"74 Ƣѓ'B$dFoL:-swMl Aי)*&6k,c;Dݤ I(`qN* mh"US/ -D4Yst$E^] K1UJ.553$bs[ @RM6q ǎjjzUtC#QR}rADHDA+ff[r}o޾i~W/ƊYp\s&2WV-^nJFHr` žneI{M=g *4@,pd.`)R}3!Ɵخ}cW[cx>|ƐPNTgT5VN3o= 8,Dthy|~c1ۓ#-Jʢ2z&T,D8jNy4/ɞ?CAsj'RB6dA4cZ `e+l^ [#opNiEgQ 0xr\E8KI'wܿxȸ53>c|>?k?صflCs(S)3\/'ab>E I*7_8U~ks|xOf;eےwKN[Z%p=elaMgT8iRJ/h D7bSdw\LDK9&^*?@:ƩlgiBw,XǷPUxΚ90ׂDe] Z/C^a=YU3U%x_:? Sؒ%ֱSt,Q.m@H =%xDh?BfA;(.1Qs `M PbɖE\4s'd!Ϣ"&64Οa:5LzqIhGLQ33rX_x'>p`y=UXQ0 8<0-N6L5&G0D~rYΤm<-lVL$&tB+e}ŀ\gɞhGbAF¹wd(,IEQ\’"s6Bih^{?a?E-4`^^}OL%%D䴭aޚ,??JP IDATznvo/^bdAY֨lC I\,$f腆!H=(BXDC h~1+Z7T"Qk.گܟ|}oi1h A[HR[OR2 WuV Ɵbۅm@^yviCAU> '_?"ɯE\Ze&??֠N@GR08wvb;jhicZiJ@^~yz֞# y`"$0r ,G9@ j:b?m/ZIzKF!D!a_Xأ,F4nRV3 4QA%1T 8ɂU 3%ȯ___v2eR2`bxa2fjsE„o{wzD)Iu5t [23~Ga1z@,Sy j r|<  Rk}ղ0  gnho\-Rz{]'//!Li/u QxaKp KK? 5}"žZ3@I2%lyӖVN/$qEފ a RKlkpI{ϏQ5;'(B~><#/$GI ʾpyNdW[0I)̋ L8|29 "ϖ@l'>o'=Q0NR<%˜'+`1)y3Bː{OPf2KL~E"fi8L†S+rtFt?2ecw 2)zS!QooT yߖo)ϱK"PrZmZ ;*?Ԙ *Ah=hoֻvEu ܬۏzK0G!0KT+EV0ʊH$TB 3N⭸̓ PkMw13 ;ƒ&]mDZs/۶ml}c1CᄀcYNi|p X+f \ڳJ*cø(4m:eBBQ` =X(t0yk.7$nN)bPs8U/u_˔Í h -2R%RS->(,0`l uxuuj 掕?lϴr<ǓvoԚwec?cq|;hH2+]/h(M6b\_smdVm>Y^ܗzՇTqS|ȋduKp,_߶(s ӗK$H75t2XbH [t "agoB9<!Q{)2RpI.fz VQ9N@E<0R(,dYp>$yR3 /5;j(t%KF j&+A`fѴqwQq̍UlaD<ĆNjWq? ,c_bVOKp plOR,fCAEDR֕ZJt+\INH)ǧfĀE ;ڞ=sLB@[LEE7g"b= !+fvھ?[{xư\.rv77 odKh֨SI,N"9 i8|=q*heʱRӅEf E;vfĘW2SS' m  @DMy\r/m{mcގC;I+9c֮,vXU9Kp8=4nOd25>-WS@"O`L8SPƭ1&s$ݮJڟKejXMݖ!; pj}6ɵj:jT_q󮘘hC a!>val hF2 c=8@d" bM8f!3 `QA"QcTB}Ы,9)IB].-+]B_[]'QqMP:ˇx],{`&E)6{b&oj8bs/w%ꢴx,H d3B!&ʃ%1Q嵯L(Q1`Aw1kTEGm1Bf'|ǔp]ZK22+(Zu!q) +[ haC3j3p=ٖzv] S|ڻ- PqvoCSLa&ݗ2לN@?t5l~L8l7d G/5apS5RϥjҒдw"2!ln`$ TcoS=,j9r/~l=|l֞;>CI~ˬ"w*K%,R!,pB2NdkBY֜6?y 5gjE|Ld9ebٶW9M}lt "15f|JV (*#7Щ?ɖYP h~ l*a%ՈdD"[BAcwK Ë;|LPd'k x g͈J-¶T.yHQ; 2$/RV^i|^`J(HMJ8=1-vlBO]TI Z f$8K  Ɔ2\R[1-Q'W6VuF~"F&IyC >[,2&k//вok)a@L( `Dl,` OIw3o2@-S 0ni $B1p}z|R1`MJ'FE|Ф1ɸy d*u"gDMĉzFO _{rrmAqQ&(N H}B 6R#Yp!Ca2dQyj9hƑ.UX-lgB|^dfd4֎}z^n%|}2}H$}}k]w,Un?ְI( g%Uzavf`ńR2yc00y H˒ JCT0q]ۣCG6FvuͼYץ\&mM:h G2|*iGAVA6G0E0bbq*,lH9'En5OM/V{(-6i-rQ}-M'.c J}[2Z^8CN Ȉ[7wvHϯT}[C{ʂnYdrVW `E\?VC4Itg8/ǟ5`!7T&ÿ)HHꭷAy;.ܶ=P{1Ai$1A,byӪ= Xq<ƺd&`Qe93ro~|կB3cr&T{i4:Fȟ"xg,AU +vȦR4in^D5Tk'Ma0t8鴙uR~2z&sR b.FgMpԶQP@(bÌMNАln1G:P}P:ԐE&e1?p΢%pqzHў83, IEh!/;GB8D2AA4IJfc_Dcb$B&!&j I ]`xRU@nJCq aJi/pbE YfL#!jPXmd ]08 y1K@T+Bh4l Gñ#sv}Gb Sta&ET Lk 8Pżس}Qr c-bE՜$HVլ]. F5f\NH@!|5"cCOwLi%ڏm5 4v)&,fJ[0~dL p\xhh4 `DJoxm{\/?n߿Pw _\r迪zxǸ1_/6AS|QK\LQfuJPXOjəŲd_oorw0wm[#Dc76A8G:5FZ:Gx@$'O~;fa?;e"LuL` UTG<2׬ pBC %~~"t:F2T܏Տr;$4P;f38NN(d#=gAxAa"E/\JỢBǬ"`GLfʪ1<.i6!F%!0@kLH*nM҅/y^Rm8XCpa*S 4^δȼ#N9+&Fd~ٗa,LO Rg-y80D@Ӭ((HD¤xjMȇiށI[&u˶Ѓǐcc`<Z:eF{%8Yl*tf,ʬ$OE֚Te[N 5j ;C XΈ$hcIm (>u `<@@vZ BxL]qtl. =jVё9s(^`z,̨ H(5L*&B7aC3_r4+1H3O*S:%Q,'(fm`>vv5 XmF0! _NC[Dth|><\N@U-庙vnۧO>?o۱ua`,c,r H c3Hxx =4|,Z^a$Vǰ~ طg [S(}tڶɬ}ik]ni= zfpY(:=b0U*$u-߫Ok-3KFwuꂤȧۯdd|%|)h~ n [an.ez\s2\2Y |q&ZA!F.G/K{Z)ұ5FpUa*žڜs \dX\90m#uT%zRp/Kʢٟmvv}V!D% $(!ʃUya7PQE>/; Ol>1:EgQ'Kr݋3}oNl~/%R3 >xkxc͌7B"Q T¿HmBE5E%4,YIW(*c"%Ȼb#&"BI?P9[ BCȄJ8|>۶_zQs1:eۂ+z>}ϟO>}zj԰,?ko2"7o$wS$##ިR``N,5WffjuX/'Z?Ƕ}Zd $[f?H޳xМ>vfy_rCaa\{{284rF߼O ?WkoW ER:~1ź A#dCC!ZPb IgUs*Y&eX g+KFbnh' Wd]O:2b?%DdOah$e^qm~! .̨聡=Q ,8~=b]1 8WYP;;ĶbܩrƗIzW5APQ9W"$z:) ?l}[Շl(H LHLD YD5 5u#ѠQKx8q8|c0w"jP 8f_ox#YP! Dc0qǾq(vqsJ}_|_߿|˧OB+h{ӭ|Ž*Ŷ e+[9ne EkxFX&N CN*;qlc޷Vр9p dD%%hɄ:OK?- NeY5p+Tdq1>IӚ<*uT/QW;2"=p IDAT{|DZϖ4Ǒ0D$jZꬢ)*4DVMD2pbc @Da%Gwĺ @ptѵKk/B#6L ".7xnX;'5\'p7t գ0ʇb 2g+Xp$g7=Vî.:Akk_ʋ32ς#t [ߨwj&l?x<{{l{{гc8a(R"²ZV^xaJ(49}A+?Nr[,/"@DȤBč荏6}Ǜ{n}?4mG3 K@$glHD g}:%h%Bip쓼"bu\dyoEs!ﱜ5Y?M/YEd]7K۾-w i( gH˔L,jIiک6F*hxBA)"xjJ_h0U%e02)Atq5{o[/?6}u\oӧϟ|ǿח}/?lMv6`zZ v[Vڬ~("uqWDC/jbaTL&ٶ7mfTTߍ)iJGO;OV*aMny,D*? 0=I"NGu.= Xr'gzZ RrK/')0f;P9.I7,a?!(|I<b pʛXi "ղ<7¦]a3A[_,D8A vY p VY<3,cugTp"f݆L4@1E=k$z/vE~aMP<59ꑧ{\~i}o[yDu֬p_G'sbs(Z-@F%Um{*[8^sݳ^BY A$Z֚ sd& `jc4u 9@F%"4 $(R P$) +2 j4N+?-r1=;%'ef.>Z(@$aQ .+rszbbn38F%wc{"Fx;on/GCIU4L/ Np8'~Tu?"hԞ(@H}Ǘ_~9N*`NɘEğIjcE$,=3zh$t*Nnuqt1L0g5">1ᬡ@b0_.A8C>d`+p4W=,?U,,\v0=2_AddH##A#ԐR _iD6Do^lXwUi?eQ|Ou/~Ol^H R3%taJv7D/Mǚ+j ݒ.rjrL,^-P,O.E޷r޾ݾ}_~˗ϟ?6ov_-Vઊ ĕFD$sz]Ӳp' .郑 H})hC>;ek& O?CRRi9(!!ldB Kj@C!3rL? m'#`F3s;DxE X Ko.y>aH3D@o˂W+Z4x~Y{Nq3E*s?WT+rINjw3 D4Bfl]4?Mxn$,ydS{KˋZ\o"l,`(Ք0D1El|(^2oM=Y}//7]Gu+a^[)̍M \b )x2hꜯD$0 2bC.xC&Ȃd+`aF.؃AHR?5]$+-BqSN4UD?,|R\z%m߅+J'Kʜ -6Kݫ &\)!+%"fř([N,zdړ0 @\D5n~\|߾~R_Oj~~Ex5[D=*ba1ZDg+[k>;]+L! S7Pw){_I0XB>S䔭Sτ*XZ?>UUSweQZO6\&(J@B'h!5&Ԁ9w"?uOv?V{rx ߏN/x*kxH,K$ְ7%FvKaXdS{L'^}'ZJ&-^rٹde,h{MNfˆO68ޏ8&gxp r}KL*V% Kg\v̱:r>Eu (I=PJ71(j WEU@T’'2MIt9cֺ: MaNލ:* ۭ=Md0 Yk? q 8 ʊQw,iP*96IiNZ4 8U\-T‹.Bb(L%xhC#xJS iDc0At6F׺cq0G,P,DB,|! (k7QYn >D PhL9;roԕy#(S0 2j$B(|(|yŶ6; U1] T'\#00a|P# a 0,)׫4x۷~?~|z{{{fvC@4O5N:@ߗ^\OU/ЁvLQOf&ȲY,2,ǟi5FVZtjm V^X.$ ք܀rS@fBo~*QY+`!}BQ z57ۀbmSiQAP?n{֜] KhؤTH)["t8 nƄ Ccbλ1Y? 1, 1c@@/}dTZ!XSS57/j#P]r݌ h<%ޗ8D}zKGq |@ 43# p` BOz($zvO,C$ ^gkNf bxTpG<ϡ/,jWP8R)z-W{YV[D"ոܽT2HJҿCVscqC , s 7>0D0bfh CVtKP=0Ijr A%'R5K}d6b' Ap ɘ&R/t5E!iڝ :q˄tfNT@6P$v/j xhJp1qq|>\/^zOotpN;m@HьP9ʉ$d<y_ʽ`G% l`}BI'9i_s? *Q͋aB@fgyP͐ BJ"ߓ'ē^)$a, >A0b(GEb$ h" ɴ`@w8Ӛ05ژYXC83-E@1p,ó.x9Mg:!<;{\f 46080Aa`"&LkCNJ٘ #(RG0T!bT0~)_7#;,9]R>?L>b|95wM>B*- '8Zq03CGg-, Z+j66:nuߥ#e ,gy^w8ʃiq(H߯3aP:F:DGp"FN>I<=5+\#@ԔV.t!dzJIǜ _'x|188m qr4#3$uIv3%QR`MRpq28JKDerYOUjo@#d.u:mi]ĮD2gg܃ֹeTs˯g+ JCq DZqy*'ib sp.aM^..6u'07X\$Q/ƭAq;Bz{S7LW?~5|+ +ɯFM< ҤL !f0! PlZ _;-ZS pE:*ґSM3bO0$.4P7r+)՛"|I*?ULe<1o WڀtG)$r5$23' 6`CbCe>%ͥlPww8KG~Z4Iٜl,Uwc2 f!\7:Kw&:0!71d@eǰD'XD.28xYN%#yaDE?`EX~P#PCQ[ڎ OCF$( Wx!S >Ǻ3v Z,ӅɠX > AA|UMyL|gѩB)z{ l 2XQWR:l 'RV6tţ0BQ2) c nՙ/MʬA4:fD8ET P4ϋžu Չ%id 4[ )C˔Td&E#@brADȟq'A XlPGj37q^t [!TgM.ɳ6]yVbi xIsNEOq:=\H+tNL1cv( VR1Ȃn1jF2\: :o^@1#A-cq!w%Ҡ)#1c k~&(vuɌY]!_bݎ8'ũLZ d!Y?L|F_¢kZհjOݖzܢ>捥.Ի3;4 uk'5|AǓZ?6ȫ b$L1H)ȱ6[(!l  6@0S *#̔\v@y- !?ljwr8.%Uq0GFͮ >c؜R @u=fzc 9*sZ,M%mtA/< dl)9&[[&TG@ .98WLw}VV4T@ѱ z3QE ufrFffڔ֬"JNT/\XqaY0 XrRv{x.+EQ;k~]4CYw)!""&$m g_AWjXr2\+]ĬȳeQ߽E?))'cr&]@GKEʟێ.`6@E)(ˬmֱ7:@~ 3saG-$e4TCk"6emnT?]2TԷ \)bf{,XN*gW.c93%X"Ȃm_о oZ:G4 I \.U$=}ɓd0o"tTZsCq0RtGQȄ31`*Y ѵ,C-!-c`V<[}N`S߯z%Ю@A6`۶Df`Nf;l>\]EvOˬ fb[I1w/ q*b4pM a/BA6@d3V'G?ɟ ¬Q5i(5O1c::ߒc8+~0a5q}# b-˼'5񯷞Mq!vAa0~2 3$d{LKu_c 3z ihöaߠmк. fV J šPD M+-%'N &'4i+Lz>灔ҔUrkmdRWidYus|Aݓ{M G 21ϡia. "nϋJfipסּ\z=6Wʵ% x2}&!B"$-X/Y-mB5K9@e?N +UZBQ).y3껸_ò+V"Y3S9"˙AտǖR("SVI(U{;ؤ!̂C!0f "f_vZ 9t2m^Hh0K9 (61GDxwG`Xoq^"S{"[yିר*u2}k}9ewRX {TmP(n\l?p-v1$0 Κ8Z10cU, P,\P@W [e:1qdŀ ^xxѪ9񷬱Jn2 &hl,"0x246{q:?B/~C;AjL4Rr??uAnIts ?ꖔpsfk4j) }K}ߕ?N3$"-*Q7B짖#ý舯R{YkMvɥ@'tskCh]1~ћME@Q LRJ}P^RN06uo):\tswLJfU,- lާ&\n@$rC wmlOϖۘ4ˈNK˴ %ohM+kθ 9R,a?H)2 dP'@ TQj <$GJzS64@Ic)n1 qhU`Gqb;~t[ŭBPkMIdp"RR/S|Pb@W|^;uDJVuo oF,F_qmI^vdk?zB'x(j"R ?X~X两 I%ҐneCz$qC>O25߅n{%X|P$Iv:߱FxPL;],hpr09:tc/#$ѼGfYV;;2Khu ꣍N+XRshf#Ʀ&R1/LĊ%1s0$u1e)OopS](=c,;u0LX2)b@JqQ]WS Oo~^VÇF<  zӢ %̙N|A9PΙ$&iWK+q4,8iʦ3,45"hǫc1uQ)bĞ ISsusXzIZY:1)\J 3A#W=ZP)t9aL(Kyg},V` ĉEP}C`~\x(VQ/Si>ut=ɨed: p6%Ӭ]B1 p(7C$N2HkPxCgO&p'BdObi9wwJzWoG_8l.;'Uҁf1Z2wa"H( }l7Ҋ(Ȓ㋵NX5A st7bd1O:>YVQ@.'9H!"ՑD*S\4AbW-t%E@Ȏt kKu$VÁ~fEGgVg(Ttͅ| ʬW Qo0l|OD)D^eb~ qs6i%5.ZF\bGPUhSb`_Rf U8L; 6Vc7aFQ6u*Xnrw\ ˟Xgd|n2譋8s;VnM~$9sr^>L ނ\CZG %A-3sr@g4SM5ZcEnV:P3`~H\cɲfVgwvU,e0R%YT iqڀrSE2@蝉(zhgmN>޻M1d̞{;$ə Qʿ ] !='N{ٯfClIa4ո(>*L=v$NǍFL~ax/o^(qL|эD TRE*堜hЋMqhQkcE#X;Ԇ[1S(y:5mIעXAHH)Etzeu2S zi\w4 =&9.=<^)&{IqXԑ7aVkvk)^sLBv3?[ױ#.z?̽^L Lٹ=sEQUp.,KS=#l|XBM,Y6YAc"9& Pc仝@!q@OR`G5̴ҩ׹q=5(\/űHտvOa! Bf2֪5Uu95.8Qԅf)t-= OT>(Kfh3mVZz4$._!A3[ ? ? @^6*ɖ!QT~f$(#QM{Ң<.iYkXa"Q^vPFZRooYCkP:0szE$ ?T 浙aқ$rh$XVTkj.u(ȄtCu*d,O\X bktQ8M=񗪛ZpatUJG5l*Glwn0>zIsߪ"=4 §,E>*&9,$WG= ";4Fqbl h"b9 9DoL^M^#Gi4% YhT}j;p\C UWVIZRsE`F o]&@Lw!I3x.(%6qʯ-}سaGOr뇪Gp:i1 20~LL{  Fc;m=z MV)adb"2/f>xbpi |īC)mJ.NP3ag"mRzNʪ9o#PAi'-.ܫ%>].C.> 5Q1n%rp>/˂}/I'hsK=GgAbarYiV֌tQV'Dw_[*yv{xsV  5\.cs bY)ۉ@Hմߺ lCTSBY1ׂDF,n,:XY˩)qM̵r`4 _蜞2=%nj֮֮뺮]*D" U[0k~F zˡqߞ atNM,`DQz$Q?X"d{ .}ǸdW]npU$=m㾱mA]3_Y gh]h*<'rTꝀxES9)cjGbD̺z(bF 'rNCnQߍW+:J :1I%aQ]DJtѨԩVC)IƳx^MK˻՚GCJX Eױ P ]s)oư+pJU jmjIzL(V 6kF]vu̕_}e~*ӼP40܌In՘6B=Rbgt\V xʉ:2 #[PCfe"kkWj瀡QMJ=2[=ǵi¥Ǽw߯~j$_ naVZd->.):p28Ʈ[n.*|s *Z|pߧ^-R[5! c>:cW}Aѳo֮߮~z6B:И R)*pD!*=?~^M^oַE*- (G'.u6cryB b5IwM0&Vq=k6 dĎ@")Za|N<ƣXi62cb,x/Yvs_q3F5Ll lZ8=]I/\JW.Ek[ {<9d`zп d|"idc3f,`@ b@\5 8Cz2f7cPV(6|lLV-D(k]<29lRv)U IDATi14Vqŋ!MĚ6ژhB'4L5_ׯ_?ǯ?~}]W Y+-y]Rҍ*[KQ !гV)'1d!CW4ʝid\olS;3q; MGSn_Z7L[l>Ө!RPkU^WGZ1}}l9^-W%ꐢaѿm61.?6;2ؗiP _qR_ċAǛnmx7F_V\DZuo\<@Ԥ\({W3J3*ҹg@"X_]Lw ǻtr`ƞgfgCXȽC?Tf RA=F@Fĕw+4T?:OsKAӏȘ@4Fnʰ~bbd+!rsB[;+W(dAG@2$GTH^$SFh4{ߗ 晨 sRni'XL P_J` G<ϙE#>8Rz=پO㹉 8gl~S(AzD:7|:&9T+gINW+$"?c\*~ g8Cɐ8|l#ejIQ:&5~R kF3P_zypgww?Gl._tW3o edS-Y{)?ʉ"(DVVa|&eb.x]  [Z31*eQiUp&bD+lāk$>߮l1ep3g嚟c@˞9d/?Kq< ?޹Ce}2~=t+Q `EiAڊ<2+r!#3UӦYe(@EwJa%17,Y K ?nC|Hd͛^.P1?~}}[ ͂xѹ%<}_IfM WZ4KC=¬μMc&pl4A<ߵm14Gy{Iohmi4gkBɝ3Ck㐳KĤ?~)ZPB#OK:c}2X:Ӳ0D(<ҫx.@>6ҟ^w5STi/ E0ͫ9IMjciVjlI^ z"b**ڡ<ɡ"Bꁥ .fs|4! <}dSz5 `ddw39ׂKZ?ʈ-Ow{13%d e/n񌬱/&-`WkCet~8XED,k.BPe=Xwy!1ʷE6b\} 0:aMk#iЫoP C0 ^_eJ3&* ]~ Y"mE>TO~*aVc&yPʤ%6@:aK5H ؔۤmuh4]鏻o֗F.Lƥ#Is< `}uC5Q͏ޚ _&8m@RA8Q8ORNU)GkMY=#8odUhԛq:w*u}sXHn##7B{3,2v4 RJFvE==W#2e';*JP6TGR"/Ɩ`Kw$t$:|W[q3-Z$$ף(%u.ڀi!9,#Lt ;o4,abII'G"s/%LǛZͺd]z6RF#У;M$<_?jbdO`_*37q71[$5B*S{9eGby>E@HdhjaqiQԜjj70Nq]W#-c/;Vhe lnu8J)$ 6%e~ tpDJK7dIUQɰ限g%վ*gq.̦B.'ۀ%tsef?s!{SAq|P*HrTU^g4{)`wgIgbF)m$l؅ hl뺾}Cdm#" 1jh5)&d5VJ5Kԋ%z4?`&52K74+@a,bGDP ' 8HUUoZ\K⺡RY3袧3r\ :*qlboGÑ*H(gwد:#}[EGU::0Xa%dqrc,\A AVNi3=͏u>Rlk$)P3ÄpbR=ЄF-FFP"naPgE).NKW} u#xjkG:zLt9,AMT+EQ] ft+INrv>ҍ Vsyᫀ:_ZA0tb;u jګ7ޒuT?~|}80.UHeck\&!Xi`=.Z=@o *fp N{=F$)lw *Pz:Om6ӞRƜGQDbQy41t,(hoBH2O+.tZ}" bUƺl ZUes-1?iB˒"!F PD~o8RoDc}EyHn` 0sozbG'O nh3h!]42 __<^:K"hhfDaXƙA16o=oU(%&53 3~|S rb&g/Tޔn?e cDɚNp7i{ >$1"w< 2BÕ?g}"*|ƋҰW,LW ݯ._ UrNZc ).kW{_nv563%gh{xT|9J9k9k=Kyi9Uу8.)oXiM߭Rkn6}.bEboK* 퀜/GծVҊW uQit1-UZARv5*vkT:9-mAcc<#SXDרKu3!Ǎ4erw \f(n_uc%?o0 my5&lʹsE8z5xGJAM9bƃѝ|^Jի^Wke^6quS/MZ™2ۺ㸻AEt^`b% t0q)rf{OM5.Xdyx% ٻ&D_WiqSD$qhq> 6-\ Li24&TW?)xW:"SySO6ҡ.'`|?Nn;mٔ?)d&ʒ9dL}yA4FĔl]T5o׽y3\fƫI3a/j1/gZZ_J9QNä6)_Vu i[mn64Ɂ`/ԟWUUaG-Y^gyrTb4-o݈OuBaSx{szNS;ζAgfLD\gf!W0L79W߻ZKZZRR?^k)zPJ^ S3\њ[=ZChkb)«UQ{DgE%jRit"}# 1c")ȥ){9XM |,HeL#۫2RzCNmX/AxD7-my]D\g4frJe $M{R*L%q';r#> hW{6z㇡k hWzx3E+£.d/ܳ3q[KuHTcBpS*0 YXDDK\?$wI,f_n^ )=tx/1 dC UkQV/vW&>3GNQed*8D~+c: yp]Io7|mdEM(04lW:KCdc6sՕYv 9 K㮲ڈc&"hŚ6uc Źr)SCd O'VN ^Of I6""'{^%Q; F _O7H{#+|xV= Yr Hf zW@xZ|wLVyj PMt8AȤ IDATl*<ꂟz6VeK.XKǩ]on.F5lVhU,RTb|:<~??zfܭSk>3;TY_Q ׈J10V})r$χ~H]Ųk]l`pVra O>Ik" M{{ji^"@5>U;+Se\1DM2[&cv˹9yJ`ֺd=ﵣ(H @A@-6g '{ VѐŢ%Y Ocy8mpM\>7m4t[/=n>9|TSR*>g60:!s7^x 1"rvb C4x͎ L]~bqË:asG7!z MW>LG~9Cpў\p#b+,D+?;ʂ\C( U7:ùT,N_jXa|),=?Ъ#3ke:訨q<}c#\zXy!PMMqF熛upOJ>}Yj-@֝iBD{a[D!_,)+IJȽ T66zS}<{9]:,Y%#c{/c 7RJTJLWVq RjZUh#ikEW{_m﫽v]s.a)YĊOOճjhYŅ,P'6khdm vSBИv:͙L'!Vw,#%̵"f7^R Cap*g'E90BǵUGbjǬ\Ҍ $'@C:OWf,PԿk= K^H|pcr\wzUZ@~URD@t&s 'wTq$ޜo M8w0OPi3D4a Z@&bQ< Luο~[9o)-V2TQP%ƥrϙhT) @f-Jn{$wѺHފC&)j =ͨ^daA^I:RhrsjifM K-@qO {7)!35j#rV$K1[ ֣w,쪎<ϟwSH2Hù{gx8>WL{TZ=\EۖN~8a_0/ȅzu/M|V3\vw^!撔BxLM:FZ/x^n= XUVQfwBDS\S<X;]} [ZRzFveLV[5["2TR7Xc?pH:05ӑ,jq%:kS|jsvE`ݻsSb]u֑T pvw>r$E <yv;k~Hc8|*y3}!:?.F(BYU6f*z'PֳGwLߩV"~m̆I0*3hy(GM{-U~BSTe$S2ߞ*v}]_e__w74UKLZxzz_|ȿrz(T H#ƫٻ-V\Ƌr4uav3ZgT32[ٿ7S%v Ky!砍;A]IS!3q%M-:$r(.pj4=!:Lqk4PݶC0I˽B򖁱1'(KuGN:faɠSQ(eyh'79cTsצ"d46*+|S"FP$Q&5Pq=i ~|?1=#x[+`+'"q2;9L2]x̪A٣Rz"$ǡ\ zQO]za!MS*xIs.p&ܖ@camˑ4%Nw,8d0Ĩb[=]3:B#f$6~6-[bg!43S_hͷ:Zn{Bk9]s\?,ЗNv?Db'qhjrXqNZM!LO?&;Cimt,?BQESŔ^?*4jY^8H}:D!iq4UB{/Ȱq)0},>( 7.9\ =bu'=܏R8qLrf Gqx oP q'GXCvلZoբzrRJRB"2zEՍ.,nQ84$&H˙MȚ=ǗȀt0#mH=_6%WR[y_Ƴq@c`Is|zMZWbSvscjk[?,`ܴ@qbhC(CVpϜ hh.ި h)^vju&:-^>! 4*db>W)\҉Fid25.,07O et}dVKL,rMf skrjDBM z쟘?EQ2)y̽MHIb':y.o!CJV^{&SCa\,,4ή=@P2%\5w J`\CE?L-TTer[oys:uٽ}jXkH.LX<&|bDJ$\7z]>X@{_ٶ;y"T@g, ``zRdctŘ5BEZBdNrcJ^&tP,cm*TwY?7pRfTsk#v7u6N 51Mke otJxi>4^[z3gAHUU<=:-M#IP+6Mw P_?4<7cssEq"t: w^l{m'lu5& ȺlO[D/J]|;m=>{/${C30*{^aU4(H1)DV'j-[k)!)ETq_Zj6ސ4{:J뺮}}}}~} kE"eu</(fUZRXZ *D$Z~ +PpgB[5j[=@\/Y2i~eA| E|JI^2 dfſo(^5qQ$Sռ=Qz*biWVΤ}A]( P94O\-F>FGbL'ݮ>Z~JB:e)BŶB8]==zuG|.˹ʲq_2ܬx E7rظ .[恝cFx^ub*_#K=$fǼ`wO^nnaRf?;fr>Ej1a _$Z#p :{z7 Wk,lհB]իxѫ +*⺶P_4㒣F8*vgxqR7]nHp-qϓ3/z|YPP98OFL5X(F+bXru Np/O+C#j׊ht1LUkcoCo,+۫< WZkk^zĿ5V^kX(VDJ&`GqҿtAtOs `aԘB*M)gP=J&WG4ԭ =_t!Oĉo浖6!R4VMBG'= c F '7]ݳ?oF,2̪%)?n?VDjS1S{l ̕E?PcٲXKJ.&BqzzdrS|B#'VO"ces;}+g3Lm˾cGߟ> E̬ }ͦu?n VB Z,)?oA 4QVhQ"RXCi[9|;YS=V\H73eSHp'2#wjցSTofVøߧWn_4I<2)vn`'\,tMٛzto}d9?^d,Lbz=]674|a5dz uL_vp# >wasˍWW&WʯrRϡE檿=myH&gxNr)9jc9%rSgW@r]=#U2Y.7!+3n}N{E oO{ wxqqlɷ7vo]cX֠ 0vrkSQ?ԟj<$@B=; ݋VXKi'ǽ[owי2s&X 8PW y |QtP2y[ Ch% $@%} {s1;De/J)U\$ " 3CER2xͨ U7V5r,vc?.,6uU& B# jGɵv\ANΧ8dhYib,l$E$ ٢kMû8`_swh(ZQFu妫O$b̸ iJ5@2ok7"c٭A1_$Âu\ԛ w5)nb4ŶJKim "7+$1:~MPm hqˈ-?Er`<_isAk?UOg^wzgiM׈ҩQ̺]b.F`JC`ZjnR QO|>/CQ67!;h1JFD(:Z{s@}˦_,bv|(^W 4;dY<'R4>}>{'ֆ>~?5< KDq*ť<n qkT=jFgh^vBLQgx5K.byux!`%%ۓ< wK '7+R1ލrG'ڪcrCsNxB Qhc1_ pjT6܏&W$[~n.tވ}Ҿ6u,#Sy-_s߻O=)OCt@B}NCJ(2Q";7ܛ,Hm06p[F`Ƙ;o .rɋ7G>^؎e_ۍ/56'.`XYL ż8-h\d"9wsO_PQ.Ȥk)sQ\h EPзơ2CrTQwERpu H$nyw?C+0) ~ h{lG@*&Vaߩh/VOFlz]>jS:ě‹ҴXmDajD[ʂ P`x "m[5o.rY'OBk3SyH5^0ǯO/-:3s←wx\̳}U_͵|k7ߓzx P,N]Xu-2@*٣0: %j}5]A:RRj^M@b1V11gI?&"4hxTطi+{߭qǍqdVS ]BNYLn&_Lsta3 ~9L ioC}/8 )_HEj\gTp_K/wfVK!)&?<鷆i%a< }YRb *_up,cH:=oA 2Hݰ@t݂fUjlBBfjŮ\EPQ1[rZKs,1()E2N.TU9{IUV[{\DMSF2F敡_\H4؂sɸ DiRdlBׅ{+V4gWJ]S4cs®29v}2GL=H^7R =9И,G2(jaAnf%Bq->?l\ٿvQ>?gO"MQtF2 xD@Wvv5^yp{;j]l}1}Vg"06&t9k@ub >L1ux>Y_jTaRCӯ05 \*4egǥ>QP^o^ޜ`Y?}SK|ӻj_[nIiɦ**NQxu^VdSV;ˍcd `V'$Z !a0W03LE|u}l6޸:\;O}f+f T%8Z絇~}izO0ac)7Mͮ;-z tL,ǢoR]Oq":?VjHߗkY{o:u| IXqpI 3' YՔΩ{>UEPAҟwێ0,q&|?->ڇ!/8}?F @ڣr.h6J'd!D_ΔإGlUHVJN{R8MMSZ=RNS4X1[ME cn=[0 k23ثD5z0^ܗnxA{tg e6E"M%B_+\8qWZn|߫ _{F.Jg|!zEJ[O-~L&[kZu=a 5g֋jzqeQIJB: e0\}?!t)+p۲#kT춤vmK%5TgޑoO=08?}Yf E{wĘMC4QJt@!m6ai&4W PyK>([fnȥYblN+ӀϽdd2Y aø;/5 &W],TwOAtc" IDATQ\DчIRƝr$ErmCuĢE H=?/ &S:㿹 U & l=5dG0Ǣ7Irºy9?;3)wX'`!DQ SY<\` &FqJ eh)z"rCeP#ul YQ*aYlzH&鲞6Dn;ˀۇT8gD?}-c|KFV*s>|7MnݦF6wGzP`1['0G#*36!IM4dAu+ߎ*X7Ix3d/j~R%/BQe Bk*n h"8dHXe(zѴ4&4z)r[ A<߬JRb *pw; 8-!|G٥-X Bqwoִ?{^,=+h9E bWmD#xJlWN-66AC t!8hbnVZl _oKLcw&+L9ݨEQFuNNI's;D3#;;ݠ[{hm=P9!f7qvCpONn+N/Q#HeN[ ?̓wg($+Qi;ǜ /zX2CiDnԾiG@QvZVUz7Eدv +PbE:i ڄ* c@_0%[7H׺|du'YRi,]UoO $ tr.}a7>=p #Q9@!2IMq@裵_8W<[IiDGe5O/+ж$1]O" TDs!>n!,k[ `r q.P'bL fTBǿPY2A8f.\SW2!tQLJ 7dsBwb=; TtO^EW6 09 {eodžBq .TB|'pY^*ɟ +"& PC#>x’o+<8<(YZ(k󈗺d4'qI;r6Gmg ΃~Qh?zyu DK޺6kcu^ ˃D/ GӣAN)*ͨ4JJV)K=WQ]TH7Y d`tw"fSjUtEӽEntPa Ő,-mE.֧?WOPYGfL 6mwn# X u ;۾;iP86ǝd %tq-;|@2~+ϳy73a*_Cкsʔ2zIICm$]멵^ZW7_@>E 43[nUpi&aY//Ab7rz&4Qc9cl3drIˑҿ_AC h;."y45c)AǸyPHH_/'_Te0D#Dy%Y[{6ohޜpn!KΑRMOp{ǍܣybSgw|Ad#ݠ;)xX/USPVc`*?<2dF:"Y4؉ ѧ 0w(k"ȍ2#8osdl DeA.k j_1sp4e~2:|<3ØTCC"P*hyPSIb;POUpƏAlbG9Ϸo߾߾qYۉgqû6TyU_47S!bjcG+hz⦡#?zhHZ(rJuB9͖m_mJ3}u_qLG"(lƇJU9mҔʝ!!ӡ)%h, L >{‚$Ì1R[Wk@#- oz%.B\pBZb/\!XXܷ{5\p'Ă8aTOMہDޜB$i$aump6B}V)Hc[Y/B^ZEtɈ9&tRDC4/FrVq,i0+jJBKqRN﨎b9h(s׹nP)H2$IʹNjtt )ZpCA^`ғ=\PъlJ"f-dؕ=8HXipwR#Kظ0 #:h]AHPS8_xOf=@ x;߿}///?~sr,Q>o?缗.?kkk- 1kZ.8 :Gޅ.@E.GPYg9p}4[A(Hksp/K?_=]yGZVЪҋȥZͼ"G/8 T ;$^.O>ٮGk/, \[\619qvlQ-#IQf֪ve9+s3!РEq.(TP .AS^.o %Ҝmj[RRH5N@ܐ?i?g dˈ"v·n뫡'Ms3]B̧dtWIqw~*{rs<:O+er&Tp`LG\?sB١mLdfp(usнI;!ْdIw,Hl'oi^C[)VEa\M%, UkLĶ('R+fQ?޾oߏ U)$ol Eѣ4w:[pKoųKqE"I'D-}(⠓%Vq\:r+gYKtKDOW-cN 0VzkUa Ro@8iF\=42奋CbTǿ/_>?>>>ZU[SfL\`L:Q#YlףGYq_+gLXJ9"չ+RGJٍ$%I0i:'~V^ߍ?H U7ww:^S]< (˺: ],'I6^ѹ?4rḕ쯲C7&ѓ T 01d3x+mFk0''ĘX![48le\Ɩ50X`tV\:a6-zygfN yF_(1&v&z^ e6B_̩.^F5{Z%Aڿ% EAn%?(5&؟}:tc T48y!AJAeON>U(ͣnO;\tBݩm-VLniսafT۸3KXE$>tQ3 a+kZZf$P]ҦȎSќGNmٚw%ТvfivAx밸M VJS@ܕ6@})ϏִU᦬7DA;Bf&^[>hף^v]Q"PV'׬'=3ءX9,XEBB[T?o$4 صdI>(|)Οvgʌ3`tn\@ڄK ePxY/R.%y~Bxxf1[ng*#6K0KJARsI}2B!}߂\*37N._#&Ct9+وQ?Q%5I:d!p18&!HxR3gւaۂn8=2>@=AeNeC 8UGp9ˢh>Xj@+'<ҸzSGiDUǹ7xE{h3mZke0NPSR:D}4mhuVek&DJϷ6jFkbA R/8Ǐ_~{POWVxilHwulLsW$gP- %"kݲx3H][WP6z&ʘc}@_u*W{߯^c*! C.1Ai ';lI$4\MpyvfZ!M^^^~5/~mZA-hҚw~\zDU֫ڼX.J8T="s9JC-hP]hZ[ģbp]G_*#2`L}XsoH!nAܸy$R~maC ض\MqKx_ Y|1u_ܪ|K{!ds$J 0@iҳb_Md 88)<:x;0&7*vO1tbuw&>Aao bBf4n IDATcpB͹x߿]ЗO:Y,q8Nݻw&\IarX =U.. 76@s{je@p_]sϰ/C4J] },jJWVnqpazKMYߘ)X >v Q/}NP~Ac%eTM<{|oo[)%ܳ a]cM΁D4bŴ7G9,©,B? ;Bk^8"cOjWw1)鍜'@G~# ˔3޳L DK1{Ψ{m+څVUjq->ۨ+ #K h/9o(憦R 6ޟY""IÓ$Oc"/C}_~׿~~_Ǐooq({UZ)RŅt~4p<(Ju6I pHW8PXJ/Ļ֮}^Q?²z[V!S6I1(MB\@qZc| bjM{pwbgx#huG;Z3T iLUo[l)YLW7esHyZ H>jZsN6*IqRT=ZR86#ckWkW㣅zWSp Hw;`@7h݊TM5'bZ8jHz<"G1)"Me-9S ֯9Cܱ2oEGJ ƫ|8_7[K/.~ $ =\pusϵ2_vp"S]30[ƁdΊUU#A}rB_Algy-lগfIZKnQPZtU3XkdHz/C -FNCR)n8q{xvaVctٶoH=÷T+f[edl*f 8@UqgeAbޘ^Cf ,X%8z2i@ .bvŴ(3$ez5p 3 QVcAE@IvL<,?e2U-o0# ^ >K^,OT%Zt,sJHs| FM/4134<ߡw>x.'㩘@O?9[6ʌ{*KR"4aFʋ~B( \u1)=C0+v=Hvj4Rj>=^qC4@L"Wp ,727Xk7],8r2opRmM6Bx %d ݉?w;ɴ#v*U.{vuxb%z3}ClvwZc`?vRE>ld BUJ4ҿ5ũ8gR+b_˰r޿pf.`◖E}ORY+%@'B|6̱eR{b pl@_%^r<-8C{4f:0v8+|wn{:k"O K& #2:{uuΫЃ)%\x^DZm{\dgvv.iNLKGanu;w{,.TURT`uǵ4Gs 4,~C[W{ U.y[BWCF6tq͗uTag}yC*޸֮Z??ߟ.w4p^>nn+(4\L6^U*W脋ü̹pp Vz]W~? lC9?aCsZSG֋3ݢE?[b ;{1"E͌Sv#9d({t ?PvFR^8>^W`iwk&bq[QmBQ*ÄG'0aKtf&n,TgjupM;"zh9z8\R%QHhiQ?A{rd]#Av ] $ NJNCU#GSB 1'͠bB\\+4,Aon g%aV R94"`7\%ߥ蕤šk3$NTUP%=XXݭY\)N3Hh~@3oѲJ)R˿:I4j2j-1'>mig Ҋf'k5si{~!׭h,0C%|4~9Ba"Jp=Y[T0?,S<LjE7G.bLʘK/UK)fG}fcX'V"TPkS{9o,`BQ}jj @W9KD^&7ҐuaiT馰+,L e7BuSL`&BBB[lz̦> aŒ*v<:J()9㘑'{컸~zy%87iP!n @dn\ĽMY,z>F܎d Hٳc'I[KɕFY]"%~i)EzqD{Іq%=&Qu}sE?.߮iEҳ2!HU =C477.m<;R^XSev~o7b7SX0\MX` s)>;W^UEl"}D0 9Oe:#R&1fkzzjvt6B).~Vj*p^5 jWaz@EG2NjFIwYKY6Q(''k\G}@vf}vAMr. lu@}r˹1DɨO΁yFiw䓔VL:ygc(yHbsT|Z̛fC3}AyIZ}*׼3< VB W}w}}]z]r,7ݧ04SdvBvĮFA#6XLk2T?T@xXkДa=Ö^q>n9璟['-z3│SEA\?e{d "Աm9zJ1J\!-'EGc1@p aC+M-68hGخ7|n1 2%U=1+5PqQ8-(JIh6"h!"\ς󰈇>P~)_Lwx^c58G^t)r&;30N& Y|4|_YYmꪡU~o hI"QM`Ȫ/~?o}UzW<#ScwW͸ޅ.7[*\+y<+SnQ\ ͻIhy F&#(|xlɟ%cP*#=-kZޢ"D5@Z1xJ7y%D15+^o Tueegn]?} ylb?z}}:/K84i`fu0AOECϿ"s'ryws5T!Aq5QЃfV m'чuxBs~ғp3 `?Au72V7Hni7-7#^sڕܮK,V3c}ASEx#H(57(7L5Bs${D}7X`aܥtx&BE/J0wˎ^"qAL]Ǜ#,)ֳ0W `F,/¶Y2 ^ҫo5st]f rh͢lapbwbFmx Y; 'e-X2 j&`ҖQbQz>z[5~#: T-ˡۏ->R;ąE~=#BzhjR(1ثWh,[ΡWXnfa.1MQ3:?`>7_X2hKԼmj}9_~@ZNOTž sgN]`jz]onҴhQ B9J-JH!qQfQR(:gh·\%ZX65crW"vؤELaFSjw6 dֲv=q9"`ӑK*ۮoyWE. i` B\YsNR"=>5$u_If#pfd?# ?{#ER4}8G p#QYT\]<==bx͒t؆rYKyY\WP~-HN}!:>iEDFLrc"눱yt(6Rb}}~}^ GW)bt2uu 7-{mFNLd6SVg8*T%"rsTT&j\M+[eBR؉ߕEnE[7u_뮷YPLDvy:yXqw'7qy 3sݺx~2E\xB)gթ91tQ^w%fԜq[_&]i<77z=}P77k$H ejکI~qC.oiTnh=Hoֺxy<)vߐd|cox%%%,y]C;a(͊nڅ]nr5ƀz"!fGtڳϟUis"f4{rRKwRK1&M$<@D$vWdn[mgy}nA>+(+8I$}Hw5@(CSW3z3Ry67ןm$ rHwp-P^d }#)STJ! D4dKΔ.oB .&#ۃh:hxIm`rBH@—wR]ngqbx@iqb(;uaPQAtE[r(XӓRe-"bҳTU"GYp/ŊKͅR?}uCr<$3d+"%B&oZpfn*0f" ?R\Js36'^`H 92{6F\b jtkw3ĖSmқMDD=_*__SШ~%;S9k8 ߌ莤ZX)( 3kx Tڱ'FdYHx1 1su0g7J0T]ňHu+ksE@u_}whvv+=*]cVFuvx Ā$;g;xs2>xZW 9Okk/.nT IDAT|78ͳ{>1{G荇a^cv(ɘ֬eA1,Yms*rIpHH>Ч|PEH"2oZa8s]L:K{I'=AbE*T. :/i5{U5택wR_9ؚlh  S7+Fa, ӡ}#ZS1ypYi'8%F0 `iBf|q%ILx&&!qe]9R J J6'LlSM R4`g!\Ma1*g9_u^QY щAUݾZЗoƘL yYxJs%6eZ5oa&17,%iDûBw؎ϚBqDr@G4-~Vn ݞFdz C~)\!r8N *L0}B/ʢfP)H00Q> JPq?QMn} fF`j5כCi>NGiD.3#&3g#UksZ*f7FC9QpF_ 7 N1Uy?*t>UJ#;)j=Gghavh\ܢy΍?d3y0d;(ՍDȡ9Ujrw,c:5*M,vV܃XE$GcTb !T cwWL:Rd?z?F\Mum=7Td&;;n"Q\օ@V2m{! |ި? b9C#-z洭Pi=u㡏.h om|PtydyFl֬޹ͬR=%9PGTq_ NIj̨zM=p!Bj ;7Sݐ_̋eF" |>O>f1dKJn(4&2i3nqF;`pAzdrgu-PO]OV hkaaA-4 ~Hb,VTf!64S '--55_fJXzM/m*鞅5l5.5w DHACsD v @ٽ__tWyV};.[K\\&?Au?l~"f5Oo[V m76k ^>%u"mh.sxgh5BYK4͉(B IbD/CHqve),J$\8<.JE$d=YƲO ̘T3&;DŽ޵뺮z[DdE(M0U%&wy`j|`<TkGFfTdз-:5H4_/yN:,rdըk}!Jԑ5/ oᵁgمNfABRH:$"ԅ!P̹W~FNaȬQ}X;pg#Hg<$CZJ^bCDf}ss8Tڲ=ڭ?CO)">_z~]ݻ|g i{>ަK )Y`s'w)},֍xЋă񬸸KueZҭ42hZKmMMۀ%a٬s=f..HN!Bt(FrP n51l0NR[ 3 |Lpn[elLbI"|Q)Jef{/>pW1Us77~ !ra+mƑ vsf/["c87J~uGr4}q_|jFn(5n\<ѧB$B LpS-8#=VtE %!P[o֙PH!C'>:L`&f;lma>qk%pi3f X֗}!rzg;,jcxJicHDMpMr׌ho,K "3C q Z| i>7]Ƒb~)P40)%R tg:kSG )K7t=-2IbǑ[ F{ bɅE[bV;Ϳ{Փs4R8H"*3}}niwްk531BYiQWj0i8iPPj4!STB% 8C oWVUB9됳Hi pߒM1Mer} )vfYSիfve/.po9W܆}ts ͣ}:@0\b)Qa."(Bgqr-x xD8HYbP/AW-"YQ/0idgT33 ypGc7 A%MkD#,Xu?XYv o1.˵{>p8,=- )(f o ֘eN5Y3Ҝr"ьs|>nko %ܝ6@~X^%d ^ u5~?V".-[)~~_u}W/7VH3a"eûХ'?Г Frg틺0ryK|%C#9Eeog@R,~>|-U2{!B^6W{C%ݓ;FaW"vlGt2\Pb"y_0BeN-,%RK[7RL^ɄLPB:ҍP6P;1^K}s\oLQ=O`ŴBYSK?< 'dDmCRxa"%8u4/x&B`I}Ӥx oM&$;'"Rf(f4VӸrMl|)g4?ia1N## yA$.[M[ ӔkFta2"|Xwj$Ի@ yGGh%5R7czL($0^ӚlҽI!{ %X?9xzގ7}}Gcɩj)uТp7a6S:T3@ / "E U7{f0pu6 PRAFYT.KU$Eq#8޽ m?8ZE`Gȯh3bO7b#$DYXK`fZZRK`d6G1nRtr<ʫض4tiɯ-Z0HxlYV++z[5"09VT96:O^߰I}4]B`Ҁy}KaDߴ)vQʸo&DBSIYUJ =ʟ/G33s @O*h3=bt,d..@(V:/ -Ʌ *PAC* ّOqk J^2,[;n%K5 ,!uZoFDW [bff}KOzG_l´h) b gq|n7ꏰC2qXRQ lŬFH{ߡ?lDAO:5|!$kO(?VJk3t5,[-/[^W ap~ Rj UT:7-qkrnbjqN)SmgH~$ 1N@ &lؼ$lڒip#cu2Rxeh=*Db&tR.hz.n0@{_}9`n3?iuofxyt~9 m :Q"bI")f#XwYDȝi؂Zyi1AohUzAK9s-JfH(XK+4)Sf)sLTq?XE{՚l.49Q:Fe:_j8܉#gvHl'=UҕmfvBJ--J8 VN/:@oS/ ϾjN?`ϏQ \^o9ÅXɋQP;w4^ݑӈY &"*ZCX^:W;10=({Z~1׶ B $ZeҊp%Va@,אW:ת WzОcw~~~~~ywK PRJx~~]7 bq@h$'w2{J 2nw!8onKo(Iɣ8&e.*G)K륯u){a#PYl?GOW:I:n%3rdD/Gd6+)s)|- 룥=u q(,=۲hR;/EF;O`xX-wd8")E+~/K)r߹L _ ϿV'v {?kCrRs[6L uc] }$- X$O4k0;-aw$בge.\w"dth#O7#.RH3j-jmr\]Ed/El;Zk8iK~۲:R|V_~_=j=CVMt秾z{Vn !ﭗwsŘ"dىC jE?yԐ9+-h* <8;Y.E֌X־/@v[d_rSgi\DNC!~@K; n5L"e%@>gyz;[DZdDo>fѬڔ *$/槰4")a.Ã뉸 |H쏚Dܮl95yW8m9Ks!0s؍3$Yw#WK\o O8l_p-]1kn=xtYqfnN!})88)J@qh/&1M "fO]9F9 2GV7pBc4vFpRMoC9 "YZ'1lcӆNKW lm惖f_Q+2=!nnLl69k"lZ`+݉YK}Q$QJƪh­BĂjaY3{Bs~⡶>.< ZJZNDH tO x=t"( )=8!/^&b<Z]%7,ou]u~޷s̮ҢLuSo/^])$! H&w;s)h "[ Q؊T֚SYmu>^lbS`ᴛ+]-Gסn /B8Uk0,M=ILׇ Wޙ 垃R}n=eQLp/:pX_bUgnsB$4XkcH噤f?)zǴc{[ y5jΝk{*T h- zBɏb#_hB6 }tL GauNG:W="@QD' 5eQ'j):j- npU@mзu%;+SFJ)YnảzE[W=څT?[Ro)|'sZV9Ù܅@Xq!IS]g3{ \$LƬQG`R'tS 0E p Aoq}Z֓sے؆Mt_RɇrИmjmCŁX=H 1~ʥMp*)ȡ8& )%)Gpr ]d~ur=H%ǂaBwnɩpiI^4fGGQ3#0ǒlԞHs=%ӊ0e֧KR&L77@g@P@3H4"ޓblB=18mȴdu3ھHnVj>2d 9֒yjCi;KKޭukN*-zqcumw%&Q a&Mq8lF 5%Ș Q75@BȘZE`xs>aOa3ߓ:o鿘O6|8 yI۵FZ+%)k$0J?ml>5imJA ˡ6B@LHڢb,8N-.zkLLN-xw|)3؜T`&hO]lV1áOF5 x>JjhW,,C'Q0BE i5*?C5a9:e!.ώuUCRD DN@IAx]c@e 6-K,V)8y: "ybZyR2_y݊ -n88(pf:RQْgouǯ:/ 4ĴhH>mnNBdJSM0#a>lϹJsakX<>z]tII{ig6>7o(ZuȎ"lq]wuy+]ɉ#xɲv'@|P8I]`q -1B2 mevi0!IqPvͿ~v |V!g6"gѻZ53DH!~z f}H2)_ >`Ukakr5sD hXbcQPPaI"!O3Ѝ-z|roSFXR mX9{Qn*IK,=)HRI-xg.B-;hd%ǯ}Qwmud H%?y< 6=o럟qm Dwu.N:(+닧('),G{׃`>X*Iӕܽ![j[P 1Ox}#oNco|s7  h%7g;W>H;kKM#=bWi䯞XnpHУd#cbs>%%0ZhD46&"a^Rlrg+mP~f7}z%3j!6Gm| &9ZMЖk%Y2^i 0jbezo#wwzyd+s*mklͪURىHamrwn_Hy2?x̺=,S'/Aʂ'*!J^gW 4[mV C.{SË,)Zxw7&^#YN"ϛWYb7 UV9)i'k~2iAs<󁻗re |r,<ȋp#ΊW7Nbʢ~`d58?]@ƫZX!+yv|9Wr}O[ÂJy"-f~bgզiZz"Q'])G3{5$_@ډ3ńC!+@sH3 k + M|-1b 87n:^W̖QUbvDN(23,1HЄ?f1S!2t(LRഷ$cD1mhD&4Q/fJD-IJjP qBDH#/粣ˤY^%3l]&h>cg1x<zDt#e Gb2_N5~7.Su\?d%u-[ӑkۣj):6s ooc{%B_ FȲ0X? eS)mñ1[8K8#%Z9trYj821q |ͦΣudP9~SNri-}/x D>NP2/]t჈ h cgH3p,c]O RbM)* Ǽ(}ɄǓ)]?fn'=P?jh POK:d!x΄FE șB( V-]؉˨&C(9\,33_;k)xô DMXQn9.j(`f-@-N/^#.ͣɾs?iaEn1R# i&4-l$Q|)eI3ck1:UIl͢=0|NE*:zk،4((ꮄXY 1dPOqG5ш3Bq\$R4QNJL st"& E])vi  r^ŸFU ܇{aÏ.?$o]f OcO6u̧WZZ琋*ృmw(r@:4]FD /ḣRU]Պ*D]Pf:uNL1DUgJ2L~}7\O%RF,vLN@8lmD\Bw!XFD]?s d`-89!@x̄|H l4E"D, "hι8 Zq\Z(NU-= Kyb4of"9/91гc @uS76'7qgtIHU8CDFW|wwPZ߇F֐փRa;oHoԞV m/yݶg8cYE=h2 nN0'C4LېlGIǹlP^&0NbKE/kS!*8:_SPnbWg7m[Ϡ&8B-rΧ"KJP\OO|> ҤmBcJ>ing|R3e/Iaƨݍ%0W8&T^ɻX"R-,[codhѶfYzmЍt13IH)JB6_N [Rp+eb(/a#"nwJ׾&,mԝlkBwXxJT٪9v1ӦDm(Qig %3Og~V 4#`b3gAQʡE*Aˊ.糌\#[4#455e\w0i7.=k޳/^QOOyAw0tmf^wQ߁1w)v_Ǿ~ d%!YdAQVІ1<~Mt kǤfU-P/ tFUqWs3r#8ZLlځ'Qge9u׋sʟ JEZ^Ujʘ>,kJ_+g]qNm_C§M3 x1Nn=n_YUl ǵ2_#Eu0|#k'BH AHи#Ev= Z1 'Z:6i]YBhy UM/yvk]_@䬘ltמLo:Nu>Z|z-ԛ?u|? Ynժf3fr^?}{zva+{a06Us3Or݈DԴ\}rK]] URD>a, G zV2i$UayHޠЌ(65jq O̺W4؍R>t* {xo"^1~q#dnjg4 5?!bP/D~Ԗk5d\ʦ^XYtx6{:M 6S5^Qm W m֠,HWzk-\ AI+?h*8[UA,:?U= $`wf!z 4< Rr26BaOc'sIV .+Ɓ!`xKkӖ4 +b:?Syծ$`S)M0dЧ)s!Zz(0M]Vj՞WO@w=Ajߚ'رR/찢ENpm]?S߰,>n{\,C OQ8{xӕG2pSU8 oFda҈c@[˸:ONkޒrFj{gM3 !]vI8~?1G+[uB^6S}dis'f6qEnx@e(EOhYx'ſiqT۪I2ro$ڛp.DxƊdĂPu2C\`/Rk@JŸ"j q Q֕9l-@&hCR|.%yw&Fo9ҙӦ%>O.c= o r˴zmƜ0CuTC5^8@0UZv[N#zu|<Y̻cxia4 6PG)Ю>܌}Gp,d i<]1mQ"#T f^zG^PKl,k}h iu7Ѝ[êǣRE. f^:<awg)xM18~0OlT= pť=xSt0)y&qxe=H!tJ(!V'Gnn76@^V~- >hOnTPNJѡ%p 6&FkGHnuf%J M0@y0'_ XVo?BdNh,Ñffٴ.WlH<1VO#P>Qf.M_أ3w}ŊfL.1m5=Ǿl wJyʅ{v} ;JIրBo[#09xp+`y}z4Jb5ˆY}DL" Gٛ.ƑLXYR{W٪$ ffۖZH,O0sψdD '$}"m[GejP̜N Qdcٛ<>=p0*9H6w%( 3:fmc0x>qB"J{:2|)}(j8GG18s$IBG@Wl*gd:6>1e?YXq^u]T ۾ӶSc *FQ&fh0 ̷{E "PC5JG|1Z Ƞ.>uxPTWeс'LâN'Mj|B CM>{㌰(mV3},K)ICNa`5" xjȯW (4 31Z|u nLdt2u0jhSgu=͋ ΘUT2/,p!*\b"X]E4yWn-Jp*JRKG̪p~Y}fgׅ3N{ސrI2Йv dVGߧ0 C+,N,[#1bv)%?"6DF27# "N!ti<K7@Ub(e ưb) |Q\L>ږc5 pT3'%&tbF5$lcQ!ƮʵĄ&OŕgN|?hc}4{ ztKyaE[|)oT1f: LDXBOuPTQ4pRp73 Gn".MKp"\*ueRKuwxu0aݔᆘZ#=!)Y|ŭ#kP}\9ޙy fE+v&8([t"pMP-JuRޏz=ϟ-DjScݐ j\EyS->8`Rmbޯ郧3'\uwCSπńȋdq!!RAU8 eh0qb K/n6vV~(BvgİR|,UJ),@!Es N-]+~9p| IDAT 2:P*KIpBt+FnvAcr|^>3riYQZ3RlV# S2)2%w5nY4gG3ٓF_$0r# T`-)X?kE`1eºL8, TxU{=iUb?15>Ǣ.<'a%/[Ks;\QVo . =i4C\v.m@i$&&FYu72vIH)i2d Rdˇf'`Im4m] ]~߶Ē2%Bɧ4 m h۾#A<j m3Bb?lSXW̺ /|lėkÎEЕ\2U<;1NuH{a/䇌љ?EG> Q#"aQ<RLŢYJ M~c=Vre w`;gEpSZWG?,hYr/0;82O|A,bY]|?`պJ:=~'5ztMzq|>_ÓD9rEۂR;U|3{1_jSb#7r\@hu<@7A"E K4|zԙA~ ܕBOu[ĤpUboJ9N*LmJa&Ae\ АE!f%Ms\D8 Y+vS[ɖjHs7_Uo7a 4XͶb4l̃kE[k^0#}ͥjd g]".\Bs#[;LvKEj8+Q}^|&{(令Zef\g8/SEyK.&Š%Ჾ8xAU*S nnKQya1~oM hՆ"_^]og+6$C 5q8v!5$0?d>'& aPsܮfh(&b$YtS>'Z3&M$ 0oo<6 ;F1CL8cy߿x[>恃 ~6]|Mce="4f[|cB^$Ҕe QB%>]ԥQzزT1BUN380E, v/34]ÃčNe*7xϹp:e-O!W"%-ꂊ\{le8=vљ?7'w9~.]#kӣ>^1rC:gÀ&uVho?YB+UE/l.}fu`5뫒R Zd#5<$sXƌw3ywCLЌjӵB@#ejZxZ$`sT!* 7 =a #}/Ul"Ͽ?÷)YW,Q&u}gU6w]w&Bnl UP$L &DoU@ckVZɎV3)Cr 0"uQp 4SśW1 ޫc88 k6 Ͷ?/xc|R$WYS?YU9wTf|ur3 n1J:7bknguEb}I w괽xBl[PQK=7p [S+62x,+f U)\/{S@UR%UPE4A=DMuBEzE>&y) :D "K8;J#5?@-u¿JT= F?~?@L+r=ƺ8T.˕hMPz~:F(>Z*T}yxEs8t&v[I'B$*:Rď3"EU# )'H0b9.bk(TefYɦve]VGD#B" Fı:ܡܷ `p"b ue''CyT7WvOj16ԈN21`F19N f:s1Lu:TT__gM:1Si[?i 'x6m{^vڃjEQۚMT@fǟg]z#1+[HkPbfq'")KV5:#2]{Du@*|:ۻai/ K~,6DJ.9`* AJɕ|Q!)n8-Ru}F»lUi&,"pʂh\mA!< C| -qeh`$E'9&m[MEWM"\kaq__zzZ3>:(Hᱵ~N=QVJayqb︑Nύ U q"9ExwU}KVSyՏ $坒SN:alub|=PĠ ]@;*iK+TCbluO~[g[Ii_UUHRp̘": -i&8m5^0egIpW8 v{b18/q!w9WA}[^7}];58rp:B'蕺ILuiϝ1`5n%SO?]YDJAF0~љ!3'ɉ!԰`1"JTaMd4%H@*"bJFXWYodfj u=6L ͨBfV$,/b9SdF(qS!DUL|FDhlܙgDlHD34"#d2d• @CR 2ظ@1 f]wa`i O">Q"22cn5[zDHxE)Ա0X,s %V?>x3ڤi K *5re`kة 7nz q&S| xj\&%w+/k`ZX)1x$_4kvpfBO|"g!NE~ګ uJ_67!\TvS5\?íWwTI;ܢN+wRug^pR3a3Gn]FZH V}a}{ИєHTXAΎՋY4#<+^&@_)8Y$UAPW( *ө>1MhDx8!)#- OǬG19ϓc4CC1# K?:8" 'u}$NQDTtb6,^āzK Pca]dB*!< sC)@֭1JD^ a Q[!:0|;Ml -6K[;#PdG3BbF3OΙT:NBB)hZaYȄ}pT%7M4dj6Jz,1dV.),5 NQv '+pUX[@UB|3읬(Mg"(  *bl iL LLE5,~ 6.jW(8U^r]DM}`؉^_{y:9~yI!TPr 4obD=- BmZZkNG;rdE[+;Œh @Ys^+ \câK?TCkHYZ}dž;vF g֓LEߥ0c{hٙ7FZCc7l0/<9;4>.j{5>~$YPN .b)Ss76BnɗH0g*OV_<kovZaK]!Cg思7HN=RV??8?Fo z-.~@δmk7%LƠP;wNy.jsBx{QX)B 3n(D\DW7#T"RU(Ţ)43+=` lQSG !THI!֑OPܶ511QET$ 7o'}p>:mlN&1 e'oqE &*%[2:3+" %s-*#!!1{K u8pyWӵqe:dy+0P`!č8 *D'D pɲO"4ܥ$0P/ aLl֯9鎀RQ[<1<NKo"P;VMFK{@D'q[ɒ>>BɑV6uu%Ф[u<?B-pE3nʢ,B$ &5QK%h0 MŎcݞw[-R(m㽿_GL;(zxsDOgytSEwQ$f 6&Z3s0ֳ_ˮbک&-ivq.ȳ7_O8xEߊd2 ư5n ތw/{QPQsW9i?*"YV-mrht.^o?p~ >k|L4 ,N6\iW[+9?[/[57ѽxs[.݁9 7oTD8$+yZ}}Hs$b:u잝`؁_&LycS qCFadʠ J@8"7MKdľFTyǏ61A0'Ny½&V I#V|b Ȱ [ZĨ})&jqpKUS:Q>mf&lGptWp wb71$"FŎ1toGv7zS\>gn@~Wv7 ojKi{7?_b{fo~x h؍>^{koXX{}qw!+afM2]j -$D5Ud!0]q>\U=Y13m0B"-3GQlj8ש ^u=zpYCt^ʟ)Iluf-Ux:a>h7_f]A19t %xpTDa3a]dK. Q']ŢxfӀ;"2Uduӓ[[1f١zMծ.3 D̯m=vޏz>_ϟ~E9¯_1A!lܲ[$n-?ƭQC=Qh,(:9}3XKxYqW'A_Z*Cy>xx?{uM6F iw,ؤ5iZ֬5Edz"5o$Y5:tŀ܋ Z.s8%| XYY- IDATߦvB~9p 9t:ע9_vr_\uO[/xţ~^~Yhˠ"t1ٔN~ x_^^q:]%wh @{8Q+P @U) ~-,y`>)Sqx H![DߖSWmx_}2̘;U("272"4!FbPEF.P32bF1`bFգŦ@sxmd Z@U@3.MPI7٥5捘  PWj];0Uv *"7r&f~Ir7Ed#إm#zOB~V¥f )`Z _nS/ u?|pS.aee@h!OVPSL3+ [@H EQe RA!_)ATI&|Ռh/*O2Klz/wwԾ 9Bfl)Pl+ iUPGXI[Z nw@wa# 0 |Ն'o!-&6Ɛ ӕ9lrD[24bjAz-G08||>_?3ٹ|ޚmG9^#,lf6Fʱr1сKS;vuz:ޯ{Bxh%eI .?n8"tB1SZµU۰8}F\04bz>~~Yˡ}9C>P-:P38kQت:֢,14&xFe3l)_uR:׸d;𬊿FvUd{s|^@}> )f*yS*Sr&"]'KSū]_۷P!z'Нh7l f"zhaq{㋾~ C慻FށQ( "o=Gs[{QwqDS3qq"4bl ڵ5:;ç!}{w zgUߠKPi_o31%P N$n҄x=BDL;*co)6W6 58n~=}4 bVb `n} G\VuExQ-)E~cشldR㴧"xN #GW\6rv)>ܚ4i7'JD]+ĺ$Qt'{(} q. lk kç^j{dun)S<*GR)s ߖChjZ#߫0ToHn (u>{>:yB`jx]ѨoX68]~5;\u2sFN3C({ZvϾ5US4m`q<߯ߟ'P%׺o@DDZIeuDܴyvpfD:}&n۶{n6V'3w?9d s(3V4OR9mZKݓ|X4*~.K3}??ߟ?~>_?M:l(hDD;2Bcڸ㋿}}'=(174aKJFŸ ʩ7yg^k% U?m9nNXsmYs֟XBoyÊǫt* M#afF9I Ǥ]gwUcOjYPFS`.݂'9!6R#2#ŏ>I @ٍ1H5QLiP;<(~t9"X=GS-#ϟGEwLYܨqνZ_t"0`&k2Bk,ۦ. ~kֹI[?8d߹5z. nm߷]hەۆ̈ac2bB&GAc @ THl^oR )( @Ӆ)P,b" Q;[?0 ȩ8oQg K7U@ $bEJ6WbZzZW56 %nH:(@vC3y9ɰjrBR'0EUؠ p.;X82^ c9^ qjU BlFؗ+ߤi0$ X"/ž*e\²DńZiZC|!ިAOl9\锝7 SBGtdi:>%_V#vWF#Oe?ᒔ bVW.zt}_ߟu{3r[4Є胉e]k2KsZ۶m[D [sĭmط-M4⼧M)ܶ5tnBCDH8r6]89y999WIxWOBpj}1O>yŸϟ>ѻ#E EFL֐Z㽵}==nȶ/hI(?Roh;lXcjp~2D!X ep%"F*OS8XFv*]WQU5rag>+B0Gɦv֪,R*9Iۧp,-; T?QZ)=l""erԫ`~^irNEY3|??ͥ?~\>Q1gb "ip2AcF5x쏯}mz4H9d:@ۮ“UC+g)B>C) /ˑ^0pt}n ~#Wl*AvSu }H!g+=V@_?%q٢gT>,!fsDH7cLɓ}S5kԚbffYJrŠf@D[5&0&ң\-ꮂt^qtbso\&ky42dSA"8^j!32k{ʄD J5@n϶5C{"wxa5_÷wJlpz/1m&];+Jb9ETTvRD AL(֬PE%1#P%%%a$dĄE]j^Hx&֏BV2PDCw9 ۊȃ>TY E;%EJB"h3VAM뻴5b{ X!!nMۘWң6, 1' n! }5=9mޔ 5Y*^ /e ?;԰͐e X5OjgH"8ul\I@SҖRM[y99U465s9pl2c6Akjއ1z\mu}/ϖB19)3]4 [wGùK%: 5i!k^sO!"+ #ق y[}߷OsegaS\g4Cx %J\`+[ 6?MWiI! *X┛pՋ)()bΧsK6Xc(^BO4▯5 i6#6\/"/98$m̄`]:tEDՉ=R2?$V'3.{峆,.Jj;T&wH"*YjC}9~qXQôh:BzrXmU:XpDDWqt0 fv\3 eN,E<~"Ldl@dr сZ7TTC7G?[E/m@N@]D4E̿Gbz9q:ڲS@@6S5ntB{14X=)8/ 3s9)]rgFBb}F?Q?oAD㍆0 Qc8cߣԳ$#4Ý7Qvv\OB5ԗmNIO=)!סT˒%ߵbsx/cKQ,:e)b~̞ioMČo倿ך,&Z>V}FL6~:X7SEE4fjm>`BUv&=)^ խRq`sBׅШմ7jJ0cF 6Րc "7,Sj~ov]TtGskT9y#&R_~IĶw0?r TAPG?ަPݨ*[ٔE)&)2OTz82nᄨK@bTI*08(/hg϶P%?wa N/mnI23ŋa&*]҇@2lHDÍqk5jn.3`iqy^1&!qӋADfr H-VsE-!  /8)^sE <݄4$MI=Hi. `AQq&C*O@r`#$SMwVYZpY.͖KgMjǑ5&2hظ)lpeES\U/bY!>?kkٜ!bpV mfm:sL@$6Q`o?_!mk,`a'&bkwY۬m|[BwD#1r3s`S :hN yYpkac8֤ ҿz->_͕D?$5jL I1 jD}=A˃6NUW:;3]_<-0:rDUf=Z, IDATڒXId[GUQXr p'TURnM~agoj~<-µ/ڦ.\m]]0wPY n x%}7-Z:fj[ulXiՙ..NBCtxkb~59;մ\xfn)԰NaGmg>= IKcLA("I-]RޓL6̱7f@X. 09۔S7)3 ҵ5?z?`LԌ*k8M)ɺ[Qyݙ l:wglӑbqc/cvQVfUϵYХvӡ)*iy=-~o=@ N"EUUC3T X'6@V >SkM7?Y=&۬ѿ6´BDlDm_hpjg pI0jxKPbfJ<537if]U`AC4>2)|_ݽ5wpbU;{N3|EnhO?x>_/6EnTFq#MlwؖhzKJ%}6Y.oUG>FѶd @ ɅʿVv͛V^!>ަm+fx%l^Lŗau.dX!9$1p̀k{9nR\涽R'uޭ:eY*fqS Kf&SlC36%H.Zۆy%nDj8p|2Tq"ḼZp8J lg`uOq4A9` i,eHHR㻗:piyj&X!zҰ/Hr,f6m@vH#j?f|^@1tKOo;›f<50M:h@*1:rAPİḥU@%-LA=QR0T q#̻4QA$7 0 81.b]063`sNm`҉w) ;G [ I{A-5lSfS`PmsH/ HobVA JFC4u&fh-H#B&F!@(k/aNEPoa$8VICƹXU(=-[~k1 ;߁ږ b~l::Y[baZ{[Vl*qhFhX8B"!48@=Dո&s>v|}}=_;3HP# [=VA Uh3s-ɠn(xoE?AQX3{tW|0.vr҂tTf# 6(8MxYȲI9~߯R+Af*#p/mtd)\UDCroD\Rp<9 3{c 3ک0 JӄDJk}4kyG1;K$<6&6ldyѩ^7;l՘] Of pUfN7[fW'4{>xA4ek ºh,D["~7eԒd7Q"ER1P -ryyOs6ȥEk>kB" bTT^@LuJ,c@ǒ,k>R$!)29+aN5U=!Eտ^z}kGk۶޺n,;{?TMjFM8  b!1\F12khn 5 IJ];Y%' C(şGLUt,kje&`8 w@4HFdfheP1eSh-m"2 UUcZ28,T&jL4r0iXC}Q=Na EirwMr;;|c. $_(ћQ*\=ƥ:5 acטo7-b5ܴR-d0_ ~e&ٓ\ Ng.XHpߺ#w&țx?W4dQW&ƥs>);=K.˲) 23=;sqk-i?6CypuW'u!D-\ xɁgM$!vd~I܏C yQ@cҌ2*gH!-a=eb}M {e-1*0acOK)p"3Qm&}RE᏿4:F/5\.@20Uś5Fp׀L0|*%@@Fl@ J 2#- 2p2 RV!h !ߑ:Pm Aa /#{0J1]CٸH(]r܂.F>q!h^J#ƃj@ F@6pb0{Y4k`DEO@3gC"^ѫY)_# HѦ !8+?6p"Zc` U'b ʤeQy=$ Mg1М\+UjW_x2|h_g\r!V$*;m~[X̷,'Pkb$ϸnҴG,h4t?bshc<xʈҎI 9P|ROs[?| DNqƊ]NZewʏ!~:˄{M>OE%ϟ?|~ٻDa!S]|{ϥ?VӔC7ЇI{Jl,+󩴷~7=qrd03ݖ[ Z  觛P 71dtiMPbŰTcCi{zݒF\ZW BFf0ǩK;άԳG IC*y*E'!RѓY6 '|w00LH /)] :0/Tbn8 %Bc5G??z覾E XSaoKFM:HGlÕ@ISmm>\iøSN&&w]鱐ѳ[IX˙s.pr@bbd`Ϣᔋnuqs/J}-?|"OX#EW'%rV7 ;oXV+§1z|1* D¢".g1S.08U8񖛿3RG 3R7 @cx[L;MTwv37>`kXb cp=;q#F 0%Yx$H&+k"Z~Z* VǪeTO3AQ掃ΓDHڥ1r+ioyzsVL {Xi5N o0]57s09Fϩxb'E,aΊp,'5j'o^_EoO{2T)ZS̰ 9 . Kpųok'0+kq٢Ju Vz.ds*V >ђo:Tr]NSs_D~C~|}I-?|TE_ pRofamQf_pDkKϐ ͔WLo}xUMC!rv8fq2FR!1UTl8Q#ᇶCTDI#aB=jrj loi!0'B`5ȷQGTSp-q&n b]J7 hL+IO.vZvxf`f˄Ghh Y^: :#Ȃ=?/sAĭQ;x <՚iSap 0T\ 4F$8nM/LMnKX  oi0۳t~KL1FB &dJ(®yRJ n9usL< KV4OjSse\F(S7T't26KIPw'86D"'s2%d;bE4EdN`A_ĭeqF4Ҥ !eP!٪Eڸ+ZYLUhyo}烰9TUo3̌ 7?Y۠aG@<aZ-ĚክI`'fD5p)4wqd!(Br'SPpőֻ^^5nDQ o3Kq@db<V U6P+#bʡNF@9%.6n'o@2DLizhB$55 t^V2TIňIIhXFuqiV|˖/b"f 7i80,jVYo<+ï=ɐb:fZju̞d*!+6`"&P:ɓ3@#,| ?ΒVVgJ6jI]LkX\hd|Anr  \'0 A>SgpNr{ ~ycLג{o"/ȆsDs R7d_γb }@Ny)L RCj -!"6/-Y:r,koTEиQm'm>CDOk}Ry{O/ xYg/ ²CPI)nEKV?9>CPag]ÍVK$b;c_ثv\3@׉siy+W__ Ę*Ɔjas_ϕ9WV[С/SEM_Z}Ɋ 5ؙY1!^\<<3Ud`)AG,\'fZ6*BP&V$glӗ@ Q0SZUUiIuL |Htf$O13{D}d͖jN"q7 ~숑J!يI2uj h a?aW]9{ӟ[6./MhZYl~N%ʖP3z;Ί܁2;#b+0!oqރG+:( ZVE󕝫FpH3V Cw3Ed TޏK^7&%md6c s~Rq[iDdDAC YB :|K=+8{=M 4vO?_o~"7 C[%YRY%}ڧYM_*Oܧ%1k `n߼{h?bvh?ݨe_7">6ۧ~`O?uEPddP*^e7f`'Bďl ͞|X|.Inc;ȭ<1kUp <0x Y*( fS~އLr#U$%ےU If6/"#h<%pc^DɐSVH6XoQ6X/El Hë&ao91^ˤ(Al;,M%MLq7Pa$GQ1E0Ft הE ܵ LL =Sy D=jۊY ɜchjb\s%JnL)Fh軦P51C;@DHܰu$DPR3_?~yvB6\HiRC 4>R]uG3c0R2ePAhFBzod)~}R#p5iSRuftޡEdљ;9p4M<3@hcE%YMNy*1KN+(d(4fFKV(s!PmE[&nbPrvg@!ֽ9y ?qqP;#kJ} %eN;aVp%8ܚ?06 | YTI-X^@dޯzb;5:=-m_1[ڬbS.1T6K+2]3ø oS}rՔ[o>_]ǓCt6_xUID쾢xx`F}FRe b2*EFy[[h} ;~߿)W\=/,:Ene.l1V,W$Vs3,B( bru@DMn=޿yVmtt:B왡nP㮦e'lLutz K35|"cH a6d 6ZcZBC;=Et OZZu9 G i'f嬡lbP\^5pW1ekgᠥڡ_L3TL6:06л>W?rwSȪ1`_H쟈5j'/h/C@E{ZMTQ|c@&` L͚`Dʜ4»sC^<7&S9d"N_85\o)*lDm H I!%8X2 ǚTK Ռ>Nd35nf}c+TH\!h&Uk41 Xۖ[{`{o ~Ⱥ)mH.we)s[xf&%"9FErیoT*`b&!L3%*XZm;x11Pbc>9pB ^N]xfPB@|*7cyPBEݮ<mߦ|b_sʲ.nv0s9fK tb.ΜrW?!꙾wȧ#~\~?o75%T*Y-_2y@+h›{R7Z1 <:6lIrrZK|:E# 1O=hB;&e;Tnڣt||T nC{3"nf\*`̹2&kl<`5R ;` .ej4 % (%%j<_1s#° oThE<&~|`f}^ж 'qʍN5D |b7w7A){RH-6"T֙;φYx{v?~YV2+ }x ̴55R`9HѾ{E]燰-$G'j-|Im?^/|jo~:G78 6Z''scb3OBwTr+PDBfEnY-VI`0{l;,B,i*%卛ד9yB2яg;vu﷏ :_88brR*b%-e~%a̔k1e!u1 ZU [J1$c#M.@E1PRO" Fifso LUqk21{v\ꭗf*L\ty@c@j6Idr@G$85P%J^eJ0Ǥ*I/T5/80;ڛ0<.@?)"`tݮKư@-JL% fC8 LI(0~T'c a(Jd7<<$m!R{ Ya~L<ߛ`cgx3xwT`5)d*jLACeKa7]%fv-:b23% #{R>!,Ӿ~DDio32ˋ,dg* Ʉ;tP+q| 7MMyfC5 \|l&iKVb`LYchͰQqZv; >cdrWL <1uG`6*ϐPz8̚a7\eLcD"V`?FcgXյR/N f>WWkGhier.HkR3u͙]S%3pYj㭫揠ZO? x9OӦi[O}1mgﲜBܚw\kEe>!;e#qKI5[Ǐ[Wro,5z1;m?J^ ?d$HCx1 sb06V3G+mw3`%3CS:Wڌm:Oi`57fris ?,S3CB&4"]tܶ'szje`f=nj8~z_noz_H^\%`TU5wIܜPy@XEjGf0-^$LLm>;&(Тb16 q@&yq4,Q! f.+kkz"}gZcD6;Ca !ɝD̍ϓ6>~Y*8B=ȩ!͒)2d3Sh&RU#2PPi4`X@1MLN sk1OQ(ˤ 9$ P1fl( Ah6xS.pkVU [fP<4"ɚ7A}UȈҜԳ0O ^@V{HDWDT'U4/П|%7\m$ 59Om9T54 -298C&o58L4_au`O"g\0HeqvHcd_e26[AEC]>˺P>2H~/1>RP)oLު{V1o /ً .J0ǂg@޼A6㣶` +f/ L~mՋhw*,%,_zwFu`78NEUmHS>g3]QRجeyWGER𾠔 o/\9SH1hA MB.*tߐ0muH8瓸5vx=iҫG 뺆_f1͆MT制TuŞQϛ8fv~-lp;9Hqڊ > Zq TY5!cs8e~jnUȬ闈2I):BIGEk9Bs٘򝔋D?t)"r[i N t8uA-ٽ5&fEӀI~E^QgWa_W&{VEtk߫9{^4%~K`<6gě75(n`vx1ocIkwdm+N%f䓺|ZN-,ֳ欐1>4^2k BmW_?A֣x g-ҙKe/{LX6uhi$;Z3o|x &8ٯq[ >3d|_[b1,GVGb`|@vBn`p`A#-~.żHt9?z0K;q`*:\VMćbt똎ļaOϥϲY6k[lGt S3F[- L ^P]oηMQ#4eRrl|atcCr+0DR!(`fC cTǛ5!I6^qfYqy/ѝ(N IDAT\}zw ShG"ZȌ^HEH"' NQ)O_$C E (' ]݆jY{!hzCg}D#u 99(6[8vd*])ƭ؇[E%pp@>G,jfpFk7UJbc4(#Ĉ IWSYY{2Ș8ltDhdH!5@2T1 TaXۑͧhɕկwR~?)k1!~5AqkNTʟ5TܩT~ל,fKSڳTKV-Bn&JY-wDY ,Wplmbv/dqW솄j Mmg)L:x 2X1] wˎ f*.CH T|.g^CC-Y"f06G fU3E$ 4k.GMVTTxqF[knph;qu^2w$N1H;bX4w%]T&"Pg|:Od}8\7@р3G PĔbDr"'/1AJll FzL6KIJH("$ΘIkOa*P<PB$U^lP u()C*U b336c$͝jՊxnkP?e}n0#0T`&0낫C0@ tLC(Y&8Ø9`YK15h@lKK[\0{el{M -'c{>ɁBq/Se*LGk8 QhS]gjJDOmJVn\-go+*ov؜TI({ӓQ^&H6;dxz31QBC멹\{T07DRfbCNhG{vr;4hC& ҙ.^0RTDmh&A95'Im} +]c\.Y}c6-SQ=9K531_-h?qJ,MtƧo85@ڪ=]lx b,n@Z{]}~ؖH4vj=s[fc$Rxfu'e 5 \-U&_,MHвVlT6t5{X>4GyּuV5>AAtC@yil:&9ħW @!8<1'vefn;XSD3T5UR!1F^#}#8Zk. VfC@HՀsfd91:%fckmg)cZ_`}%F3pwoTG¢919Aj|a;6Pq4$'v!)!DY&PƄ~Tfn&mvPu]??O׏>uoB;f'Ph$.hM/!btJ -ΞRN ֎\MIg hxa a&V]U;U3s;S @;]X@b3PVr@c\ [(fO憺ƘEKd:`|lc)^A@ ;8~@fs8 {2s6'/E?7ufUvy~ǫ|!ێÏU;7}"*R4hځ1t d 7+(ebj{C\_e{ϲ}bz%Cgbb8sY,US$3ȈCy}x֎U\*{gɕp09u ljqhwSPzMGUR ȳ?΁ԹD)?nd~V%?03AxH8 7;Y%AJTKWwyR YoS}{-kc> A.Vղ\2r]n4 L\lTiaEQRL"^6&, vqΘz_|lyQUD09"B㼐),I,)"\'oc3y%*CXQRi :(^ȍv D21u]o??} 3Qpfv9ntUQTk`H ]OIBoo(L \RI"U%ʳ`D>:Vƥ%` FpC.!DXI3*yO6Q[C~8ܭ)(x_CE{<D\LPTmnkv)-b6xCp ^IaX^AF k:r55X -)WF2 {"rA:[:ΗNwd25hjQ̓ԇ_x4Y_y;cc031"}ZGRt3@EH _O$J5ypR (M9tOJ'gJm'mZ 3zKITWhM>7U=[[YxŮҷW\5Mi%+L3!|t?B">R28S2ml@G0 gIJ] uwPmH.[XdyO?(?Tܢ1<>|ei `jRҌJ }Un4YE /n33GkQX]z^ﯯz{FQ6.SCZT$!&^TH'0&С#"?,BF39N1½.@ S<,ϙx<װ3W ^x-7%C| { @,ܚ{1hG|pŦl>Y I8v9K jD_܄^@&Z>CrcDafz %@LPjFη1Q@ǮR+5>'"[6Mdb@8UIUIY1$ݿG 7sY}*=*Ālhu! j3ԸKa ADF M n^ %($- Œ6J!"VvtgYL<7M?@ZA\HO~w(J𳔘 Bۧ띣O\ GptL-508w^__|CJ34_l EU2SAɂpƉm#$%^w!NE1P?- l7U}hQx fk7%az7c"w*~z_5B19,5|)Bf~oK^h"ay/+ "cd8cieU Ljs~?ZAQ: hz߯!av+TO0~#R@ Xm;엢g݅F>oB𚓊"g4{ukқnv3qpX+P>{o BU! E#_3[Bssض h 26Wc֚)3 !q<_zzc]0As$d:k9`0SB0q~>#$[飷>x A"H1UۅJ:y^/W  !6o|"PuLX|-F $>Nl:BROb ut"'歧[Ot@XdhN|5SeߥW3|G\ t.>@YWTV-0 8AUO=vj[g^/ժ#D?MvcCl΄19tC4 .a-JpkRm2]|3nտ>a{aLŌv[`যgǶŹ1ݼI#x~]7اS/_W `N390[\r[ĠG&=Կ18``f( O@">Y+pJ21юx>轏>z׾q4f. Dr-rh "cly{WwNկDKӝZ=$k%ڶAʨSD 3&ob#k٬x;lP*dcn)@ٛp;t|<b)f{1Ƒ ))s |@c5/Ŭ-X[fln v#`7s^S ĽtzxM=ϘS``8'Ȥ+;w.7lԛ("u?,,Q$juyDE6$眂ݜ(ĐtCoc9Zh-U"Zԉ4W{Wsrp~,襤Ffx &q{P ~8Ԝdg{(U;בW25L媞/mDg9U۫ EfYG(Wz]}zV(<ضu r}=Ʒ ֠I=b  yޟ7 y3@&fь{P T29,=m;m/s'E%'I21#Մ5fl[5"+6`2lN-Q"mB~5PK{ŔM7Nhg7*hx)I囗=}?>GXh8<{FHW 9g4ֈZ_B|F@;hkdh&L{KqH;<ʏ{F洫}vN6JT`gD %oA"pUuMoiCsVޯ +!`X<>>~eFvٔy" 3@', IDAT=8jDlN`+h)EBMr(&Ts3ФNҡ)[&߰^E/RWP%ɓ̔ʹI9!9 ]3"/eCcNYZ1 H"{0hxHJdum24!SHN!/DaV\M{Xk^䯸USE*n{|H[P6![JJD[3<|<dOH0l]Yv:Ypc2-w0=ts]ދ2 Y1xV&4UI7mR}Z:s-rA[.rJ_vx|OC_EXO+\ߺy`n|5=Qx6E[ W۱Q3g]Lm$37ل;``amn]%/*ݫ |ILM8# } fg&q9H,9m!w֚?W\Nl*#&lse`+ | /fե>64##'fe#lZ&M{ }kj+$cTnJV޸SUP7fnJa c%ϔ'Y̋-&OA*/u8+ (OU-<펹rEmUz]{6)uTu h-NmoNN,`⤡Yîݭ3•:d!˼͒V9=3l!-t%fn ӑL{ bȴ x8r5܈\BAr7K9[Ǯ]F2{DBf FdPjEN|3yM@Qє-_}T|̯p1<\Bٗ/FM4XC7 tsw⋿K@dPfFy$$lZg'ެNJTn`{@v5jNg;A1:{O1He]S莝uY] 9*1$lW~,Rq-V ETN1p,i^3,q%p8!ZPЙ fvq~<ǯ_y~u0HulT~ T9UE0Uvfn=H [N D8%,ǣG{dk{|dS$C-S`*cb2t*WD3"p8ޛg Yys,Uf^z1][CKƹLqcqH̏”z5K  \06-СL!rI+M;\ci v&vʶ-q\Yscf3;mm`\9TMDǭc}$=RPM; I 54oD2 $)misv?#|sEA:(6Qq˹p5M~/L p3"1F,pB%GZ!R S|ﯯϯߟlsܓk:6IOyz!fl=@z^e]G>ŽY]C\1ov57CYLbojZ`m,{llQ߫eؕGFL6(GKaO꾧U3RDaq‚l)m=~"d}uxGo,³HQf_Y3p@3wteֳomW]N{NqaanF| uRfwd:a8nyK:.u!oWњ=)֚ SD;=ko `EHPz Ci$#2DտY ~K~4$9(+F.1OHkY>{~]+J߿3/0b>(Y#b( /:;y/7x[JtʾF@m)`aCNUq8V}BGb)~V.y*2G9ЊȎ~Rn^ll+ZN͛еpѹ[hK˧[{U3YLqq]ݰ!_1`LW$^7}7 z=u=J?M F3P58\ҥڕ _6K3q#HFܝIf!NrsF7Ip39Qu85LN.@33we-Vڵs_~>~^d 7%ԅQ<rJ!8ycisxҫn/pLA6'f+(O;Zq A!̎~ KX UVp0H@ٚP%i_4խXW܅X[gRZ䋚肉Os Y&jMgo| ([aB.D"ϴ;]z;Xktјjlͮ ߹^OkUoWV+#0Yϙ $=-S'xSj]mt`կ)L4?!<3yⱎqP4N1"FLΰx(znAkF7$|,'F%sTM[| ԌL_Ҝ1qQXOgXj󙚟ϯW=mEF~Ov, _#v?GfFhŀRMw)+]pW`}-Vgq{Iν kaP{_!6 mShpaXtGgN!YWy7&T\,*kፑWETG5QpN#c( 1CWY fy5ZF?JZ4' VNX:33wyY<dCgLtd+g#Kd>!ܥYH " fW[BK̺:㐶E^ǴpS"5aCLMnT7B`33z6.t,I ePX" +ޏ|p0:^%7vķ9R \G@u>I):o !DXoJ؝ ϒs`;jd 56#ɌTz`hFy5/U9^VYu,,aZ%,< $Hs%+ZE13ẇSKZYzaM%!PUm"94zdtÌY `+&G5}菦h>.+( ;5Ak`f$afN'Ri:pk]l:lfadj|Uсe [s;s5 __?|SxgW4@Jq(D_Iտ[fe !QM5t8Hkd|bap/j0r0`+ <#d󰉅!'&a|&.xWGuv\Gۣhʰ,jjn)ÉeAԶԄ Q͝y~<ϗLj.sKX:\KR]τa4ݍ oFf bDZQG=hb@HĀ.%-5uJj X.Eʪ>jb akP+iZӜb&cO& ; =Xr (.K{n6YZgRr?p̜̿!e?dRF ? ߒ>q\Y+j_孈"w_N+vT{H@]aմx04og\U']"gga?ADqγ)dt|'-P1nN@HD[ ,yy>Wg< M)o@y15bm\PHpz\7&kPFp;@paP1E `V59}!gx<^#ocX6+" fSVs~0XV]Wӭ/BY!ڇfh3B/ 8a _eKHxx0aox'~cx'r1T&{n~ws@ AsLڶ~ vB SQ,J%`t6,6w;$^w3*h{/2^KLk[>(3in#hg( 7;;2T7 2Cì5#z hє{n:bfdR?|J>Qb~f+_s ! ׳@-yrk]T?럔n^ r6JnFf0N\K6W߈t_wzWl­Ң+nAo~+Cw+"X[ϔM?pJG% T3AW3 =UO[/d(= o^2!V{MLlCb0{MU,S񰕅YZL$܊JcNm5mo7Ԑ68]"3yFⳏ=ox| ?\/k6uM\4); q'i,bD1-+^]'f<^1D3qlC.UL σ>vi:snf3ǔL\w6c?r'gК!pqBx4VhmzLB΢x/U'Uuub9O-"腙DϔioENQ@ m? !2^og(CjNƚ EjyThk8[jGI.Zܴӏ 8vm9\صzz/9ۑ|x4z(|v κkwsp󒭼U͡.c Tc׌;e=Inzd ՞+yT3YFD;6ڀ46QB,!=D>:"'#+^ԻwuW;Gw$w7s1ߝS0kk LFF ˚ϗ2p7nze{~R3P?Y- qNQ+j]sHuk_+A{⢐`^ے3yaGNu׊:2rmٻĸͫAp g);8Y{]~P~i*35~Re}on"RhcrOfZ^Fm+s 5K|L8wnmRU _,O2 0M k@ef4ڀB\ Ͻʲ"،,?d)`Ho6xo'Gg/vTŌ/d &z-fܓ9Q?B3S`D+ ,rv@D׌߲wfp%8 JC/ L"h>cQx2F[N43hiS>V3,k?_Q?RsZ.hz%`-0 _vBEkD=W5ꢬ$=J0RTK4v;}cƣVZ v;@ovҬv ! vPo^Yꯞ2MNkթ/*h-o mmbE&Z'-f>Oh20bc%?^h>GެgRI✯-+,v`ꢙ>9rT{=\&Ft DD< ^tB ?ZU]$v!g8ގca5\FEҘ9 3(TlL`dJiOg3u)*̗455U7Xk"܄b;±'vq+@ubδPrgˑXyX)vtzט#.PMJ#'È"f2) \cʉ^rqPDHG13d"#[]EZ #e ˭cS҄C~<8 \(H+`gv^;Zdxח|b~3NX&xwI!&T ҜDž[uA{n]DT /醮XINKj{_g/D+{e^ ި_ Ӡb"_5p_vfj+!ATr{^"*F9|6 D KLs5SC6nH_xX~kꕔӑ1=QlfdƠ?b9L? _ MQY %Ot1 6ndF=.$#WrE-@MP>V&m5[ Br5kTGa rj7j{r쮸}S(N} Gv7pZ[0n} $ !wzajO8io 7y l/ⷶ=^{*Me·>,(MEAo}IN*q z_Q;pǿp`I/ |/nwRcJnj8@;uPow }yNոKۂ[r2 bFlj:y|7 _=7s4`j]HiJެwn 0L~ay3,|nZW .-s%[}T9u1*&vks7vb@ú}\K^3VjNUG~ïڅXc& `Ǚk?3T%8̉8il kmjϸ Secs ;q#9H$$??[4uCS#uLuƊ`d8̘LJw3hi(jjFqJyO)s^ ndpS7>9Z; ?6MtoB[)ģ-إ{AՁS發U*X۩\>H8-5G, SD0[_y&ܼ:!K(ЃMfAh m& keI:ǥEx5*ni_\wn95MxWS닩opQ A3}~x <Wx xaE!_dCw{ QV׬7hҵ;ƺ*ܤ~q"Dlٔ<Bk=+ u^!g{IWꤡff/ɅT.9ci:|j?_ Nr3(NU\һD1qD!$YOH:|Dl8glՉ eq@.b#F0䞀nufas84-#3]dCNBf0EU 96JWrqo}d\l3x#Ip)-]Q"(+H4}ZlS{ %^ h&jNW;-kgjoH3!mk#k,&Σg׹ݫnQЖV*Nr4r·d~=z277qbCKjZSIEo1!d 2b cS@jT͆vmKcP> [ګfӻnM(EܤJՀ5*Q}p9-K:hkI#aۢL"doDj6ZI1[}-@Պ ZߩR6xߩrKwS-節/M߂o@QlDz{ ݜze8F_2/T췇g4 p~A@726GFϨ{Х@U 6To#Lz OF8{Ҙ[91OfݜPhBƼiPטQux<~lygKWGhMZNw1TFY1A a@@3c@a$ rpkhm\AX [C;Fr|fMLxJRa5\҈ ﻬ25HS홒;\ds d=3"Ɗ?N~u=97-mJ;/%{Vʜ,w!_/2zdW *i+G07%cn]N^w%xV=*{z +5oԛ=lK`|m7?~_vAַ1epAr܉8^@) ҹKn=vnn&b"57"g3wI|CjgtfqI~DIęJ< 00 h F$.Bq\q<|>#[`'A$/C wAK2)J%g5 D* (.h'T{(e>G*yKkE%5i2nLIAūΓw  ?L"hv`=+ҏWi@([]V[4%9vGYgF"D5;:rLm/}uN(ys L61 ?`nK<x:<_GmIPEd C|*qW̐qA7ƞJοKB 0yq$Ha L踶5F0bh<*MބѤIǁv44!̺_fݬ]!]M-"0;\,H8"O() N10 Y׶Ժ!K"r9پϟ>Jv Eo?]38~ψ{f9iBוijͭs(gn=UF3gX˒6-kF8`1\z(3-4 f[$򷝯 ;ǜ8ЕS}i(EQD/ ڣM$?MVXkݏdgs Ĥny2ԕUH ;]bkvД7lYMP҅5!"z `&Sc뷸L&I>F=TyI>y > .geW(ӛ. -ϿbubB0@ C@ 6pxk-GPbCfunz+\`+w]@|fF&mSF(¼#780&bM5mbYkk 3D) {e&rG;9iǿunpRۙ,ޝB؜ƀ%IxhqsiqTčEb2-x*暱aA2XYO8}C,ɾ). r&ΦNvk`x3﫭ݣu<6 dq`-}V^ufP`A&՝B#~^@ /+c E^Hӝ)kIJKyW';BU\;v [lۚ%@7$򹟸c$>/U-63=ɴk<}}~R.`=m2~ލfɶ* ?X䕭uҹhI BRBZw&Gk%b8s{LGRh;N18+)?XFk5[ǫL 8W yNȥ@dXRS^DŅ EX10 ڈHnv>'vyyy:RsŹp>hGBa$3B,4&/#{H3Uޟ}>|}wT}κ0FD@eo"WΗ\[VD6b iNsn% Se?w+=3.S^ _I3=v7 PJhVɻ2zpk^t߇~TTz~-$9bق)\m0ׅI+UqY"IGovD78(;{xcM{ZZd$nfH [/'_`/|֎vETplll066ffae>&9U/p̊:hf}PDuCM 1nrjYT:'Gza T Mwy CeT-**jkS^Zγ$dwum{;*5滱7ġa!!0TDX"2`v37)fc 8Lh(=Lc27okQ# xVK[I=\ްWo,$^Is&&28FA]D$LHFRA `4e?6Փ{')L08JYpYd牬/9o"4EMbO~?@PgXGvBm>i!/3q[VY[&$vZ!N|MY4@ <2G EH+LXDžp# IDATɛׇ5wM6xs=v\B4nz ܍eg'kReWFH$pA>?C㓣??uiceRoO Ov& })9( ?R{_ɀ b2#&X.@1;SIQ`d{KH0Q;TK.!TotLlDO=rT?v?*yl5*VM+^Uw26]4m ^unlsV֦;Mq_^Rn2+Mp(f'T_ [$IgӱPbt齵>;ڔ+eD∝$XDk 7Å,Dёa`CƟ%[EaDdqo _ԙ Sѱy&s7r9u~h>&quvMx!MR;9TY;nM5i2X7&E@394jaIr]Nu)ŬÐ_C?7yl\.YZ33 9mpW! 0VKiyUa9yw<<HG#itBb 0is1CCBJ-ԨmuTsS@AaFɇ5OfzcWr`B8<z%ڡ] ǫkz\"ߨ]>$Am`XAÙ [3k&7d:l_pre[5/b@xon"fT_2i 1KDtΧ}yfOvn@7%p Fyy,:x%@ւ-ݣp2eۥ[ zx0&*Mpw03:*"*]hfЧz; SsKy7dťIjBhF2  bR.ƜksR7)i7Tz%y^%6)QE:Σ=x/=ڻ["6S%5#y`F֮9RFB' %,e?aVϳMPWF,4{W;u?|]рG/c=ӲB*X?\Vd p&OFDq_CfCaƊ 'Be-'?nmβ1sH|ai#6א.Æ?P9>r1p 10ƀq$8ޜ}EjF9TCv3 d7 k63xn3:{stfԘĭYJrM:i ݝy#:1C})4HM_vwNAKT '^i^c gXf TOi9 ĞXRu'x Tt0|1 *1%\#oAg.2UWc(|ׯ_?g,aYqJb$n1bQrΞM ff 9*V72:ss,#x'J*'F"m=Ou8+3k<31Jѧ]hlXellnFD0YϺ{MdK+ VH |E&sKC'n:rr>95"3pjTfHa7 ^Qӥf5hi@C,8[$AnSIm5<wĝ:H*!̟ Q;apNBJg萍ܙ\ D K.D {͏_4EݯNJn:F}VUqs7 R iLCshJƠA<3WY'-+pC136pԫYgīs68qD@Ba"3d7nD4ذd `:ן>y^פzɼ[$?/VsQSqZ~1nFG%%Bfssi5S@YøaW2g}(E;(}k94"[_}8m?Y -]lvr~IlK" R4Mi'Lck}E7K ƍ4 ;/{M4p'vZvh0E 8^ ?':\q?I l%Nd9(&`ln\,_Bc8q( 2/sXCg\['M*Am Z'_|SSZyVj_myH;Һt˶.u/Q< ;˄J J|}Qɥ)V@}`Hl2xUD҅MNxٶa-p9]Fc^F0+ 3/,D9*)qi׃OY @}Яñ|m|cdXV5L2%FL˟)vԭ>," )l]`K8[~.䐲i{DŽn85BRcbҺtM&3%ݮ"wJ(_F͚8IJhV$,ZDOSռadݢHm!F28A!G2^zDzbWzGxԷN/ dMAA 2S;q羟~;G;v̍=t9R_! d.xs]·RQL@JZ(]ń|,$*Q`(Ǣycˇ|~|~L-vqȈ%bMAR ְ&gh>]R:SzKgTWM6˛<8/pMfbN; 7񍲝c^4:Os0D/7\CqOS*2 ĴρIy>`(R5l9*ovry5v̦׹^^uz#B$OBwy0: G*Ε7/)xk6tln0{*IƑ'B$DA\# 3Kخr^*@:qZK !ejYO},ѱ!g?Fwa`ڶֺm[\ֺATs_yXE$OfKM)ye'N*ckqE?A2,8#O VPP,ˬ?Nm5DZ{籷#^='K񊉼f.L8 ZT^۾UnMA "${H-B bЂ hAh "=q|_ϟo}ܟ{Sss,RMBǙ6y٘ }J CLqSMnL ];!<@]`}|h pc?,K#p.wTn׋OV&a5Up Nэd]wB\54qLE*:NߊY3HgOCʂd?I S..&+Є\:kRnkk XExD . t`Fy5ʞԱ٨ ?mP¶`2${y .@KȘz{'+f^ĊA7_\`Lwɡ5V69f? ?5-ТZ7}| v}q~q6[+1&Rmíp"3-عa+Q=hN&vs*DO}$8|<~ϟ?6~}V{\ 0=wo}l*">{ZKasGYELrRolLv{&%QQkLg#C3M,"3ar=LNõuUuɟy SWA#`:4:Yu$-5scb!FfAt'hG׆f$St#f|,Ypz#dG#+?$>7ex \יZ\՚y ! 7P  ! ] .0 !3"iB'&$q8*%}8x K(T3:4"G"VmC'3an迬+0h@VlV9]h܏#xv@ 7- C˦TXE@DXY U8O|)bfAF"ix] uhYPAݰljN?$ȷ>*<}UDeR(*$JEH hrnB"ZʊJ?tcbS2__}ƶcA 2"5 6˯<}߯sE/<'-Jd*HzO`-ڰ2aZe~+*/\g[sT,X?;!0=4z4x?y?lv028Ub!0MO!@N;!%h=V1{&ZPo4TP)X 7RIi bN̒3/v3sw01:"p9A=yɄvVn\ 0J (l|Z Àj-!6kZcbjʮ#!FX4tO;sxBp:l)R@JA*AVE*acb_hd, +27HCD軁4VL$aaV`\lyuO)|: ĦT*e,ĢgkҴ)Lf*vr]U$`qI8nJND3`cSTb80ISzNRpU F;1D&}f`Y@E~XHX gܮ ^9̱;>a0f=#fl<ڱxAn+;9GCHk/3[. վDZ`ym+R-H^ WT8c7VolS'0]t8"k{ x9v>۫w DVĊXH=:dRČ\2|ܗHEs<ϗ|,̣uFOaZ'ϥO5κC`j5zbFf%'gј5'L͗}^< tA3e?७Э⢳Fa&%S4"ۏ>#bˀCq)Rs")=<p!1= T3[4o(ɼpJf lJ#5JJJ"DnJV_*hsv vy%X2}Q 2$vObiy*hPڭZ&mEUDj$}1Q3KYefDFDc؅=T`u8#)&6TJQڴ~[ x&gP3QHXγ"BEinEP]4 '5g|(,1ؓ 1A-+RRrm@aiRh{_1lQdb,Mf G ¥PnhO%ust%ja1comS1#d==pD$ <,@s=(hx48n܌ǣnu},b.p/{a q%8mj=u3Dqb͚}K;'ﭽ;2Y.׊ X"-xI O0.t{bFEZPi*+a%0ۡ5Zir'pklm2S1,ld;,UKD IDATJd?_vpB Y%v;$Vª0~k~<???^G_mf#+W̗ m'\K6gLs?YKGߥ>93ǦjRS:C)/¼DzE)%. ( c.&KS2ųo3 4z JR\#S`J ?9r`Zܔx9+KLmq@RHxMGd6iv79atƞ-ٸ="+j JyfhPFm ̖̇ P-X\}*E4em~߯߿ſS#.l|Λ^w%oz]r=/qՙBW=>QA, = 0ձ^i_.huCRP@Ffai'cCs4`-ܒABp'☬w8`|15V~ 6ÊQaolkָ暶ڗxtu}5_SK֝Y?*>ww/9`C#B꿆{a-yfJw{?.pː?GIJd5 .,̭PiVZ4Z#3MGNXˮj*ÉB#1uƆ)BURDz3 #}fN-P yfT y߳/LrshC-w@@.XqCi-"HjѭJ{[c"> c<:&XL@ mSEݨxwAd/hJB '#9mmz_C8(@Vg3Pc(LYl kK-e`@C/w!sa۳VB)n(`O7g'7`϶.7+cdLjDB-y(=7X|}y*3H3DdĆȀBs+, R bуy￿|??ϟ=z ע<5it)j|Tff^?.|,7-fx~,Tc~LƪP5v֚DV(z\ws @x}pc2t5˄ 2F'R?<03THR0<| KpUG˰4D>#P-µWa H[N;g J*?f+< 7Қ/@+5-BL o2{/XdiaX#A PU$}^r\jm@+-F:/1n«>a%HHt%/r4 HEUj'r6@d7ntC1)Sv64[y__jǻh,!ly~޿h)gӀtBQ$̭}Æ7sy¶71qaIk[c }/tR؄J ~GQÐDK='CDu2M'f'Ƥ*Pƻ<:C假"߼2HǜDEA# \&?` \x$TLq0ԭ(T 8 ׿zv3铊aqko(4{׷.* L[~t2BEcJ,9$FEm3sI'=4ˉ`F^+P?_6˾3eĝ܀2"# #I.ǂX x* ,;c|?}C=|~+sg=e2 R{p˲RF^=Ô~_9nEUQ܄9<*3eX s8.oJ,E>销i#z)W͠oݕkOf!.s}eDW|E h'RqwT/Ɛ-&Z\hsY]X wx _!}zIVcAK6Ax8/ =#~Mиv8oCtPP,AH(,xaRJm::(2VLw>rq|@mb#1>~ιՀR#Rd1Óyvebi`b eL%PtM׃}#gk^z׾{ۏv%:KAJLOͪh,V*l]͡aZDXn , Nc!0+D:N+ $rq iTKiT€U(J&3ջ>2TyxJ3vꯟ.A0A䩄 <4b"(,2RNqR XFP@PaΠp$px%&`x:B)sم9 F'EX P_{D;?UiCƥ1VW,"MT^i%p7쌻E>'yqD_< =J mjd Dh"^sn $h#,@x*R6* ?_ϟ߻~؃Ŀ*BC%H^•]yXSE8;x q)e54hu$xOP,Я\Rffb}*`8=b$ E0hEHǚ|{rdOk2ՃOuM񕦟8;W񆝉p"^<m띚kvdz bBnR]P`Wx?qeXH c=D?-_n\p:JKJs[;?H_h$ .Ld)Wk]nd,52XEjGKZj`ds -5-7 &!" M֐{_ ̡NDDlq h @ ~ nJd+Z3L#`[F~_ގ-TCa- )7!z*>Jh +xIfP)^5B}]c לCpp{AB)gjI̓[hrQAX#J(h-Dbl,&q/ (hUshX`N Qg7@{>^8}#&D@3<3 +Rq?M]&|)d* ~8_tڠॠEqG@n쀅=c1bβ xS)y8($X BntI( EYLP,ESAqm z̧N\!+Z('0;;GBKڀbF)v?ϟ߿߲4|~vy7S >)tu?>Q9u+ I 2 h/rIUoGGn4d25T@Bv/Ul?Ire-)v@*cvuSY{fwo_ɵ(Î2y1;ή!!,Hk$?#BJ=0G]gͻջi}g;7Ak,N 2xXjraQAaT"&Ze) D͇=-E-Qi:~hَ㠺d: &P0 /gQSjUBQ?ltU[zSq/@$7SIQGӠ ؕKawHa1S/S)$V}Tg儿 _AiTD¥e lvZ-SF,ΕW`Lb`fI]㈴N6' RlJQh 6A!b'וEڵm.2%7ݙ0ƹ-!n"Jp TNn킚h H("41l8q<߯y?=KSc I8^{-`f6E̷ 0osvm"N$]IV稚YȓG< ynEތDRrlőR&wr~eONAV{/{;?0$E)72pt:W^ u[?_—\w:~AYȗvi)UTkN$&$2"z#|#o?!?yi-n4]o/;kXZDK]\m$DXXJPu]|;q]8&1QthT~ !tPTNcDs/3WdKSt6FX>C]9:[I4wf'R!(Xs~088lNgg͂wMn' ʀ DZJ^tl 3wSYc:!(BUE0S=-`),15ƀ(3rWύc)+4fOX/mFYlnx~~^W>[/A 'cU?/Eh^(tGpZHȠ}.:# | <8>sS :Mv`l! b$p D,?Z#*\q\J?XtSwY\ﵿm#t}zxoʼnG ғdSY!"$ Kbhd*?E.vFB ?0ޢz>}#yڟt:Ɖ)n`ڦz ^9zXo_p@+}ͺ\Azt 8z"fR aTM4{ o#2 ()/:b@MEFlu k02ߤ "c`ӱi>gEdP$@Joꈮ2tdD&ۃvzyϳ#eqk7N'slt"5g3ef`EJ76@,DT b("q'-Jp zgez2@^D&tOy$!XK础+ )&EFQP(5UԽ#K#z:c2%FIU@HE›Lilc7,Q$)(]@Gܤ\>?09Q(' 3P'S*hiLDT z,/ɾe^7}3\:NEXfN?}E1?xrasAqǗ46 27$ 0*Wra v'1W@b)  Xsϝw۟x|^iTS$T}fpN9cB[&,J<UӼ¢CЏ"7U$f}LՎ^afWa LxC?޶$ % <^Qx}(Rhm~!)K=w=w%p JJ6>=NU~|>%5,⊐tK0vʜ; n. |}Ac /2e1Y0DLՋvDlͦB@a`}}<ϰTﴯI"^×xe5P2Gl,0ޕ"3K@affj̈(U(TKHw[=dyɡOhYLcarT9qzͯKK0q* lif3k6Z)T8n}m/Rhn+VPkTF`4Slp@ Tf+ IDAT" A)X=p۰VE(Hk8ܬZq7.QK%~/ =bTLݨ 8*|**[ڠՉ8ۧnVO'x.ǫs~z~Γ[T'} e^gH̃_. StXn1Α\Sm坠!x?Œm-W\ ~4NL`0$^.A )@⑇d`\Z]I:V.Y 6}-t*[k1%0^> ~K1>tЮLm`%OEM[#3*5)lu-h__}ᓸ( &w\;kG%xJ';IoZ땤BRax ]X[ VY#xSY07n܈; OqcJff1\? Z;OJL"5ZnE+Z D̰j)nLvTAǎ6)}]6F# *kFXoҘ٧>kMB/f~TnP6U ,ܤ8 asLŽixzN{_1&{lDV94iIeOc꼕mVkGE4[ŒMmE *!Ӌ&1t VFXbhUkČbh^+W&o@X00謓1 rp򿷢lQ! /p@}%H ϲd7f>jx |FB?5!Ƥ,+2ۂaju=V EAbdV Ģ!(@pS(R %o9wUV=Ui/ޟy1`mJϼJ' muj&.5P)_ gq44Su[K,JE Kk ZHEEGkf<& giAB`7~{RoMj1dIuoa7x'"Uڶ=X, ؇*b6Cu8KK2 T*ܰX_?IعVɽ.@l{@q@W fv$uu"4  C ay& &#A@S֦`inрrkb 4PN60R㙙`IRi|qdgO*JC~K-Y2O(a 9]`>m;ZҚK  kTMM=ܾY@m"7w;^m_:^v@UT`@VQ%sIx6$?IPSH򪗙 lƖQ |M|U%4"N|^hr$06xp@s<iע)*P9@q2ewԔI7 w[[Mzͅ[wޔqzu::N+L?vhւ o 858a;0Dr<95ŌɹRLUݒv"ا3cvVe1`lbKٛ>a$UCg?ԍٶ5?9~\!^^ѯq]K鿅0U( Hcpn̕Zkd'c/5bC0+I@1ExS7%/6.XY4Rl,r @(@PIOH)(M>:~z=ܙ jAG`"X?J3.uv/4}f,hof9O6{<Fq29(ޙk!/D]HS$WL?DwA!% OlF˵NX7 kٓ&Hkez1)ϫHH .8:VӆbՄwj ,Ӌ0/MY"s0 f&P΂$DKo[). W~om*y D/ BN=g1{zĄTT,6:ƞ i͙]JJZVZ ASvb~#gJL0c|, Q 푭q8׮ O !{ z_ Vj]DioP"(D%'ކ5Zc(ZmA}򞈤Y!ފfwG? ! T<1Hq@FQ:s3 n> (e;񺨜"X* VM h@8x(C16j؟ױ~^빿^;Hu.! 5{=B-::j3 ;~/a(;L%W(My\J>,\N_x}=9yf1xZ"9tQ(Ͼ9gMxۡ 8; k׹\b-.N1i|:=+!LMQމ _&}~7113X9q-nf~+ƪ_բТe `ݑySg]1;QJZQiS6OolԯNTixZSbIzDDG#3=\ԝ p]z'!f*={ @SMnkXЄrJ*MSd7&|،,dng;ǯo8vlRIռQӤlN"S:gϞ[)ܶ ͆{3 B;T* T4`DqZem@1oMdg. (io)wVNo &G%t> XR EaQQ O,PZJ U+n" -hFDS8Mz5D5Nt& hͪ[Lw Ptyi{(JBjBդ8C^'d7Ió%XoK{6\LU=EV˽VC pS, E<v1 '_z=W{}qBcRAD%ZL>@DBdg}m aE?NonHY4%DCx H>IYC3 F /-xd_\gM&p*!qgHeT] ˴bGuR ε]̚8F<[:[Pd,tx& &~(~"6#f X+I ۅdk{>@ bћzBͅYB'g HĬ$? d*to pME J_"[ɷ(E3n̼qcδN,\$/+69rȀ ɠ*7 ЬʈL(rS" R]$c@㝀UfhT Nn[3@G =r`>V[4em# 'q.6U_1 Y43Wy_F8<%tdB+k{9˥ ʆ{cLUAGUUK!"%AMW4( B4uop06A-JGT؀ZEO~|`%j^2WI:J/`fzL+H},5F Gx .w<7Go6}]f~6C_KatIh3`$6+NѓU 9y|j4 )ёHh0#}V>NSGf:x-Rʥ?E#D\p+',<<ޱ3$ )w g*< H׻u}1:Zg5Xl" Ftވk+:0;GY#`OmLm@Pe]2RZ>j\khuŴ'(vKuD#*٦Ez bNЉ*RXpIfX@#A}CoOwZ k ض!9RPX_َ8cv>1dqy ŇmfhscjMR? ʛƣҽ1L-]*5}!?rCA6L3{f|K#6#Cu+ ('g<"R1I E 0g_=5o}p NZ)#Yا89ӇCe7 *v-SX_nkx}y~?J/sr!Rck'7vL+N+&LhlxKPF "L48Sp'%C=Z[|[&S&Ք 4LPن5BN_C ("a)&~-"E1MM%NVbZW7 *u6*:ȭX RC"X RFȀgy9S8VTB"-[p_pǰNdP:Pa4iB|%#84,GQ-*LX 2E-VhE*}[*b<7yFu{0y18Gx ʼ Htw%#aMhDeળBRgBZdWٔ cs]׋PqbAJv"T*PQ*Դ4AjQc46ʲgt] @)ۮ)W_yĈt8y|>s~qy|k?zs``꺮JC֘މnD X2'H)7'P0͢zo,oZnSq/Z4ĔDof*RD$:V{پuMm,6j/w1(swZPVK`,!'Tι6$;-_1.aҽ,b':3zeԵIuJ`l+%oWȤi=:wbͅ$V| ǥ IDATrL/3}ԼCZ4)9@lF?<ɂ[3˭6̜fՍv^Pr:NY?5oh@ pZS0ϬAC\a+SVO;{E`̑="v ,ZS@ķz:RJJk֠NIO2ҎWq|3? @c oB&cA.@MadQ蜂dͻ٧) TQ0Ea"48Ye(/-{T^ MƼjۧ! _ҏ ## S>/hx1G9`-J'Eӳj6ETҺdHBHB""HXZk<Ӄy5.jOM6/d):1)G&U)b|h"|kFlkD'N1U^_u˫+a%C0CktBo!n'G=^W,l|޳K'dkxIIՀ8V&\rKm^۱5HJd'D9G ɀP$9K + P*E֕#V/W#%RqAY 4&=UrԙʀJ?Ũ!r2a'}F5 `betI:sV מ6ygjiyŶBN0g{e:BzF{ M!4C_(*O/麦CYK@2Le"I3Y|^FTI@QX/k|~?}_s3r2" u e^ =@Uw=>1ȳɩ%t[q15h89dzCtར j fO.*YRXLXf.dR4Xie~Vي()XkWpKjl| E_mVs& ΤWVQ:fv/QtN!7;M\)r)EXbYf`@._zl$M?яO?>^ wwrG^.~ -@G*[xߍȺ!"iBL*l̀؆ RuS'0 +8kԜU9_&`ʘn#]MߝB,Ja9^`0; V N̘"%*HU`:r$Yҙ]/K+״6 RmƮg>"t=63Ws0@.ph FdE-|.J3o[pƐAz~"zkzoޱu4(5$E{Ep+hfPXb)* EzS%lglb,=9DVAmNSK`#Ig0tj`Lb) 5m Zl_2Sl1Dzdj.M#,{Ytz@IO@942pqM) PSsm#Tg[FƑaX}W>rxъbG!~u~ueaCmM`Ck?>ϐr_@43q7ڣ@&zm =Kxe ~֯s5Xxh ?X7v|vo)RY2cG3^6xVЧvĂvչwS3 p:wʞhbw+h !oPϧVgeyº,e$+G` e&Z* -HPȰc(\!It쁰A <>@p5w3 y tϭ7U:{[lK&Cd ʃ? ?7E%-GWIMTDź!m@c&,MJ4Wnk3Gx>d>kD,P߬X9|n@:V϶Eट\_$/0,9I]ꮖLrGpʳ!ldzJ`]v7LU_9o\ L XUMY-1%JA׀lVٓc{=(s&XNDXԝrK,95 z8YVŠZx(Sk"SLO 0ѓJGTe.=-(ñrhuq5F7[_sW15,X9ǖF K10nmfC">݆w9ޟ~g9}Bjpo0AĒ9SApߪM¼JaffD4T@Mb%?M73As'yG% t·8s/OByh-NFi  #) rRZV`!˓cHZ4EpVRФa7q#|޽kɓ 2"Y= /j\͡QٳԶ6K8-ytK/r3Dr̘cX6&H0JҠNJ>}i3U׺ܛaws(Dun>Q cG^ }0dnK :q޴6LR"\ZRxzJ֜sf]Q~qw #(u ݈ahhD틣z=<ؾhw4.0!*x~1+xBԭ R//h][7*33k8OaqGWڞM(@ i @ndJ) EhEe'G?F(_ w&%z@ 0 %R@8AK)V(|tNj?LNX6V许"(yuY_Ba! '@aDҥ3H; qqψy-I ¨Op)gmoXgKyۜfVKv\CX.f ߶C*,asBM>Û';{-N[i^5 L:(#qjγaQ:!?ðSOXJgtQvcHp"^k5)͚H23 4NMꕵ).bP},3#ɛjK+}YjtDLbi]1a8b1]we)@XYiʠeqS  ) pZ:*ϝZ-xځj,mk`&nʵqnr9Nfs ]y;F/} P*,XFkq~g("{M jo3TU ITbmܖVZB ]g8:M '3+dLg%4vG"܎zB( "3*()w81sL2=63*2 PhPխ HX E ̼Exbc'㔓 =SVQoA[9۴2踮Z'0$M u$7֞%bDRa!fEsD0B5zl)Vb7#XQtPDET),QPv<1<^il4kN0l4JuŒb=k “u%I.%2YR} igM;IǔAd5 9%43HE94D,CuePh P%3e5R4@,0D2âSw]tQC@3JaYfZ$#:װNv-gc#\Ss⾖OlZ%Eo;)|aW;gJXIgV\)qc~$p9EsE5LV/DκK,OC;=c(p()YPMּV\;}S O NjG8'g$%vx(`:Q&G!LvViL*neNavqc^ck0DǑRih9]!ƭFEK M~y2z mS X U IDATKNصx( ͻgZQ IaŒIku)~ji7 >&w >$|yv)~Xܔ7Eò /*-zDM"DB"2wt8:Je]ZY((7uk}Jk݅qf'1E+ [\}q8keFe44*I)Lh7 1:#F ߩ:x!NNl9R )8?z?L!'e@$Fb dQfu6j a\8&l:L9; ydIʹ] _4EC$12z/ԎXR SnSd2+5W@r4+lc43%NzcWQSlkN,f,JSjy!6dᫍP-.!u/D 8u1D/ P')D$)9\sCOU%#+2)]a)h LZxRjJ ĴXE]p-LCovp1{-|L^:Ifb>T p(c\u~O@9P:O7X:6f.~%=Ue>yY2nq:Ec 4_?8g"(#X$Qu:&^9] +̃/pEsZa9YAU*\@;iCҿ! 0ƥ\ W7:b8A#0%P!%҆P P c,%#6sѮM+2IWX\װNeP|/0&߿8,2Vg)94vMbB{&A ܨ:A}t$>\h!2lOѦ",R[9߉+2TUÆ1̿:RT̓PT-̧wЛ&N7j[!~x9G8# \y[.XY(m-Lj)4/\|b;âB=ţ-,H"w!Dj2&MMeCRʾ f[1[n =lj Hmufx@;hLu y>h=uCFKV>"z?iuQw@C! an&V!]P ˲[@clɠO]]r!|j@4A3 15i[/)5Kfܣaj5/9C<~6aJhJ~z.@, zRf 81`ͺ2Jh&|PnQ<`@GI q<-p&֔}?yO,oVނȵ_^4=_\$C 2F%4!H_k_蛧ku^괩 B׏_zc5!ذj| )^IQQ9L?ZB-2RȮ֯y:&&&$^9k/b g׏Y<1 ]_M!Du$ϰLo&@|?ZT?I{V4Q!MQ "`l0j;ďrj}RS5zu ͣ J[/My+JKdI5̜a$Dv֮{q˺5&HJ~_zn,{Q)!@^<(I4F\ikn4uɢ МߺfȮz Uf~¿`t}8WĨub~㯗(&A %mԑ[Ӌȗmsx d,1[gX ՂBlAU_DS6cR sM<"jSDCnomaK2|<bo):J@ :ŮJ6-s΀Y^5<8Td428%ߴxqmN`GeP,0PRH^uo:a6LW@"<MLmYdX V"zcJNAc:Ө56Ca/j61n` ``ZwZHj{`0Cot*!Vj D#4FeE3p eTvӥk,6ynve%AHph3RL&S-VE.ܷ)X: D""!FҚ4ꗈ"҄y7jƴiI꺢7O뗰Po`6~vKkhTey8hu{]OPw > r0ZAhGLr< 2`]q<K rsGY_2-r jğT_T@e1C oY133ABDJ-"!ኩoyt^]if9w8t&Σ Eb`\.{HSW·|e_h 1=TF."u讅փz W#k$iɨՁ9 +|-O5 8ϋoDI~P/Bt./Iqj' IHD+4]+8S@mH!wm `_+c`K֔N8 U} ̶ Cf/PahSN [q&#xJzFf=Vjj(y߈~+ԕÉk6 {97N3DdW%.d&hEb&@n6\(ZCo8y|p%ംn]cmngc-7 6ZMIzDD:s?5.>N b#%pYLijږ2οT["x0S3^er6+4%=8 "c> Y2#aW\yPW#(jOU.ơ,!ۊeuA_{a sO} (WP>>/&F e6'F1w>ob$$%A\|ALR"(zj;Y@9z_4&bH.>y߲fRhs[=^O0K]ѻQkLLD֔]B)a }92U8kqj)EzJjl3q܉ymWf{#uqti,8D$qO<( l-D(afnbAg"ks?–qxʱd 07F[>Jō%.>r/ Pl>A,bx r\΢js?If. [0s]Yd'(,NOI^:b"t*R¾4Xl_Y8=3).Kxb# Nm Giq !^!SvYiEAs$EDkPdQZ"rLMӧdhW$"5Tt8YmAk;{om@PCF&M{ɗZ#cus-뼮6u^ k dhƸygpr4 ,̂ W?:VF_:s|~^?ǜJiːf?f@Pְ5ՉڱKmn8^<" $RB $uUA<ݒSţcZ ?i|'`HHԔ@!+1@d$sX,v kF|gH5s*?z*71DP@cjo x@ra%72zWRB4F@OIߛ;C۟ uE@~w?=_vPB2|G|C@hQS N 3~l]r\ }MW d}BɻVbYb6+AÌ3z)TRGcRvDD^~mDڒ-^C:l2M%k0q.مm03۽idJQfDzLqxMfMLi р{Fck IDATfk69I ֍=f3 JacZ⣓6ޟNT-6:O/|§^t}նnZy]+~{pe,"<Cלۻ @9Gk04.ܞ]Y(jrAe)YD8600"k܌yFDl"x;XȺo.JfU<ݚF.Je?)*紗鹴6aqֿ@v1hi2Ά+X{5J7ɷyoo 4K XD'%y ٬˥M봕{EPWm ((~?SIQ½|hR)j0*8 '5QYd%U8l[Z 8t \ M3._Vl7qN#D"s ?z_$xe]aXDTlHp+3p^q`ڎgJA ]GD4b 17s?y~ V2`ZJf +g%}Fs㽞3F5ZM{ 7K%Ęe@$N}k8ޚ Wj[zXS![z<"BrO3LJ %0K@lPX2jC)79Gcr >q>Ǹ_.>SkYC4#@CnXgf 7FX-(7wE~Vo/KV,aCfAh !=}\ -G{k.7NJ|Vn]Gně0A^*2@r!n[kWͺF o:boNQWyw"܋qsjG5$&)`$HECrBJ^bD&5t-y%]"Ul;̋0Ɗ!WM;~x"@wd-J@I ZUsn-@m5Țt"in50GEr T'J⋃_}O;m*mW@RglE]\Ó"_ZBD}ޫW }ZXXcVaQQ۹-ٹ>5-\,*90^Ȼg3FvIz Q9ym0#G[#PF"/TI2`X {tZ//1V0ʃ#x<05 V`фZ:6!j>&DM ,eu D9<ߟ38͋*B.X6ڸY{ѳ O^l7FQep(L1y=LZ;^,^}]>\CVO6-U0qu ̜REQT] :_AQ De4?Z?@^* PL`|FBk)}VߤJp3cb]_p}8?懔gۜ'X? Ds_,] /`oض 4+vɕMJM~+}0MV3Vo. Ԯgb!n%؇;+ 45(zg: Wڦ>YH# KBX]Y*X@@ͯoQ\ِYZJ^Fk%(&0nĦ82&Yz1u4Y)x]/#kNs:4;WAc?SbNaWj15N7 8dTW|DB+S-ʩUYjɃrݯK_hO)w ]. ]fzWaF,LnABUQE .#jDҺMX\$ }^?Zd,] *A_ܖ;[@mEo]m*|aYv,wxK ,5@@[liN30ayj@ 5=?|c-Š#0*Į(]+Hz ޽Dx&+ymOLJ"aR#݇E8/"p#7OUgo'znI*4̻%1Vz4^56XS+]f9fiGr@=|b/ᷔYFYYˠA#!y QRM9̏_@ѥ5Zߙ1F^卽_ZiG%n X^=+"??70viΗTs.>Owj"e`~xZ7\XRL!+_m] ND),BV-S,Rr 3Ixؖk.rs2Qݨ!Z!P~7w2ځ )$.l -z7^r=qg"F2|lx,J;t"(˙ˌJMPд5$ULMI~y?>*'z\-טR{Fx? +T]Q/ D0AhH8_Q, !g5xaoV9N9tp3 uBD!T㵹ce KYfw*.64v*Ә+v CE|At '._jQKk9}HϫDOHМ^_%I_>r69{[O{Pߧd[ژc{d-$rzݸZy۱ UwfԽ{LFSGۃKTnajܲ,]e8f?$h&`=Hb+7,u^|eH#La'QB:_EO9&ۚ-~ExiOv ?#+-e|8XKUW|S.,  ]<6 7byTu屠eL\E_oo2n'Yɶ+FQ?ΖRNa!~V;Ef l ;ATD#$7Hc!fb"f:a4f=b+H]G+BFGے)>F`>*LyI[0ۈgeY5e23&OVLmj\ kr~BW z ]Y͇HHԮ+%;B V(xh -3ÛƜ԰cz6\ >3s9V:y,C"Š Z(afDSfno{Nv9TZGΛNxzDQO^lrX2տ7;Q2;EZ"ţl}ܶ_?pϭH Qѹb!'\d T$TsSmE7j!sR ;yGUXB R-l Dnի> K{Raa%uҞzw}aS94<Jo&{폷#n8gޏ͇(" )!"flƮ*⛄oXtM=b xEDONp/cs%@:,"0 0{)q͋WS<˽ϐEs;J\*pp+O@M_Mb.=9/}Bmd]^ƣMDZnj&hO(g,,z1z-㥼vVEp6lt@I}6 ]<36!hMZ u W3cWrFy3$a`QaAAc<ϧ՛/p6AL0Ih@u>bL+gOё^ cebzd$.jneC=uj`6kf G|Oig8AhX|.:=`OJm?[@y/q_[w:F;AOvp_?RC%6 f4f/1 rSX0" H1uRd@%B3Y?9 X}́+V*)3C > ˳t&]Lҙ$\ E}efFvR@?320iIbOߧ|[ ~T,L(v Yo9M/E&L# pPćm$+tӡtTD!X;tjPBjҎ9gB`ohw˜uEU;Mru ,⤖`] ԾS/8zK8+h؊2Oj}KWKمU=4>,i|h3eW@IoTll ꮴNU%l>N2xJIV$=17-Lo*uU4 Qhɂs$/I+)m+i(jx)v>,BDi:慲,b9 r"M eؿyc[cY` [l¶ FD`6Kkmh{*RRtNڍUi1/+Nvo'wV,!/ dZ 3VY1^jsqX7!]&sy-_wq[3_ՕfV. (xaxLıX2M]I o*4n,'/{NF&%83)$F.BLNAfU%>e޵\J)=DEBzv &dfښU%Ʋ+qevZkʀ5ݶHy@l.PU;^}D] SF313gFi-4bԛܟ]{nL=qKVw1iW%"piGk쇉p:Zu=~y?bCm\Fl-0d$p{M#|T"\jRՀօ1^j3h"=v_v#e(yV 53Fvu::u*qNA @(h^TKyJ 9v ſV.)*Szv Tt̘X 2΢^ [̶D3a;7%r<[EaZ||j*Jo08r)°w@$ZKs"[+x S P?Lu^n<;)j,گ@$3V~D]3C{ \-VJP8u7s"Sy]HKȌ `a>j,920xcaת>pQjeĂLԣPbu!SF ؈mbQZkQ+ѤTs@V<(V׾Y\2NWIlwsc36[pq_N6n#KUu}gp'Rtb'В.|-0WM03.;{I(,J{vpIj=ߘ.@EDP p9vj`$hfS0ۄI'HFd||j2QiBL2v_s}^)|~l.Ϻ =Bn`,< ǎ^1ƈg aκӾ](;s?@.arCh;7+\kP:` 7[Ȓ4R,?}?B"Q/&(d޳` n|*D]LmBX=AAہ>Ym|z &p5 \ۊ~[ؖHt|YӛX%uN[5Y-2 _#[šRx-/'̢s` dzLi'tFvH*-ӄf!$a21瀠?H@5Ods\t-e. /q={rػHW޴kjy+o?+fږ&,9i4HZRִט+w{b 3!DLFw7!Ȝ^)y"Լ~ بrDR(6DT73`s:!Ad<ћ=_1/)֦hgUԿ!j N9%0P%o~j#Z Ӭ$?@zc08ܦixcl#Pxl+Akpѣ@\O\1ںx~'IpMLLL 5 2@ስ}O/2xsatݯ~ǣsMEfXI1#Vs*,]E#]Wt甊+'7*]E{WΝUuٷZ.5"YuW40dy3_0 @88rgNtTPFDkNo&2 _K~p@;(¿v#^/q$Ee1 6 [* 4ԨբV³ \zVQZWxw$5?MuShju@abS#:~&?P4B1#tDekbADAyL)f;M*ZdÕ L"HbL ibƴs7e1:Ƴ#c=l =7fbLjԽ]C.4OE:{ktHVfk4{34 hk:Lҙu8c,*~ X@\DB`y?6(\8%o/.1|4up444g;8iĊlhTSU07f>-)vFyO0࠴wQ!+'0⦟ %# ːc( H]U1 mשmZmz q@s-ǥ,jedy=u9ސf9>Dfjmp1jLXXTu.jzq2s^ G\I4Ox\n>munLgqՈ$6BsYTUNʦJv0% ۩zt{i(S߰ 3dΗ`1E=@/#jO&,nG+=cK9~RbDUee 6 F3r}86JbݟՀH! 8#SD`-onp?fs?HcXLeL[r&l-WX/:TJ *.iC(bG;h&玖q9}3}3|{\ލQ{~3]-Q#O)U&Pd_W ]GYCh^[FU0$CFeIw "GL>9y<1+5S1>O*_32t.,Rڜ͡8 R:esO9k017[O-E" r!;fIK%VZUbXo;c/HO'bJbT69JI߉AY(q)҄dFv6V DvQLVRH 77! :?T<6&;YnG& F蹳է* k,"C%0msϫ=wB q㨳u<cfͫ]-U\Tŏ֚53-(EYX{aJ*j4-No M9T6p|[y4LԔ\V޳TԲfj<JNdm@_IL[7|+pR~l)p$X$TٷH03_j&c=]SáD MbqQAOWUFmܾ'W%:mT۳IMe,ƦwϯV`<Ո G7ߧ}6Ңpj!!%Ё4z s8bӒ5 fiE&Rehy&gHix[}ߺ#slӡoUhIF&uuDhεr C0rBYkfkН,:c5y5דCuA6H<=㾙l^0f{ٺ{9ܞ9icIfP\,nbH=(Qk.dgW?zz3޸G*͟F܌1U5Sý⛿&#t_9[. i)˥O9iK;Ғz9{J0*a%W>b[ƼUFTF,v}!3˽2,4ig\ddِ,QFhaˁcKLF_ukaA"9!v hAB ]1cktz{EsVz51a$bԨxY3FJT ,d d=$WX].5mjĤe0 fKgtfʾP_4*K;h6$֪OuM;?CDܚ4q۲O<~?s|O a&sy3B;k|EdIIYu_ZɖNP~!fi E?C׏G~^$/|Q UsDA!5Y.a;t-8LLZyUW ߳I6ɶ/%Ło@UL&'8]3wy_{dPXLP;&-~w^ $щ]_L"9(L(*!BKi%"NGrIb:qd4/!#* I3o/ 3J[dxāBe4kF-j&>-^EWF0 (vt ŵ.Sm2iҬqx\@gN}B3YRdmҢ±t\skU;+FyfB=lz_iwT8(ars|ݵ4z/3:>>1:@xZ/m0ڒBܷ3ٰ\穜Wտ6:l!WQ"tL:f%QTfI!b%7NyyleUQ8zx/XPU,B!(3kͬl'3mq`~pceGpE0M(@5aI<i[=6=?x?s>s~hֳ&jN2!Y, E!*Nrrgָe/jn no?χ~]uy=nm5w,'~eŠ}L/'aoJ'07\͹rlzd,K1!Wi ;;S Ҵ6)9~7W [hˡ3gmՁ!lߦj !U` GVʤMMsۣCE<^tQފX2:t?A&1$M<ӣ0b|.>GkWiN`8x<䳜ݢ`ث~Z's.rފ:Yof⻥IҐ=*;ReGA|v>% vqmKz&J`2Mq5<>̞c*YQC+] bp\\+%C:7ak2ʵ@HgԣEھAt4ޭo G`TN-q%a`q u]?sO>  wܟC{1'p%v`3揄5lh2 xMuL ՚d$93T}>z.E+M#ZYY5k5woD.&|@c1$l pJW]_fUN: fK«G: ->8R(k?LK _̈́U4cV!WyH}0 fE|aqb tOlfF6LVFl"Rqa4Xk4,i*oUr_HKeY.Y/ 9Z{{^o^*!(}T_]'OfR;/pơ:Z+ۀ(Pԛ@̼V@-/uixj)MT%1K\_Po V8> :"\ m[bn}JT ˗"o [0DDD#`x1Sq̻aCKxRm0xVϊn80}]af1ܒ $= w9w ~33i:Ҿ2TEg=kmkY ͷQϴֵue]jgμ 篋2}&Wj e2=yL|j{D>F{$6,BM5iS` t Qb,>?U' {R …0b5\?<(q6V,6c@G r.*|<@U'v($xj0AI:2#5Z\o/+j3IYd6]BfTMivMq=@֜ff$6aElqTA*z7 %v- Kfh+5*yi-aq}OSAu{6(C"Ӆ{WK#YL^j} ^ e.@CqkO,*QL4.]3@Dury qAj,Ya-g&,Ut}LNr+yzi^ݪc;Q|bvjm KPg!?{Sٕ )ב2Κ[VI'tZT箛( L͠"$Ddlu]fWkfui͑@*ǽF]a:8/T k,A0#ȣk;2#L//pE @|;.u4N; xsr@>O7/bvvgHx}~\~+%|(BP!t a@v fTu3ȯrh;$z3YDDմ4fjL&̭5S%+bN̔Za@siag@hE@e/?P癤сyUc^u𠅾"L{@@KQS.2YNB>?4fɦط}cbF>2O w?HELJSqj_|^?vu!G$"&8u?"2RQ{_ c(.`$F4o캮ҸE(<Pj/ hx]mUD@i { i 9펋  |< .X9[{Yd!=UP0ke5(OYZP| oLMWv/B2țHo"NRj1$΃?~_Yi8I珛EHz扗=ONB ^T/[8Lp(u_AL]Tk@B RYs0R^ .þ`zbpoXE##>ಿmap? rQ j>L fUVeU)s4xrX&;̸L$gP18ݿy/ItҗW+>!0Y 0 %`3ÊT$ Xs<}j\¯؍&e SkD&$D3p t-gyۚ8iҚP[w/iwCb>]*UU9(ٵpxڮ< _˨P֨,K˴qN#fހVXJ Zaa [7,+aF\s=']aZYhg'pbcrT'ٖLB:ghN3%Wg#KlJ"$2n0w.GD<[]+R65%U1* 3t6Fl 䊎eKPAC“2]B :3`8:f;h-ą|v)1.W@ּy4ύfnj. \Ѐtj"$%v5B:f;3cgBù{ϿϿϟ?߯դ5vU98P1_14/"*CU/[ ӱ?[U!`Ggc^uafH\RP@-wF^ LԜS~)L,qn~5-X|d.'$&_Ɛ)6eUVg鴄'庅*aҩ>*$r`hHAҜ Q/?B>ĭQmjE;1dcY״[ќ'w?-#Cdٕ; p*iw e>FunYX8l w]Ov]-x͹ytDa mMZLpg /;;Z'Һ6QElɓDkXyN6 gS5~Q90#eq|]??̻4hkzr^WuVOY+= A8`bL *b@S}i/8\YHAuοjU4bGKB:+oh6]4VЮq<:(+1xrlXO0@ E]sHVt>urQ3׸jL^Lȝ#Mk| gN]0(A|=EF$6@J\_\#SɲJOǕ~zAi:l,a$;'Z1 V+-Ε-GsB=QJ %GED?]EF#ýRkç9 ߊE*G̔ Ab-E /żBxW,Ȁ,9˦%N=Eҗ"k {?,BmtW^zLHy,vTL <]S@1'0?Q^7zʏF ;c?{#ރ3!lӄ61fe1"lEs1rklՉZ =PJN0yY 㔔OYPPG>0gAX!xʨ; ^k?F4i'm]Ε['@bsދ+lԁM%{a~]~z_ 3s֋};ϟ?Ͽ?뺚=nԔ]?PW5ͺ w{,}@0ЯBI}%@P?̙O@؊gv5E~&Ə7 =x33[Ѷh3΅N=L9"@O|.3v%| KS EWf .Z6ڂap@k-z1&̫,vD:NA=Wg upຬb'-tK#% O5 Й Zkmha!DG8ܛ*JTZ3,jPatk齋vc)//MTC9*5C.j<@2:CtXv.✵-3 R l]K M,J,0g᙮Fv v%[H lk$õ{H$,fa@XEX, `|'sp<4A4Tj:DrNb3( c$Q0csd:&0o"@b?F#po.ґY4jZ2  - 5u@L@lK(dnYUs`1X\= j+ju7SdN2!Lir#nFj0ɼ>тRv!-ch4 =`H:H4Zș`[:3͛|EC79:vpUL;a/ ""H $`ZTY)jNy(Ȣqf%ҵy?X-K&fI֚X,Ȳ6hV,'!+ O-{DxF/ V0p,DmV="*]hh 9:vȍf[*"sh.bZ\ɱrAm!dھb,Q*qujl>NdN\ m 5āo*$>=M'`lj_ra^AMgxHȬ .Vm[3kً3cqlR+K]S7a[@-ap`}r!%#3Rv 4] Q" IՑ+u#m*br!\3@bfv] z9<;,C|3 My1Ɏ8ԡ#{ &}Dy0:CVF[]%n]'ys @pF?ZKj!_@G31'wU޻>Q|3||],bDjv]&YD 5zQ&*NqV9^C%bOƃ MReKLCV|« ў:/E(c0g:xM[jǴg' ߗè~W;j!f%: $fMϛF٦jŽk>ꊶ G;d|y?jV 'C{JߛI=P+JB~G  `i3NjW ;ǸU6 )MigR K!ݖDҴ-  ؅ݾ$f*"Sk5.f@Tz]fD T]zoܡW01"39i59J}+L̦j,XmIs{]*+י8VHsڶĊ7Ht{?>TPˤօYy๯ 6/t@Kr/]ƒa?05T5L~(n` } xgY7F %|)ɫd<6WWzkv?ύ2*ӈ|GZ#bU{~^q6v4C0׬Uy-:iK)P J%Xsd9B 8 ¹Jo`ZUA;NngM0[ؘ\w)ѱ8yhc).<:2Y! NEe C5fl7 v"EP-Fn)TC0:zytڄͫ8G^K&aW`d@mҺ&yb8#sڌlC[V fKP61J-U#bU!Vs@ZSƷ/"s!ic>,&қHowyz..=$2dfgȁOK.6ʾnpW  A ;0KA3&}#T Ʈk/_\MѲ?0lպm[mt-طŒY˗fv(ZSAΝ7|~pZ~(xږ-qAi{e~sazmq.WIK)#(HDRK4ޫ[7I>o` NwJD 5q+Ug 7&&G.A5JfbR^2Ɗw:^Cک/I, UAu|?~ qTZҐ*ncA!Q0i@!yG>!f5{~gJ\FpaV:ޯ'ZDH`P?@1ֿ<.ZR\ĉi,/'xe4>4YGCH૷NٰV1go˺I`K, |JEq5Zh/WEI2 1$йg-BA&‘)&^G3p)1?ȫbwMXfX/I˫l~qd!`+:W<"x،"m'{pb\^*@t#ԕȔr-aMjXkFn] LPy KrQƨ\oe"2h`ùl6.xj΂i'<ɅvPV48R=n9_Hr \}#VΣ#'- VFv)OX:uWJSVv.:5{, ']*1ĕɎ&֑f Y s؇pMck28J6Wf6AaH>v;$YB>P`9+) -y@/Է1x[eˏ>A1b ϫ0n f$Hy[ Cۀ~uR%lwǻJܝt;|ofӄ))kZ-1?|)lDe$s'ƼI\hXlȶDsO_'#IY\~P(a^IwEM-&ْu_qqp7\wÄ<;+@P#? zQUz lPuY"`穧f'_ \S4|KJfCMO, 52r-jU\ز·XJrJf +Ls!F*Jcf* Th}`=@-r5j!5"5Re[_8$#lXTo1ƀ AYN }\4@#H#120#> 2K Rs"nLYO?%)<''VGN٧wm^!Bk:/+ ʹ2;GfQv>"adX > .־)[\xd yYM Fm tmm@WFW MPg YMe5$$ép=Pp od< B TѴ;Bx v9xѭQw IXPb OU|ֺ?źm{<|f{3v-t%g3+΀me0^9xVZ$0I:fN}[m&Uv_gXs✜vI40N+KEHPd\u;Vf.u6||@\\)]QAЂ-qpIOckLhg9/f)_K!bZݥ@SRd%\ƙ): fjDUT]0ۀt5 2 $ 3yhLH_[cN#NYT%'VC a޼)3xXY&ZgĤ=6 e:( ^N;y|6na mK9+#BTg&%zE&:4[ %\[0Sm.XWc-2T/f耖m\!W!Z#|aoY(I IDATlIe:a:ьWLijT$* eH'S[4Z{4WoGqDI1/;o RvCoOd, :I@|X~ÉIP^[j7p J~d/"{A@6ammC~[?:Hg0s?C}>H>ܞ]???ͭ(3ToÙI?⹼laX$GN1GtP1s%l*ֵ>p˵k,m3h AƊz=H2U(J;PP`[YpNe'قV+e._?^v>X*mGa)Y V/\^n͖M]/>lMzd^ʣ8%5*2Pzܧkfs0cVmjBd24P̔F¤P35Ԥ@dnRXFjGyKmO+[ g0Ժ,ߜ&4γݗ 9.x̀*Y0rfyю-k|roa>YUx}oA@; aM :C=ʰCgt ,f!TɃp=f]&$BŒMy:zw0 4 3e3- -ˊ$=+*pW@!f&6V)aØ0@T.x2"ɳwzy͆'FP\@&.lFg@'=߷>o{n{<}\Ӟ.Oں>cCR̴'K6` jRKUTk?k4 č7q2HC!{Qe832)CZT|xY@Fh8xir)V*JsE R*6h}q+O= ! mRbpjܓjT;AloW*0nPQ!A6-onRYvGRKGΧ#YfdQky|5km4Lx3eS15iffgZjdu:ʋg|O6_إMԬ6PhsOm$k#;2( \0cmA*%}WQ|vּ31 e:r}ںKt9=3DűXl,Ҩ]-.#5w >?| ,?s|}??O~|*)yvXO}#ť 9 S-JI۲e)"m'gdpk5{:R\̍K'a+y*#s fxeZ z9=o"rTdFC.d% Jf# *'QjΓJX\1izxH B 80J/?O3.~hjlƁ!Wt>Bw>6RPufQ|r6Qkm,"vy4֣\bmTsH|xNwY-FM:nj Y!JB3Q̤lD2,S`~ _KؐhlxSSc Cܽ^/ڀy۩i ;_:->l-X>Ƨ]9M?D38?ϡNajL0xIց(I MHm,TBhf,1 Pla{) sQ]w%WĖUڂJpcJ/Q2 BWo8'I.if2*%x௼JCV@R(HFUUcY;>[Ά}b-\)…"ۛ^,46(|sw?3@ 7rG44CLԃ;{_^zi֚r},?QQ A^^*xeJpZ W,́7A6Cqs9`;L$Tx>i5Bqcv> 1/,IKQpbR[ ӖyA]UrۀmAP LL =DЦ/CPA+,F0t.n/C %״A'!3p @?ʾG ljO⵼^ǕgxVUV%R2Y]VT\'aV?OgBsd4x06ec"Bd]bꫀOq{WV+R3쀝w70ضpΝ2 \ZJE?pQuRC$⊠ܭxd֜=@uO 4jKm0j4@R*(!9PtBK"q[-Px5#0~|~s|~>???||&s4xOfyl:co%gHiMج 0_LFq Z: ,z !U#$tRd_3 p͛vߖd"! _}QkD/.K%&UYDX&!0[sh5Q`< nJ PQu<.f0'lqKq7 zC # iMuW{w!7K"h [L ֙g#_{Ji`9C l=f@ UUϟ玑 "f瞬d]Yv噊sڴ7@C^Gp3&Qj׀ڐ0hOtP'hhkTOb1ngRUW09n22q5< (f-xFt v S !B-G9a] hH(2 tX=a+וar^&R4+]o`B(? Edi]r5`@Ր Y-Doho3`^ ©2Sm|V])1咼6ό@D0zl20ѢZg30P]AiOzSDgKlZ+ѓT\UlU,MZs>nQI}otO`UP&領w(!Un‹&3 ]-;U _^BymՂ=p5?< CDJ>~ex9K,.w6x'`QRX<-8eC>;[*M[=?k8fpw '06WO#2_6Yaf c֮ 6A٦"HDDED5ҵjWeǡ$0kyN!,_A"WT9{ +ytjhp_pk I4Zd|^97puZmB ^?N (vw5&=VUW7m_ݜ넲UYT.;a9QaFD:`PD ˼H ) UD ovm)1 }W][710/s% d7C,:NS߂dgZZȜf6į Ͷ3Z6~aT*f Ds?qHObQdhص@Xfѹ4műBV6ʨz}4r翟g&>BR`l'>1ޣait苮"r/u^cB)+#վ'H.;[ ȢBF QyPq3K >.LoiR\3oPdEx2\"qԥl0.tŤGC{K\lW֎LZA/ }1Ѷ mvͻ^dKM?(kxr`4 6HܛBA ZOWFx9s7 Es a`` %'EI^Λn4@qKMօZ`{h䤊1wtYg➑3X:02Pۻ hԷu4037|81jT?a >6 {>a|:\<v]C!%砻(eT5G 剔ORs,hh.+#4? /EP 겕qatv,/C_[6;XS@;ѐpS[8DmqζA@Hpi!ey>xy tunXNxB>vInȖ(o>҄yCg/]Pr%m.\Yvˮɖ,WnMn5q&Sqh2aB.G]shk- FX{1Śt^oc ӹ&>u<^W.FhTv ^xi|u]X?2)s-i7c2UCp?؈5z?T#qЋ=] KKD؍=}?p }T?g܉lcWWr*~c5k$@a -Lk68Qf+bb"?_R08 "JOB""% gY@c lK/R3D L_61+V5*pq\0FX,|pW šwe2 Js57rczPv #/5RV6Bl,,f,bcUzi P,!06caxy_9aAh30{iQ1DTX)&[ѭ:K@E>ĻWK%(Nj?c&ǭk `LO?|ؖ ,%\ʌ`HyJXQ6{rWtٵm)}cat15!"oOUuծë/: 1"IR<0 (s  ym*)?KFDWٱ}'ie2n ٻ6rrkfp/ AO|R=SuDPz29绚x}\ 30"c1)*Yl)VuCɇdL i7eZ9H֑տ|UH;ǔz8uVb4Ɛ'$Y~}UavЯ5ׯ_~o@@3^2G<\*.Ցƒ+2Tv+B0+1rm!]njbj 6,6njXdhs8&E0Ud0kr/6Ai_ٗ+-&=ev).**$*voj~֬"FEhh<=v}3Y,d^kW_Jv_t!2~ @S}:q.칟}bf^Ҫ*\0T!:4^°e 6CtYf(++"0Z(/EuYЕLgJ$I"(H )?mepuW6/%𣈮|ڨnI}Mptz[iÔ+s!d2B/&9Y/YN{I Hg{, v-: =݇D[Zct4IٜS g5(8Swsqv#Wfcs7r,9eT|bf(W_1>cˀ+\uB8(XBUh }X7Ɛinlo̟7RE7C$†K ]jB#ucj&M2+x K~}h_`x3N]0{響忣 ?Nke.p+x=4+/&{'#$&X6=lW3OP5ZOk[G2Iļp)@f ztz+nm1H2WtZLE%w6CQcH)"E d#'Y%CFAj3zSWqenAV1:%,˺Ώ)2TT CǐL IDAT@i` +@UTDEEd#V*s&#sPB%\̎19h^eԃ\y9+:8X4 e ȕ;&7fO^Mt_;!f[tec0aÉ<ƍrb$b^ 'Dg{5sT'-j/忯"50?~h q30 iE&[|cNT wrZ8 ;i!Y 8r ^21SjԱL%)Uإ/5 8pp1;G9d% em;)=`AodR";/a}dv(8XBZ{Ι{8*E(k79+3ISd9Ƙc1tPU&S6 *S= `,5]['f چtER2ҼQ^r]*HD)- m˜6OKozPxÆ3LVko| OoُliK "i%9L*:qȔ3_'"G]>/My7(B$Ԙ4L; ]ZVy̩bS$sy~/[T0(q| -ieZ?В D96SMi``K+nXF` Kj)[$eoR}6ZŒ#˨Oq E팙ذK Ǻz/EFمgY䏀†UکK찾@b:nyܷkC DWf8LJtV|lr⛜(t"-af:MnL|dJoE' .ɞB#*"*Stk C0,dtU>NTe* dF_&;tv{&dlϑAم^-FetK ԅ([rhܱc\{§1 >^h:mx݊S>8v3VZ;4pK !1vaQ䡙 P$7+McXEkf 1;vٰ_=| K\$ѝjll@ac)*|Jh)=MW 9t9s>9~[>mae`oy.V&2 y|_{/C`Բր)E,_j!At2Yx`=ޝŴ7*k)<>9nFκ'^>#~@F%Fk.:{H*x EZnsB, #.v=1/A3QW_+7WnƢ['am}/#¯lNm\@ b 2eg L[]dYoTBr\o-A\.WxQP@;Zu7&Aj*,8Fܘ =oZK΀*{2x^f3154΅ODigrVE~(Uyoc 3ff$M,+xb$ O`:Ȼrn:8sSةbrpZ XCǢ09K!ΩI쌠2:hZca`dl IyqBi 1jbW*)ŭ*j\Rz dǘJ3Vw Ԙ4qf .|}^ޔX lV!]]75Spx^IL,67Y焀 O1S3U_'Ḱ3ԩE>Ք PtkZ$a}#J{mnӀ N>,Lt 2E2M\#t -H!;]Ȉ*̟Own\8t~W 15 BB9Co'NUdB ȏH Lב5h'A\]f~d bb7P"z6Zq,4!e#kbps$9)7ª,01cb4_cz0{x 1y ƀ"+3tSTE-Rg:KASg}'| 6gr}f*\ Y{ŻBfUctKOF7:h\ĺv-` ^1 &$F5Q?<9h'X|sG=_,̱Pˁ% 52NS3"B=I4Ql d愘ڿ/YP2I cÆ΅Gٕ)oǕdt1.ru_@Hq9 \AE;[l-r\D %~TD{XH~L=8Q5Vd_>(xx:'6HR#v%Eox?׵# 18 de,(P1ύ^O#Yʅm+ dܹN[jGUvVld1 Qnܚ k5nRg%c F`b"OՌv[8PHjz0 O6y,"c?: !!ԋrL/i d+ZK+"A1yI# }XaN0$Ss&B`lt f滲kU@ֆx ;=,\¦z6-RVJeXشteͿ]k4a"5#o]\FXEo}zd424EUX~_>vGimȹ߿3Ne>qYZQĊ)GCY -B7 Sg/L+A\ ]?[6REHDM% x w `Ysl>0}FeDS(q^7 " Dz~ʡjib)ȈU)BxDV f6_~ٱIbPZ{᷿.=~q{KD^8I&jYlUiVraoGրerH2=`I>Cx7S ̠( ?+*>jnsHrжƲ("Cƞ-" #W+C`|{\xn5R[x;"njvN6րD=}^PJ naPbd$[aRpUSCugg0G' ܷD[K_+{skd1DM0s2b #"CdzvC,7:DNNNEphFLYAU'$+TFbt\s [⏚Et*0UM"v\W\mᩌCUx"V )Xy@[w rzܫ4yM7 -F#\%Z@:cNW1{Rq 38hy59_ƚƒsmxiG$(ByM&-a9BD2hq;sf҈` T})0_!RI՟# Eٓ,ـ!BL:_?Ͽ(I~Mrm5r7 !DJ`᭸xKH-sa7D/\OvmOJlzYQWWqdںz X7 N6U))nI4v-brA> .o.? \[}~҅xXı.c3zd(gdJʆE.y*G/(4>Yqcx&ʭTw`Ikss5GCe$vHv/ !1ujPs;nK=F$j *jJ +CG@H~ :^8T! 3($åXеGY Yʒ#8M2pfܷwL̟J30uco:ihws0C*+h kzNFcb#"Cekt9yd920Tyr-gO&4W `UH4XF5Z ecˇqi@`tM6 Ok].w*K#.Nb 1נyɲu8pcK}UbCeuL?EzJ fqDRD.Õ5 K}cx;TG T4 !XĔ\U-|Ѡ.jB߄a:c]}_64ճ49%.,ƌ˥OwxE@ ]cUKAńFӁ lS_ U3#A04-KLƷh6Σ< 9OQ|I8ֳ7RlC )b:t[)BJMq,#p!8jNu`6U:LjjA'\46t#SD*:$UQl}AjDc5 &(`D;jer 'ƿBl]_AMF*N~m FPT!|]i9 9rXXj!a+t+_2:^O7O[WJ>Y%a 07qUKQ/|Aur!g:~fzcpaۦBFnSe XQ6p;Q1uBe2UZ>SUmïu'r@/QV]цÉI' 60dހ{8dB{U1pP56:ؓj@$w}/ ہ2 (e`CH$ LU?矿ª)[?%n_Sw@ $)9RΌ.|1ϼoHeO8eylO b X AmY`_YچCT{\.¤ޕK o*hHuGg4f9_2}c)ͽex׼u-&Ȱ!1!@  NoRwEk`(9 O RTa #\ M8?Kc<}īA5}NF%vH bݻi,>׭1+ ~`l6`ll4 b>RzT!H̠ =%=]$ܷɓ7o6-1-j2MIo^·=NMdiUU}Ԛ!ۓ%kۂ9ު;^XSɒ//hиǐx= GD?fW~N&f@K1{Xbb"R}eT4;@1Y#yo DA`2`+O 8*6S3z{A $:ޮzxH_-^y#@[pg)6XT2jy~8mg'^*3 #á~5zΗ7 !WV*p`T"!p>e_ylx |Mt.vP\ IDATՏdVcZ]ݫ3άT< o#F,#k!lɹsdۨ3v3i]gJlQp- Z \i6M5Сf!f'G8L:7tFt؀R7.T0%{#eA8"5 y9TFh<ȁ.f'Jʲm`=퇰I0Uխy 䨃6Pr+";tMS&B0'?e w3Dz,pZ rJ<@Zȟ .sdqG` hiʘE^D/#[ʰa1<`nȐY%j۴9f&]f=A ; yߗ';! >X~fEv[y+?.=$;lɺ۷12NCT]rE<e PYat9# mefڷMeC ҔHǚMD_LD,[x]G܊;͈ףQNR}g2JE-7PGq#r|1ts帏{qP goѝy_ pYڊ?`DS 7 U6NuYtDYj4A1^oCaD0q(@eڂ79͊`ӟNYs'8dc5 |1p%`LAM2ӋtJڱJ Eo18K/TMU|)YFwV}vb&xKi,B2$3U,L tW `~,Bƒw3n_C*3J̭GVZ]T*SQNPb(͙D7-.q/63200̀{3Ӳؾoy w'jsw3 6THx1d\Fj-*NPBb5ʉuT; epr(/dDTpǻȐ+rLJ }?rhs.mV-:gY勹{*5N +&JhS$3DV,`Mn P16 ѕBu+DSTr tA92&.[[oB75~{_K_7}3#{S 8I 5 f caJ:yE_z¼&0{ov[]hA<{>KlyBH tQ& Y.5ݎR)P[< ١Z>ZQU^[Й$Eϐ/7'28o6y nh)&r%p?Pc0-bF"đ\6ڹe+-A @l-j"j,j*"Su1-(DD²1t9sf5OA7yK I :20F?-$$ܮ1#k_R59M/bJdD_px"YE=5@Nq`),tGq J{]},͒!4g^{gJ8M-jCnT :!61}<\;|&(QYj.mzZ&ً} iX5/_DƀGxbSR*`A9IIfLtפQ*V}AyrISKv32Y81j1ϊm VBԷ70pS4Հʵ hnˮݒIOq _so uH $ƉU@,,$J"npUj.TMwO@'(${E[=;n0b=0|G)PIp-Z^~ h iꛐXnCvqcJ`"i6!s92(+:F  ,byo4`~F%K^IUJf ;kU@"n!Z ɠ\Tb#amzS_)UVguJt-G0+8Xr_ r4Рƪ 8wO=I ][@)b#sZs͒ *D;y^jͅ%[~&bFR9enド(15qmn퀾ҔX4Yk89F ?.zd Vгv :$,&BhXy҃N+q5EfxH1 yMO%4+.'Y WNrQʡ>`HS42y/}jSa˽e*A1QM\]L|YX +ҢvvQ bYqWzHm}TYX)"j$j*$GHXi핆kV}ݰhn$F\Qisb ~" t?U׊TݹXp4e)4#S.{=_|Mѡ2? (JONa2WQ[+ )2ukAyYLwW/ _1IL?Y~E-灶}XU'-hN`P]6`H.KW+rcj[Bj*>Z wOR"n>J+C)u7 xfr`{@PpN2TGOc)W.}^GW B"aDMρ#L-ŝ]WO6JBoAWvA4\NlhP?%Zgp@BFF$7A0:H|"umNӏI󳶁cNruIo‚^!N!EG\c;(+\! Fu][~5à @m]nzYJ] ~jC/gLyic"e_ 1×}7r!戡vq8幌N; D3_ePRQQVba-G{W]v/E=meW^Uq6x{e$WTHxMsZʸԯ7$Qp huW ^O*K4Сc3T8Q 9 CdN [{ׄ|Oxϝ^0Z1ayq dud&XÒ dO[j%qQH;hR0jP֮+F:* Ẏ>JrsTg[bCek{?>58s$zb*I/Gs"V+@@(?0p?duw{FӸɼ~:ٿDSAa}Itd{&h(LbCEǸsv[289/ExKH?Y`+bH4?`O dK A0zfg BdbD(CA0Li7e >:y! @_@m\+c1= cVnpC 'NE3g^4&ĔɌ'.q-+eo?|lnsOZfNl>嘩:}om1 VqוM;2`YU:u{)W<1U>S3;D/"~#Ov4ڃ9_ CMUS$dce"JksȜ#"~sx<#=)B¦L_`AZY>\|x&W] uD]`I]WEa gy~~L 4{r]ڿM gI% (] ygiDD CP'4K^P/>ο`Ef7j@1v Eu(g: ![è6麹U&.4&e1 4OzdWh|c_6$7f["#0δ kix};#"ʇ cw +D<'<~/ާL޲l$_G95%(@"! W9ulPFVL#1R4^ vLy~Q'CH)AOda"(LٜJ n(i?H{N=寀]^!\( W{ϻU?oOpz_*pJpl93'r+;ԏ*@ֶmc:ybJӗ`%I錊]d% 8cAT[&R 7*p夦2\׏rFld4@#_??8?83pb!P`M3[~tʰ=9>?P (1sq۸*RRf!QVNU z y'QvD 5 8qF–=s{F|idZw%ִq#ԧY_Z(2}yO]`ں|kiktR{b Sc[)A 9n&Sy 66a𵣈H;*>UA+6_~&4 c3d oZO*P+}Hgy9#\+ͿasUq£6 ޺5b¢jDdLsT2YƆ㼅E'/fT;ә3TE3uH ѺRA/LEC|F%$?t a) 5F6j}\JbΕw ֚t.X[ Qw[3K?ĝ\\) Xi;nMjv_,ЪV-ʃLb(wܴ}FӞ /zz05Aq@zປ`pa`1i{IqXy sYFy~~~R|P2Ǟp<12^2>Ͽ~-:ILc8iN_j=z\ IDAT[Kg yե ۖe[MX۹ C_^3\Qz$VuV]Ja{NJIrЍ.w6Y(s/f^a [uh,nk,!ȎZ5qz1`!f5 1 b4Ѕ~|Wv8{z_>d0(IYQ c^SW{! WIPQ@ӨjPэ l_Qkx )2;(FP4#9.Q/7lj2/}RJ (&RQ!.B}៯.$?̑nç+F&Nþ2S))8r:Y7|TeT*;i%׆0d^nJEna;]Fnn% XxkK^=vЕ#$_Iy8͈Y}.fbB{# ?(iA*Hzl≢=|[Xif,-00k2GG4bjtg0Ydvosb&`LXL*J03EvBW&U԰=04 F^#se{(4feQݏKEa\D#p  (P~ki:1ye_Β4`xLUWmjtuy3H5?oub귘f6e磸-@qt IsPSlqܞ/8WE[Z* GrjRLC]Į y̑JgQ;E˽X«#T?i.z*teY vi<6hdc *:L !ha,"p(۰pN1RdPE | d"Y\B*tfy`o8Wu76#!2>v ,֔#j&3z_}Y%[s5MB"Y-Jh):ώFvb*1|z^ԝ%EH,7U"WرL)#G`U Xj@+S'02%} Q}Z<˕D@UF;r#[[V&ZLN!!N>YM !bC)[?M GZ.i*jgHik 鍾etIDu(v辑5L=)(|4$ѓQ*;SJ3zqDjQJ[l Q3&`kíEw0-Ȗq3+3 %eBb)e:zqUp˪6 lR  sz ř;_$o2g@[X~CϯB|ơ9xttѲqz)_I~FECef%v. {F3eB04-RU"13"a1!*2i( f[ggb}sm64(|Vs :{кܰkYg$I.r{ps{YN03Jߘ0i}We2ۭԐI ~f6_Sն ԝK3:pکknz7 Su .ne9.JE&wD)4]QmM4g3 Z7jHK֕[jPojw{!S1M J4ဦ[rp_Aܟo7""v.2ؔtiVJی- /4\џqZ`˄Vr5VV$=t8Rf)뽹qP?n55i,?X3 n>*\gi8ɿe85#j9-ʭ5ǽx׫Yp /j4Xgz{Asc ï8u(JF \Ş.g_uT+VY4zE,A+no2c<4=3%fĢT~|vW\\ Yv͖).uP?'FNMY׸rSt1|"++4G1}<5`oVa jA0d^51|.?( d鬋yPԘhac3F LK|`26S[_dvcS =3-o?D܆Hcb/.Y?#4Vm@) ]ֳ7ծخɟ0 /& <,rR`呀<&CQVҿS&`3y g!KtQbKiK)70?n6VPաhc QD@03'\@ T)x9 )Owm B䞾n[vX1LuW) ^뽿xCKbl3cX+-˯y .. hW`X{V0>p&/qzgA-oVIoa(q#45&r}M.fд\Q ׏[n*Q}F3$Giq@}˹/7C)kE HŋWn > Zy~:eu}~~5?Ώ7@ *ݦj'X2'ƥ"]/CJe&Q{t\Ry PJ# 4hANd/lZ##oM{l׎գSas\-µ;s!!‰akkѕ$(AԯR atU (@c:%jT2%>5/AZvv4W-OXƃn$تz<{TuMK:'vm^!ґ vCT 8&n2 o۸j p6DT,;9Nό5[V|_TYNtƤL7 E|)]@RCS0 ;QaaP\{lZ]r Z FeL1Z|r*[uPd\gJ; cf*d 6i6?nvI'*@@ RAL\ ,@߮^?AhiOAF0KGuٿ'd'ׯׯV9ṕ0T]DMf)_?^\Tk(Hzݥ[n}q(`'ۈdPdB1Fkql{-A%^O.`n o(P5|]N6Wq}|Y]oȧ+B&pn0^^do9 r Xߕ9<+lN-,;ҴrXpwr1t¸]:z(QSbk0WIcx#&,PH%vLore9x 9E R9pηȎbHhT^BU*@ߵ{׷sL5x0nW3]>3JFԼH8ማΆ/ˮb+`\ŖjL؂H(mL˶I߉B5T3_[OܱpUHZE.`G2`5L-֐+ 11.tS1 hMvgϺweyEUm,!"Hgމ癞oV-C.&ȸg?gn\^p q?ʹ׹$0`8 `*vr6p5nu>kf]&-7wrRNzE6Bz]}\4Ru?X)+.K63KIx^ׇIL.$5q ;dU,$0uUImIM|־D KiE\fGϛ q _=>Ѯ'fgXؔYu*ZEFʴ[N W P\@Z?-!eW=LMX!:YPk^)<މ||kJHi҅%0Im}}`N`I (Ư"iR}y]1A= =WWE5ŋ Hd%YvDڥ>aDb+!K%k5sSG?'ҵR-nfu5^hm`ǎYwW0U+)TS$EzD!:Vsʖ@0 *`ƪL٢ "~ k.B}:#L\w}!J/Y[2V-[W}!Im#P 9ށGHY+UU$0%ͩq?7@ h6I.z>-I-41n\M\̗Pm}Uo+&HfUt}p*@, 2ban(Tl8DFOK!k%qQE)#G؅F BiQt`݌2\(x2gW{z]s@4w\ D+{GEUvʽ̘ĽL5rzJ<\O!2sɁo~-aqq?gMtoAc@ ^[Q:nZt9(]uD:N{Cz<'#1=jĠD,,;|sFsB Vnn+9LkX)cȘ{٩&3aV<֩Cm9eԩҜ%%;e~|4`{3 _t\xy;=* 2ulܓ:g6s?WdW3%^kxJ'pNB-.rjyI9 2vC@xc*ʄ(1>[rP-MA.J"0/UW׹cqf9r;,&n!.,eR.Pg8]޴Tb~F Ç8$ G;,,umW1 آ%Kެ&3xIo al˱\г:&f*A2s| 1BU{] .[c[@͍F:H(N-󫼫{ XnB: 5&/G8Q1WZ0 ĮYvjBy`7,R0n<|A{Sm>$/AZ@km񰫌(ik+lָ#}E5a98 lY9FG;z,Lldl&&+~ G#J%+K􈂞c07QE̜o 5ν>L}y+#]yl) 0Ȧg:Ç@AWJ; w*qZ2u`zћ6?)]KڀՂsS ӌԜ4=Qz)+JӕO)/đJ1)tluϤ1#V}p"&09~\ @4e%x8tX~" !̰uZW+S@Ţr|+ n{N!DX0ۭ^&.:#y7BwG!E'˘2`*cC3^O;dSY& d9'摚! g0J G`ڊlʽkg5! #߇VRWj?8Dh"аdEs^ `Fխcޔ TYO ^Ng6֝D,OD;ҠKCZe$풰/@[c}4΄UoUu&ٳBf9@q(OYj@4B<#?~/KSumbDtSoA|xCߚtz[]{JY*h~l3K;4dYQgg''LLqQYyk*-h#HC [FGgWQ 5_#%V]Kڳ$ 2H/kYz_%; vZO IDATIN Y%B{M9ETl _!Da ZcǂQƮ.D#p[,seepXeS[}6kMbZTlpeF_?CTÒc^`\b4ʄQJ;dl z [4ƈбApZXXXUXEYX03OLs7yZXyWժۘg6R1@'gSB+q+$sY;%eC7"#CÏUݦj>I[&NϷMYlՙ]$M.)Kn@KU8{l]BRːu h(š2všN»Ή>#9SVY*\)6G 2\uSLf awט?FBgu'k>"2{p3|{mh[֒])W]B[+JӽDDB sF=BHrF:IYeP夤䃅L6.yZt[,0^@*ŅFg*쳷D*Ͼn#g9H3EoE+=rK B%(4{Ks,J29;2& #N<# cHj y6KB L ?gˇGcB /)]TiuN\\h).9#`.U얅iSʴ%d9^XUEu徲L"cȐ9xH6!c$`+Nved 0T݉Xٔ2XU=[z ^t],(&l%j_Il)E\YEY}  ֱ]*Y$m.̝Q7mםc"8tsY˥Ë]Z9)Amnz3,,TT|I@b"^[J[8PxK@j=eAΙyA*:ɼˢdA}7'=ܡ#PCQ ;O"ReȒ8~ 4ޕWEFbiLhe< qkO5QD,r1"z m%dd ;p6ܡ*h @VNS &j<|4`sf# {/x?>G13/L._n&X9E;Kτn|*&e^Z53EtY8O?FHz:ۦ܈fC)O> 2BoR:pz7zDoc:^! &pBT-~?*M)r=~\#䨪N^γlM I+{}h/[LM H)MQ(2uPDKnC(y)0 w9:>_SJ@xW jFЕ-exN>/iBZ+_2d,< H{3,vJafzS/  dxr2Ն"@f`N  ji3gH9TɛURrRĕ)N[5\v i"ʟ%W"rVvyty(> lˮ2e}2u<3=(Gwrr㰦w6&/"nӫzvCPsX!<Jѵ-S,uY(!~K/A#]K Nvrsm'L7MJ|=G_ lʰ]šՒG8L@Fӽf%}D8Az[ݳo8OWYtN&6&r$J`&?ozTOQU ڊ ٫^}ŋg 0KL(UdT%B3UEm R_(l!|{QhUsj]gnay{HFskv{êXPƺ4eĩܓ2b}4+bmO˱Im٢5v˧㯄kKգ˰Ċ$40l {W EbU4\ m7zRl;F*<{0.*Kf)AxJ0. oO] -'zvc'@+Kv8Ӷ?VMITUGg qUoIq! *Uq,ڭ| iI9Y7c+KBgܪIg(9.\1韍Shq狹 :$89$ MR3]i<0tbUM7;^0iHǦ_Y!b w#lVu 䍕$SB0u°z*hr7$ќU8;#wM wK/>p3ڂk<! 잚Ukn6 ĆIh֢I߬%:̧λg9 FNxA$%誘BV[j2M-MÈ1Y|b/HA6K eIQn6Kq엛@`.?>*S|bqo:}(D^/;d{Y;_a %}=[\zqIhnz}-7BKżm+ p{8zZGG&P5{f|rk L>=ߐO99/"6`b2&ICoɯ?Ի nupXNBn^EP}C겙]N̈́ ,nHY<9k?Trx-CDS @_ h43~74,:3%PE%"|yAFHA'"_x_:*>S@t'30O?m 5S C/Қ+0 FJ:4.K.LXk½pDD~&R}RLz޶_,r'UH@ ;vN9 m#G0/;J OýIP X6%rחxEEgYeRv}kkC{ _T;lzL Hhytg .=3orܳB;rivr't ! 0|~~5")4nt?*m.lZrz݄({oVQ{-{5QDF.>qFJaPۺE r)WZvN=!X/TLN QtVrɕ8ᕐTPCY?bZ4ej ܥi!cSU\5. S@9y/ -)"ԻfLi PȰmbP 8ceHkPAhASqVg0ǜVA_6M0w"\n@fcvh?xilUWߵ3~̭zZhk Dݯ\7OLtÈ$wZ)/lKUB9i*LwMiž^(۝w -2*<SuW3'U}Ӟ6z@Q@e%THLb;%X/<"lf'Oh\j. ){zY G(yL.y,TJBsX  6y7}𐛀;X$!.=j,MI8噇"OZzos%fI IgLR5_&AKS ciJUvbt!@HR4z=9P҆ eӄ~ay;iE2BjZ) b?ZDd·>o)''5a;W,Tlj? R_j'juZΣ){9X9"WՋDNz2 B,K=y:sO188糸]x3`zmaq".nKcc=?6@p*@k6w033YpM#rQ4ܺ^\ ~|'7`_ONrZʮJ߄ҫ3sWBw7515 ҤkRd _4rzSPYz)B(.d2"$3a>.)%`\BҠ@'sbr|"/t+1 @} Sz/pxg^l)1{Ǟy^~gZ ŬłN퐥g]3 n&q. ՓnСwC-YSR4݂60iy˰Gwaƌ`{KyIKApq,1=B/Y(t< [%4~<3zE~[3懐P)YNGϓ*k1sSMLN:6K4|s:3Wol=-p!}R;p }?Q-_~D:gv 論p1"=O(˥3L-raGI:^zNjsxgE>\،Қlu UU3{y!؀&׀g퀠GWp}c PQh 񦜲\9,tp)h9 Ҝ*}1AUD`,`zkbK##Hr/!*_2󧁊9neٜK-/L, 5ՠC F6)ava9ظ#Ճ!N>lR%6OdyɴPeDs{-ya{xt3$'ī& I %(J|:9QyG-?rھzqb2's'=45O@(+p4'В7-rN)pVh~G} rERLpv94M):?ncCωgۀ'H2 \^ͅ1i].β8xf#DY%xmxVB[JpZ\r1LfOI=ω;Y\u3MYcg{W13& (Ā=?Zhn&d8Y~S?ҧobL\]+T{My{v>σ&*[<lj(ߠ T~<OJda*jf)Ƌy(gB1_JqTV 2P_ JN108-q){haBorW@2X=zc`/}W(b,@V&Uz{Rp,+w1E85.kӛý* cݻ` ];beisH.m+_H:[~\q\y?+T8'KDya~F Il9W ZȿkISDToɅJ`H;< > 36Rs7GFvc(WE\k<S0<.|Eh]R^M'q#"SѭH GŵGÿꁑ2Jn0!\py:tQ$^޵ fE,& ))=I~vF<]V` LzQUsYII.w+#%zUZ>lr6KX/w(dEphVLL Bpm.6p ~&Bu&uRp! E3 YM[ƑϴhD wT dԓlcfj4*F/?}v rNO&mXLL@z=P`x@JL#5v˒m2|xg'ɍ[F0ckّ~vQ4UU"~A%(?p$yT؟PzsIKaʳ 4Qd:vƛrcJe}܇EzR &T5mH_G 81-7ur '"1>0o[1Еy'J!%)3VwQD}ކMUCy\t:*uZvup.ųy]E^$H>s%%CA<?yLGz+(UErzVLT]o[%-BNfOTi+AS_Fq"*=]|c5tf==7<ϣ.9ڃi7 Q$ vY#wcpzmxz E!1 Ɋ[af`vlt+[ a,k.鷻[jALXgt3Q=rӷ@^;~NOj2". fjV>^M[\;;e'UfV+|yc,B__ 1=#L9 UR)UI$\Ӭ3ʗJ_SKN}(ͣx מBC bYzj&f*};zx >f31zcؑYh,\TwgPC k(f΄_wzMlP-|@yG]~ɂ .31=]6t>?l{JX-o>e%~9^v_!?MP|3Ԟk`'jWsá;r?{a?Fk_SWsSsb( ̈́Nu /?9ܧQݚ^&[HSyy8 85sflyIz>DXhJ 2TSU[ 0AVIy׷JXg w!3jXqU5w1W]ܗeKqDR_9FB#i'<ƿA8t{ /14KV1%K'8G~Q(NDP VrqŠ)krn+c@E=;Yf:&+R%k_LUn4} ʸm?3e^L8jc^)GXjH|h+@{۪bܪ Oٜzl>ޢ%bs[.;5'\.>,/׫qUӓ|Ԩ]~[4/ )pj!@$|u)5" ܬKAc1+_\;%Wл}XԒolDžwֈzU9V DO4{ œW0D ; ^ N2wե֕nC`p30l="a&,jˑ0~LCgN>\k!U>⮼sdF P<{a "RU!]^Aȿmu&2n!K_Nr_l;xK]Ht;09DebpǞD$۔$ڀB]r)b3 r^I 34.Jmw* ]n|v+K؅˼>) 3v7¹lb'o$ .JѓGdmYS^biCG3.0{!RETU9ѕ$ t$,"ȉf7b L9^L/=:x븟(OORcϫ纃ߗӔeͫ:N4:2[2?+PMfAꘂ{" b + 'ycɗ4-G$2׀M974Va;+eF^%ZM I2?ComCH@4)xRaauxkL2 ): Z{ Ĵq]T8 A .<"!*s8Qĥ"-@NuŒ)syE~Y–<m  z];RB=';7 J)Z7өe ͛/gS*;XڝVy! f*b&"& GB.؄]U{D:x4Ӌ*M/k(W eYoG‘zl5>8|EotE<+=dJl& A9]_"ge%.򫿋I⟧\xǧ1c t逰V~[n;X Ty[m#u94Lcj@N{n[Y*<4/I]{øHn  ={n|8zrhUjOm̫DI#*Q1>d?MKګn@GgN`X^|f7BM8 oTw*jr 4 }J|ͲǔɣԞ/7^" l%-̽V,%t ڙ׌2hQ_ }+}.]&l#Yn-l$?RC}aHC}9eI1qj\.97qɧ7牘8Kȑͬ ʛbKUN_'ڞ (*dB{ @jЉ&kW\ c. 1#GR rAw*@GYݱπ,V\&XxwTȮ݈!xAlWKھWPAWaxRZ<.?=y9?+ulpyK R;8&RH]"u3pܥTQT!mpND#tˋrw* R s)pU‹gt {uGi/ӻـP$#.{~=uH7 H"*.ȢLr 3''Xi:右xs}^Os;JwA&6ul1- {Tq/.uSޒ$ӴpPܢ ׇUV^zrkcˣ&]3Y m̑9i}Gquox6a}mѤL^<yg992=œW^RȖE&ޮ"rE& J!9^,YG+|0ˁ kϣ=>uYh>DTuCcRkQ`b-B7U/9&E]'2O֯sT+Fr)˓=OnaERbtٲ~PWIG,CEW 9ȩ={fMg'Iid·jkUhnC-NvkA([\#,vCIMTse@D 1Msİ"0,=vWݥ0r\sďy %El8CN_hC¸ºV-=sj.ߖC5nKI6>r{OlFnmfOXLIC}8٪B*#h6 hŸSDgK 2s/`|@hWC:+uy,Q\00'=t1釘l0q N[b= zKFVwTwEɚn8jsU30 0 D?PlemUe a]B xSŻ>Wxw@ V=>fVwQյ4 w">KϪxGVٮMoC'5E'h /,T+ wh9EQcojBU! : qn*!Vk!TqbڻBk* ?ң.,U| iڭqh6BUN љш|d*J#x3^RU#5v99$@brgZ!Mw-CX-"Wv_2>uYwZM%P |?spT,DxlK4{D$)O(ƖI)ԺiQސgR`(\s7@^ ?է 3x7%U8WZ\']^'&+`P^Kv!!5DnJ!#=øUQܺteZ-!`?/ K[H?h Ayϒ:ﰔyq|J}!a3 $6v\ R\A !Ho.J SRyᖝϟ nn1-lR~2Ӱ5#XNq!9.iAdq"4&sx?fjxV}x_W$j*U7U3LO cjRT#cRX#r6dy=z͞:V}T5By*TSޔJOb t;mNfM9 Y]kNcW񼪏><^yyY^|xAŶUV8<.RGsz7겘8A~/B>=[&](v|3n<7 Raq*bQݯ^Ucdu,$lW~'{J)(b8 uɽS9t^N=}܎[r6zC h)%QUrАgWzqCma5\:*󡎵 #ZT<.%@8w؜ݺB=^mTѢT;. gs{ݰ#ݯ1\ܥu^,qသwM9TKEI8ܠ[ЇBi*8ɲ<"xOv61\Ox jA)I EzJ&}HK(.){YI_^/l<=Gzw 5i|jUYy> ZxOӎgOcNG@o) BܾȮR}*^}UxߣZbcM5]e^{yEpG8f^Gyl(̀gSTR\?dž,qIY{ Czۈ,LDM8ݶY 6D6`+>/y^{{}g\Ha1}mk/߫BOk@QT^IH eff`.P(9v{NJDHe! W" }UXNQ_o@d:(x܁\DV-%a>ZJJk+B''Zҩ\ Ń)xO oZxS]3rwPQ3G8"U# l֣C-?| !hݷIR:k!j!$L>a2 ADڧV=RSW"5Swg뫯K$oy5B0}փsut ڀ@o kD Qoٕဍ$|XwLr(Oĉ!;UW]j4tX-K><<13=?Yڣp]1A p5UU@q}$\ʍOP(J6ݹ0tO4܌?&)@?JIq!_#sͥ;GBsQLVNb8s(v_W#n%,2Nʩ܋@9] P6'E:>NTR5k UryUwgJsD) I:N,qxC :!Z<0H؂D{Y!+`WÏnOd#s&OɁtU[}{̋HȻnDYT%?HCy(B#=< U.8!'kE I6J@=(n? IDATPs漤7F Qvp9] XiW߻5-@ Lcj_lT׷95 X=G3k7w@@)h)?6f*+ OSN0[kƔSQ3XbyV/CzekSԘ!=4!FV q/ucԒU>ooÂp;K1sUa #A>ő4r4[K --)W-7V?FK C5܂^g5)Jq@2yK^/qԒ/G\;}<dT% R:%kQŴW"A9M_ԛuvɴ*+< Nx?<~*Godp E$6[8(3EJ̚p=R^VL8JtΤG zky;'q%$")s9\JVMC ͌GqB@ɑtTE48&F(t칰 ^; Syv"Q%*jعAi+@Efv^=l࿑|(+€l *awaohOMEysS'ݽ9SE*Px Ž~)⩪.@2te,35m*H] 2V-t8g2h{ IWDΛ1mX}P&Q$;|aє>@2=/4<]b ƴДQ|(7tAk#~RRn? HQ0,RXJ.6'+ݜk!NRE(MQ`̻m gNI$>-H8'\}9-v{uu9cFY4$_{{ Ҙ 69Z% .pJvߪ_)IzlA7O;#X$r|~]q;B!`R>T1r)@2p!?m-=2eGt&=+!H%rH=uR4}"9߳ؽ]6|ҵ.x7:+BnK;ϧ5Z$W2? CB<] WËE] @mMT;9rTGP gIAK<ۇ'%4a94mK (thtG\F|v'?ݥuC43C\C~Ź0بt"NӢ>kB4=k:>Ot,K Ŧ)&cCb)%1,߈9 l;'f9e)NX6BxV^bo}U< !<[y> V>G1=O۔CI*´ʔs4_rsx}HH" JwAvvWEQ=kW٬z|(}GY+ӏasꏙkf!70wY5 <׃)SE?>J>F} C:W%4@NHy<='6z C'q ~l!HA^T}3BO(*pL֥(c 7P1g\;Rq ᦜ?}e.9w+[ML~9Ͱ/@"= .~%AR&,DՔF2KqL]›!C}GMsCg 5̀kmX\5['%8ëQη_\cN.t#;3km17s?3{1Gf<.']d+ D>S{e?S㾈8JjGYGUIw~S1Rtұ(&TB&%xowWWʨY+1G|y( *fؚ /OY.c 0ڞa`/2ԗ98B*FՍ*]\KeP&7mtZSi!׬"= 22ݯ-Q}CH^ʛ^#kZɓ%s) ňp <Ϟ1{YFU6}v}?0DkV-EU䥸6jbrC6NnK&E#Ɇh -K eK ObX:5Ͼ|- ?spTez#q_ױ#- 9 K֠5o{BdcK=ůJꜥGHbiY"uxVpG6cctP@{vMWQ,23?Lw鯹 hU&ҹ%Q.(l43I_\<ע%-}_8g=_ .n0嫍t T$'0XBqUq $tGFv1?0;TP&s̴DҬDU'9IHF%y3n0#ѕ+_GU7Yanr7 ^{}:''amȧbu}AǸ]1PP`j,gYw%(ctDێǖ5Xߥ3^1 NoiL^Ś))~\,Dy_Bԍ{BsjlKܱSe4z76џo'x>؞k0Y@yi'4ܘMSTkCqjh2EeI\l$Ob-< 0Y(eu5MV.< !)xÑu՛᩻懗 /AƊ!m!7A9Iri q% ;-L*g3i&PhrDy\hdԊS0d*,mwG.#@Ū+g3"Sxxd4%!u+C*,k2jD< ֌z 4"MN]E(UID:?1]'aLb]jy {1w^2객x oCIGA0r:A d<*@Yqj69}IuK9&Ne9Z瑫5[ā*^}^A)_y+h7 CVCk K%cU70dGO[emÒ Sbb込jLU).I/luk[+:49TC ~wn@>P}ozlCq_If>BfXrL4y/]kè@5_9?Irot (}FK(gQ0I'ujsQ~{Tݭ\iC;A9ɟq f< p;1A&)>@Py: soF ^H谞}5Iy;Rm~V\O忑 >nZrq0 ijٱ@~ɵs vr8Z?]&If *PG9‡>5wr{$ܢ`(w,ҨsSm޺࣠P TT4 XSlm7`J{$ B,fzS ObEwG!s05?Et :wGZ`z\FK]X#C{]9=1Уj!L`vI_UMl%[_.!#$o81 "͏iU7Cܿ.k/ IX F/,;\.̊T)@*E7{PEoMoT]J“ܾR۹p%> 61gsR8\aJ"{1-g"PX9:ugc~ 8&mM0>ȑXқ7C]IBR_\E^&Q8`htr-al;;SU  W>GA1ȮJM^@H`ӽ ӵAtT7n(9so%=MQ`fnd7YKAJs {ɫpIJșhe[tqR^qn;bo!Ɂo`eJ\/*}" ػo. $ћFbAXnWuYϳ WhlLMYjI̖ }gMotEe(2Z|﮼1[eb Cl=+y1~w7} 贆M.5{5`Gywj(0w& \oF|k`im#A0vStJb02unW@5uOEdg (.%Qzz© =cɊa*L+%_9&Tȓ%egdR e4VJD^as m{i|rxEDvUn l9-)-L| Ta0XZaI?eLƯG9EZ< F41*0.cRCƑbLJZϧDmxjYMlEns/.}J@<'_ /If@"W@l6<{_Pu5{ľ촸/j 5SS{Ok>%h JiX?kj>kckڻ^ys tAiM &TĠwe -sꁾT{Ow?8kdKl^>QBm7c^#QSf}s`RAFR1eIߞP0 bH1QvDC.Ǖ:@$ω* +$@i_Û-NV)wUTlp1 C>+Nwl ^0@7R%?"5oXS#~LOWޝדQ^x1Rš.5˝㰩\}=7GD.R¿j@V P|qaȯ/nW;>áӊmbIfvGXYP쳼LMZTO9>ݏC팡2+׽b".ͥu9NydͼۗM!P6{:S_^ u>`!5wE IDATZ}}ja U݇gR>?w*;;{ڤCI\Ta`nn$`cwc=?7}lWsJIG pK!Ez&ݡו-w5]%1{VШ>RÓK]b!Ԗ7T_5U5}_5{axKcfX$EcP/OYAHW*vC~׵PlgB)ϏHɮ0ݱ'IAl,,347FzV@p*SsZrLtP"ŷi 븱U.9@!doСS(Q#|zI.۫$J^ g-J("2O;B:}%:"s{ۑiV{8J.:*""{64T#ª*HdID)>_|`~]Ғ(0RAm} '5 `샤n"jj p8m`'F=h 4 hpV(q?}Hny %ϙ4Bj`i=Gѧ\zHnGWy~-fDf3|8Ȃuat ,SLyxBxIb#/YeqUe_V)+f"2?(ʙ(o.y~՞D%"׈FȾ8~NEn=ۛZ'wnbwdztu>̩5mƪ 9EVx!VԿB_=Ѥ }gc).((E1EbbزrRp|1kMy&QTz0rX1U1юG[J"Ӥ~Gs[hnsЋܶf#ȸz{KJj-=`܉5/IݹWs[OTBkP[czܙr-iaH<#dT21aS$UNjA#̦=`~!i-{;pbDov\qjWpK'$F" ;c/`)]2oM9 Q8w@=Iao+7ieͮA%Z >Exm0gY!3e?7YgڐQDz%0qyJ^4/=9h|;14EKWjDM䤔@ZБSDDwa4w1 |-=j7\O~(Sag]3fRLЪ Y 6<Fg>6-<5d) jKc̞nQ{UߓW #C\O]4lVpuڕE>x90n(-7|+2+!K%t+r_KV͘S.1 rƖ3@2iUfRP#tqo"q$d, 'Id9C}؟NQ$,#L>A\owzyk=r)J.n(N _b"Ɓo$U*S&3.gd3EX6M X I miHǖBw3ƛ?Iv[)z#2Wj,Rm -1z!,&QM@GLd͆gopL2nۖ#ny4>xE:f}Rd^t VƟ01FqwW!WIԭylBP?Dtюb)^ ka?[>7ĭdqO`BXCN.B s4пoH4Uن8Wf<[[>Mn&,@'Qv1)wH)6o[ycvu@R#{gzmW௪WWR N8M0a 'Y[I(mSWxI%I˙*}IfvGJtKw\޸zPE|+"Tӕ[C'|j8U|F"e%`Gvvh: 7iϫ:A=(#;g_q;gYBL8B5!bb Bqjb,") ],^ݩ%>^CjtlC:k\ݛq][/j5xvE6b=1aS IixR ,@tMU>(ȅ3 Ʌ}U'pUNn %oHL LRW$3z69E/1&`aIgN*I٤{b}u${!I-?{P_ٚTB l~Z'V6:wJ~'UTw8qd` =ǣնe]peq%<3,f?]#C-ú6GS5<Θ X2_cY~T@ֱ:Sz^GdKb4/!8qd0>cI3 y;>36:س>vPd1q?R9@cpK^G]gEXAxZ!8Ҙ,wݛx-FΰL8x,f(I~JOʩIؐB;Bi@{b$YBmq%#AhVW R_SOخ tv7xJ^&ݴ}Z|gg9U:p*B_]1Hf-_O_yQ<3/X' 9U6M1DDv |O]Cud{N+9 H!l5Ѕ*juN EɏoG#P$d- aQ-ˌܙ Q$*a@1`/*&}uSiM ˯xAURsQnR{W,uiDS[ j GI ʙ?ɌPNE_-XONn,7ȍ p֍2W #,@Fi@ӱ?>ㅖmP|T R?"l,I!z ^R^4> OI{,$E-+oYd(z ^/.kL֙@-6E$-"FGn r,p xp'uނÝQNJ? X,>W jgu?%.i_i<, \b;rx ќl&[xp"I4N=-5'ԚҊ >x,'WPNŸw{ׂA `}э)šaPS#-9r]h q6;1={ozo5&ml(\u'ֈh#t&jh6ȑE0)yBtIDZ]+J#0_tg?j|IyNN!)XќXeyx[g0879eߠW،GevE@"2XQ(+C:ж do<2Ӿ}ٯ\`E=^m0slKb"MaY`zjι¼Le)n,6np OG>A_'XC(r?_Gm%׳0sYX#)%2JM[X,)M[x}BřkCQHϚR[R Զ H >XP. Pd%؂54'.j>S~r "M -9W ֛#uh}Om Ϥrc9[E{# 1 GJ~zXZڅg*?Q R#s{%m3:u6/rkaz1 HwEN1o|d[5)L67K̨eCl9SM:@1I"\B} 4m$C'HVk4^QRPlıDkXij2,U D{ݙ$t-VaKE9:ϲ~\b3/#G7 7l9?/ ·'zDGKBLA $ь^YSկL 8 T D*@VxL3Nc628*QҽQ> s[Y]|\u?wjՄ;Q̕Tne>q@/kEi)2#eIB;4Ncy#y;>+g#u?beS^ 9ʢx"#Z݊HqX *2,ӄNN}vIj,+b"cŬ 1ތv36ȀhZkDD$E wEDa l9PQsQ<(w7D p$McD|kTEC{$.oeT4ђW\5[؜59lۙCޛA5߯6+|S0oǔRlu>򀥳/OPgrk񑼳k='ꨲx"JAAؐSQĔ[tDJ–NwIʴA?c*+ԬmvfRh[-R1I_]ŰWWcA,$#Vr ^Td:o_gY}ݳWI2,uBbJ?? -5䈔Cenc^Yֺ?6]OVz^h袝7-̀eŶii)>6G/]fzH͔̍兰'D >bW#q~v7ʦC\ϒz%9+_$G,V ;@M.d,V챖N҅JI1,|iDEhҐ8 (B!4L)JR L`eKOQΛ'S80κH`'Ur ,\y:^C'$*ZX=?*5v̭LZ;piM|' M)y[7 >{/>&)-aQ A$ЧȐz[C Ʃ'*員@_li!7a/Z9Ɏ@O%x_ݡt.o(_M^ 2W!igi]uSJjBw*3f yr܏TqI-Y_ktCHRI>TnUS7\疰mj<|\ݦ?5^z[Κ*C$cOChq4gu]Ew}q+/JxF+e;n0qD{@;2*'n#\a/Nco1gs:sqCӆ"Ɂ,,A1tt7,sъ^eU0 ^-g|՚#h+V;]NǼe={r|.WDcf(N|u9 nY3juc|j0 %{ū CrDw *Oż6vr(>9n0Hh'j1C| ?˱R4w=pESk֚^o̵%pǏv lT;J\4uғ4EJ霳m}4(3Bz0;c<q ؿ#P-pg GVIshDxlc[@#I@%fYx%:UGz3l(.H>ZopU_9PhRh4,*$t%YmW6z-s\ 2ZJؖKW*X07dIKxM<ِxaPbvn*|Z!* (W{Mu<%0v3}u1'lANae#4J IDATjk( ޾ݿ׽A hwsNoϽ⮾>?.mCdfl/ X}וoQCz๹$6kЬJgh;svԥa)hM]N~x3_ UN&nc?:xEIl/= s44_bN-s< Z ]P~>]GWuYa$ؙ|* n+"_9 =O0r!Tν*`6 Yx_$ֲCrsR I6=GSy, 7-btnD)/aի{lvj_8*^#2 AE*8ηR"5^adEgG+Z#0ˀ0ƕ'=gm?)pG~Vv ^KNj&Hp^Cֈ@4"*bo1KCH\ Wޟ_]K YNL(V_DH-aw/,#]PeXZ6Aɶ4VGߌA/aH!m#׎HH^Hw]),3T,k09IJqZ \?lsQEng: BvޏEyZ)t.ps{-h (/{%It-y;bf4JWmcM5%vžmȾ8,b@NXeKM5܉fub {)s=(9Oi@uK:"UW`Nsݘ gj3.i"; (МXN83#U^H>JOo۹e] "xkb(0f):1ZV9͓^/.N2dk|_/N 7 }5G,.':rG/`-*l g8Ok7c;VJ'pI%%`:Ǫn(bL)vi /'V+i2C5_|&=QFrhJRSnPe;i n\23 dDir)MY@&2b?6}@<ç.9bUބݑ!u:7OiM{?2C;D=\xu,*mf<~b 0sSiÙճߒnz~˫l򔌙Nd7|P2|{2W}=-W0z&">[i88%CU70􈰽-(Hf!#X]u6e%b|a'ӚGhZ/+,+Hpj۰ ^MPT: y:4 GZK;S \/<~6O*#>n$h|_: !ԡp)joTD*lތ~@nW ]K)./>v՞2xE١ (S r k'RC#@e-ӆĎn/:̜֕Kqض޵87Q>"O";|)[浭Pi3i1>@c%CՌKI!V; Jr6H qŷP9{׭fA1d9]">#e~qX/d)H.N5|l v[p=BOLuxofa.>˷%́n橆G~FӠL(p:ܚ`F(` TuO5ΫJORA^`u\Lr%.n Y=2nsMM Y=<'j#O%}mthfj1CO4&5QJt5="($5RjvA2hcUe-<ܻDd: }%@[;"ZֆG2CEB+V h>F>PDѡZg燨+OܔG ,R r쎪4;j뺣mk[#c%UUʝg}J-R3ua-X*UxvvT{YBCtyRh B N# 9ɺ~߬NW)@BY?m^L[!$]4ЈGVvF t{T{VI5TܭrbuSt"ꤲ̨Gl=;"Ҩ^cbl{oۈԘqRQCi0^k>AMz o/Y /'^u7rE%\u50^B)%u-@{ui-"z Cp6>ր'X}ɬS q}Veq@'<U6kP#7A~tN /5R#ZW)ɍCK/N򎃇 rQ I|{fVh% fbL@ D#ko)!ZE >Fe ž|3l;oϤTd*P{Ok i0XC0Wq2d91t%%$VEqMHZK/="WBK&Eavh Fo}'4޹cY^s'RExX4~C9Npψ 133 Z9א8A2Ř#>~KkrG%Dj06?Q50 Ha684Զ ~ ?BEjcc䍈޼E֣؛HδP _PǨMk1>G@}$Etej㲤qcgT\*rAq᫯*Ӝ;܇$M+Hw= w*6rn8X\ dHt> KoJ) +L,rǜpT{Cc2c={yo)hsΤ.?x*Q$%s j+l%9M2j8v;IՉ^d% 7b#NǖXT!nC@v<5W/l.YV]n1;׎{Bb3`foX Y,?>ʹf_lL^KgcI ذjb/N|]V+{$ E%4&e6ŤB6? oLAI Xd:LN̤W4al*<+J Nҡ 8X"43]ݓ/raYxL TG~żMkeؐi/;1'c&LeKkK"%0_L"(̑U>ÇNO뭯{s7WW@ks X%"2"G =bȂ4ȽϽh dfWuN9iGbeI*O:l(y`kZE fc*X/ȵA:|@6,1d2kp7X_(2ƷtBVݛ(5;I?B)@p<\9 x86"NYh% áTu4EۍQ#ڛ1U5Զ# a!?`-ԕ{.H^l# vhDlCꟼJ>tF1)Bo]=K>|ZWV/{s#>sM;*qgG/Ff 4!13)4ʻoj+a3=O|("F1Sr20ka#+ hnO ڌ#5u20NJa&KET )`>*ע +몄|[K&gsb4q~tlu!xYkC'4 #e gJd4Wn݅Z&H075Nj"eNOB/o`s_ fH F-0o &~Z5Vn&mo+u9gJ6<4WK1=3}䏘^4a<1Skm3EIXeq+%'Ѧ%Dh>S.T%K!=n`K,m ~彘/t 3_^;?֝rEh>}Fvb̎}@$H"h!?)h~t߾g N< avOE#m_xɬdmWkN}h RARuN>Y$R>G{lОggL7g%֟Ii[z-~&la|Op-6xܜis?flQ R(Q[сr$x;9 cʁ,ALY7|:-Șj IDATzYM8/O]ъ7oxwBFQdO ,pI19?rϷ6i.xQYi א+TH]!Oș3D_ +G>J 2ǿ>׀9=脁ן8cz}g*wR Ag%z~ǟz] -*a+%s1b0 S"-Kyo bxW 5 IHW&pҵCVd8=;`N[X' H;Zeu:ˤiVU^d~-WIA:ȓ_jYp5s[ ƾE+GpY }!jIz%Ē+^*W,sXfCzI]*L ){?8N %e3XFճ ]c~\waޜf cXNb(8\sc:@2t C`5#ha_5ٗc@ ZC%UkݗM/4NbpcJ;w]]|Ë֮`q: ~.C2+?hh{6ۿ/OahRWr(f5E8/`Js, n,x֢EX]1wL)ѧ-Yё-aJx3}-‹VO#Di}؄5` ݽ}1ր-#K)/l.ɸ3FGCEcV.r$]_4ik. ͊ѷ1,[<_ =>]C>8\΢2SJz@96B@><x||֒G$7T GOLa_'R֥SIPq~\4|glm] RYuϗ~D&悵-Tbͯ$0TRʜω$ip(ŝ$Jt$xu5xIfo磊AYc`B8ErZفҹ9Ҝ?bcl!{#}1(n{QR6\[>?Y8 q A0ֿֿ_z7ft/tJ.,_Cyu9%Rv3lJS}͛[xkCdјJRW-=o;CE-jN]!z6e}M ]!U5ұyu R`Q˨|IdZQKTm0D/$/ߐ#;1.lp #9pTQ"0qݎM@m&{Oo5?>?p?6n[`k{t}*п;m N:ik*Ab8M&iEѫ蕀a^oj d?_I4ԧJj&Lô@s]w'12VU+R ɖ Of).{= J:wB2qa^5+]GgIڠT׊s kg%zYvGm\AiބZͶZ_ϖwÖ%DyԦmU/2S$IJZϊ]w6rpj\v%ѮY * XLeLƊd3Dm~oQ!b&2>f_ `ӕoJWL$dDn>|_it3]o( @ҝ\q?_Jwk6g!ipvf)cf>vxZy#X#] Fˬּ%GDⷵ>"= ϧ}I0ڂFܣt>׀_Nb  :V?c 1$]T`ӮIA҄n]?tSXx߰*M;3Rb;U ޴R}GYa|hfGEf c$HsXN֍jnPUҖW0#$XbZ"00HY{7/N;uP^nl$<\K"cNP^ia>ܥ?2ˣMBdŧX>IHrfVB% HG^5YxdQ25k =Fz~#eoG)Kp7k11 z殽̝iW<ߓ17t*y;3"NcGA<(Ú S3 3Kķ!llY la!]..@XZʵ[hGTQuGLFGm_N5B?-@غZJ+%JVcG/!3UqҦ]$i ON<С]zw-^3q]n dꤖ-!p_2շ">ᣣ@mns}>%|jL*%޾|= &'%!ع; @qEλMFrT s}hH$.|ZvU5~2oG"& ޅ~^XB~f4dCvZrH_@8 1C?'y,;a/ 04۰-yOI~~#A>6#`sw@x⴫sթ~dtiG0wz(wvQLYbM Ьc{n6;ށD|?3v> rL6z~o=|1"_,Z"{u'EڕQr 6۲.ׄx&lZpد?ۍ/Ym (El:RH.95`<*n}v6Ǖ ̣R)k>iBAn(EJOm5iN#iӸHL?T?ef< @Ä['}-rRԓI|04BqT$Z^j8o 8sN&&-ЯĀWH䳃[:AOߜ*~כIm!;|w%dgfJFݼ{"88|fh| }`chK^dϝ+7V>ӠРzdT}u5i[#gj16LW̱ BF'cS.cC+qk`Ha?+{/bPsrKb,!_Z #r׈]敝/ݾ)#u9(O,j[UZ@Pxkv=  eCY(G sx Rbrh/tԼHJT} z؜R}&sȉra;RYzC}{|ӿϧ-3@Ѷ`kS4}z֏Z۾ޣE*_z`'|'MfL6S)wxo1&q=D*xʻ?C:6;ps1]Lߏ %Z_)<9. =#arOH6J֐I:&3@PW$u Yr;<.G4K_a*uUwKO[lŧh1c5czX=/ ܑG7==u*lׯ5jF\*(_q0I%SkڂYfat,?f!3Y`@[Dű'lޢ>9LqޢIUIXZ=.BQ] *XܻMF,xȧGFKw DXBgQVCz<@5)5HNHdYT7ի:=gbk纙@E2VR׀,!۱ SSyE5V[۾~>g( 4w&#0OkQ6_A Q Ai{2_o>ς\UgB#ܮm'PȬz[_4$Y .lAYYC|{?&"EP6Gq$%OY2PjvQ1qI]@C6%g(ʞ\'^EsOe#HKv%d. 9q'?8bV翨O rG9\rt%fIsdD /=g['lEb_8t$ َ/_-بk rFJZcr?j<Q?FZ_}>??|(gltvXto=b4-N,Ǩ#~yN*Mhb&N;eM>醰\;<79ш P^ u'|lt1GQ@i_Љ0NMLG0ԓ^-fD'5|gH*ycR[و`HOҡ@U۹'ƽͫv3Bc#rsCyO rRSZ?pIbũ)4\ ío {DL-؍N>F\hf־C5}I-Z]9fb_D2nCu vQ/v蚟K/wJLᅧo 䧶WYwK[;LxCT1< Y~ T[ @Q;"S+*S_ŝP\XriJ d\l.O)a`ϖ~~[?oNvZоasS@4cOQk?vrXEʌAi|:b֡K*I@4׫.y?X`خ/V$+-%R%H(u K ~3-1CC\JiZyrbBrn[oO6=(P޼?O̕}Zħ8c5`qջGkޢm?k\v:}[ I0mZ|VG$ϝk FWYNHV vd$ǩj)m [ZO z&Lm@~j/mY6/Έ&P4˃ #eJ"KG24Eҝ56R.^L8\O,V߾[Hw#tvdc!bḆ[|`l?='ڠMs(pTT[6<B xrwF489D ,cS?U$P6루lyJy<ڔE86HXSj|c褓*mm|Vy9?s$|/$X'8j =mWJqC9sNWujN f}ݼ=ZXu:5IY*ʶY0Q[+^؃ 5`C4`g吹[`wQIkM=^vm(sҊYUJx Y!-SE㏎"nmT+wF4wUK,Ƌ@k(J⻒r bLFW%+\ZCP9Jxg{ޢr?'f[ pw<`o;ED W(}MU UCW"?,M{4KlP۝V'cׯFS Q?Қ238,྄ZLȧf˿N^Tt+ICmgcH"Db!'1 ªqM8|G'P.3'=}sG:pb4[p \b]kT/ʳIFS$El+XOKoO8 .Ƴ+`OD@ z5 i ^^UgF%D!a@j hȉQ?!IA[$Աfzc8c/y !(\bŸbnZ93.rV\63Km~@0L]lnM0uLR51>X+||;aE Ϣ KT\͟kcMv>`YKt&d^;} |VJxm<}HGpiPŗB7 ק;"fLPBŔ@{Ϙ;QI TrN9`hqh29On"x-lΆ8:V$>U@y0%O(YB6)K̢3|Ds|8ׁ?MW <#NG!?ӿٛwѣGX =.MׂђoJ[-'~\GI6E|_mgf"M%[w9 UV3p^k5jMsٴ tY;MX\nzMZQK >@1Rݙs|i?Qvұ^ +:tڳEplQK/?~W,|)3$pUIЅ-B]0֨^ޚ"w6هcN'gQy#FЖԂ9`qeu$V#afG,)m~TpzÇh>LnN?,7- atⴊwLH2C`=0kX @ghf-f-j`ԱDdGprh6u םBK1w_#yЂ0s:caIȺ S;9AHI?} `,M6H[ aBZoGGD @Dȉqm՞PpK"9l5oUy|b[vc)"ȹcm+ؑR+<`hھ,ֵ⎮Le51'X*7NXd`i2Y/^ C*GMjqʘ*.t oJH߆f*(TL&5֚cW(R@~3(֙r T>%x&WoTʇxDjUeo+TT .7KnT~r ,hUQ^Q´bFvgԖWMnW5v\.P@p)aXuh)2[]'43`BH>Is &JB=L"A<CCe#^X /[>K+u4ϣZ_WY|%18ps  =9G>kZ6i !IfE# SA(umpY9,#~nC B:>ѢͨEkf{ X9t:#Zxo賲m[/w;: +VIn6EqaMWo!q㥒b- !(?zLc_Xrݽ^بU5/ȫyGo6^MLll`,r\d` <:iHA 55c wEO`/v1*k&$"f9|Rw *%e ͫJI\hEՅf}FN9Ӏu"XAΓ(!J~T΋hO= 7&}'%n[=&Rqe{x5rT D%2nD\#+`Jj0^mgyjZG?p-`+0r -H!tWb dn<Թ J0Y473s mJXʽ>{ڃ=dJ-<-L>|KDCk$;?;Ev qYp$YQrV$g kwp}$WdIt?YiTl^#~+kŞ]Y.Y]͉ele~=(>@U.m@HA!Qj4d2v`79'Op07\Z0rW~"b!o}}?ZԟaTws`E_BoEؽ{~8p3Jl ("'a~̞l\ZE'+o'2By`1b w\tua+QrxO@fd6ٙ=nnRUyNNAרTYoL^PR6dZ4O"Zs$VPĘGYG8wΩYX+xjiVK5=ɱѓ' _ GJf?lyqIvS64Y0mIInW~w;,snDXB#h4Dn֌ti6,?Y5ℶ@QHPeZ`w>)ZnVPYk$Ýr"Ac5LW Q<) F ,)v=hKcD:cV1%|ksᑁŒcY#;0yRb8W/ U÷e_8pGdrBqgs7OWzCL9++bK6{)cXmO|?[k}%8b35Խyo޾ b~ݿJc+wIfES|%c` -(!A;!{dD_zX2p>ܛ= #_>K)aDwjwP A=Cfli8|ިGtR<^,im pB)0{H4O*GrisLF?T8#W &SjYL6oLIn5&`F q/ӿe#^M%Zi5 +H^yԶh`o"Aw6z-ӿU?I$5{h}4 kX/~% S?g9mOsw6zМFXΒ-#΄!직*WL8;BE츷!eZ^|k:X)dLr-n)Rt#-1Lt3`hxjGJA.}v@a)[fC뙂J2G.t)F!iSɟ|>%FÒVg+/:;3o  sQ{6:{1h-y׳NlT$ǠGؕK@a̟B\ffI"?(bz@V,%'{;&v".7r7_9 9Ό 39ba` HHwjn%;f'cTsA:r1L&e@;{qMb~e"¨ ofVCJ2A2F/r|fG>ie~:TpX١Y^;<1@ɇDR} iqʋk(RLy<-WqQtWJ*(}P9uͪN[+Ӓ>~̊#,EN7 䂑6ee&fY=dXWH$VK S?<ۧ h2pxyZGpok~CcہRN.4Rv=;\=Df? (eM6KRQy$+<l0nѬ@GfxtPdȢ ш3S<1 12#ڙr~IN ?(mVpsBt c"ɹK8ٚL:T&}i  hXvnBT_(4TPBHضcwRe,>ߩpt 8j)o7Wvbaܫp<~y0rUC2$@D[y.8nI%]X5n]1fN`N?-k.;М EO2{c~Ǒ*sqxfB08v[%}'CWl$| @M)+/_w}=WySHMSV 4~|sg sx; QYYʾ!1ꗖ.(KACEwoq4ߺ BB۟i^Ϯʀ`/<_ WE=ԍye2ޙSnZHUO\kD6A bM^kj =ӿ1Zâ3/G%8O[d'jQ(ڕC%u{Hd.|A֬=o>u^fEhbP> %qUT;]h.)/X<k-A7̬<{hnkfXL7W1>>ޠx"W(mY%Gdg&^o<(18ZcJ qmxA-WSӬNGi}k^&kȈM"[ѿ͌j'~ kޚ CwVn10V{S 澦k*~ GDkvKy \Ǫ 2v@cff,nCn 6 Y qvIpP}yYvϗ0 pѠ:e U9+Qh6ךߟlG$ .khO_%#j'XvF;pGڟ d w:bx/$@ qZ^Ǝ5)w*Nl{wڅ}؞iimp 5..ܚrXX}'F(y2+维f+#j\lK۹#zj$/-4S1|θ*I NW.0Y6>O;*aN}O}f82s;~c"Dd9?"p`Urk`wՊJjD^AXjI!o?{D˅j.Xh ]*YV4 xճDQCLᜋ"shAo {baîb\~jLzSZ1Yy 5]T' Trj8٨0Q`tS~XCm5\.z gN~4O'@9eOC>-0>DL %s}1V߼.%9 G +AsP@*0YF4rmZI aDٗ]Pv:.d] ͆M~X~LѨNE?Z0ٟp(#FXC,2?1iAݬEB颦s+_%fӽKj@eUL_xgTP_ }z_3^t!niр6E{4|_;:ڱd>V׌I ~I2  ɉ)6ٷil%i;iJ޹~/0ީKb߻u8T%8d6e3wG*&W=s]%:Ė:Ğӄ*kd Ҕ,GOVT1XM;5}&wްs~4kI^zr]Zn󼴚l̪͋Lg(FXƠ  tmڈ a?=C *SX_oyV*-xOѓ[DU [w .Q'fLS)-XF}xmm̴F7 fsi-a?4Sȡ𷶭pL:BHP]29lGKOLiHMػ]_а$Xl~\;M)E8{AwEqkl.{Z: g=p jMTEdۋOw.W!S| pSNC%ŏvW$0REN1B{tMKـRMBCm U@|4ڵQxoʂr7 sm ϲ{4ru[*$ȏ93k7#0[<632lܺK<ư%pʰg@)o9D+'?3L?o  Dwm݊,eW/%0批{3pPM r/"#}Yب6$f'9̓ cKy/A+mo _w4ǪP5h>7ZR۽9|?nil?c:D3|}ZCy;6E0k@f\ + tg@ό@D5E'IR)`E%q!Vo-Ԉ(;rNY,┖%F;MR zQv3MpRFvY2KaOB[tP1 d918}HEUu&YηEVr:wb۶0Ei4`($1fyXkc1Fm1z3|k m<}`% - ` KV賗-L>`fXv\gzzo_ߟ K3Y՝OWЮ8神;3$R]# A# dO25 jғ a#qkyƶY? I#HAI'/!s1 1R07L UN`6+mdBmZdXBr`qG)KD)|ؑcRU/~G9윥$[])K@T-C(tc LeHy)agF{ DU;=© X- lX8c`eh$yNDX]]w}jYB_[e@11/Ήw.ĥ>c6 ޻]$Btd e@-NR!b!QyMTRF1/g;. Ke>+ej3b@}nr|J&YYZ+F!H}afA`\e?qpĕerEY.٤o(0m[V!A-T.@bmN>D=gՍxHSEO' yq3y`UFx" ΚP,g-(}E*Yg)|W+%bꄿfH^?V ^\[965D+~]ߞ 6`p%}r0t,gd ߈H,OSVg@9Fm634& ~4yUq_qeIg]1>4J`jvK 5ѷYUtRk@E4)7s߅?I6mx@ ZMd^L"@Չ`L>|:ޔJ׺d0ϏrwYsn`4PMHu%DӂI#=Ge0F{VʃURQݚ)#׳lCyN$dL:9LkW&J)Y " cx46ЬbFNwTA{6m [KmXc`CkoW1F_IÃLzH'Qi2hfZYZ/ˬ̗*5 JЅ , hKJHA@丙kHF8a1 WDnc{H{kHcHX2 u=8km=)C[44BxT4i ] x}Z׾qxs}jL tH2F yrprrt@tDx෻XIJ(e08#}vVԚ*kܭ8Bt^q UJ,Ka@18 ) V ;T#N_w8ߵm:XB](e~œCG)J |"K֕i:T~VMI>NF$^e.&cotxuLykXwk㲱 V6885@Y@P_!/ByڠI!XB5E蜌y>9p8''Vёq9 f:I '{,ף-_&LY)?(nwN Bsڴ-gzahyha-E+p*P~AަȪ`maf7mHaqV5ٻyR(WUڏ(0ǥj8Jcͫ-Uz lVW:!&ְD==Z FĆnlD}6~oZS?5ywֆ # Chh3,HN zW<מ?{;,ΒofH QEJ^23CV>x -lAXcP_?Ut 9+$mشLK-e60{P v~ >!T7Fƶ/rO*yũD\b\4j jֻJMi~A\*ch^JwʕUzj/6)TÎzɻiy8/2g/ߨV3%K7tܳx5hl0]1A!’bNgr# j™ؔ a\7JąԔk ʮ eǕNkf$MXɫ%t%* Mhw/OzB!^<툱{>;*H;bAF6hI\5{%i ;Mj w/S8,Iew3#1zzD(U F(;`'yD I DDŽSAܫ޾0} O2UЄ$h$ۢ0kˇic˶M~q0]0eyոpjcV?M\֟h3p|=%/8Ӟ}y76`N;%hb5?1K'D`{f"IS6;$ALRF8E:\[AB aM#zd4\D-b?4ӏ>2X߃i q=>c; tEiB=.?wΐEQV"B3npPv3 @ _"ɱ!j<?Z,5^.'GR fOE`>y$m_Wu'Mƛb~߶nml7bj&d3dTCI5&;-![epju?BɣEL9(0F1 +&\ "&İKr/m<YN~Sx$!6avU6NqyZkcALWNӷNg`>fkPK h3R!CÏO^8|'֦r0e1ȜI $ ٪y֌ƶ&ښKk !Mb v!裵'wӰn&c52hj`DFvw{k7`Thm<}[?N(%̚,X7LSfxqʴ_Ps d%!?hn)$N1j 9,Mfr ndT'x*Mt+)]bwE(PmHI;ǦLQ^98耂.[5hH s# ,.(X%OcRWM(>KLyvyJHS\<L40 ɩs0Ul C% \ps\:'y!' %(\7N+TŌ ƫz1'(&ž *y}*ӧA 6pChl7.]~fΫ60>dι Ejqچh<})j>wwv[\ifzyi .A` =jj&xff{6O )f"K}fQ>58S<>d{R2ṂJq~ ` }QS5{,5z}"2n99~r&zdjyI@TA!hKJ̀:ߛJ`lQ[ډPjqd >PGoASQ lmJu:D6QP/3nqHg!jZ#q S>qXX\D H`\BՓ$` 7?˽cOfP-@aSrY @̛63e?Kpu zϦH-cvEESE'w% Wk[h f{K:|ś9 M=Tޡ8%Ӣ:C;ІRhb.MXL@-Gv%nG`d%(ڈr{WVT]6K^e^%~?H骎LM8&KQ!jOiHtaFVK /;0SF). Bߤp*wX9m<"ymk?S~%-jtahm41&=_7{oH, `).?,!ۿ> ׫4X6.9 Yh(Ü%K03c#M닰/u',=!'7Y)@ŸW"-Qrr/7yq~=͐=)V1AA2! 2祕N58)eKLYbeAa#ҒTLp(eF oKCu,Hw/ 6>e!BbK# "xK[=J'M]t>R.H}rTH,hXc| @Y3FaADv2 2HF -V78!(e0^ SubٜqvbiGD13M5`!C??"p}wr?5F5E®zc6 -$O}뽿aߪҠ6V100lذS¨I%$3R$s?jL;Ī^ƴx fAO5uy8{>eOϸCȞ"[ď|Ttq翙/@)e=,w%V-fVR$x!a.JAz$PVy3I4Pp/1C^i1xD Wk-$IX]D -%zS">UHȚN#i%RqJ2ؖ`۟ooy ئda ZS[4?=,0ëF`P ܚ~UbcIqQ$R+a+t1qyOK$pOqXsĦ s,1!Q iN\^|H+T0Ԛ,it8 kAMOjN#IrykjP@m`2ђuq4v[r& ^wbq<Зh]x΋m֢'.R+4cb*c"L"}sHCd m熙YۏXavNA G'l[‡+ڞ4K"(ko끾0rqQDJ5X e hg,0}M fPʡ؀Jb!ioҜSG^_ڿm?s01nh͑$KE0+@l )+/Z[Mk]uFi?PAŸT m (2O)sX #2[4" :_sj^X =A% `VafTO<~Ϭ >1{0[ki |vO4(hk<Z aFsMc\iW~:2)E u ]K.{L늒oA!;ki1 :xp"@$q6 h+ <.HeRS\-aGG2%YFp*+d5pX "!;1KɩZ P^6]N3R,pXkcXkwNʤvHS ѳgP´yC-H`1Zkc?nj)7ҶJ2xmŐz$Xf^5m'2@޲CO~Fg1_hZvlL~-<5*_cEBJc$,@dx[b eL1#MvÞxv<*ӍΡ\"Aa y?mKOt]\j~uJbdY/7 ǐ&#J FS'631c>Ծt >C<߬ kYbEm`[$ :@ 9c  R>/~ xnOwцk b׺XYӢbLC |ǐSX;U4X2< r![-qMgsc]߼}ۑW(vYl+&­WM^cy:IqBVxqG?+C@VBY[w"w 5qveҧs q !uT*we-`H,C 8xR%\A|G e$‰ ڒ]?Omìq kI<$b,QǘK)@vt&IvZnc0>T:ײ@,ij?8bgI [@1XŒ$y?+*F*q 6onzAW>,wǭ5<ZתsBKO;<L:W~МF3f68?ضE@.\9[k/ kؼT빛qZ83`Br茹Z #y~ 3]~%+e^.3k̎'4*܌~SzcRm<<ik#CC4E 55 4\-Six,1@{piUTMnK(]8F+.1\?$S] s2Sr0d 3ycKT ɓX=raf68A SC=t5eNbjv1fGR s_̇?Lr1ûMm(׀tgjf% ڐةav-kTK`{M9dxWٝFVD+6cb@ 0`hhu!4BqdAln@sX,8 bV Z38Lx"VLZm~Hc(0*KvW(ኳ>*sVB7]` 2F u!xn~*Q 'V\Y?nFm`>{v |s_;yqrjZrFFaOmOX }g4\~dHE9xY\eRȽ04Yg`kfS.Fas$HZ#qEZC؀&vVڱs~^^5I8V%6t`D{qk? M!v"oy?27յUeA&O'm5g@:%g?q{}|{ A?=UК$dZ3}{{ӿk!0W2 gа-/$)!J;Y{'.a}= 34.HK!$.%~G8Au~7݂/ET"modƎ$qSUC MazTҪ458H'(,bW5HhA^@$#C (Z ǖ#3[%^~IXf^!UT?#q*cpGT +Ϡ珗k&Cish(;iD.'y} y4҇^煸nỌbBe꙳A,].^SFefczZ&e?iXl@Ie BSeDѐrnaDKz>8r>N*a)A] l>g{pbx yFG fڡrV:CJI\4 j޶,%(jwVЬ6s ʈX\XRYB&\L?0 zrMr: xTcjUV%ya<Š;*p: fk2`?xR<040IKRj<ABٜ:][.3M;@[!vNf#| ][ϥe&X6$)SԌ1.5 fmpmguIf}I0Erg<%g{EZ4 T&&%~_Y-5JS5c"to "?:YAΧP)-!X!5S:0%R,c5Px?\P <+-}o=sq,6O_y}[ tOuZz'55Xx1 xk7X/#YpzQt)5n^=]ojp_ fXF1JΎ7i2X,⭮09,*\oH[q8l kx>Uv4$ Īӕ<oΦ6u2h"zs8o nN4Yq&WA%RÔQu]p+BU۳ꇪ̪_8Zi ,q=PAvEy 4:k,#vu1 hEM#W>]UBE3 րCgL:{t6 60E)D"&7]w>ߧ{HO9riFU\=ئ )aeQJD0QS' M!.+iqYC̥W ;)%f"3s!U.6IGՔ9|yKӦǗ> Zy1gzI B^dzAش,"VƹQfq(QyQrKՔxf"yMs۝DNBϢy@7׽G(@M/;wwAؼb:J׽7YX;TErb$n{[Ռa+ .eb-{Z7){rP{ҟcW\PE8B#;k ]f);HWQ恾 1{G 0Zrʀ{HMpG,׳dE%_M>\i}QRĮb䕊\/p,upw)+Jc`"n& &B- Lj >r p `3L5.6#7,KF h/Y? #ڛH J=A0OZ=Q/}=, C*,t ٴQomrt(|vM 1ƀ`sӳ;3bE5[?/$[kQ|,WБW.p2{(IՃ"*<E{miL+-睤)+.Rx{^B=Vٞ|}0Fk^"]s_;׿{{;1qantC&BVQLEN[^&voZ)Z&nqcr:!7% |#?Тe, b锉:EuEy r,ay^Pf?ƯhvFy%4&=A2,KlU 3NRRY}!ZIPU% /˝D!"~ ?a9K'!މ .X7 IDAT{ogtJ 0CNw2/GɃwaKq"O6+)5O v8j(#iIy(޿-nb,8 Rק`̽GLϱLHJ&YFG8zaGXЄz,L?t f6h:0{w;?Nk|6hg cLqMo{&}_րf 6s ecW41A7 9l) ¼t: #zpgZ{8Y0{(VF-UJ/9GI z}Cm?HlSb*J&NPim晕J+qcF#~M9xhN! ?- rɄ{gTdJШ7RA; ~ _srITXwbn}̭U's\]c2[HX Gv0ď1RdY@ M ~ \D&B(*E z~kKim"#.# 5^l8v*RK0+*a97$}TmFCZRD| kZqϧ:/1wGL"bGXLnMpp=ZM(j˃D(T٣6\?,a4ah5 0ɠz0 r8]$v q)ܗiW[֦_)x.gt BaB2#ԫ6hEqeFIK},h?$}<{t󴇮 2`5Ry1ӟo<3=7C0.|K MSϘX0T s+:I2Y^QQxV\ yvRHq7G.qHD&'Jf2ǐ$if> *3C7;{M[]dΝӒ{_KYðy!`'F?KlᾝMSL>[/ (Ϗ< Q!,Gl.EmE}KoAm܏d.L s e0P̔ix97N!gH2'ԋ|YeR3`jwC6-Kc} Ɂó `_4*I(&ZŜ_uZ_Z]\X8O3.8D[NL-"%ZꢀbIgĢy(oI2IΕD* ٤okm?nѹMV'C^?q6fF+hHDmyJ€YaX"0i3A{@"~>kOd|4\u_QW$vt x%$JDKQ)yFVV!m!*` (qv?)~>Y\z72B{6{1Z[{y>C6 )blvDy䂶 +SfrY$NG n$[3c\T58͇;+b:4 !ڱR!Ebr홹\Ʒay暯AcL?9cK#<=&eJeh 5 MjSe)9%))p[eUWZteX|iT%ߩO9BR ,M2CU`?T*R>'f95Q<#@;[mƠ$Ɏ`09w%H0~U*[0 qM󡅑 ʮ"RTO\WH$6D֚9DXa4ޡ04韦w e cMdhh@QecqjÉ~\4{S".~DXХ7,[BQO$9ϜqO OChud\?E*9kZ#X5\N qb(6?4'1%&t?'ŸLdR@3;WMz__y߿>yg@(`xkl (c(USkMS!IBN +aOײgV-nTDLDdTxR=jyLhQ%@i ])@d= G7.MVFYԑXoKm1xg Q$B>Ю v^c>N7˾o̍.aC+#&-Y3FE4 j5=Ec[*ː|X*j ,hm^.g@ @2ݗ>|Bh XwX N1ķ8-<p بlW^f 63w3mh;Lٔf=]ӝ+>.&ES|OśƏ1$ Nf{ҪE+7(#-ʀr͔3C4.2T8zk HCc#vTS-~*D?9R8z΃SDVpd(`ީL""Ǜ3.7.65w9xb~ RWϲoH]Qh z${߿}y}׈e!Zklm<*#.):c~iJPތXG,Uf^4ngWs\N U>]n/ZtBDս*LSc!ʣ!ABeQk1B2R聄fM^H mxW6p(` ěh| xUgIu w)K^9w]e0 WqET KX} 338L li]3bF OY=@%t\vo&\>cn0A`@:Jњd%_l\,rl>̟OTsP*lHHIz2άLq̺&R{NB 9.ݣ>0vqMez792b2,EPue="$Y"(,HbefZt-Z!v.H ڮ nu˵u.>D#1_8uAUKC9BB P ]X&ȵo{nP$WǠeN2/f;jh'1مOO16Z뽷}y}}߿7eA󭤠P&, l},x7oU 1lԝGDŔ4ǟIk)*i"W_DXXVtea@H$N,=tX5EĐJx[ Htʼn=tV.ssiHsC"d`HEJݺqv` rYboV~г |COw q+ybUĭ\7:"# $Y> '_2-'9~)sN5<Zrd@;t"}o\M !Ij>(g i)|Mң$f!DADDT~p% Z OzQ+p\37eH^w ,G \⤎]bR,/I.Pfm`Tj2AbM"ӡF|9bGi/1g#` ~6|b4q^O묢oцX?f!A*#YmpBY! fs4z?:rvJdg*ο _ 9c %QpW땧#?&ީtJՈ%AF) /fM5! 55)"$e-B.6zN%[Rn!.]JgDD:l3 v5YXunRd B^niɡd$s)>5͢:ƣp'-XA~0F*ި-QV 9Q9mg67`>wIػ#` }}ffYه1Ac`p6IΘpeɡ]<1Zdc}_n\nX$1衎HViXpy" F~ǟW0 B&N>)qq 6>ڍG97lb-'J9eQ "m2 ͮf?L=, FSws񇰤!E10v\Aܤ3JbWT bYp]N }*X@ӞlA(?g=J吡^/)9Q)H3RMe:roxl-(&4Gw#u FZPzIv]Bsjq%ɣ0;f:)j-s^[QE0o[5aVB%u~B}U|IRw3V+Xi7v&ʥi#;;¨ϔԺ_Qȉ%OpAP(Y~uB;|)# #gwB V;nJ l)1 l\m"%\)Pc9֒J޺׈;O]!=)Mp 4 :ISJ{(՞4RFVć.a?=i!?cCMw Ƞ?ѵ,:` y{<מ־Z뽏8Y!08mj?E/>)%@sEa&45#VZ 9ʼj%Ү2XIճ(.Uױ}ot9eAcȡ6L.&H i2{D1I1VKELCwNYTX؈»_"-B(Q?d9،,yAJ鹲z'O^XKX)OF7ȱ]OEG[&!j1%'0v0hUoJ)=1* /m\yD7̓Y _חilgoY B'|B, CyQ *TcrEjf 9 V1\owbA%0Vp75 !]=ߦc+ӋRCy?Zͩ4KfC+ib{M|NA20?rX ]y(2΃\a6chS t ŧb"{з0lƏ38f]PjU»p,*}&d*VK!d̸f8NR* ?;?h`h3 ]><{[ck"ط-8nID *Ok{=*D&z\ǵHY+fY4E-`3]W,euw-vyf|؁zȒ1SkБW@⏪.FDdż%Frg2u *^kхfjgAq!F 2C!Ypoq<I'M`4j=mLhafUp/(3kž"K>}Z?e9Ѽ)|@mjĦ%[ Z) \n+PɏJTC7|?xseL ydJJPoa)}_Z,G)l_ l;'QA QQr.GCpUg/RLɞ1WaU.u7ŭL; ]/ڐGZ)?}z!&ðʊ,avL>*YMu|r0X1{k`aRd"qЀ8k6,_%mm|"ԅR0{ܴ-Xg½y3$)20}[@-e_ὔp:$c^cch.44ϸwRexNWK Jb;)0aLFOF4=;|>!P_̛hQL>߻L z,("tOm0 E%uը Hd5f!{ٳ0$B}9-5 =|.sl1i$WcUG|TeڥTv,D*MA!{6!, N1oם2rڗUH2YaaҠurotav!108SߤJ+$3uqU\DZ 3mbf)6,GVOtڼfsusolCuNAGC4n:МVe_KH9( |^BD^oS /?ixpT`4?]mgv'* tYUl[+bA} C<=U{ Ab0,jgilC3oes|nlwwv}&M]ggW'dlDkJzh@E:GmRdC_''k*O}LjIh jс*:ԲWsU\O!K6Xj豕H*B1( X!G8fS5:}kJ# UOEO;,PTeKuLm-e:"D9lGU3ܢhZ=+I@zZ ~׼J,꜇Syú+`:EX8Wzoh=-8r0*))CFbGY)YU;v K5[N&:OgSVK㚡Rm+.fV3N]*y^it0"VҐȠF}t Ohg_"UE鍧^\: ݓ_|G>>=?CU4_h֩hI,NN}m1=}Jx(P14Mʩz4$'k@<blTNhW  /Gx#WQUqSu6~`._]^(0w4 &yv~yn9@ l9^ܿL^Fxղ {[_ՄcWnGtxy +CBa4ď7x/Ϥ:PU}TFn"5U ľEqxgaą|! #FMU3͠ ѩg)C䄦nz̡#ZNf"$˵p+SxC(Yҩ%RF#plQ<..ˢv3 lp ӡ`̬@ ѱ١ ۦ%X]&UvK4oT{cbv8ueJ+Obc Ga,͵34ɘzT3RP ?orD4\|>0yW> \A3gt#]Jӓx;(ؕjJ(e-2%#)w|^| '*0jO>’P8Iubڨ%ř>w{[k~wϿysg"AZ s-຺;?GyVf`4-X g@'K̦!@U_(KymgҶN5uFBDLKPomJyF慰D2}ݭyCâ%Í\l8 f6AP~EfUuXŽk(]駝VŒ3x с6(tsE+t+'[d}V_^%|g7cq;eS+ҞY];0(lMKZRJ6CW%8) WKQmsY`m,܃TǨ$"N XAIWr.vj(Cv(XJ"#)SWʯytI1GC -uVSTc %mڟT$V$Mܗ?V\EX򠷺\zE/xEZ&y9g^utgL5#[hS Ymb} mO b~_a]2~+G X6gx7Y#6(/._SK gVyLN{;.d*`Q{t#H 8D af@WzPL6X6qe!Z:n:_s?))fHYҍLU ]UlWz(Zis6LM[ efyeAu_Zmҁ|~^Ng3J.'Fd_BVB2ﮚgđ8 f ң~Lةzaf*,$*cj)BNXme XၣtMQy;.{Kã  7G`鵓n `.<%GDÙ廨ŤdDMSn=Lw&u}aqgHV\iN7OvG(Wiih+5rfy~.3+j9a psMG86[Sp^Us"Å*.Ejd%FAnOɹ6kG 9+)Mʃh~ ʵymAC {ܕ˲؊wbVxx$ $PKL#ji0wD}usEF}ͯ}o7PʬQdYP%Dr;Z@Z=j{D,LFs٭ZarFTk6OPbviN#ʢUs(Xz&a]ɝlEA"*ζ,@Vഎg4lW(d%s\+fux[-AOڧғ`05*Zr$ 7S`:|(aWzq6am_(7 5::'룟kd'C~U|ͬWhƺf r' VfEY)*h¢dJr,T"rIlʑٍa̢7fǠka@[ƸN5|@EױD%Ɛa+#CfEcW>T Un:VTu*_/YR;oK+ɵ1˶?n}ICaY kf_z]oD>*}_. ǔ$wZdjnۜM.~zD'[H|۠1ձpI| w7,9+bԲW"Ǹ>^s=:ivW4,Qy'F1ϓ jM1OwыDo!69*d: `K*0q6Kn4ois&Ǔhj^ @ƭ.)/}i~s,Bi~-y8W$5~8UW9i $~q2y+3q圶}0SU3 $mء*IgL˕?j> `V ^)*]漣8nAcԒ%@by÷9Vd\gܐy59;Kb93:,z KW)s;()FP/Oݺsj"Jjļ@.37L{nuW`>'b CYv,bt9Xg H_nӆGi-GDm5눑QdsOᫍ81\K0q-JeSSOM"7 QkvL9&>K=m\QQû4=k;k߁@^߷W @z2ԛ]˄w5D\WcN'Gg8"b:m6z8*9[ b{-Npfi5fs-"8$Z'l(^c ?{A@ T?b3XAMĘBs5AJGkChBX>,\Z _$@)3,wk"K٥6zDtLQi&:uSFtļ@A%f5/R&/kyQ~;CJrsLKbUƧ{914zW4T4`!cj ړ)J =*1?g3BϬD]J&SY0$C6̻gzs=}ߟsB@ֻ[\W\$'yX@脗pP%3ݯ1| q{ua6e&e>j㉤6Crܶܰ ;9x|,Z7(R#ÂhQT6*O p\Y Gk$ = LWD RU&) Դn8c{}53E?ɡ5ڏBÿ;-wɳoÃo9{F?RPIN܂z ^qƨŹSDR N;4%/5L<.k߀h\.b1q4=PD GZLH|}tBg|;$-Ke f)wHCZ/(*#]x#tS|X>Tci fXomN4GZ- G%LyB,\b>.[Iu$ҽt` ߆s6Mo)5"y@عJ4yaݞrcmQw?4  ł~@b`rj޼ՄunI+['wdQ'8 tX|!ok:6u<<RE`@e0vN` z{mD,0ҀA SW۸`~_x$\/3d~^SONFIjc1eMBG1"[f@70omQ=T'6 $/N>Qbn~ "Ԃ)0:xw@9CS4I=a-v*sVy7Fɭ+\1v@5vr>˓Q¢E(+i@i&v<P  3״`Q#y?mJff3X>)+[P/Ki7WL)k8j/V cI7fn޼Y6Hˢi[2@"4^x= 5~zjAaiܤ>單S&HeۉVmKnlhÀ&V/jAwg sʠ{ߟG_fX[fhq]qu?s<T#cc{j`NdJW1 z&ɯ|C_ܡ$|k{|.1XxǴ{o @7x xkXI6j?L,w-?6\>SDyA9u~~Z,"aLtԆi\-SM Xu8 !g<*b亀"G6Jɪ`AFpY8S|oi'P`ucѮJH+b`c*@ y`=‹2!P缆^-6.)./pr=O-H+X\O;u,ZkTeu?*9Zܦux@z@OT}}_UAVVj kjkj"R'Bzv`M uh,*Y\/6rn#+Sˀ:~^9bK^ rqU9Wkr+vF<+b8Z*WP ]5+R14.(oCCXksN:5_Tֻ ױ -FXiSlg@і+NEDn; HNd[ټGV-+:Nɋhђ?7qv-mоo69_+v+g6sJ$†8e5oudlvuYv]Wk=.{_|?sFXP-/t]Zz罟k}77}.DL46Қ /\N Bk< BCwm4(5o8 俖s'l-JL $|Zk<<Ή[2SnPILgnþbd/`y $.'?1`3<Ƚ8Pr3/3aYTCyZ+5SOR[vlYld ~#MǴD%6 X7,?V spj3-pn79XgOj'*$ }5BZLb% Uc `l֯ rb{BkC =ڣHr\I(d#a6پ3jFf~jr5u9T;'l^h+D28lhK8w+5t?Hm*5(UD8՝cY*u4HH]wV3R1{$za iWDg"`ȴspV|\M!)1cD8 Ir8G<֘\]H㧕o5e.cRk}qn]sCv]\u}ۓ>|g(Q=G0AbsCܓ}=|+h>YhS!eAP vg'e;F:z kmT}}gkf(0e kp ÒnQW0lq( vx&oUⱏ?X;>ꇍP]Ty ZRavapXk/n+[_ĉ%NxIlKAoiri]1r,7.ȟ *Ɗ1"&sU)®>~>+yM1O=cwGa?&SI^W(AjdVIעqM/5m¸y0 \Shi%9b7OKE*+;fّPIZQuD C{3 eҋ^sȆ.0gZ[O~c|g^kր튬 v`qxzV*K z c,ho=Ls;3meA8dȜ8òsobeQ,ڢYS6nQl֚G5on`?ngLu30!3ı *.L0}N: 2'A>zHY C[Z\9܌X5#xZNCq>RC?]@gs jykhWQA} ~yu=se06ږ'- (1nv =ؔ<c}A;*UyMvb:!; (̫$X<.Z&/J9\3p 4,N[ \OefBk=. v~(H%6!ATN=GsDLcs&vimޯ) $TrZ&UqѫOKnfg[ "\/Q0ɚL"6M\G@jqؕBOi" wPP~Ky8VPWkKL+pb,wike! 8B"z=HlK橛%,{cTy@_acc-,LD $E8Dqn%92@#/]Q坩;E1 C=l`ݮYGD<"mN+a8Yd<7N1.ҿ\ |FGi:ō3R0kE7T"~(ؓD@Wb'h7g*v@{ҙMp!eF Mm #6uDC8hcжAƸ+a6A&Aո:cNr [R+@IrMRv=}?<<|o =,⍀׀74hoXH;)+>{ ݴ{#.l ܡ Z)=YӓW4߁u7LU(_l\Q;GU>,K֟̄Ĵ LuP Zd\X4Vw+%^Oȴ[wSI6Wp2X#i DEbSK¢`} {Q v],V[#grO1/SNhSaeDۮu$q֢̂/p|>>El0J {gᾮ~juU7?j,dOUJgDvd)ɅBY^b$"ܒ*6"w1 c/lKO> z5fkpoPy uT"*VdP6S#ϴBq?`j<̩t,d+өԨ&)6o+*M3 ׾JS";ԗftL5e2A6Z# *Bua1'y$a!#gQD\R7`=Q)O+͵!W;:2VJ]4ܐ MRZdyNI,BN덾 "xˁݤy8 hxs3 ]oPJT=KǜB(_ B)e>vnvI.VҧY쬪8xa J"zx|{618cV5a/G$ŏGd5N9i?{bOEz:{<ެb ``J#eSGjzc>f粟Z, .Sqʀ]B.FЮzB X"V韯.soׄ|AxI1&נ"iH.hCmoDo}ze ]u+; _\&y'z_x7 oځW7)Rm# v} Ȼf33W2^Clݷ]lEJ-+fp?ê(R5Ḱq?(v欻,Ii-]'q"|!MbQHSGE+O?/[,!]UU&)";i]35)( g;]4}RFS|hlI DJb;Hq<ǡXz0]‰SAйQpȶXQ4T)pLusƾׅdĢs7xy$ >jk1"C XZtqk"p.}zSb^ۭw;UZ7^R=Unu%VDվZ,Yѝ&_6V|Wiv@aOGFdLNlK{h^f 0h_OwCȂ y Yp6^| S-4q=gat(q\ /=u+ SͬA_Ԫ ɤt{<"Z{#޷Ikg>t:/w^O} xK3H57aXV?2ߢeǏW2 q0skL"+ 1DY5PA* ]'crp2 64C_uym¼m fJ>>9vCk9a[Y@>pz9,/HL2YJ\"4-֤zs(v ~Q ,e7멬.'5tf%9 Nl}] ?;Wcl:{7ؼ#<'MR]' RY7Ïm OKU'R4XDpJ\ؚx$9ZW8[t|3`"ww2 ٩3,$%lUh/= tmf5e]??6t&SRwp\X1rdzgY;'9O`o&l-,(abL (4^d\jׁ:.=lhtQYw~k0bBIܠ6Ϳ}r$䙊T7jLAKKZZq3s> k@c0hhhW\qMO0Cw7o?> ?$˿쇜忙ӋLݲڂXPqJN 6 օdw.&J6Qד>XRY . ˽u0mY&)qsqF7t,ҟ cXU*Sgfhyl7[1Jm\Ҵs#Ub+9(P6MPiY9M_奟E1w9WJah.׮*$cZ ~~+5ND78ҋ8yA(͂aODQ9^bNYsǯ{J6ZDy-vX<|MFDmnKn5t A #NNfss5T _"vM~ΑjȌk:>ֵPI%I` 45,U'̂iCa V9rKlDԦ :C>b#< yüC!JJ*)8%9#|gơ8Dg.9>e(+ŲWߘDpmm|s]H|m|j5>{ie>,D+bDjiKa<b>y Xˉܹ;`\5^vRiӞw #<EW J+U"DT﷉+ fN#e "Ϻ՝[G.%^w>fӉ6LTM^7٦6iĉIj{e@+u2r.TwpύEoSX;Zʸck|ـG {e(y4+yLyg =Ӎ=,tX~17h[ZY~7 (nAf Ǔ$v/DJ#^iikU[áš'!)|~}XIXϵJli=]YZs*xSslx* IDATHlir: #9ݥPnm 3۬H-n6T7mV>m"hEhCn2_5` g.q֦z|yHqW?G:;qI97Bn"G9qOz@?01iRĊ8VرN~zxmbUǔlCUTG4+.^ ggnc}g>~3#C+jOB+nԟޫ]{]^}WbdeڮrqR_}; Bάt̺y x*REJTS];@+> _n)G&KͽBsq@Hw w8C2@G-܏vB,vI i2uZ{!g@؉U SjQ!~j"ES%ߋ" 3ZH)ELb_ĂvI|f&r $$kh蓆Gypjn"Ǫ=@Rz\E0Č hdk!PVrk7X&j2fG;9B]J[ 4V 5t]¬ڔVOEtP%/2~̄*8Qil-"WU?AK zDV],-ttrAUSteG%Q/QGXTM)$.o v~q᛻g;C[dHUhW f4:UT;}x{?O|ou:vuoZ\q^<={}b5oc5/I`W$qD8z"D aAQp9]g9;#7ŒyЧ9 洼kF i vv1\}u ZV|Y΄kVt{—8+dÛir5q(oIJKk$RP vk,25k96֯2qFWVߌ '$uT%Zn (:¿X\AG ?̭5Dxk5 t:I`pR3i<y2RTa5msPډ{⌓K[VYG 6|+ƍĠW اw)<{PBwUJ !;9X ]TmsWo9iY_CJ3e9ېi=Tjo~pq/?̉a!Ko|[։U˙)@tگeOSUYhՒv/ {;f}xQ$4)]>aug;LFP EӯſjZlL^5nh)VHX9w_+ f: o%Z1%f =E.d,{sKYgPȚ73]wy%ŁUFV:  +~~>Sl'ݡ#P瓾h#x[UL{fĔpm6gpteNrx뺿wsQA|#kus= & (:1b'FPn sh֗f%cby~s x7w TuikAլ .( 5ݨwԟYW:v˸fb-âUn1md2,8'ŏU+a h=|^ԝnj #GO~*Tx8%[USX԰zD뺞6=C0_s #vk3uG*:ZoOA_P=Dh'Ϊah氓2A[ Vî8tTKpAӒ{ʝľbz gN%s|3"ZO $Į<6x}ߊIS'g"8Yڶ43l4 UrJcNuamAK3OO gOga[sbj-Y .%hQjp8sn؆ӏ/ݫmӄ.嬂Oγ87z]JA/\kMؒsM Yo-UUJ bپ[Cެ[&iJD ևTм/04$S TX{7ko3ТNo${f=ݨu@}45R̼:ц {vIewni_$g!#?IfS^i/.i\JՄZ]YjunͻWB)#ڜ AI:oug?ˀZVOHF?x8}gYP0l$%rsRuNm5nW(fړ5W}>E=gw佲Mj,'/c,$^f'OíyC iD_v Vg D1n,9^o;ƒf p5jDpU:`%Qk:j7em;.ؿ_4"`&+%٧64Yxr$ +o,y{р9Z2}'%&MGܟ:,qZ7Q8 (=anfʧ;C]}+iӐ;"ߧ'KĮv뾯;B}= \=sƺ|Du]]>s?|3AsEosc žw᪌&zQIT*-\li^ O Y~rѨiDV#i9MYs|z@0.E3U=7`HO;E'OJGuCFPr7jl[(fLkT1,{g(wB0U.q7rh_WU/>?c뫗fY8-S2+CCل;Zkùuu}?F%`p&rOKDzQNSR}Y5`(.y#;J19H &D>,;EȸE#s" 7pm'RP1Ie;R.5Y"j8yͪu A>DmnI?=EK^'GJ6ۯGsJVbEB- Md ؅~xdvs64zĭUc.wQ!yۓɵ3!v=E#(~St" ėcҖ*Τ8Κ{EJ1'>.M8?|[׷?Fª f@ $8(+7dFU?8ՠJPxGJ>L$%W*x}~(u^q @gbF-ISi sbױ7gՕA *Mjm:nf *氱8+E5svZLYwˬ*v_E V4D>0+ڊ>ή+,Eed˖,Gν( hqQӺ`S32P"O)==Vr֞. x>JaUp߳"N ˖Gc5J'W8欓I>˪]_֒& 4YCRsy%LFPrlX8El3{tRGǚ}t@/rb(3;6WlBС>z)Μ}G20gf 5" 4[|0LmK4Sy*y-b|Av)8'pJPsJ;cs.)&}3`ҫ6wN PoRd әc{&4'6# ޥ/lV{'Qzʲ-=bPQ=%y {wR:ddc'8J(Dw dvc*5S=l<ݹ%HbI |S2jkUha4 ͷ󳷂3 y``@cE;@k6xHQ\YǖKp2¨O>NG(Hc|nYo0Mޙ-W 5)f P#/K9Y } ſ7 vHɶ [DktpV,2Uq1ęe7=YEOK7ƨ+zNCb;pEǹ-GsZ]Ao/;fK@ΰNK92i]iE67VLɌu..w}E(^UV15g m2T}M'K<)OXD{(+Xd$Aйeuni8zZ><ƭ/ vHpHi1-ՙ!AuE|^Ew&ɔ; SC_QѮb-VDɒQVg'gdJW ?NknFTg~g+G֓5Ki YqiQU1a[2SyO3ímP&pk{\BĂD>VA^G]W@NXɡ+44xtl ]&]᧽ۛ|$3Sm0d IDATE:v5尮d9ߪpw)79I6WtvV}I[^IEL& fQ49Ks\wE667 &d|fIr^cR'G|xVFFJø0}ߠ c܎o{,e-X/gΩfu,# g+^V +!вvX( *o FΗxc r~/Ɗd3QwqP8[,FS(Iѷ}o=6؁HF]ok}G^PkN#.>,`ɜI{i{p =O{7^{!0v9 Sj3-Z~IEFc=0%tڑEvAb7S_RmTCŔŰұò?ls5Z/ -u?HCJq=~i[2_]ghΩ]r/tۤ Ix|]@s-fXyzU kb%x%=|T;`nf{T֜;4mcd[O􈕇Pz 3o c\ҞD&y|1=\B2#B 9&+`=;攦C,eO&iNʈs:W^da&qD;Hub- FXAjoCG6pK,XARxҷJ#06Fpl0LڙXޞC` ~Ȼ4ĉ`{K 겴ZRx*I]'*ը) P+oGn[Y5_&@Hmqػ;#H>l32m' T`{%C&]G?}t'avb8AUX*SGu7a*Hӿe~?k[]~w=lj%UJ筙ZWtej }ơ*=ZOU-lXnXJ|A#v}!c: zkokWߎxK[sȩ<¾E$":zhNĭ1Un}\(M&o{awob)&\%@:Z}{]Zi8L:&(1ʇe77[):a+{ͻޙe:I83V %NeQZe6C} і #]dy&{l#)ҶGrhWqNbhaXqIˣDѱXGp(Wߛ ɣ/ OIdET%v8+j)~4sJ"E0G>uK5,fAщWh췩$ 5 <x162qP^9IY1VWUnBfsB7n%bdzׄ2h&?ʇ:dK&bwHPs<-fb dOq8c?˄8%Zm椌ٺVfUvm.v$U;?&66m*[Xr+5!4_[ )-Jk@}R#**0*)K號dˌf_^`*st!+\|<Qu=%WeS s~xlǝg;*%1'ɩMUrb+ %~E7mdIK@RwnxjN7E꫊U^+eU_]/hd!~=%ymܤR9U[Rt:9TKP5ZP TQY/2] V&s༼,X_\%V3GYwhQ].mTPPr7 qU&;LI2Ӡi4Z53DžL< Ax k0m 0Cծ~}?}?KobQv֯}z߱df0{8ip%nfFQ$)r|V1]9iҘ;wX֮M’S^JT~#M,f`~f= 3`EIOww1+O?#i&f{bDVUe{=Q*ͥ{x7Ë#?qr$˃g)ө*`:I2^\ոVpcnU!Y_O" rqThZπ6r666b>lԗd; `eU|}qЛUZ1+oHR!'S$֪ #WO$8$`p/l>˫g~xSWQUU1'˔,-bCV_%gBČUJ_'e|rڶK M:^ӊPN]oy؅![`8G(+Ƌ؃몥e0]Qهmv]==JhԠ cծpDF୍#6K8~ц<SW' Ovb8y ,+sO汑I9z[̕y_~懾',Jޛ>"h& 4Md;aG

I)¹i$7(#)Zw^yٖv&HH('WdPNT5sJQxKz|ooȕ9G\lwe< O⦄-Raxc3DARHkKq lEoyj8m9jP6s6u;nU'TQh 4*@`$cCAyu &'f,| _[M2K͙}FP}_BAT~ۆPUON*mQLp؅X (mዶVLb GbnBNJ6=ʨ6&yoUЕ‹8]5oAZkx[Br T9]" y^`˼KIՎY&:vd{HheM86VNbŽlJo&^7ZoU_gA \xyDU3p4V.~MN/ɞѡR}XAR7{fI|F2+m*S][ȏ*4He\/~1}.L_%fBXؖn6h30&?GPɔ"Ǐ|L<9|8"`Om\4m_~` \E@8"wϻZW6oshqɯlXs1C 9U4i~ꝊI鑽ia&B_1 +)EԝϑO)hyhX>TXD;ݽ5ms1֫)䤀;ʊ&/\T8+~dO'a lѬjpwq ?Z;+;`,Vj`s3T=+?{{1>%-j OCu_5oy{}^վv]h iO{;oX={m;u|H> jQ@&@)#`C4R%?pJmֳZ.dBqΔZEKMrd8!riԷbywqAc]ݛYɶm)G׼B cI} ~A \`z|^VuwP\K^lv6mj]]4z9QIJa8 gÁӧ~댶zT)UX8ȸn@FQ>xrk #&xLP6;&Mұj4,9xqw6O͛@5t!Iz{8 gu0Zr3c`Q#$"uDz}9kDQ!TXB M2ZҼglư:J qkεs Q?`~Fy>@jF !U%`.% 3SJyLX_fD6k#YtNuȰYir3`ֻlBZ  <5Jծ fq\ #;t@Q&wWV{}s_}}u]"6uh|>,6`5]P]>zV{s?~5jy|]] 5xdh9ݫ,Kq ڗoRw<0;C%mg߿*1.4&|]'J$Vh{ktNzd9yO1&Z;ӭR'ء<2C?qfe\fͭ[o xOnNaȨ:mb8xN2>{hI" `y S"ڐ)9{zm1y¥~#;` IDATl[k" N8ьU5 % 9`潃%kG(),5$N>XܠkUޚT $&@JV귖&5W7\VEKz6&~54o= 5:N]aHthaf|ju}v]uw~?ػ< v},{-3րwmOrfXH2 ۀ%e,4b v.wp`zoOT޶{/ P*C)}?bzH,|W;<{y ]M[8ݟgb^rQH '>j\>1j دEzQ6i(SHU(Y_( ߕ%.ewi&n2$N)b SH/>>wwc´Ύ r՚ vZQ~H1V웠n P:}yb0n*DB=JzG e6j)&q':`s܄EQR~PS 2PZZ*郄Rs EL [%F/c_«=^bɊ6腞Wte(uڳn7b"x *Y 4vwc ozD!iD$pR []Sȹ U0[Jr̜w=G $6/h'Pp`P,a&z]H򣕟ĕyCvj -1y%)^/$ f pc65QxH>nN=eF{."`|+v2-Ee@_-1E5 X臭ֽẈhTB R$ _j>2@ gƭ38C*POyna5?N5 pǞǟWxܠ/0g%`Zs}- ֯Y v?>|3K!b:0ӱbd)'Z#0LS/R pJr-WكLju[p|7UE[IĠts+Ui#աeAi5$b;r$ȘjAhA,ZPAL9EHhb7KӋxQB_{eQMFr?**BzQG~ƒz?: .Y9>آ {rK+TLd xu$׳MV'W(L,IߊN P272m V">%IGE<Q`Q[#^-ycjӀB}dɵذQN\,,EY 2(L?J>U(wZ a+"n0Y?)Vu>VZ\Q [cUԸȾ|/ v[l=X)!htMsMWڥoR, tjsk-s8K|^FύɦPpK0Fx`!7C7,@6!D76jՋidgnUgbmXwϐ{KYkֻf~ZQcY|Tsy|> D?ڴRľ_@k~]W~b'J`)i9ѥ3^K DTdE%bHH\R ,1[>גYFZ xƳ#ir/݄лKD9+z";Q۪ek#e`Ȣ`̡*[\s&ÐCEG־)TSjp1B:٘#/gWVsN%^kTL#(wdRyDvkit$Aqi6t;F yMDۓc@S8{F6e#J [JdnoiJ8EZ9L4_<2Җ5` i,ZZIr7Ā(0pqcJq+PV;k _a'r"9evH_x޿&.bf c4TOXaּwofy(vh@CƎw:.a[i^[ ~J zQah֬woͻR+F$i;pYH|qƛv!>`m<mHĨ԰Ϯ.%JJj BUv{}?|<׈  Bk֮sx3lgo \6Aꇼҿ~N̍.!"DF,抶$^-z!(0l!mpo; 1"ޛ휈Yw?aam~轨uIqڤoIEC@:ȖܫF,PZAog $O)>X!jL\!J܍O @L2Rd,5TVy >LH顜 1 Y{ ^t,ly~kUK@z#g}(d C@GqD }TN-@qQSQӜǡQJ9nT0/Gsț*~V ҚXtO9Jpwv?fmD}x Dm%53 tO۷olAvî♫'8 N$S*?ȨH$$Wd͊C3@, q+j"%Hp0Dnﵟv9QڊEkC7=gtAd&M?uifk XyS`>xтݼڰVҪd$.Ek۟yG;{|l-6Eb.a]%p4{:GHͲ|F!$? Q?d/7nGBLSxQsi"ªB )[3w|Wx蜴0Z@90<- ivQtF1SR+.6֦v~y,ߕY[7;ǀ E50HDU wH}j$7z+-0P x[KW /j. NaVޛK*RJAbQ5څ١CDa$<I$Ni=jZx g)ә֙~iMz1A?N}p(o=@[#NxTy a{>#s}]5 !0\iAw=}'TAbb xGN G;FSߒN{j6RrEU䭪OrzV|h3| 䯺=B$_B:tU)h|!s7=}u$t|S!B "Up[)v@MIJzvUQJj ?ȂC&kеF! ­Fk=/9[kFҌ: Q]\L 2:m0]B7 k6~a#6ix亯}'8B|}qw  8 oNj%`t|97򻞆t$dͳau~ hp$}q"OPiŦ'B .U5kVfCyv譡/n?X`wF l ;g"~6!}->cSF+O-7o6B2!_ 8pU׏ Vi[% r{FU@x&0] 0 ELJ`$ pݺ%A U&J全?8禎Q gBO(TUҝLL)d,^'%Z,góG0QLPS]Pt&a}'hH -Y2ZtGQz!v.t;h A{x oS5GrPj幺 V41 eƷ "V7L j8ϝjG& Kw/xR{6ry;ڄ?\ ]5}W *  F};`/fӲ[OʴJ `kvꌋT䲰є;'rߥ8U?Y΂0[rF!Ca!e bb-:cdd.bR~^)E ,6*ET{SfYrRi^#O2B?V:Fnl1tf'foWܭuc8ե?Hea6M(^uq9#_je(0T2>oѐa7XlMtHR׬cBo[x^F5gHczvM@Ctn`D*FpuKi҄ׄOdPHO9N?))H jxQ4@D0x87RaIoYzw^,,gl4JkI1 _p|1%Kͮ7C57А CQqTdӧ5M- v9>NN븃m|UPW8ġZJv[Svf>TbriR26C:S" !hv#b7g=suJp"@@G\ ]=1/" g}_Dk"Ω0%}I-< 24YejrƘ⍄l0ͨƬ 8uTѹi(Uf9q1 4NFV͎bA,}Q_(DYy%d[F$Y|BÜiv2>dj(qpr9܅y&H7!6m`?C(2dԶ%̥}b+;jZ- Xh3=CM.W3qɻƬ{1E,C8Fv}U`rF p@8 r#aJhR8,7Mٞm6LmsWt/a+ŃVr-)T8<$RQ /(4(D]0\a,up(NQKf)9OZDŽRp:砗cPwp9ɷfxdkZ-"^RFπ&Y1ͱ shU 'qHAcH8Q^ŎAZ3]k#C-M8W Z}iO{9 p/~ K!"ѩuBg+7DGR|Z5lP(['qރVT|&TMj/4)TFsO4(~x_Nŵ;_%|4N `PrMu-ekt}T\ؔɨKV^>~$Og@";sF@ 'Ș YJZ̲ H< G)X&l 5s$5`Kv!%3N-F-tF3S-;X)b [=\*$. ɥ*#")ʇP NСtgI78Ɵwv"}4,yMu(>prFgCBk/28:%I@D 0Qv :f=78wl,Fsr/H[M+C~d Ijbk>czǐC5<ސ6׀SFd IDATǧ,CtG@Rk5GkX5<<}ys_">Hp'Cj~+yPŁ(SjUE*W -8DǛwC}!/85?ɳREn fovllgX7[k6̟h-2>wX̌5glwZǕ5CTΏVJɍkZ#N5䏣FjvqUzq}~QZWPxz%x6d%9|Ê"t5et֤W"eڏwT(p8}s ;KV|{ h|!- ֬EcIYS2;o嫤MóTdCd+fb  ɧv#9ԬP|zC!WjMbm#(ͥH8 v9NA-,,h ІG[ y2chnKF0\dhUn$էe!/nϥ`nS0zvj|Lk%s`[bwDVDANwG&ˑU g43f[aZNZ\[-F+kk ňv)6fV>`h:o,J 0dUY*$<|S'yžJTYq9?FEb)[6Ζ](oOTaU"0QYl*뜄-S4r}~Zg;*Uш(Ѭ_߱E֛6 >4y M'{In^E?Op16 o5x?` ;Vߎs8wOFﭿ꠫MP>b { :̀˚7o_}?=RC?346>-6y\C5<}O#ЏM d=v"gV\oZֹǑw^1h&-8kܢ mZ-hߙ襪(#rK0NJyI +\]QR9H=0Ӗ>OX SM\t~3U\ly •n*_%N]:LLF6`K}e)(.}Ad ,ǘ_ʋ-v3ƿ,C͆-TS?+蘪Z{noCLr2Pmቭcg`rvC):me`w;b~7a~vZ\ɃaƥCPpy閵C8z`u] ㈧x|E_-I6Ӕ|vAQX0AXwų_ₕ-ך[>y5bSo1@fkz Uӭ5ޯ{ָ>|>Z' ˾lvR")Ut',8IB5;Qtm'Qҧs17ʮ1壔z O:Wa vZ ѹ#ݣwq@\ӁC"vaQ7t3"%r"D`pu0j eb;]=]|\Mtb-3Unr@%[oZ0q`NPWۚU̒WZ-,KǡeN7_ZүDk6Dy^ybEgviKOcl'c ~<U`~hPA}rI[v{k6cwl '~]u~~}I I,zk0za Mz~| ;@R˓%wUWeđq\$ ,X oE) )jN8qjV9072NCa!Z4^$Qfvj<@Bp ;g+j^KzpQZ3SV- 5*Dv{atHs' .JB(<\1H >yG\ݷ%T;39ݑ-f9(|Y{mUL^1v|G/eNa;vij Apb !j ו{B|xEV;X="ݰz6yEJOsVxȦsr(N]ΌYn[j'Cv J=QyM;#;X&,K1 [-|h|.z.wY = Ъ!X5865Ds_ Ctǐ[)~,a;?|P8ͣVb*bȗUë7֙kf3&T:ko m܅ԡ*vv/ Ziȋ4ͥ5_}&z,+|Vu;2rQLǐ%"繟}>?wNLUZl> mm_~;#K/MАF%0&XMeCߌr\[py7`Ǽ/ӷQ6 HP!w30yb-7iF0K|c_DjbGm(_=A|!^9ɛGnFofm+BJ޸k AZ;9.Y 7p$|֓D?IXnrv >Y4 HD`+3 _.++uh ɗ\ s`<#-w!? S.`TgM"ZպuwdMq6ss(ydN;?i.*2h#3*膘 [H >?Hf%;ezБmA(qn ?^]x(=:ܭ|JUw1\iw3O֋C,\#z$!8 M(YPʄ(C}^:NQH;<3XƶBs.61 T07KqޣW٤aP$0SbՂ[Z$2'#f8UKQ&Dd5p~Ȱo 9X|MC"g4JIGk#siDŽ@K 6/K%5!w@kS؁g:!\YਲmZwTS^*JBeoFPΠ+HяlE-oDc˩/K_4v[PE\[n ^\^ ;qb(@%u Ō'o&9խre}"`%ءt[C^`S=V4m4&nMe8dQUlݬQ=ԘWShL-ާbn9ET RI.b`o~8d 6rf, 8S]N[ )A^QDMOZQTL8b%uToKke4IG_`W"q<5u p_7tr^("TLp9!``֖CSH3'=* Qc Έ墢~͙a|VbIW^ RΏo2ۄ@0X1T;D+Z>NBWTYwn}`|#:nwo]>\yy<ϳ}#2y>v;fhU S1O3Q ĦK1USL% [d'Ku_KaHLhg07lc18nC3xoLbK7m+;! ƟMAY vw{GGr̓i% IBDd_A(טdi(%'؁g Qj3a STY: sF{/>/Uu(̊qbp,qmQn9  Fƨ\ܔZB יR*.J=Ә1+E:LD: f]YeV[>9Z[U6mvt"ؖe^A } v_W7 W{w݊#H(2ഫɐHUS'2qCDhP#'@ZFBaGdYF]KI6: (߿*i,% ̐O8Z҂@ܜX 9*$ev& !raKHr:k';3YVZkrxBS]&E)2+sKNYwcʬ* s" JlNK/L:*:X"0Iٔ{}==SC?) xf(x(&u.XMC|.DWTpa;ien֨oBKr1㻘>T VC܄Ҝk[:WYTZ7os+isMR{sl#`t˻N9jP@giTacϒKísSr򲯰qE>j: {XH8O _ͭQ}B:2x B*nm-s|7 <la? Q1lZ&Zm(VpEp_kb\a8 9:-knXyH(7k#oFjŐ 4-7cMA3BG[wKg/>њKr(IPN*Y} 7N]͝m4Ī0xE콁%M3X=[d%>o~ [\;ܼWqʠk:zpk rH`O㮚)IO ;'*&泑<8-ڇBޅ$8IUe6G"&نC{5W*-0!cɽ}[3][/rC.(րO ]z]~>À@ m;Ru-~[FTQѣX "ws;8|8ap{h}Y!IgǕ'WtX\UN)]V"OH`Di.q@6߱Wr~=Uzm!E+HHt㜢 3qvlm<,r32N%t,q%1m"\,R{)b3nͺ[iYבm-y(즠iܴNBeiΟ/ty*jH SJ5)vrO%*Y &:f$>ڻQ䶡}23\ $#~/ׁ̺sXdkIYgjY+ױnC[*ʨ)'fR 0:z ~4lS5/k\x)$~kqMHkd  Z.i6z͜ԋūiBFWXkB̶a@S *-䭇nSa[9LHSt&`}aR+^;-;>.R**hH+>fҼ}`BֻuG{_ϒL]Y?o:˄i~g{ZD?/4mb}S=J* /i/R, 9h7' Qs7W$S{JYKZ\k10lslA@T&+r"'lJ 6.6Am5s?A@'s2((z87Z%T/ !ݏy$'suM _wdE5YL8[qy`Gmrf)[Iٕ)s.?~I| hԼlqxw%S_g1*D"PO>%?׆ & o.P+g$8cTj?IO;i%*Sm?Jѫ#Jc0:Xfut_c5?Y}@㚺r~C%@P \4)=Tʇq/;@+l"+@Iwf"߾kCbR.:6-dՌZg޾!kHKW؊^|/ n;s@M;$Net#3vB{ (Ҷ#Au0H{搹xIw:,H'Fd ~fkO-΂ ,iBj{"Y30tt}}?ߙ΀U"u]Z{_g`H)<96CzG=5N-]ZeطCb }А0,YN8[7IDAT02|G $3>)C~ KhGQCVߞ 1؊OdQdFe;'6Ml{Ud&B&fyʁ@Vd~\ X}\q)h[6ϢTw%6Ἂ*nґu'ʙȁqAjOykk2EsW-iI O'Ev1CیE|~8{30`KwMugg)bKҷ:6\Ǫv+zA"нB"XΫjܓM"%Ӈ,ݾj׾~E(BɤO.I#XN)FEv)3[;B:qo@ۣShE ˳LRtLbN,yBlZ?[ڈbj֭ 0*U}mp;db?~J͞<ݺLKBU@2w "Z "d! Z\c8xnh" <LJF/[Ϡ2 m羿߿ -Ъ5DGf?;WqAMf`EPXQ` _9C5j3cξ$zgRϯl+4;0Gz7mS̈\&&+ыuI*JOټPFJ(e0Ri MT @<#LV`"+;_`VPA%BzE2zM)TP {hZ^m tF %jJDWdVfNFjNL0%"H j ,>5U֎,C5Lj g>)Mͨ@UU 6w 9zQ 9zz#胦r\p1,zt Q hev~eY^-8h'v|oԺYZԺu/g٬/\ou]!ӂƏv]}{Xg\H mK X\?n N*~<3.{C39塌ֆ.'NAG4ق=Oc86?v7e rŨMҍtm8:/2g2:ƸH>-Ӭ3A̕nz'>3j1m+Bj:#-."bHi6 PkON*uρ{CۡPhu>H<N$6yip2 ;zޭ5+)SMf!"TCjLj0< U\ =EphPAp6(H*pr8yVnO_JwNr5ߛ7n:\59J_,EҳmA#j,Y $4mۃ*C <"j ;{kRB߇ -;0̴}tCA%EV**!RL-tUQB?^Y|ԊŌStzYdw) !Լ$AfLUg٪Td*Ew&z0f7xgĆȠ?J Z}-@ksˆ0u]ϛkPo4] z.ձxR>#Wɍ]7AgeGtى 'ߤcuҲJWgfҴlҨjVJhvJ9UHUX\1/p&t۔V5cTX~ ry 0BO|r'[ lBB\4d&)ihWFL -!ħر&S&_1Rfh O)|ȱ*QY8#@_G{OT pM훇&9V̱q䛼D;I~Sc,d# FA#LEWx665ʿ)Tto*BPҎhZQF-Pn;{N]두has!/(-BCCA[BvN)SuՌUAPHרGTؗOM~VeF݋0c (xT?j6_Z[,Ϋǧk!-"jBϙ޵H\3Ƹ_gl!NI\[bwg)0+xgA O l:qAtնw2T_[/^_38FfzϗwP[ @c:sspcML,pԎ> 柗q+əD}vRrhU@ClңHA%"U}nc,Yom}I܄dx0gICr6Æ3f<#-zt|{&f\oM'%d*G^M6Όuخ b9jFn*q>-9 ӽ<޽͋]B?:peKLHy5 w>&$v OZLfiU1|Gnֺnq,[w{>￿\4 er eՀծ~|?0 ߎ7AiFNЁ'SҶ\@TM6@pm˽yrpbpJ!{q?z]#HgU{ |T=IrNi&V"je:6/D/`Yѽ^S~$\jj%WKڏl#FI: ͭb?%5~i@+W2L\&ی'\엓ֆ*gY֋]۲ #:5eD/=v:UH}!{SPTԅF_MN m=H6V[|s a^MSdYKq둚P̀9n <k+Eb%bN7*Aͳș.Nʧ4l*4k5a/3xolW}E XÖex٘<ⵦlj!IL%pN6娫xIѼ[J&Hyahނpq=sp,uItvYU%,tX%IB ͝ZSkͮs?Ɣ #,=Cs1֖1k֞}y}Ƴ4 w]n Pk*D(|ނ|>ihf؉Q}{KqV4ݙFZuZ0%|2ϱ`̾-S,v!+m$?R`Q|X٫jO{tb;M8.P*-c qD! s5fFgqh~qbʘ 7hZb=Ќ:+lܞI41TΫ2vh7D}]q"Rp`'=e2; l#܍jތjV}bqsXxs5"K%-R9Zis ~x/7G<Ȳv;ac~y7g@8bd:~ߺrڿW(0ކL[33٢ށ)8-X`s@l8-0Gktz H (5ye-lҠp(NcA eѐlrghQe82m-tK{K :o<u-Nc"xH]+ٓ)b(tFD,rLג\uBXgn#`)NE= "įFÔC<$$<ߪurxHXT5>F "jɃymh#_HAZܬHWbɽD/2lWݓ0Ylא)!H*98Pmp7' 0Ge B8"OAW͖C#OZˢ3 "DKYCr [:WyX=>\?[kW8H~-( C"\"?^dF!/' }}2Z"bWi}}|>K%_J_7vuߑQ9w*x +g_n8 ̓HgWy5ʜeXp/ uo Nr&+SzN=lZsS\=8{6媭7 9|=xDsU6# ?D"/'y3h\!QU+U:sBrp82cD*zleIQi !,W#$B nNZ"l vUˌymbcԍY~i+OIH-)eê}Bt5׀ "??-t׻zg7Rw+MQN֣79}d5f*OUδUQK @PZ&HB3jߺjgKME n/%&;u7]|yp1 %TO<,|?3c$p]"+TzI:Jm%XϮ-V:V3*=4Zf lg9=1Lzp/duc+qu.k~v]ͣ5y>.ӋY62y 'FGa3иcl^5W{SR꿿LwRC{-lzULpg`&f @HEO"9 _18tKO^ Kj`z N3<(ڕoh|DTmZ3_YN'y2`o>?'NHs樔k0.a:,XvXC0<7 ;<%> g?| uX]hJrozO^!& vRW_)?pb6X(`/EE͐Mw%Z$d% & "۱%xoX yuxXAFTЧdMki|3"V=PYx>4N@4(>a@W9fZk]r9(?>JI[J1sW+D5YYb_f"7T_Kծc[Yہ|Moܯ@Xެ@ 4K6xBG_yaxD NQr# t7q UG"$HJ$MXKd{{ȏǏsO'|ZN/ Vnpo?|潫/U}cwB' _> .mm|Y%|#TL54fTJxƿՕe_U _[g_jעh%8)Ej ʀ",5֬CBЍJКIf3@L\-fT|Љ/WԄO2U3vd³0CA@q&)8q&'ӫWVܱ;{}wp޹ߨ%»(PeݸRR@,!cU](-cMoȜ&S֯×~}?Z`6DŽw1^s*ۮA0np4h]@ftdls\dΞY\$@Tg6˔p̿+r 6{S?m#No1c4='mٶ ۷JQ6>FI4،z62odNFqC*~?nbGS4y*M.! Ԏl@׆v,,hh]<{6m9[z+OW,r{t1F=F9poU]51v@-5k_߷P\Ap#-ȖysQpLFAƦ׍8.R`3ˁɉ75aRSvZ˜$V)%%„!ZF9Oʌ8ILmCȘxp?ZX?gS,Rq# cqH3`~n!Ǥ)+]Cf͸*bzYڱ l#x]"Ef1< CiGm: iCh8*}.<E:.>AwEkaͯҥ^q]_Z5`#p{GjI.,&t Mmc_ C;DR٣TtҖ+\Ԧ()/4vl=?c_'hr]ңɈɿKOdZ>0u4*P $^T?4lhW^xgǺ4 *a'6-i{cd66nɭ?Y49,?Mua+ִ29"px KxmdzN0^ xre 5+lIx^xcަe"\.\mGַnkKCI*V%:F#2#w\ɵѼ Ee4ɞ4Ӣ9s;, Ґ#0 @J64g<;%^`V(~ #R5b;'x B0@[NӠvd: Qp4HQH(- zACHÿۮx3t4yO7lĮSR '?{$$p1¿\f O򇤒_sSiK!8Q<&=G)O9yz(AD620J=w=r*X== Cս0a 1-!\hK[.cHܳ5q,bjMN|D'f}335&La$5o(6J2r MHQZxF(UUk 1!YuתS1"D[Z҉ 3lcqD#4d7ldҔʖ]f(\J M3`Es֍qK[a39cVZavds;u7jG2 pYDFy "Ǵ3au^wdVv)r n.R2O :fvgґ\J Jx%,7% c,iIře"m9Q駱 Y kU,j0om.%mK4+:*SҧɌ()6 aN/SiJr2LLZ-^Ÿ$&Qi y[no&[69F- 83c8;?) 5ZOjb)S4d߼~UC4F&c\AXp@AJJi2+$lLvoqx,)p12϶<]`LLI"2xA]^}TBHRc{ji_GiS:&ː6%).'e!$,aM!SbYb%A΂`8ŗXnCۀ].9P+g.cԘ(Y`>.cU"''Ìr;cwT/!0-%E+-iICP32Et-^b2` /BCD mi=`ӂ}@Lx6C(xf!NxFҕ"1< ~wu.9mM<%)99}] k*v>Z~8{ʤ>UPGqNoNRI,,YfyQ>:I)yB=  x{쐳g g QpQ !2 ]Q~՘|UVC}0lbcX9Ge$k@/d$5l"a } F62%1jZN(ݱ;v)kRuާ&vY ZXK屄$ѝ1[4c;7͘f,cY.+13WY7;1e&2'[Elmִ}k?lF^G`;XiJ"-]DknLݫEEV;HU/"W"\c͠@`# ۰ŀ]s`/lRiőN zN'zIwݰiegVml}2_T-&LPMT~꣉V.kZc[G8uQ} VCM* wdQQ 2~ k-0.؝P2iƪُpݯkm:zwbRO _zn{5`R\,*<&A u- <9|fUgׯZAFVk t#lF`'֙ bg:V?#__Y_t)HW4 CGWFkXK , O["9hYxUU.׳O|[>i ެIENDB`DustRacing2D-2.0.5/data/images/wood.png000066400000000000000000000130111360473665400176150ustar00rootroot00000000000000PNG  IHDR@@% bKGD pHYs  tIMEB"AtEXtCommentCREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90 EXIIDAThUzۮdq݊K:34AA$ / AǿoW olJ}vNz1sԮDXV~?&@ei DL"Č0[~/f0""f}DD 2:B BR* E f^0: &V1u:%("fQ!:X>VU_<כE(@`FUe% >HfUaU,S/EdfdVDLBD#E1U YUe֩?ϟ~?U0w7sQlQ}"&Y}ªD~.sCtTUe=*32+#z:7:ƜS3u \TU{{"J޽n"lur/*#"2*;?z4?ߙN: =3DTٟ} B_dUUffoCd/U!ed~x2Cj?}qU@~{FDFTfeHT c@_~- Tʈd18mz&T[WuUoB23s%eyF\ɉpBM1 Q,"̪ ;="܇?yGDUea18n*L@̝+W%@`*Ȫ Eu8DϙUJ CW2C\yGd`aUatsiD, 9ʾM (32AUPysTgd{K%Q#gv_<"ʪV\?}>jd1WPFYBQsqZ#4STJΔ@D7db *"fbZYTdvidE=ϯ_x˗y܈ATqȠ #+P|eJG*Nf"sٹO[NfQUC7ͪ~&$atѥxRkUˢFgTUEM#?ST3Yt fvT31QNQU)&fBq c61btw[ZDUU'1gUDD>t_k33Dd),"fsL=5h, ch?+0K}ٹG&(Y,ݣ8͖{o!hB/,RW5`BU{f|Ґb"sR݇HBUDVO*]/03sϪEVԕS@'.oٿI@XpNۭ*6댈ƒC#UX@fwvb^Ӳ" OxWIbL3?֍JVYEt *PBPfU"s͐Q@̢2<[k@Ad&iLݪ?sGZrϪKqQ~}>ṲCo~9 J&CDTDI\,Ś(W!%U;gs#.,_oǡyZ˲ $+6 P%2tqvoc V< T9c Q%Q IW㌫)TVVֺp/~m~z}z1s,vQE "œ,rLo1T坩Ofxq"p%UQ%(U]-Zb w:Po R1'K7}db1ɈfTO*33NOʌLZqu@Y F15 p7wF "7"P p=}CYA/Zc3 u l8^8o^0%'-v)B!RecG0 r`FiZn}lnFgH!{_\ bn̪:tЫoξu> Ybk-/qskʬi_cEBF &TlU9̡ sqc1.IBTYf(?/2U$"d,( "7yv, V(." D*DZ"#a锭 BPn3f1ŒC05]-I# ǔQ"iQ+#+P ]^"ܞsP88tl6Ѽ *kegյx_,}rtCHV :TSoy~ߎ9_/WADEd@eE+pS&uy)5]=UH2)Ddq~n8ЗE].(ϥ D4q-N^.?lDE Pn,ܝdʬǜ1q:p\o&+CW@P T"Ūrpabrwnn+únHCP̭E_%*SobW%%CZ|UKo?U"y~_z@uLnA:'CD_R]J]MѭjG"ODK7(7Ź\*VeX~_}⮀w{׍ _lY%FL"*f|{.fOl+MDЦHѝ$DD{r9ui9Ju !ao‰I~/"?$s fJ΁^\OuQ;-~oZ y컲S[E< ⪔V[]s%V:Y@5U( +a1uLaTN B,;Ƭ˽7:1E0–vb10seǘ1v+ү:[%߆heEus~ĮUl3/"k]0w*"Dk-+4[˯l'<9)) uRU蟭X˾5 7'PTz'=", wI'hf؆Ȑx1ȋ"n(9̈D[0MԭBDZ H0e\=*1AE$Dsn7Ȏ,1vݺFg{.<=#,sSLf'2x>v@_.>ٸև5]FM7'F:\ȵO7 0nˣy7c}>s/I}cD"^]tɺͺ:5F^.=5P=m=UnjQqQ\f ?U&3m[bz6)PnoB%WԦY縹R&"MHdE!wm۔ 4"NYcKq"*bq2Fj'(P=k\..s-~O{u9U%ٵ(drCIDvS@v, )Pd/b+MH#~ E.> oiMmUm [}jUҖzʩXE+3YFn SY9#_l -6JSkkcs1ro_>e/{IWEk->xdEZe0uy/beV..vE6R jFE(j#QH,t7[ܮik$!xkكX.1֙] UGKi9tHBxݎ~ 2e]̵$dhmdS{&UfUmܖ22]"k۬zǜqkbsV:2ÈVlS튂r{ifٚGdeAM/53K{ڭ6Pa,ߔӣI/Cs29Ƒ2p܎y _dcَc蕹"{ײ첑XZLnP*< r^7OE[H1hPUMHq)sпݏ}}z;D]Jx T'=zNTUIZ봬L1ǜ:7h/IEfsJE ŻZRpó^"V={?3ӑ\ӟ9d"39?IL1C zmȜEsSYP9q?v?$b.5o4n%k| DustRacing2D-2.0.5/data/levels/Desert Storm.trk000066400000000000000000001272431360473665400212360ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/Diamond.trk000066400000000000000000001324201360473665400202670ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/Far Lands.trk000066400000000000000000003407321360473665400204550ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/Figure 8.trk000066400000000000000000000633731360473665400202770ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/Radiator.trk000066400000000000000000000511041360473665400204600ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/Twineburg.trk000066400000000000000000001114501360473665400206620ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/Western Valley.trk000066400000000000000000001003201360473665400215520ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/curvastone.trk000066400000000000000000001247461360473665400211210ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/infinity.trk000066400000000000000000000371551360473665400205560ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/monza.trk000066400000000000000000001617271360473665400200540ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/ring.trk000066400000000000000000000340561360473665400176610ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/straight.trk000066400000000000000000000527421360473665400205510ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/suzuka.trk000066400000000000000000000637761360473665400202570ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/triangle.trk000066400000000000000000000504021360473665400205200ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/levels/twister.trk000066400000000000000000000323051360473665400204160ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/meshes.conf000066400000000000000000000005221360473665400170300ustar00rootroot00000000000000 DustRacing2D-2.0.5/data/models/000077500000000000000000000000001360473665400161615ustar00rootroot00000000000000DustRacing2D-2.0.5/data/models/bridge.obj000066400000000000000000000020071360473665400201100ustar00rootroot00000000000000# Blender v2.76 (sub 0) OBJ File: 'bridge.blend' # www.blender.org mtllib bridge.mtl o Plane.001 v 21.220465 -22.400000 1.988096 v 27.234499 -22.400000 -0.200832 v 21.220465 22.400000 1.988096 v 27.234499 22.400000 -0.200832 vt 1.000000 0.000000 vt 1.000000 1.000000 vt 0.000000 1.000000 vt 0.000000 0.000000 vn 0.342000 0.000000 0.939700 usemtl None s off f 2/1/1 4/2/1 3/3/1 f 1/4/1 2/1/1 3/3/1 o Plane v -21.400000 -22.400000 2.000000 v 21.400000 -22.400000 2.000000 v -21.400000 22.400000 2.000000 v 21.400000 22.400000 2.000000 vt 1.000000 0.000000 vt 1.000000 1.000000 vt 0.000000 1.000000 vt 0.000000 0.000000 vn 0.000000 0.000000 1.000000 usemtl None s off f 6/5/2 8/6/2 7/7/2 f 5/8/2 6/5/2 7/7/2 o Plane.002 v -27.389914 -22.400000 -0.235114 v -21.375879 -22.400000 1.953815 v -27.389914 22.400000 -0.235114 v -21.375879 22.400000 1.953815 vt 1.000000 0.000000 vt 1.000000 1.000000 vt 0.000000 1.000000 vt 0.000000 0.000000 vn -0.342000 0.000000 0.939700 usemtl None s off f 10/9/3 12/10/3 11/11/3 f 9/12/3 10/9/3 11/11/3 DustRacing2D-2.0.5/data/models/cube.obj000066400000000000000000000032301360473665400175710ustar00rootroot00000000000000# Wavefront OBJ file # Exported by Misfit Model 3D 1.3.7 # Thu Jan 17 20:11:34 2013 # 8 Vertices v -8.0 -8.0 8.0 v 8.0 -8.0 8.0 v -8.0 8.0 8.0 v 8.0 8.0 8.0 v 8.0 -8.0 -8.0 v -8.0 -8.0 -8.0 v 8.0 8.0 -8.0 v -8.0 8.0 -8.0 # 36 Texture Coordinates vt 0.0 0.0 vt 0.0 1.0 vt 1.0 0.0 vt 0.0 1.0 vt 1.0 1.0 vt 1.0 0.0 vt 0.0 0.0 vt 0.0 1.0 vt 1.0 0.0 vt 0.0 1.0 vt 1.0 1.0 vt 1.0 0.0 vt 0.0 0.0 vt 0.0 1.0 vt 1.0 0.0 vt 0.0 1.0 vt 1.0 1.0 vt 1.0 0.0 vt 0.0 0.0 vt 0.0 1.0 vt 1.0 0.0 vt 0.0 1.0 vt 1.0 1.0 vt 1.0 0.0 vt 0.0 0.0 vt 0.0 1.0 vt 1.0 0.0 vt 0.0 1.0 vt 1.0 1.0 vt 1.0 0.0 vt 0.0 0.0 vt 0.0 1.0 vt 1.0 0.0 vt 0.0 1.0 vt 1.0 1.0 vt 1.0 0.0 # 36 Vertex Normals vn 0.0 0.0 1.0 vn 0.0 0.0 1.0 vn 0.0 0.0 1.0 vn 0.0 0.0 1.0 vn 0.0 0.0 1.0 vn 0.0 0.0 1.0 vn 0.0 0.0 -1.0 vn 0.0 0.0 -1.0 vn 0.0 0.0 -1.0 vn 0.0 0.0 -1.0 vn 0.0 0.0 -1.0 vn 0.0 0.0 -1.0 vn -1.0 0.0 0.0 vn -1.0 0.0 0.0 vn -1.0 0.0 0.0 vn -1.0 0.0 0.0 vn -1.0 0.0 0.0 vn -1.0 0.0 0.0 vn 1.0 0.0 0.0 vn 1.0 0.0 0.0 vn 1.0 0.0 0.0 vn 1.0 0.0 0.0 vn 1.0 0.0 0.0 vn 1.0 0.0 0.0 vn 0.0 1.0 0.0 vn 0.0 1.0 0.0 vn 0.0 1.0 0.0 vn 0.0 1.0 0.0 vn 0.0 1.0 0.0 vn 0.0 1.0 0.0 vn 0.0 -1.0 0.0 vn 0.0 -1.0 0.0 vn 0.0 -1.0 0.0 vn 0.0 -1.0 0.0 vn 0.0 -1.0 0.0 vn 0.0 -1.0 0.0 # 12 Ungrouped triangles o ungrouped g ungrouped f 1/1/1 2/2/2 3/3/3 f 2/4/4 4/5/5 3/6/6 f 5/7/7 6/8/8 7/9/9 f 6/10/10 8/11/11 7/12/12 f 3/13/13 6/14/14 1/15/15 f 3/16/16 8/17/17 6/18/18 f 7/19/19 2/20/20 5/21/21 f 7/22/22 4/23/23 2/24/24 f 3/25/25 7/26/26 8/27/27 f 3/28/28 4/29/29 7/30/30 f 2/31/31 6/32/32 5/33/33 f 2/34/34 1/35/35 6/36/36 DustRacing2D-2.0.5/data/sounds/000077500000000000000000000000001360473665400162115ustar00rootroot00000000000000DustRacing2D-2.0.5/data/sounds/bell.ogg000066400000000000000000003735061360473665400176430ustar00rootroot00000000000000OggSfqvorbisDOggSfqp=qvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis+BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s6pR4XhJ 01Ƙr9s9H) tNJ)=Bz!B))C(!R뱆N:k!Zj2(R=PRj){K%ZkK*)z9RL-``'EcbC BH)RJ)c1c1c1c1 V+j'tfdȥTD#5b%ء`!+2Q5^+bj, AAe($)XSȔRY%tL)F)BƔc)tZ=TJ @P` CpK(0(I @"3D"b1HL`q!246..tqׁ P@N7<':xH6hf8:<>@BDFHJLNPRT> "9@@OggS#fq |zzsu~yrM_TgM|{e6;YޮV,UI $ IB0X , MEi%HEB`PD@ %]8n:GFlưXbg8Fl0q<M_Wi~=ʦK4>43ժ:SH!& 'L@@.LCTTDBpJ`qdf"N Rupd1d*cv6"s|z}Yw!‰Ϻ aN 2 y"@DBR)!8%""" 0GEm,V;m,)bk5Xm&c^CMKuF (ǽikȢRI&L"SM9 *Ba,)eH RH BI(1D,$3h(3 (!BQqq!@B,Zu9m uc;R6shF[B؎?BJELj$YS!$DT$BU&VؠJa$ L]Y] D*++pV`Bp9' > >_( AB11I03$1C P %BBX\h&0a"D@L D)`B0, BJB0 )AB2KfRbr1 sMxep\QJ y fRT:!qe29 000vnDDTTPx+:crӰ9PsjbCNUWP#Y0+&3ޑPATPDDޖp \WBbG`1F5꘨(*؅p20R.0nkЀ)@d. D*Jx#5VR؀D"kPUU#0Zn"k(1' C2J5E+@U-vK yW+Iffb$ (%EQ"D3%(@x\V@XHHfP!XPPPBMY(D@@3a$ %I)Kb`@J0@ f@0Ӵ(@,A `Q!! Lf ,I DHBBA)#P Lpdud/1pyd^5s!3. qq1ǡI "G 3Wp";i$τ ?" h:.*:D}-64x="Zй&#@5ɁFlqtC>pQJ0pQJpA1#"nPU&  7,SBVTSWT"Q'7Ю@T@Z9P %$HbL"BPLhh1J O P_R%,3!2 Rd"0H,D0 !!e(PB D,CH̐`" B(Q `a!-N02\px* Y-6VU 2<^;F>¸sV}wdB`k(X {C=&H54D 0BԴ`o " tl-vatG z=mbw!CQ0T"F#I\B2,0(1g?NjIdq9{:@uE_ PZY]CO@H"Ȋ* @` ]TVT>]92jBB`YQf ТMDiQR D s,˅rJ!R@ $ b$!0$C@B0+dAA 0(1a$  X %'r9px  kXê)` :^HN膀@aՇ9^B4VPA*XMQQ1P7}L +u["h E :"oDoX)$Fn^> /> Og ?lL fEDdHZJBiH( 4*!B2@UIБYc QU&@֐e@g^yz *K`lr F5O@ 2M "*(E!pxRb@h`B \! & @E" 0aE",X$ #P>  )@J!I2KR% L O!#BBkB8csg\0 :c`44ڈ1Aa /D>"j؋8% Eh%'g`{-o(%'g`{-o(% @ W B (0 BC E(4po 6Y`'؀!U5&L+`@ʡ U <.,K4BrKY0 ˕K`$XF(bB>%""TP4DD@L &" 0d) p.@ GduPHC)R@@)f,s)8MZ@hffP'f@0XL\* ,X@! 9!I0bocЁ"`Z$  "t أa@c1hQN`@ t'´b_NCf{%g{R~.L+?hWjV"OggSWfq담`OSKAGO;4;)GEc;oFvdyT4afޫlGMJ  ()!@1LePU0RP-2Z}0 9"&Y a)X(.@8!4%Q$"P pAe $XL`)!>RP.$%. ̢, t:@ś1? h5S"]칳MRP@Q5p` D8ؚvjC)[0 < /x Q g" Zx'Hqp#" `c wsۤߍ{o3 wuۤߍ{o3 +*94è4T+$Y) 9lCEu%&+`!BEE5Q<h08hCrc< a8cPL )"QP NEŅ < H <>R!%@ !! 0(ðb@JHf@DL@@F%'"?0 (!\` #+P50ht .R1Z`gYgOx wuϊ-b2(CȲ Ȩ)LPf +TWPIPLP( (d + X %TD1 F$ hڌr,!A`eB)RP C(0 @0,@ ! @1@LhEX2`LB)D8#z `>#Fm#!ۀ4"ġD@AGj8aHw6؟F3+yWϷ4y|M_Q, D1Q fA`B9@$HBM+@Є *BYr+`"$ 0DAJB9 #,KiZY0 xA,BK  >i1>PBL```0 BP0 .-Ƙ(aĝ'Kѥ-`0h0y!̋PSBBbF72ľSlLfvV4 NPgC_ZsXggCߴ^g!2lP r Ajd L- X I2PRV|pR@9<P£ R!]k/ UP qXJc @ ""J@ DT0 @ %aHɁ%gL#1^@ L G @%O bca6.&Q#l "԰@dtiaMK~g|m/3d[av'=uL_+%QTU%0Xl%LD(Șh5HB QR3! W-"A]"H b  ~͆mJeE% Za&Ш"/)%M0@?va@ 0"J Z舚c0 0DQ"@9PG]`NQgba!"qh`z@R (ꤍCPjZS0V}m=Q0`DcWe'z៾~L,Ϋq'z P "PNP] DuI(x4&AȠl ьe(@B2$ &D$QJ)gAB0da@Xpb""ȈI( g!)d(Z- ;~   H4e@?@VHoR EBOA1((ph @„1`<? !( 5y>4jp?0 WVB7[ӌ£ȫi+iFI~QQ PU)U QH9E*DE5EQˀIHhM11 r(Yc""P 1,(br M1@` d{@D`vE  @ AB@pbІ Q'a$;bTp(/E o=b?A۫AZ BԦ-Lh`^Wʹ5Ge'ݫ$~fښ_$> $ )W "j(!PP L@%"jHNKE$aE @;e.w0 4|0ÀS `!*D8h@3)`CxXc]PbD <h@Z3 3@k& OggSfqf8# ^GV'\?+PGV'\?{`j%   ń *2 IPFҀ8!򥥨8$D(( PDR@PP$3 P ":tD`yRpC0@ @^@(  "@%5"OHh A8"D"n_IV Bjĉ4tF 1"D $ ~G.v2_[WڶQ"`R@/B XPLɊkMX$S$I]Ei((,%%cxRB:+D(@!,[{{bC Rr8At ^DPv DЍh@`,H=  W `e'&jQfx.Zш82 74T>7ww QMxݎ;UrCP@dԜ ńee MH$VE2IP`QKlR0 q q@h@@) `xAV5Y[Ċ@0Pb H^W`>0`*uDR|Au58 o{Nm1^a6x"` tTM `J&z ?>)̴6'O9[Q/׀8)otGau8 ,P+JJB@5&$!#jVpK"D4e 9K>! F Ei  ZH  0"\Qq.e8,B@Џ`"l[;'0$ 0hqj(F jToB#(}=lK{-cJ@ .2`0S9p'hL\ ?``hQp&BL &حwTN @7),ݺr_Я>  E$r"jI((M%KXDӴY&2( * BA(8#1 #ȧ /Z+&IALDةzu=飗!4qF 1{f0unZ<  .ЍBЉhOճF_3NijMQh B<夔_[ߢ=ۖ稜 zc +@D5  JTW9QU3(&@YR’$ I 1|! _Q ,%!bXDa5~g}.@ BN@4'h`0\h:^@#VǸ 7T2E'&ěHfHodY8G̑Tt+a0:hgu8t %P.G)ĸh@ u+ʺރ_poQX=h{ :XX&@xuB@P P,1!$dI!% PJ ` X#,(HO(T\+.(P,vh} [D>$ aAgʀxQj9"k|Lѩ7CnZRHNg݀2 oOa<p`'ih6R#&}rnlZ&7)t7i6 `a9R:!jR "@RX,KB ( b(RJ "S da@A G.(%88pl0jX4 }8jA(@a"0UZ":FWZ1x7ث6XX5ƸB,7='I0Ϣ3fVrD&AL@4@A 2'm3(0C@A(Q' %|>GXB # "@?=3"t>2x㑾F?x\7 A&ѥ+vCơZom&PBh7EA>(M Ȏ7m+2['r?7m+1[wO{H@$ @(V^Ir9*+jLIb $Biq!ZAeM%x P!@dUP@ 8 25pLf0L'7)D< (NS|-~e{wЂ09̕Td}"vPCEz RQP50 <@*"5@ 0&:xFkS]5h>7"#sӿZsS/r8?a)KPeXĒ`8 Ozi`ok` APpr00 J,³i6a2YYG:Ѯ (sӞ >8EC1DDtgj`@m7zO.%9nE›(RȪ|ń @@J,$ABxE^@fQ \0`b! L81 (9\ƒ=D Bh}M kF&pA4'#(4:![':3Y1P@G41SZGxUҵ_>ڇLa<1y0Wrp^7/7J{ݔ-JS?7eR]Pnu@]@d\rd $cI$  J+NBHR}~CA wb0-Vc~ `@  F,aV$ t]F6c֩d{Z'ZҹT fYOH K&|8LW$D{Y{DTd7&aQ5vg 㦠$,fOP rPRNP@(J$(j$̈H,Q,`RBqqFRB iqi*JA$BCXm:.j{FТg FhttkTYWع5]u.'fwh`ܑ'Y:G81EN)9#,NW 03VNbRv3&b(AqLXOggSfq d '*mr7'?[MWI'e?[M:?WI^"AVDjI( @%BHH¤$C(, 0d$$(R Y%*6U"ˎ+C؂ʭ?SAh'eLw>vW)LsR6$<;Q;?P>`Z @+A $,& .p$X,aE@Y@%d$E|Pyؗ!8DLNbh@S/p0dr ڬ 0<`]0  INqk%tM]Ĉѧ\븰O^,* VaAlE,I"ت /Q}v[-A_Du.@fr rQR])@(TbBB%IQE@$=r\)ÀB DS@e " `Uژ6iհ@$d62`Hhq`+P2V0*u"=+SpJg~3jG으O,4% >xfHhX5UP7*S,E&mymn$շ(*7n; {{%F%Q]6 (7r|uB D@1!#R[BgH8 4ThR. bJ O/P@ѭ]~HRwN-=6{{S @8@@:: NSj*<1;Z7ۣ 5\/m ӝ~8F )dt饎Z Zj!$-T;'me-\;9~{5(N0_onR\+dVP i )ňƒ$SSbH!!P*HX )+)*c\>EAV1b`Ćh|k(xx=]6 ծďCPdӘ vS7@4;ZE{="\RN$ݢ@V.ts\hU0Vʕ@u+vGl_=j׭;~(kBUP.J@(rbBU$)3I ë C(%:YVPPR@VQVO x 0!`^WΚ BpҮyb4cNiZ(|)( ;&Am(C?U#+3zwc>n ${N vp?Tn' $qH<0N)i+q=B 9Aَ砜k@uP'`Tk! kIe%I@ X(6(qԢq98|%d pDyR,@ 2B6t.^a%\Tւ$,L|OAZ+Cieيa q&"z$h;>4SPfQD3LVN|[vZ'#c%#d75C?^ք1/2v1;zw@rPNW dUHB"Q@(Hjkq (Rb@F#pO6u"Im/-EExȓF AoѬ6ZfZͫ!<#ܳp$Sy)F  5y*So>?ٶ=G)ه-;$|Ż$gA!PW eM@rDe D ȘM`A3K B G(YtPMԳ1^T+`0 ̹rlʐ -;  \%| V|h[{\]B]l %[ /R. ^d~~l)#=K/tUR)7,I0U@$!GfXRbIe$ն( ȈPQ#B8<<2 #B(5y]1!ꈷ]bLZVn=<c7;$>Vk̊} (^c u ? EL0̭*b:OUDYѹgL ^dq+vQ-U-wn)r̲(:!jN YCe$I$IhJS"@ Yx R@,Fet(6h>ъikk#(`@D6Dod.p2DƸ>0DC;Qlw֑֝"AF[u3R\) Ƥf{F#/׀1&5#H ?5xXQU(7YOWDZ IHdl,Ib RvC! ,+NXAdBLNgj1a\@BJX;$tf1%LHR@$=¢0VͱnAlNΔXmqçansԓS( Θ<=;Ax'tO`o+XFOʶ#Y \U^d"C|7,~A4`˘]73r,-P. J( De R D c6Df)+(Gϡb~'w6L,K$ D$SY wՎÂƄX-0, ZCdbkR.;J.tUmV[UglB=&7 oQ ,(7u:! fT$Y.I zr.n,yT@@ >18;QD*!&G!bL 5G ZhOBIx*?+c0D}*o?O޸͵:LZ_C bіT[70zǗ[ qyR=f'<ˡVZA> 4ګ4_3PHAKOggSfq   %+4/1C=7_[i7_>kN]%罕 SYܐP.JPA2"j@ll&A[F\ "D+)iB( pHI Edo@+ (4mXJfJ*אDCФp3X/6j$eH-K\-7o?ގ>$4tG3Y'%#=fN~&3n[q U(t`lzGciN۫w4 a1PJ%W DE%@ȡ$Y0$J2*@aٶE4Fȧ ,`.̀-+ ǘt2LߐA+=;?}qY;b}7$zXcy4eFOnS16hP1Qk@* *;-LJh(P̐cC+۩tZ~cx04= & %۞%6~=ȃ,"$(@I ʢH,V,bI@(@yJA@8%b<#8N cB0J"!@< aU `( T$){l8BMXYGr=\A]7rlZMR(ckzhty1XKpXba*n._mjj^- ^MtۚmӜs)fmueHC8lH]_%vj##chX&Ҽv#͟ǀ$A%t*M~o",m{r&{7h~U ʚ%@.`TeEHB$YHBO IABA@! F2eb-`8LHPSi,}dL ;@©V,j {S[)0 cufD*Nڴ0U}+hbzRg'uiAfCo:?җ:𴕷N=L{|ZhX*!}o"Uvn{^gZTrTVr2k Hc$f$PPB((  1*#ACj~#yKF6 O2h qBɦ )F5g-`t ֹʽ)ZrѲŭzͦ~vzbOrEQ?';RE4d E_L8Jj}\vټi/9~d%{4ZJrՀ9YyIFּe5 @DU\+ @@Ȳ ILBPB!!DTȓ"2\!bliR`ma` 4Q3+f6;IaГܮaZ_{L_۫G;PC gM[= VTo3fytP28&v,W.Ykc7Vzb˓jy; ca`Ak+bb.7 k+)Yy*%c'f)S"^S=;RM8c%;R ( `YB@T6 dI"cX( C{) ҌPD C JbcES2q ``ɔ- P$縖-|jtoģt$ `.b9 A ;Ǻ~z I9H JzͺEzζ_C!237FȊ06n NQ7MI)+-S*gXw>ΰjΤ[ %^dS; _7mAْOFw o1R@(TҺPD%HBq3]&I iSQ2 9R Ҭ$$|R J T#NxP!A%OWS0_|ɖdCЯW0%a%Z "kr"AK-&膝o Dd(d)pBå1q &H K `hqWKtNcj)>_;= ʙ=A=h썃rcſnW?-k-ӳƽ*x_FZl 0#b[N&6+IA(LBgl$~B-_uZjl.J(YZ{sc>˶$•lˋbRa3d)#~o/’½$>"HM_s_eEHrPRN`JJBIHI!Z*,P7eD Jb Td/KkrL8\ѪIaQc#h:wv pBb)i<⾯;<˭0OqpADhbї8d)lcZpfAOz"Pg2+}̋udEgi4+9BJ6Xu@ٚ{{fHS5d*|iMdu!/_u.Ge }֯22R`p90A$$bbnK&Gb -J*M @PP+!B`R%kW>X*$zy/l g$t?BG߳$?3 [RRƕiB<34/v;je[Uvӊqt<[vx|Hf&>+¶*sc}&Po|[ @ >$#Ad(yzxr** `WI[O.+OggSGfq~_]\ziXG@=05@%~e)' ~Ak@$j}i W "(;RrLP$$q$fKDh3 ,PP"-@( 'I &O,9h}F/bRpqkZiM)v'r}">{L؎r# 8BM|Pwtɸ%[" }$vnNHe>\~E!h{ʐe@?%~mAR¿ kR xuB@x%#$YB(!O(P\Q @Vћjqu'WV+ 03@H8.@YeC!יI=s>U~^އ @ =9>֧4BILԻr8e8QF%_r˾7ٗe tCDFv &Ͷ|q6}Fٚ;R>sE2|b'{_fo󒤟^o*+Wx (IkZx_/uL˷ZT?^E*~Ҕ *"7{{P_P."\ v@\9a$bFUԛL-(B).À( W \Aֶ:\W֍p~@SK!wќ[7;cGqTF2]ҧ D0 cH@g޻#/Jar;X53kHO7iowR8işbD_4ϖKWw'F_L@}Ξ|c-[?U7:6M+~e.vLWE,-(LiڀrA(7W dVeS A\Bɘ%0ļȀK>9s58rՄT9`Il1˝Am3=|cLQPB0Ȁ"=t?izebjj$v5 bHeAJ=23eRifR@P]^FT#Vޔօ GP7&wb6kM@nJos닜;;^/mƔa~uʍSĪ\vyvcm;c"S[Ml͛ꚼov=Re.} ~ 2 s}oB}rCԤ 0!@P IH$I$M\O@(u 뱶ΰѴiWu+y]M~4em"lܣ+,;Z">鈑:YK* VKOKsfO9_5O`?%+>{#A]mu\i6z9En+ ޅ)n/u*хCSw4SB `r"+t\IMcM u( TPGx,X>pY2yk0wݩ˥ VI U#Y[>& +z*l'@Ov[7#iai Rpچf-6?EZcf)IUu $^hRu:~66zg*7nD(Z53]~;[/5O2{'cYX2:P&Uyg' {ޕd)(_]Iaޞ߭} 2jPPr'DI XbL d(>>%RB@A A!u@MsSfl~*@/ ~+PRe63 )ۯIq;n9ƴQ Q]8L -&(Uo'Rw_C~T}D<ܯuQVWǟ(u~$EMURh`5iZ29|5(uqm=f?V`~29AI½Ξr\wR !wk6~_)5ǀ ʊrP-`<! j $$2c$(EY!`B K%@iQeq{u=ތlY /}sq[+/!%G);Ԫ1j$E٩q>Z 4ܸ@E^(L9")K cT;V˼S5O nѳggo\EkwafZ#(#t~G*=}#*h_+i'vUCw5y7v ?fkƒ<%[ 1 V`%@PQ d.N$I/qrH(DE) JK(DB\Lcx3P@RS #G`Ζtv0}(N=>a$gT fZmoeKz|b];i4|P1a v؈=_!=\\әpV'Ba̺gwذ_)痳6kymw&QK=3[ξ׫%=zl/A5%@`&5rD@@)6" H@l¢LKJ 0.@H JE"t!Wr88stKP2o9ez?4 {P#<:x>ekC,z"$ fe5z`%G L2[J"Wg7pd>?(+mpq$oPLTz4Ĕz[!H\.IMd@$'\(_I>wxV}@hFB @iUxuB%I؀ $PPB\ ,Ibgf?\oX -#LY"kF:TKm~ts=ZZ,R(zݐ=trΫ'>ĺ?o+q0:o͕4Uu;*)@չT l׺OggS{fq:G߭=yPCJB;Q!EJXL M8>%@ DFZ vM[k*hc `@1%K>0o[gKB);'O*{ʷ܋Ujޖ-;E\4fMTI:j"5ﯳuuR2V8|n'lch=YiҤ;u\pgGo](9m<<{s9 _) I -&aR{2Wջ'ʱ!R'^ޕ_=,J=R݀PC@z v@Ir@Jtf&6T\G(%6Ph(/^ ~PA֝"Rt9,eBEYYgOEթq[ioOwo}m-CagƨkN؅O}=o'9#Cgժx_vf*,R[Clr}#Mz]قm1? + g iGyсUެePө7xJ[u Pޅ-Q B!;h_o @(T` HEGĴPbPP?2Q Pc;H62 (l]e Ϙj_-:p>9X3H"3rE}/k+C/iFĠNOŤusu!U2볐zB&u]R'0l=aΈ}z}?vbyםx@eﴦekƙyw1 ;7$ژ߸&?I)K)ijfхcOrܯ|*u#&ffUQ IKӢ1g7%5dT Jb@PI.XF JqO),*!@VBB =+N\'$0Cʮ͕ߑWrUP =~$?_ViAN|uTYTJ;<ڳ<>VDe)F~-JM};ѮV&Pu! n/k@B?%=߭>s !*@$D 5 d2j)qⒸM"`(!  3'XD0lϝ)M N& ] Ȇ%O>8x@U*\\7e#WpED!}_h7 u:SjwC;bގg~GXn揑ZtZN|e-wJ= 9t8l9ދn봂$!iPlS˸WǶi>(7eC{LG7OY*]5!e!-n/Ȗy۔ 2*'V Z)ŹJG,PIɜRbuvShGtVSbqKk8ry=<3 hֻX3b}1yi o&cMx6$~Ud&џ/WEj>a k HP2@dXɌ Tਕ(`ʀB3"7e)c=bQ"ۙ*6S٠/KQea4MvcȄ:ɟ4nd~I+#L&tҨh_]&pEiiMpD z.xD#: t1n_Ϛ jo2{ۑ h1)lIUI~`?]FvNe^{}J#rj=YHH{R&a^E*/UD*n _P.q@8.@:! f q$l1rhc 'RbSPxfFȋ%̻9z:wڷXZE E`-E,[m #6q̶͑gw=pR쨵50XmG =wN cRx^Ѥ#*}e Ǒ@%5*B05"B^@dVO @U&0b $.1XP$W"d)"* q*(#%0ܭNsb0$XzVwq`=Vʷ[ڗ_RQ\mIVڻ^\d-y3S0覦\<}JT"qQk, }Ɖ4go'7.>t>&gHlvx 6Dž}dUkw74ϵJk)Mj-F[gqs?m۳ij,V@FsvY(m#Sy6)xzY+گUbn>5*"/L )GaJ}*(B@PTbI (q!jO$AA q*#@P $ '>N~#E 0L%M @Jc!sbyg?G?T$pE/+ :͓:6=4-+m|D!Z=3curif/5(,[2S)ϔش- &)p:߬ح^ڎĊehVCq˷ksbR}(>)Bi? :&x؜2s}ƱtV/s;)Zy8>5"Bܰ~Ԑ{{ R%("`JKJB@5 ҩ$f K r/b hq(B)(_}9GZvdujbyd(!C(HߪCoU eKgk,7+g5ߴͺq5u  @GML8JJ>OƤVuf.3ğW$Ņ*,uwV+^x$}aUW3U?rP.M`YR+9TAb0%&9RxTUU6u#4+)i`vL0=ZSİl5=/+\ڇ[n_W+T k%mbI SWDYO ^L ZtVtAj' 7r̙r\6NXJ3 :Fzo-CrhBFXv6IJ|%dӞ凶?[]dDW̪|Y-pp3"ީX.aI} ry1XxKЧ"KY3㾴j =Qzu OggSfq *ɂdzuo_XaPcPXO>E*Bܰo)"dW}Ga a`jI@ XT$$޿r 'r |>C@Sج̫>#@_ItAOevU sUaCqy#Nim[2/-o7GNjKAæ.G_g)P{7rpQ,V!'RmGs8ӏVI$6};lR^=&c=O뛏0m{Sju?ǹEo, eNt]]zy,>7fZ4bT8^5d*"{#m~A{(M2B}`ȨrPRI`QrdH%ubl$kyDH)<% @y<֛E1|q`p@d+nk I&ìm2o'E%TqUAWEoB.HdbED,>;4KH<5,,kPjo+&r1N:q&z3nFJ(p&+XPm^Dg,'\LPīPEf9q溺q)h|mf%=kcv:ַ=GeXBz3n٨{Kz 3|[0{;9M޸>5&_s+LuRv/|o)@dEM rP 6 jRS5 5@$NIl/ t"6+E@< f)Ժ )pb޳=_ ë_5W.߃M3CM>`|Vj$ T 1F,!'$g!s?gWнRvy>8+sZ%ϸ-U1M.]=kj{Đ! uMl ˸cV7487Jki2aOxWfǭn -t8|C7^l@^Ed&-/ YD޲ϭ4@AP.NW T%"&1nDZP0 @"@j@4^Nfn{a.5,SzZ#n/ͿLX9#ųH16E+#%Ee.^2LAqKqΫpTzj::[@se i(ux1>tkfOLg`+˜cdˤVajaS/`]x֟([wD=c'mMҽ*@Pšhs<;lL|D/mTAl`Dg>x"R$bfu sk޲Ky;Cc=߉ 4xB~ed&~o/ˁ+#wOXVB9@!T%R `u2TUBR$ᘅEJ rPFJ-P!}4uH )6'Y \}2h8@Ez&6 ϫE^!~oVbβH$stEim ?mo`)]ԕCkW`aߖ-%w7 Zr| ݎ}22tAN=MjAT:Sd٫^oD_qbJOCX6B m#2P1BmIWjպ12KA\]c3=;6j˙m ݅-]rt&X1:wD<5ҋ-|n/B TrQVi0@J%IS8,r-IcBQ'bfaCeA@A Ed`Y1_|RX^}K" B>E,ɟ_Qɩ/t g^ת9YDG3y76ob؆_u!8,jA:oVu]udzR*Z2q?:Yғq~Oh b [do"`ןWzxݘ{n@5Y|Pʌw!l9تpY͌53ww`b<7Y+e%k_YFߒt2j\T9؁,Ԋ! &IJ$aY" a@ Qe' @0mR8'W\"kjk PΫW}5nvd9xt3؛΋m]EZ tF΅lN&p'+ :KK1؟ Is׼AQdgLB:{YKS"8DfeR)LEo[L{N̹Zahhz@0q$\TNs3yΗニ_DRM:{ٻ՞݆ˆ=K{q e.޲9C/WF,E=C_PQV@8*0؀ DcD 8°cR(XY"\x>_ ę g?:tP }b2ɔd z~v>:9k0h`i] GmuܔVn}T?AKsAZ`_v_knr[wsG(L{}jF=uihW} 3='G sb˗⳱^z]{xQy#/& nJyR)lb2%?V׵˩7-= *<(OggSfq Hi`Xacprpurq~ed.-5bЯtH~M/('"@`"O!TK(ɲBQmc%' Ტb6ei Fs%?`WeUu{'ݍ7duwg__{}\9 0KR;OBk.;X):ὃ&keZ>hM6N$nlSA_"I;Kbթ %5fu߃bH/G9'F$^>OR%hbMSu^6-a;t q>@'sQS}LSOw+Ⱦ[r: ~U+}o/WEF"i@A*P.U!j)%q!r%D a9wiP>+#@x,^4P ŷtB$29 3K -Qq5^_yyBҪqKZ-DŽpmY*!{xtk˄lytAm5`}3MqN04.H#&U"|iۖ,Lcj6)8"Bth aS5rWԕg9Y4d;Ys=ie.di]{rӳciU)ᷢ=CՃ"_ @$@(ԓ(t%fQH\m ʼnW '>n,2nJ9V{yLd!PvNŠb/ƙhRDQꪳ|ƞj %lч-"Gkӗ9W!0bGnY=*-d|wޞ3^f{sZ*y ~Ed&;j_zlw(eҒ2@HER:v.1H$/^lч @\{۹yM"uLtw|i?U0 Ŕ$NqHm EHYϩGjh_YO1v00u\יKzVp-´ק7J޼v0{M,A Qw6ns2wJXAR«8YF1fDO]1ӡUa6f|wAI%k˙S6/$wLqIefK9ڎc`1 L49EzüZpE&h_зL$~-ڞmH ZPC(' $xuB,bN'.R8f `aBRB(a ,/]<(% Q 4S릸7W#fDL{x5`oHJʪPF.\/Nh\/2]YOE*K{Kf`Y+۞9gs,"3&e;>L`Y=gƽ'5Xq! 췀x6x*/v.RliZ`@8t$mNOgݶCGÕMJ`Wig Œ:(gv?/\|ߟVԘM%۰!3}J)W/]>5*ӽ9*_L Hxw?7.(*;pT PĉsI̅j,S86(ͼ  Qn xX2jtpd)ZrOpHEtۏ֭6с-ggʒ,ıa HZ:<#˶ ٧{B̗4SaZyF#8`YyK?`=v4fk%}QZN-=nI==n%whͣM&Nǘjvا%x6'#3kRS}q&B3EglCשڳ-r>5"Svo/LJxw[a B * JP `W%.IbI،PBXqf! ùJIT2%yWϔC ħ~WI*^D$f(EeF4elۭeSJ8 r%N5NTdr.`j{Btrۅ,Yp/cIwLڨtQCIl֧6iEhi3a$:2]quV6uYrmKnW2 ko*)﯇`PTj0{LԈ}I lu1Gz) |vl^54b+yo//L 5;%˻[aJB TrPR`ض)$J$j< A؊RpP[K&r=.Qo8~$;} @ b)xS{G\H7eWvﳟETc {F릊[$ۆl_ꔾa^wVs]fR7@ YbLw@ lUup\gL$ܭ_wB85 jJ7X+7tXfa \u:G(ΌoYoH&6`INǎ\BNȴd@ydJn>SI3,*>5"ۼ9*S/ Zn%z?7IR `Jʥ\U‰YD'I3 0TL( @C1.#XAgT?tZ^yr$* c l<ɔb.8L-e.so}EݕL3<# ĢcP0;[:?]8G7Z7ҝ?wN_@wd~O"SeOJ sƣ; qPӟ }4 l҈"N(k{?;ًHLw伅yD()duǻ=S0k ɰꚔ>5r+H_s\$9JS_ `aH@K;%1f#zZCb$X^nkזL@P25tb!7SD-Ni* }ne (rJ ,v\bX$ 1 E!* 2,\xV Y@Kg+Oi@C0Ui/eeEO*⛱L`ZC4zek]!wQyKˮLY{a)s&n\k秀::Nqd)YOHp F̽lN*wp!v lޓ 7눝$Tg{Ǚfr7Rg6 TZ5qTwe {v[WֲNM~ߘA(,7E؎WA>547/0~`j(Vጶ_ ((\TI@ J%ra-.+4FDDhlQ"DXzӤ{,e[ ]ʮeF_\pa.HO^mw~RS1'5YjnuY>2AcaVwW]_NO T6'L[&'0C d\^:]*o{aM q`\rz.!-ȡl\%MG`ez&wld\w+ǥKzE7"ӛjߝ],_hڣ `L5>=2eAdBz_ffzy:Ijb(DOggSfq -jawtxltu{jv>Er+?Q_WRn%wܣ2Ÿ@(`JJ+0kjC*XkH b/xd,WTWz[ŗ[~UӪu/,Go?"vYnB?%q˛\2y&ļ?,Y:a.,w%Za*}yEH ݵXHG; Ugz:yvKeG_7tɸi-ஷA OqeHsU~u3_T%i2l_b]ƴr MknNy@*NmfSM>Si̼KcJJZIVGyTK>5"h_B^%{?7 ~U "jR @(@ a\%I"4.O(/3IQq1jNj㻅3+0<( gB=L qZ095;-Okޮ Fg8.3~QDСk=ز6b`OܤזoX<]y r!ZmW0Xn^8_ȕy#%Y(Ǐs]~4(Y,D@Rcj-c'S__?ṳ()b]~e¾4N Y~ZS+îeݿ?x#Mݴ*/͟&CRC昧#2Z^EWt>Ґ SC!o;Կ6 Ԑ*@bJtVLf`JJJRM@mP B.ORBRAUv|uvpEվ[֝;uluxn|~vkZӘoS<Wz(8ayr랿H7 Dڱ@PF8_^>2ʞvXl/ DqݸFg$ss 3];vmx̏l:jaM1^Z0\jś/q󏂬Sqmg<8z5)~-i.MDߠNhi;Dz?m$֝fy.vfἐRn>5"j_T Iwރ_5% ԤL0r) q\]N,,@V R, YP1 Iyg$=s[|oڹw<1Z9^}ӭXQRzjeT>˰tt&jIxfږd0c'm.P4mF磖7 APׁ)KZ:39aCpܣFef*nӰEpjgޫ󩑠߿^>5&Ỽ_pWI{c ~V\N@(-Gd^̉Tʒ$ l06o;M!5 J xP%*B@̈Xf|ww}krqVp- Tw̲?^>^Xi6blɾbc^L} >}7C;Ƴ~#rs9q/5WN7-$so,S.R1y{r^k"ϧI''"-mil:WG< nUMt!M{\:#~yB5IުtV(_ k1Eyuik嘯lꖦZjxxuz|OEr+ۣ֘B4 y55Яj\$lkX,fcP!r PP'P 'AmwyeVugIXG)}Q>%CGF{,tfI2t ː qĚZ.LQ ӺG Ƶg{_&G>{|~&1WOUm'o]/PXbkbuPLv$ޚGo!NywJR3=}|+ʵf]wiy*?<ŋ6_vIg0y*ۙfY:1yQ*ӪCI%v?/,s6Ӊ\^5" n!zsjE_D@@d5QJR]sUI$`-q\ Bav|O/8WT@:("'7z dL q-_O;lZ 4KusܗXcNZjT^dM~! EP2K֔KwSNM[ }A6ĵȺyt̉Ak6{Q8mLo<߁X5d*ۢߟ=?[ajU·ywk)g+ r" B.$IU% X 'DƜ11SHPJ@A8,&PQ.WFYX?KWf57oy^p4^0թ[༞hܢ~#؂4սX[(uc4S13ַ(-k%LFN+j2s7YVF\Hd0ݳoX] CuC6]`XU-(FqrMM;sV?F6E2 zAIaJwҐUh5d"iu¿g\ Hz{~o/@5 @(0&RRI G$p M"A =?Q քv^}K- ~ d%@]KU~#SKnATJWKd|,na6T` n,qߘ==VT~9Z*<rE)tFHjvtiG1{ݫXE菫PZ;^fp\iѠyIOVS/[!]!.Z9`+kvʲ޴)4d}fh1%~Z޿7|HP~5" :_3Zo%|Ztl&/ jB\`D9J*INHahD'H{4 @OzO,1S UD(ܜH$j} ?grRFS엄IdF.53ullVV,q\$&e{ݲ0KlaqL7[2|NahYs23!g [9T&}HlYh1s2C[^'ڿ.E'6+%LA&fH%Zط0NDs@(|,E!5*ӼgBBn%>=?[g ܀P@-8*'ČBR,B]SX:{L6J&sT[*n/IDWp3 q=ӢB0dEfZH= |(FvClz%go/x:6)LJ/m'lf&̉/fXȕz@ jϒe:&ؿ` zxO3e{J7W/m[re)EpsU&ngoïtw6м[^畄^tA~;YDEOjPˁݕ ^5"n/f鋄wEᅪ3\rP%d $.IdF0|*[UPi!ꊅCoכ\\Fz^bO3;kux2Y5&Ӽgt}05&qsjHP.*;  1ǵ$ ]2Xfvg,eTD#Q D W4z ֿS:~5C27ӝjSw6Qw(H1x-*ƒ祎@ƴP]( ,,qGWZ)P l$0I (^2Qx9ܫ\,ՈMsʋqU>7^xquCͲƕz| ZwZ[gfrf^s_ϗZ^b^_N|Lm 8 >5d&kqR֞B @(&IQ3bKN %\w>@m9lP0bRʬwx_u^K#  ݔ`0Q%ebvZJ 91a[谞O`jk~Ӱ;ݥN.b_ٝ&:k9(N[uQܸ[D5փYI8g pϛo˜@ x&殴xnFƑ!O cn9M)ZDW:LƒdQFոHlca?c]!he cV%N@ٝ>9lQsiP>5z+iڃSCIOŠο=>@!ݟ\$m.Ib1#m5?mؖ E D3 Ji6ŎUoҸ] @f'H{*v%b&!Xz1f^%ͼ,w%0KhGkac1̌|ݮA$N7vqvRKN=#!#U7]$R,/{|N y|m5Wݞ`8/,1[n\&Ujy\Y!wPaEq;1iU}8{kwM;LB=*,X)=d`wX^5"mڃSC9E~-@hI j 6@QQWI⒤b13! pRBIk%@I{k8i3[q Uv6V/RQT~1̡򚏶I_~ qMٗV雌u*۝7f5ܷ?5Z>ae])~Qu^ToLR@Y[TF0 ؾөSm,*uWq-d?ӾxG]od>^[w>MiCCrm.KoSwZ[],VV$+á,lR7 lNdYZ>545'SC!.ۀA@5Jr 0؁Pb$ eT 02F FHhݣ1Y+:u`3d$bd p{fBa\#FktcyzsK`8;6ax/x xnֶb6r R"X^H>0)k?|eOJFVC:ɝ|:߽"nX326oHg>hrN§̊@9ճݯZ۴IGyejH浘AYտDVMo[*Z̽/s7{8I ^E"ܸ*[)ƙ @A:d= UOXNĢP5{'R2UA@Y^K@3|ryg ?jܞ=oScRUMA- ,i=LHype<ZV9\8i<,[B_ЭQTU21jkQ@y[g C =VN6f+ҹaݔ쥛ίz &KjǡȮT$nS%@a,&7[Y?)zi䲦KG^WYo)EtV-}az|[S1Y!?O9fs^k;\vXW%?M>5r+7qԿ_jh:C/A@T@(T^ 'JRI%bh Q(BPK^PcYN ԖˮU,`Hi$&Ϟ_6Ԡpj?e-thXeY䲦c'V72[ i);vKz굽JBot6 Y\TW{QdXBD?=c{|xKZf^&xP֓{m {@X۵x;4V"?+QxnI Myj`PVBWZ* pT[+_hfI[˻O_{bOlP>5d"D&[ ߍԿ P PnJ+ v@ $$I6fG`AHHPLJQ<ݚKk _"_ONL?cyS\7Mgń, B`BC8klo>z±mh=Coa5nI`Gr?[]-RWXHd,\ vέ//1+ |=ivj'Cݓgtxa^9\BKjvז2A*Sו Tc7xɶ2Bm?Ç<{~oZ%v\wJy>5t!NyzyHwOr'cr$@ =g; v.3Na˚OjylkHwߊDnaܱ4x+Ѱ  'l}}CvoCK1>pC#]{VD1&mFs zZa@NZ3{ܳ&z3}ʃʱqZt)OggS_fq j{^5tVjh)[8_5P @4dL 8I$Icdˉ)qg(ʉMPno]H İ1\^>7ulb؛zYYX^6}r╆=Ϋo %'΁6m7mWA?`v=ᳮ&1Ȧ4|uAgkݕ.䒯Ň 7#-,]+.n}nƻ9hgޝyJ:KbzL|^5Oy/j!ܽq WB  @9@$q鸤KD-xދlJ( " N)M@}ܝ b˱]ane -ƠMHb0AO[?spLpm9J{/׭iwFMR4J)>+uhSJ/j\r<.@'u\dkG6<_ʊnwM =3ta2E E|cCԷ@6q ȢU_fA}8q$:[<}Ge[:rK IϜW~|΍Mv/ڑ5>ib0ݜ#!tY{Oyl(c2kR bM\/6z"| >54|6~ѿL 75rjs ggW%NΟ# XϔvV-}^wd۝nuOFJC`zУx<]9tkPU$A`m8ܸ$KCʩ(vwy!$JYF^. }ήJ WXˊOG{1~cѝx ǖo?7aڟ̚ 2X3IQ-Q;+?/t/YQuvIlЌ]Acm1$dRħ>54b+I>[`j)pZwc Ӏ2B"jRN`NK$Ib1PC $KG y}4UlPR9@=:-j }i:YYWf]Vx sWLm|\pkUrCkRW+epZ8*|: 3Z[1i0Y9H\M7 xCS>5l+x?_&L %/PKrP9Y rI%ᔙIx|d(PI)KK_}pݟS ~.W) {/nl=Nl[AųQkߎ~b/ E'2#VR3Ie.x9rDyCeIdwf-&edM*V}wxwo#OL*9LXVpw×.q+u3߈)Y'-zK K޵38flw5eõ"N%`|X^6"=X'teS6J1]F>b{geQǓGOhUmZ|BUcB5 ?gPө:*vc^7ZJj 94m >5f+ῼwnP54"/ ((,T"Wrpp\8ax+F+G4$S ʹD"'!EC@@pbfuz,8V\-))jpJŭnc6ggJc6?+6dnTt\:&fS-'$v ~tϥ-}Y)j °J.֙7qE@[3.zL=03#eXzGϏ;bz]D1vjG~zys=jNH @߽~~-k)}V<5_'2"8lin!ܲ2۾סbˊ(W֞R{6v>5b+B8w ~ ywl?0dVV V@`J:qInrkM@}G3'ʕBA1Ael, dQQ"Kgx@˫-TĽƯ{6sò|Pqgrn8?115ꃻ^ {fĽbl7<>]󾦖ҁ;=~zYn{7 5]G틾 =5˙ZΔmhK+P?ɝNȴ$3t覜KWkuGaղnu73} ^e0mjZ ޅvI!wD^5"8E>W`j(E¯[w4)"jX9e $N$%aNL$ ,W>* lgRqnyw7&sl3[ vF8=W>[6BC3TtϺ%&|%FDQup(_Y{a|}i1g=k߯0E;e|&YZvE&fo5YԀ#i'7^8>>5z+ۣŸ j7ۃ_ dirP%JYdqR1K9 0t,JPS|Ges026n:Qib͐닕\UVa ^ݎ" Ys$.偸[/7(7utbgIڗ%Kڥ2x}S0Yz[t*DFKY}%\2׍hK5g M6[o?]o j+I 1%I%3'5ot7SD!/}~7Π̀PC( @+TG ]%$H@az"J B!%]0YMciU,`rބ z'=^y,ZoϮg!̓-zGy-HޝC+7DTPOǥ5q\HE  osv6ebɽ-UbYAkΥ}VڳY=Beliu+X̩NjbFt6R*z"^Y04nʴ#,rb&ye(8~OE_Ss?A^5*Bج ) L J~gk?AD$@(IJQTc'.$1&!![ YiP.{4UvMt2{OmK\6:csg_ {5ٿjӆp$&SPb%ύ鲺ž2Q;qgX27O܃: ?Uu$5<6!/i{MMI,*|=,rՆ{k6?+Cm2wgv}_^1▕qv]QLEK^JuXo=Τ׷ +t h/q_| L~QOp6O'fm#%U 6zCI={ޒB^^57:σ[_{]}@DVU rPR]:I8LN@=:a$ M(᱒ 6C˪XpɱO wuV9=ifSe"E#%+%vb4D''5I'uyvh&,BViS:]C\ٳYmCû>{ ?4&ddYZ,Y G/]*DPܣI3CqYT{1cK}؎2d֡|m~,lzl&zA©TpHimC$Igj*}Ƅ(lo?53s;3:^5"muOUC-/}~o= Dy(7b8N%,q@f?d8,(̌27>F|*:ڎƾ2;%noj_ΐjy:|:OjBm- *; nŬˢ|TR<}H9bn*z'z'V|5@)\7c,Kݗ̆K7g6Kxk^%]CK|܏>M܉M`:5&kpӋc3S|&(/jѼsK~ԵkvuF| ɬn1:&83 !9u:I:ʧf3Ɗ>5"ӣq&WD/R(HeP.Elʪ @bsq$pX%r*"B(K6,BA@!J0& !Pȝ笩5AԸXʲmX׆«>hLWavD5~ggM钫 n亮z,IcmI틒1a<7Ɏq2ӅX⹵Vho0bˤ%$N {fkmzEYBja]~DAgj\{))='ou{ 6-gEYL/jV;6M,3w 1@͵wzYi2>5l+owL J6on!y72PZ0% fvp,G1ey$ WlAKvy]aA q0;Ndo-}EVP|]89^qVef%hrn-;u:+hgvڭDb!4K= ;;FBt5:2(t<kMɵ6è'}_z)w$eL1P(m;uoʣA$U;nO ы6{J]-N "6if߰zq9<2U~T mP\ݭWfV$^541u&SCN?[{9 2k\ʁ,jXr.Ċ# R!D5 @x\ */'2if Ş|(xV8-|;߱5Dg,;-)Wr O^/\uCn焝,O 1&>>IXh.臿|їA_Leؒ(E'ArqhedsL2aA/#c<)@NL_b2a̻9Iuos 6jLHX'kbn&|>߂Xk7~:Чgڽs]ɏgxc(oXIէ\ɚڪ9^54"bح;SD)=?[ADMJ @i9(%0IbR&P\',A (!D29+9ֱ;[m^ѐV߃mr6uY|]wG-p942ϧ^=A](x_q;8Sc|v:0QO<oiXwƝ팚b[7IΦzFˈ׈_7zٯnv/k2rn(%vZG[y5<J疅CE$4u>VV?SwRtnB " Kv\4hk r7n+ar`W޿O>54ہѧo=y@I0XX80 'bg3, + %2 D3bR)ݧ<TwǭO6X%(3a#N:L0٭e[(nc7]aM u|-F'(\Ҙ _0ΰC ŬL} >ڪYj~y /)_)0:EכY/YH)K)[UA ozw>/IgP%n {;b^]fM]X̗|gމa%,9ly&Ts*r&jV'ߞVIA~>Et>zwH~?`( UQ#I\\XD3&$T"$*ke J(=_&=(2w @q*SLb^tO7OjadI= j҅q =tvby[)Bn/M+ң4!|45" %taj_ IJoY+ p_J[Wg.g[V=Zkƈ{-[Xi*b(GaqaUھ]7W^YyՓ7?BwÞRuvk!xzݐIB#OggSfq2 ~>5t!^6SC/eݟy0d\PnNWP$$G$1:!#\.KuTH1 (_Ĥi"ց ; ;v+]ĉ0v[xͶ|γ\M3%.h. >oo^#]cGWV:l-/{p4wr=R$v-=ktӉ\,noK]Ko|1?]~o]ܻ tζU" ?P8}A^n,bE:'3l,^ѽ<^]e=NS[Un~1Β傻>J~5!\tϷL 8E~_ PW``@T`ʊc@W$TX3aE&3h*U B^. ˰ owpOc(e[D\QsSݏamSiQo>Nϔ,ag8@vowTd',/K7hT$/6kKv8d]LT\ԛ{]5pSF)hӪQO ,qg'Ab)^TwK7D& `Qtz_j&]4ƚ0I?EV3JR=|50;7jܪܹٚ׿"S~]iM7}`((>EtAx=Iž+0EA<_(Z-@N8$,Al&s2KP]I(@A@ʀg7 R"x J -y㒊$[LX%0T/_Tg36v<Q,vo+NLF;V:ۭ9t޶i؊!?ш:uDwm2cS M$Ϝk0lF}IٞCMzZt;Z̄ 4&ۓƭH ( ߿-{,=ΤX19PM'UOy8{H%( Nŕgu:IIh>5[s/7~*L miD>KK^+ݲL{_ԷG 2~L&j1= VOY7CVLŹ < A35O}W8o)mVњTؘ¤^B\2ԩ몕ٶΓҸ8B95nj,l+9k|*юŒWk=dO-^Eyn0EbAZR~@ %0X+WJ$(1($>DD=B褄v6T*"\B@A(+'RP佫i#78JИEl}/찡yxm7i]lW\14c@-YKܸD<_ "y rbSNkekDfA~ K>\i{ean%C StĐFvߎ \QN踘*$3*.Vqve/\WF0Xeoٗiv(]kUV*1*<5%QwBTt3Xr ,]{Ҵ777j;k,ctV_=)YW>5x;xwtA };PnJʀW$qb1  2JEKDp;. C@H ]̷g' @e^Ns=Xml[zno2wI uȑΖw͔صAyMYSU鄼Wjf ݬHaZc6/SF˰3X6lƔ HO~vwJѐ}5bAZ^)N&K|4_ BI`HLd"`@5T.T%I\V @(&) 1°aGƉJAq~ s7LFJ6ygv<(Gѓ-96#/_&6Qb}Ղoo/_o-}p@sp&~m%ZmZm9-xV&iswzDYJ˸iUln^/>3;??kcьGQ8-w`t|p߰)ݗgm# 'Mmfn2R$%{Ntff -Y2":Lf'~xnPdTռwMMO40/2ÞR87}$>5t!޸/j!"\gc_(VjRCx%$$$$Xƃ]Y"g)ۿeT%E "`) *1;BgV|i;-Ɠ4Mt)s3tLd.;[sWFx,J,n-Lle14B7KN&o[lK8K̭ۯ+{z]Q_pØIt>Uà|H7LVJd,mg'e0ٲ>DZ1 DA{/IuFhHCy3"^d_G 010qN fIL$6[ؚͳ ͠T->5tf]t?"zsJM|ot? Pn*V,+sIrI%:6bmI.qPbXDȄ2ՍfEX |ۖoh NdNwN1"~S3B3熈x9hV&0(41\Vi~quIiD`T 0ﭳH!BVLӏ? wnò=4fEm<&Nb>(K"2 zy5>I3!YJZ}u-Bxu)ԦlNڲ\2#[G|(.4v^fć4qT)i)#rr6¼Xْ@+_rsqvO!,2*>EMJS79>\@% ^ 1@%.]銅11 @xT(0_1B:FOrwmRb K]5 L-~*sj\}kms i_< :IEy#s:LC-3=Pk\CƜ70bfEsVe,V)- R4amtTcv,:On'XĢ}&Ɋx"7n>Ƭ`SE)2==ko<)2fa(-<}eO:.gd<:⑍5t8tL 5ttAϱg@]DpFcl rP.&0YsIʕK9bØ@b@P3<>a"^]&-7:N>]DѥDٰTكȯKgw/# bmS-5=q5tM|*p!kb+;tnP}*3 /eTD;bRuLjXZ~2wKss1z8w[g4',C||ވb8ʲ08kq[b&CfcB!+Qj]9urS|)5oouڞNйf$hU=.Bw_̆;͹cIφ6k>54辗ӈUCOe#~ @5D@r@YU0[\R0'1c&QVP8X d<xh8F7K^v\\lgHs{? l;a)JG8;݉Q׹[?)h,YVv@h+ۄέld-ҥ)8ct3Ë#V!.oT'?gߵƌs*sv,t*y>L̮$yQ*6_?ޟbjƤt6 ۰/DQ!kWܔj3獗[}ez@c{\Jo>5z+pFs!ASah!`A@QLTV(&(VUU–$28] Ai`ڄ8;ptBDm*)H ms~Y>}j5ٞ_[f_TGkܩm1)W~ 6]Vh=I+'.{!rW&A 4R{N㚅f%~IӁI OzOr{AUEĥ( 6W`Ė w/Ht>nDIRllj-|%Iӿ紭RfL]sXۂgǣ 3aNh R2C#ZS%K2133NbnlNe38gS|N[[|,ymO=yT)VU>Er+׽=:C#7)[ ߍM#PnUYL$b9WI,I$ U@.5B6%^R HKW&|J!p*-IG~b|GE @IumvZ1?ˍwĞF-o!537\h.cz*Q2ξԉyޯTbL?=MAj6;m"VIKzȜMg].#BYp5SޱŴ ̻lչmE8/W>FJ,qD|$RB4y3mL^on׽kQeY^$@p|EPsLuO@QrﶌD=C#߳{2=DYD^7D1%n9ocF^3[0gOQ-,]&Lܤ"Z>K> !UOM`l6q{ѷ .qLkFK== YiW&a@%n /YP 5/+,[ن{`jVn~>5t!؃WCg"r9J&` JYUs%.I82 C_qmҿнu @!> y2ػ@ZN ^_wz;ș7%[ `sB6~ F0UwPKJb_;'`Jg,bY{GxJ隖&/@O.7QeUz=vI!]v?^I&ϝng]4{snf{<̢N;+]r3rnnj޷:_є/r"075>da44D=<M)eiKiBp@+ݔ{? ^5t| ~}HynF8,@!TkPTU%zY"6BTrNJf @Y')M y|liw#w`j3>mq}_f{{]/6J[Z4^͔]agl{1fH#&53+fl{:5~ZzTIqIm`IYMDCFhN_6sϣO$fyjϹuJ~zUnDۆ'9F'p_'3N%6y#+&=Ϳ>n(FM(hy-9p>5Aأ=:qj.Yy$́PC%ʁT3@jJbaKL1MV—PJ@Axڠ'<0B0 6c_8NC]VͿkgvZoއ)!y1P52 '4d㾝v;z wK[ɶĐR@'tasS1Vp8ኲ7*RG.;! oK(!l.W'v:# xrִ9@{juZeEw=Uvg۬YqIVQN3+~$PQU鏖@6}ڬ½={^Q+~EuW@d>E49ڃG9TJ~@rPn*J tuXLܟۛmP(_H@ds12ob:NZ+J'BE44o3 7t':/"{{/cf^J߱<ՓC` ,eB{uAAG)9#?Zȉ)~BC{YԔ,3Krm]4b.Ma|VXuSFla,U1Y=@}_J}Jq 5LM^ pZ ۲*Cr,G;L|eV}wcX9ي#s{.EXfH#hmOsHf ;oF0>5tmďeΜݺF(Qs5` W %S [bYRЀ!^^վȽo er 3y3sZe(Y%\|0齶I,?|Uš񟲌u>vg{MsM/kZA,Va)Ӫ5\ܘm^LS4(sKh-Wݽq,Z4g KvnBqT9}:Nwygavzb-^AY~d3⯳)iCζ~T kϫX-~XJPW"Jf̛V"׵HSW@鱖}o./  қcA5 EY >54<"zwHh{N?ρ2U ᫯s"qjtaX"47ף`h.zm*cYIOu3)g6YACQaq·l|UTܛNw-jS?]fٱ\˲;{Tz5K J$6{}2 =VRY;+A˩`tmQL͂ ~qlϴ1ӺtE Ÿ&?ɋ7.ޭ=2v0&Z5ĥ._ڹ/3J_t6ݙ z*M;Zב7UF3(bŠ(#^R]\8壮x3d{ dxP\u1xƼEVR wlR&jeٚn@ٹTD8>Bv ={[h+s=ED?P>5f3dѬ+ˡpe &cDJ\w$I1  PnRg35Q_3ZPK !e,B1j{"`zzZhro5'|ոU#f\962OXDj{G|fO7w 7?O!N|X=z bM3XOKsw}sOIӵ긝m >XJr xyоel3tEֱ}u&jAqWݖ1d#y)Js f?̯wylo7.PMx dqcJss 9G:ow)?Rbk!"^5f!<螿[`j.?;=}@(7%@ ]T%IDۦyXZjI^ߌE,z_SâW 0wP.U 0X j@r@eTK$ TJX-NRl#("W-9($ !  %|l&wQ5o&eSiP#e,NQЏ]:EZX]ϛKdQ ݶlsosMqzώ:q+9ϼ}8^q3Xkaf(BPt28r^mC_^(Brzj_HXѢV(:XZ'-sdM? 11cu|ݴSRac#랙֟+Z@jcX[Mκε[ScI׻&\{/) OjLm>5r_ltU>+:yT0X` ^)@RqĔ+vY*ͱW5R@ꦢ[%d-P7@<' Q }IrFlU\%o."t? FEGIm`Jg΂΍trjY4(}-l5u {4@lyGIB\kG,|)3:fY?=OGj$V\Dt~h=f.0ź[!h?5Pӓ^;8=Mb(P6UKt,G51,Cȍu]Xޣd=Z|4h2:i9x4_[: 8fq2h?>E,z{p~05b!|wot5` 5U$I@C$( zꈜN7=rڰlJq @nfղwl)G)ej3dgbf\ٵ~x[ka%HԵb[|f{^2~o - ?ʋ1ܵ^DunKi=~9V`%LN'G2 V3Co$ Q0)qMvӛ7Om9E i $Rx ڂOYvWg! ڌTF[ɒ?W|afwZU  8V;3Efp]˗fWSk浼fSZj|B@`^ V^5b1\mw-"}>O" 2jD@+2 u]\$16RH*2((#TnFPH$ n&?ܼMhP_֞Z7ujīs;!3¹n\6lhY"oss,ؙ4F9 W9tj~^6gC!(dө?ϠMV/d2Φn;"qԖo^ Pν{ .}w9y>}(ŷ%lڔ8c, =\q6ٓiu!DTZ9*GpFm.VUn y](H"Z37+>//TOmXt_9gj*BA} 79jh6h[يzgf&Rxë[c'*r ?WF+e&B^5l!/|nRM,"}ݡXw@M`w/@ V%%1#lYXLD5}rgRA]o˗&$j$Btn} 7o pY5g!K菝˴.0s%=}ͥjEͻ{[6eQe3^%Ǿץ)(YY.l1m6ns?pj=r4y|qK)tU_ʍٞNfA{(pPaoe9m\M jFLشΝ-/Xze~qArpza.EXzXnv6<ĚEN㥊|XWau~Qn$4O+{S`O&XnZ^5ll1U,"࠻{PT@(V+ݮ۹K,19ڙ0#PZP>SeB<R[0:Nw?oX-⮹NQzy+:w.QAIwi$hgnESt(emaGP,b0餫Zҿ!+wn%mK >'{CN [^- YGm+g ]HuD2l2 h&>6KﵜO~4QeYF-3 fn,F!̅Yq\4d塹yz\'<0X^}cj]Gq/phfW*>x Xǣ9ѣ\)FR/lԝ] 0w_ufqOggS;fq@ >5,b!l=M܁ayyl w0E2h\us\@em.B%C@4xCF  49i0~?X a3U~G~hȹ]nu^v1 W 5^r 8fȎYS\&f;&K&m3%;vʲ'ڱlyHݾ {sM@oMNWp.zv/qmmmpźiXDWk!R{(T^q[`QvvgNjAxaΔ:Z>w2R ? ^}+ RP Ԣeʞ41wL{6͡P,xq'mܿf=e9p(0Cy->7c>E,lAvvw_"H;! }0 R 8 *G88#QQ`( hVχHP)q١$)@A9́zP*Quׂo&-LO3=ƜSy"E8ϊCij7kt!ME!Sh~k/J]uY˷x۴cցMDc] 9ʗ|grc1,bsGG[dlBG]Z}"jO{lf ;j ;e=SLH$J` [=o5]Y.)y&tVNN(l]aӰ0>4Y5/a8=TUA3`mAd J|Uϭܳ K>5LbAs?FL EN=> DM(7BB+*9WqqI `=r\%R @nX 0Tg}a79 @>5b}w "L \EPZtFXJP`P X9 +H:IKEJ#ڃ 3قfs&R*v~b XAtr0nI +듌Mٗd{\2,{cKuy͝셾aλn?>.-rWigf})A6FV+3\7tбh]mƾq_}}3.0ӕSioYB3;ʬ$\/aQ=L=CXnXq2FuoN/Үr5ѐCkYpwUNK>tLFEdI30a"`*j, F6Iܷg"=qЦU^i_Y1x>Nm>caΆ?=s'%U2^5LqwD8.05it{ٓG%HuRJ@5@N‰H/':,jTV\SWJ;6yeSd:^Afsr%WyA du5.;zncs7ΔVu:;)?:? ( j nՍ@\/-aw[LY]W` K׹ew*fy\vJY }aYUs;Fl9>c,g_ʙ` e䤹K3,LW bճPбw<{,n/v !hazQmέ:]ђ#%kE)ʱf*kxQojy<渳 >5]6sFKwY&_P5) TȢf$DKR SX; 8ͯ 2M2q ޺,^ian>x0uAuItݲISڴu>Y!CmB&I^gt@zBڵ4`x巎2kzUo!.͛ ֛< aSr-]ﴙz 3<nn10ֺG.[˳d6kH)!b_]Ob' 58s"g,7ƙmV|>uCn6׍p<3=gi>5t?[ރMJ1=q)s? >0X<%(V+8KRITo1GnTNzJ>LAJ6;a)PX 20#Bo>OcN<v"2Nc*lf^.2Kfu·VZj}Ƶ"zm ʭeMW[bϯ_,g L/ýjrp#}h] qGe2NʸտDs_4vϘ|]J\B6Yd+zjkx宴^D nAs>v9;wy044ֱSYQ܍۫ G|b২lhՌ*(KNDI>5Ln|P,>~&J~/} dԴ(7IȕPJ%q.,@ccE@A@)GU %2(xaUޗ~j: {n-v3Dc8iN@݂Gce*vT '7guZ:ثG{ ^ao?bWϣT}gXUiE|1\Y/~9s9سU-iEj_tfV!+ʐka#?j*q >2_hҳy{ *[9az95Xqb~JWyЈluH)7J4`S>8s| Wx|-2X~Uf}}&Kwx/} "jBWQ`0q*$I$0AiF+@(~B(+.!"B(PzRz:m?_ ~Il6bi=Nk.\l/(燘̀O `K'"6(zkA%,FFs"|u Iץm_n68҆_?W+Rr\_𑩃18B9$MنIC/43v兓$Vf֌*4erzea>+jffss6ljE>N' JO >5r{=G{HL S)Q@e k,hkr%@ @Rqq㘱XP" 8<EҮbSvy,3jr\|p&iI?(b 41lĴwY<EI>g͗fzdɤ>aG漁>1SvNt^>}e>ܴVuqTnm"gk+%u}3Z̩pJes=4q^eN%gmOggSgfq0'>5A8=:x$]jX*B=\@9(7%V`[pX$D\ %DT9@!@w 4 "cؙ/fLg/K"8ne>3WP{W+gOqZr7xOkYΩGMg,.μ[{;h[ۨ%' rו,#lG j5'[~1-tI@k)feCI+viSG#nV +\0&ɢG[:Sa{⚃uA׽Ʈs6` G=w66e '-7`rް}rx[dBm߫8a򚶻g#e3O{ >5Ay/?A0"z} O6!"B TPn*sJ"rE ,Xͪ,`B K7޶щcig˄i{F=K/S_槲:;9b|fJ[;~gw-gڕ*/"N%( 8DGĄn,奀uu힜X[iIQu0^TXޢqX>t{TkXѷĵ!`ZkJŶ[kP#OKl ~)-N5/qf!y&){߂yYP~ܼT#f_e8fO;cqfGCLK5UGim*OOo~^5LrAs0?V05A{?@(7U W Ē$I:.pL8lX  `Rko9ZƴwXn^ Xv{%>U;g? =m-1~p[ܤ*5}{AtZsUP\Nܗ #R*jzrʖ L?M %͠xgׅN(LJOyupf&dr8ۭ2A}'?v)xƕp =fnn;VN2NկyQߤώɇ%d^贽2OA`BI@]8=s{V?^5,bM<L E{ޣG#B i"(7+$.I.I͍`}B 3Q(O!zewxk4"cx??dr<˷ xWU֢)VnkuZtW۞[QDX0{ ã8ܦrJU ^cυ )3G~ÙFc#{5LlAMR SV&eY Pnʥ #@RS.I*1P<Y!"0J@҂"U 9D$!~._3]*HTpX}#w̯^QCaeԞ%!0L|X7xӒll&1q@@P$MVϸn@B9ؘekupOcm4$.L!LX)o%O}6@4zF܄P["/Ñ|SYLO;?VΗ7н,-4o`Rmł26]]樴~7OV r۝67_>5,b!OGGSVJ Z9PΥK\⒈#A@T[&.N M'[Ӈl .wc=j]ODr7c ǵ<./kNt;2'+Mґ &rpz{ܓ{`Rv4~)*=ӔQё`ES3qmڗ0|*1\H_:JZswI鴧SVKK}3} 7Cc+ITS!Ñ5./='Nl-}0$͉L̂!–crJJq5ճr0%iŴ7S]nPlQ &3LB}OcM9c=.>5,bw>G1T XED3z(Ȫ0X(T@g$sUTG:Nl_w'^2M+P@) Bv0jhf iKxϞ¡=(D: 7}wj5;֩t9U̙f_o-EG%fʎˋL1nz!n3E/(]lLߛz!N.GZrt 2ѫF{%xfc,&ccw\5&.\]|cӝى6i"3Qnh ؉sMo L >{5zA8tϯ9L %gt߃ "K%0XYcu%*IK8F, w !$X2ԽƢui\r(h@@ \)Q* (W%2L7b@qLǞ9DŽ0g;ʹsg;Րݘ6[ZdK9QRp`_\VL-ucfа'xHSrLyMU#8n_LX~5$+nt U&bɯa@P3@DUcsI-.a8N%OqY݂JAfԹVZȣ^o UMV,6).*̨L(Wpp$dGƬs:1[ݝ5P5EO3[&u=05bAnw(j ` ']PI@'YϰPpx"g3C&$"!" OL0$ "h)ŮSRˈkjVc弸;zK)|b~m^\1*O I?DzN.z 5"fیMdw۹ukr}6 ^j xF==i%&amO9|oLzsܴd'$> Tl^?)fkںO!4Ll=s铎r3C5yzR>5$_lSIvݺe;=@hȬ `x5 Xc;Ԕ%aX2b(%ΦS=gB 昀 @2ɋqjF%~tͻ.:1wQ]l$y*\VW*N'u~Ӵc)*e /]gY<ʫe;7͒]OggSfqI|^E{Gygt}.@r !yr@@gj `N+W,LbSU}rbQa$1 DD|?F] YcQ }y/*I?*romq MIߜVU%@1_ 4q-Iuy{7&*R >sv yZ,lfLd֑Q_܋nq&h@ՇmHz[.H' W눌\祹 Lf,m?Ɉ"ԝbj ?; NOd)9` ajtx*::s뤡PmROOrNFY g6+JLVc|Mm tQCg2{89-:;` wA۳QDI&ry02nt!XN Ɂ̟1m̨cx[Yix6FJRӴ5ixE>5lfA\6φasF|@r ͪ D<+.NfOb2CHybtqVRgӄ KæX#/H, ı>4~K}W?3˄5bIwt]wmE2R ZW8a ͞n{Ћ?KB?:z,ng NĴv/F2wڄuՒu㴑{[K*aDPWưGxTDVi}YnFV`_ oב$xtآ}zp:j̱HVᦄ l#Me:wc&]:?'=]3{}[4Nn0΃Uv>5lz3Z!σaugw?0dTW 7Pګtu%%̉Y*"dYh4@/Rθj*'&Ȁ2R)<뉶xҩB lOS_ ttE,u>5z=aыw?_eYT `J@p P]qIg '&@YЊ*fս|V4fzS O&:Q"Ηef֞%S(3(hs|qnfo rűj>M/u$I]Ywyv+u8{g2t.,9Q]!]'8ױCQ4wUM mH :4HA3VN! [Dhl[G.+xQU ;]_3'ShQdΦ9z?]A(: 3ZOZof[Z{C#p`7i?S:t[=|T5RPX㢁saYy]Fy9ޜ8ه>5L~{?Gɯwys:o2f Pn*r봫N8IbFt0Bc3km.ˈ>bZio svm3l}7(?u.A!W#]pʪiu`Er,FDM5vy5xxxД%tDН CJi`]" ٛ<Џݘkvj >5lf >j,A|2,BB+ !%DHBC>|m:X0^g۷]oYuB+fs8 ,H(ӅmV,Ku>}=L<܃s"\輷>}OmKZ鲗[34uyOn[5}mm LKNe|~dv"xz9Qrw\Tf;?ŸWΖ:8Xx*G5,t|ɽQQ [%uZE4 {6S\!oP&ѱu,QrL4$'˩X(rbB9+7/,5#-ڸw;~1$Ǫ^5lrA:>05zA 1*$#JK]#**@T, 7yN}x}ɣv6PѢfQsbL"[ZK2 !}"[(á_ij,S^q;-e奔=S=mޜqjgmB d^xq .zr{½ś),r7ei?s,"2 |\>R/,:̍G,z߅؏6X׵s``EZ?6{lNx@˦N2E"t}<ùrmǀڥi](j6EEj{{*C!!o.>Ef >U"6=K|gtO?2Oz;K̘c"mn2;Eır)^9Y繿}0N d bZ !g3Y YN r,bt(ln*e|vUvϲ{Z[aY^E缄jS@i:kdgB^ןV'MeoKwo*d!x=5$e޿nn'ey0Y*aŪ:DN@!g<JD}#Hg7IS`F}.rAsޟJ%1Z 7Ex&y ٫y)3H+%пtw>Vxg;,jR~5f >P5lfxO@ $ @$;R$I8&bfMSE* y e /c~iJm'3{)1d(g!R1O 4^=(`BpRDnf2\&jażOg/Op13f Kvw_))2n1SͱQ>m&w ٳv;6%/iL{:w.k}\2ڟE=:o.ߌ2vU fVhsoiΙA&\Ua,?X[W2 f3^մzFgr4_͡/0滶G+՛R`^5fA4>L YG(I UJ* ]KIBG4!\RnSEj<)^M]Mg#AfyowagF -ѧ'A%oȉk*&UO?|w6:{j,O~q$ÖA߰t&t^1SzWc;Q{iHGLP.i#_4?8baRR!z'XMp;R$פBrs~4sȔAcnL8uu 󒈂+1 ,dAu]A[=8b%Kc1(5n >[ajX*߬=A|,j UrI\: ڢ3xRMϻUϚӳ'R KH J'id=e8jw1ɹi,MtQdmے%\aוz!PnۇA'4xSIϐU`\o*ؙ;ױ9?5&lZ_.?ݙen}{ԩ?ZZT7\c58^LHEuR( BBGӮ襥h`5 pץfSFG1u7C*gOϳZ˙ hHz[=Nooʼݙ'j'xz~2~5n~ >P5lr7~OW\Q $%brV*.3 -7"*-r_ 9 q`6ԫl^<(ΜoHB'0;h݋LAlߐNs[ꞲԿk2b\nd p01ڲH_!tuMcgt˕ o랠0DMGwE@a:g]]"L9C5g|욯{lrs7[Qњx ݋aMFT"TƙmJ4j?V[>K e\8;+]#nvHԾc?^O cfg;e teOb4 էJ>5rAi >0Eb3@J|@DN\08,svI$" )’x'@-__>4z0 )ч>bĂ @"I4n0bEM/˜|W,>,b6l~ʖGX?~d&RY.O[DY;NuY8Wt@1GGu5d؛!}|6-X>,v\+n]H8LQ؋Ly YM~s,)15;\'17{+6{Rr?[DAܔr|jΰQx}Σy9RQst_T3f M-5hagc6n7=zA1ڃ噚gq7q[cbٹv>5rAA)bճأ9BJ|2Ȩ' U8:q" xFdB@@Y20FA`LZvXo^כ?z:a4\^W3f{C7<FL}sF;2h%coݖnNK/m1"tor&v(tkt5zAO԰w9(eU,T+ ҮT$F1(!U~S&49 Гz@(>I%@WP ¦N&._ӴgNwJħh.}wl7Bm[+9ㅙ,Oh3y L-ie[ l:dBS 4y#['&szXߩ5SnyEi~s9&Pjf_m1ssg*'8n6gSΛfgN#iT!|Ad ֚yS벢cH^XΪ7f HX*CL ӄII[{a7>5n9A|԰Y»G{A@Y9R su$Q 2Ȉ ð^JNsZ+ՋyOն@AH| @A$ټ뛘DyjwS 5Yglm g\c*oE^03aϾNtTYY_:c0_׎٨ۺ3Mk!L$}Naڔ鍛y0)A5\f%b3ōiOw#?HojD;sǭ=LdFw۹6]?;?ۀEW-e2rbQ=D%I.e<E!Ύsq/מL[@^TFRrwbtn7RqBDžO@b '9h+^5z?K6=K~N0Ȳ UА\I%.GHPn`%Xy/N.ޚeeJA@!R0Nzyb9G ܦZqwo{ī͖\cgK-#P|'e~~Ï붘y<8h[c} JwYdNekd1&Rt('&q{5,fAlkVHw|6ÏPU)o+W_}'T"%\$$a瑀r]턡Lt t%r ljNK2uk/m7޻hfפ M 5?xW]a:f]/BڧZWm 5۞sCQͽMjY_"^65'_"uJuέȬLj%%n'v ìfp35W T5w_osxzK9/!C^դ٣ˊ.,6ԕ=,h8Z0AxMX'Ѝuc~I-eIVyg#W칗C$!>5(7$L k\$<=j羆A MX!B(P.&Dvծ8b‰ 210D!=HaލPT(+jK0X[0+@3۶pe]1̀2.!/Čkڍ{t9nF]\9aVsGJ_L=WE=Wog}i#Л0$N_ XѨ+oSJ2§C~35.2ov{WR^8ZTK-dhqQPfPIl5e{[Y9g3M=^[ơD=Fb\{o&g3Rl?;ŎfXdj:`GP 7&>1 Oa{D7ɩHj}P, \>5q?= ~05q={e"~@J !vƔ @I4v*% @cVp4wV^7g<N̞T}wnf6;LֿJgogXNzP)^8?n~C*ڋFtc cI9՝6hȕGHɶk%끘c3-,7w.p{7aP~0SAKr߷vj5p{$AJR8;aT?XGƹ5#pAT9ݹOggSfqÜ>56o{aj8@|2V(AktX$,@j$y]E=/<kL\ewtPsD.Y*CUڸVrlob>QAN<"VP|Һ T`f:FγKl݉<"글mszRetF4>]W$e5!6 ^5vi޿Ni?-:堻~2ECB]U\\œPDBh+5/i?Q<GRw={$5Lk Й >\ vC_|i)uܽгj{}q^(qCl/dvF]o#SIƥ=\?OTuT~a@ГɜwK/;/w̶_;`Q+7S:[E| duc"?n- y\MtLhmcڄ)fEFFP$<rTjXY+-'n΋F<6gnukc+Ȝx8V5wIE'NS*Ks[cFM>5*:D|[i>͡J|0bU8&5$u%UIY‰ )m-yAXY}p?2]e r,@@rr$ T_ʪN3̣ȩf>b}OjcZǮ†"ogĻa4^kMҽF, ]^y=Xc߆Jlu,F{1XO ﰉ(·z(:/1jzp^Ve,`e-Ix6F.ݚA.snjaShML~2LoĹJS|ioy,={<4S%Zփ;w[Qay lwmdqJa67ւ kgXS1ڳlIܔI06r`2W(.>5nopol6] #BP]y*T$Xm958`BX\ 9`rb2~n#*HdT B3]1spe,]ΌQ2𧾣K^2DQeu⋿-\Wf&;%ͿefQ}3gO*SZŘ2Tfg^e˽. [2#v]\ӬG|:!Zu$.?:6~Nb-Oaك?z޼Ʊ|:O#~ܝ0inFE6Te-鶢6q+>D{s?h-e0%4>mejvv >ېA$R(d7R)fYJUv+>Y_Ԕy<^5$qxAGiW, de ,OUUqI%fd)@@)˧Ҕb/7$pfSy@"e@ LTMviË嶭ڦ|wLWh%ŗAuuD{^"~!朼&=i`N6J.vrsi˛4W~=~9fRle}axD%*#Φ%c227kj< L\{v=Ո1S+ nP<Q/l4k4wª1D5Yf%jUՆ%33__] w~\=[{Ul斳yMs{{w:Bm/[6Bνyn9TP X^E,ݢ9MR瞂aw<݈(Ѯ= &ht]Iw,$aa1wD2<B~sA>LuJ?5U"cb5~;)&!Q^"˨X F/;:|*m5gX.s-|N!m  ƍ̏ˎ^,c AMf(1óA_f;穲ކ_m8Nl):Z{\O=Iqmz`9 xk$vO l3mڛ6}64*Ya>5z۞!%~kNl!}w?C 2O ^,P+IsbZüppo!)]|XM, 4(<_V"Sz01#ō<Va>QTtFgs죟 "UU]8]f*VOh {G) #ad\[$Re,`'NZ8GM@:䉇)&VmKy >U8@d=dU*/Hl^>5~Z^NXSʐXm!^ XLOY=Zf|LԬAu%UbX&տ6gf9i~QB׾&Lػ9yf;XNS,;'SH>5~xwg?05$oVr @@t].$I,%F cv! al~@YN=8&(1\P+9*4Ii=6[z K] )j7= t{}E59RKjvqSWWX'ZotL%!_3t+dY({ǦbOӗi٬'K_ky[|; mKS(n?&z՞.Y ^zF^ T_CHʞPW[ K^N<t[ ++1cD();'ӞwJn iC=aOԘSVDBƇ&!:*$>5w<;05=;>jH @ %t,ac6 jgUL 7ħ/J[Nw|AR#Ǧ;z0200]@{0nk,jdfߞqh9!:r#??tAաNs_4l_\@{M6_.`ߨ@A<}y:Dm[H[,Zz"!#EVˆ-V%Y =2ZȚ Kz2mPXΣ:y5}6ljzeCuc%/H.Ɯwϥ>Ir~ /8vɞ>ٝ_Zwz顑x=E+~Tޚ[vsr ~5$qu~7}N~z?;I @(4K*$V)68X U3YH;v]J'\91\aֈz9VVu&۩1BynY=S@z6HT֚g9/$fKX[O{VJ$ZV4iDeŔCycJa1l9Xv*'oOggSfqP >5 ӟ]N?O5P-(7%*.r]*]460XJ_ۓ']<\c}r?N|0`(aX` (f+1"U𶲲@慏0F7E|SJo ;`ːXiv ,UسdicV=n}d6h䭃=׈=8]XoE>2=\XNaD[ToFǞӥչ7B=EW ^a]nsM-ɸ&$cdly>z7Mߐ٭K2A/ !.I7I%:H 6q6˳=?qtčH9^r4̍ptI[b.[@>5f@'aj,ݭ9_AP@e@tvrI$fa-vemRH 1HE(l|olp檹<1#2 B&_kq4嚰t^NI]_Umr{|oq.a&?sWӾΝky{{-4wvNa~8㠡-Otd]Tg3 9u̖LqXɴ h?FGZ+772aVDfK]LVd@r]"i\~ݸ1Q_8鼩Õ '*^m;NLwP)fJ";5toLs7xwfZ>5zpoA|Bp4ħ{gA@TV 2@%݉KRD$pRFP#ޙ?ae0@! NDj#T欖4N~Ry"Yf\P'|0LWݞY riZQXAϮt]M /xjX_՟55?ٹ33]>ٰĒM0Oj]뜣 vg) 7s&4sֶh_[w9׶nq SDVY=Ⱥkث{zvwZs-X$ 6-2u'lVͺJNw+M 5LEsZDc2.!8$[SBX]S.>5~ݻτbSqO?#Pʨ `URםrzRIMq"(HZ1wD$+&&\fbb(T ߻F+ֿE*?V8A֨~_q_cHwcgvZXY&M96[ l劝9ҭIq[<* X_2gъ7{NEٓ%E_/P&)k03sq .MfOo>5l~͛Rg Sޢ;A|2EԤLiT'IKVWbcLDsTövD`P* !! `< m| }B'IdY'V"2#iR4ʏX&zEsbƺuzWOX}m=59^;s ?y-E8/?U qŴ;/fn]+%3̤إ@Y&Vwì0&ΎUBό ns  8YIƚ~K9=wChAH5tJmo^|gd4d&gg6yxyژ ^5~?3ZRgOE=A|gAvI"  'Ib]xb]q>ʽEtA P ¥B))JsmMptJ~_q $'[l2CqsGmԎӥ7^ sg2E2̹I͘2 w [ZU2֡*CuS\NyHL{!zyDVT%邷e;4"Cψ wӳPZ`GQFe&!( e^ww~647Ga96|HӯT%SB)Td{h/? b=d̕Æb05jJĩkW~VEJWӕ8W H>5~[ 㳿SfD(&>,lT*b1 ˷!PW.YSը*RPczP tE]@5h y'mFs#I1f`FSY%QK@Wv1zTv,0IldWעf M!iU'Q6gڶ~¸ޤzuؑПBWn'=zZ̥+SR9o -ػnRִ*>Q7k.׾>ofbmςp5rZvޑ&ƞ1 N̝sede=,U - {cüG4'/Sɓ)gi>Eq=:g=y{*0XjSMJ%I"'"T F5, ;M"zHaPJfe@e(8Bf ]B{gI7 -{fxϑuş$u"zRIä3hv?W}n}7dy%KwP-Kzk\Vஎj ےdg~{ 6C 0q=Y%7 8lrjܔ9T#/U [sC`i,cZe9|emFcssrk0NbJk*mvqfF-C\w'vp{ǖ^E7*dyryDH>E[{coz H@! VXѓNwW\(&1}(0=%v~{>N{&D@Y-A%~Qy/I+YC9\(J?LOp7y ]4Q?,{",~ <,ۘXW+*.c8,?%V:b=9 IGJhjf3 }c>Rt3; ߻ekJW%n+i£nvWhR1]^po"?IALۦA|#ٴEJV"Sd֘ksQ+~f y׾8)>6鼥p>>4V:>5?Iq{% LP)ckj1BT8K"N TTe4 P 9kYr)!>`RX05S>-eEVZ]P? s,X̰ٓQMQwc͒lV_˩݋xx\(o)E:.'9_5p7ޱgNcI74hHꘛ&ʫgN Ӗ7|-nk)e>0_*,U}3(S*nTyp:흿o=&wnܗ?[ B0Mϕ: %(qn:f8DQmɋoLI/e0~@OggS;fq*>5}?m$L {@TVPnʑ=Ņ-1I, M(l{=<@o7ɉ>IrDSOw4m5ݖ撝kf'D:e[6NbKI&N:OdOM].~r(!MvZYYjGNM ʮD\[चXu(,.6ռ+vuG> /Og7ǨU86q:NeUͭo5Xt@f_|D0-Z{3v]ŭ;D2/LØ5cƊd dG>zI#^R|IߴOUٽCJn>5Sw燩}"# ʨi? v>@tc,FUKNlT(/TPbݹ n)G+=yer2)LϦ;lݔ dIBR^\Ta-.z)-3rwcg~u`2/N_ ۫Q ;y\n02goHѩ3,'U3d8H6ib2z&bgܻbN2MDA+20pog,7IKLm^M3V;v rh7v^ؼ-XмH͕f.%K£pG17{ tDd ?/kSM(/F,8>E\|=z? 'P5cpa=w(5 #1 q]KqH(;h LYF$M1y3J6Hq cDո ;fc3m-gc,2l-F5\ŖhIr&n^'j-/0YGPw>m7s.wboεũ UuCR\Z~ĿзBS Bipkx;v! ܙmbԪ#P^y:|dL k~5:F|]Nό] a(7T;.b.6%?# (@ 00P;5K;swMc:&X/O[[i2i]+yB[R"=9I;%Ƭ=309{YUh.K\Z2rX߱>E5lsV}"vUSH&vLŌ8ʠFW8 % 8/m츂.I!,Bu;XyNK1z4̱׵V3t+{?y8>کw%Ffg@!zynN697s/5}'7Sٷiޱ0(75Np4'  %D:ly>3Ήwz"G93CUc{^OCOF1#\ZQNYeNg+Dhes9q}篯y,^aYp檔f1u?BZޭ]PC6r\3uۜ>ump섎Q;s,+)|{"9HJ6;MAv l_`vm+ >puي eQZM}G;l5b,}&>޿ݮRn鷮pI9e՘|N~ 6{PKN<_KBIu2?[:)P^5\]辣jx*q|7~5$"tOt$I6D8JaZ8(U<-K,s>@X@L偛{Sk譧CaKҴ*k[n8,L\AkHo%,3@(6r= m+.Fg o]u"4}&;l6 k23&*K \[¦ei:݂sՑr])\-iz^vqM;@{ݣl9k:XaQN-'/On5Mf">5TgSg3W @* P$IbH@@4+AX-D}^V1`)cFHĀh?Gir"vS?m=8NUb?ԞzkFNz z+K3\g:28%Vy;\c*3|ޅ:5:}'IE&{{z9e䂱fi/KGA|Ab?u }[Nȿg S3tn=h'ħ}G-/pJlZS|gZFMbBvr0=Dஔpy lwq9\/+,^5c"@| L g%>uTKUPcU@us%[H` _Yl(n=J~FU./kåo.Ozz36/C- T X_Y`y7dlF8V+AAj쾌drQ_x- ıc;pڬE'V]~cV c#FtU梘0{͈qđe/k٢72gs BP;etLq!锹Ks)Pf顝sOZ=թN~-iZd6SzV0BéD ~E~.9|>ȗ#7nQb~Cc?/g3k3 O``ԭ/rq&a5 utS/a` onG.!t8ԙ) X&QFFQM QP,/ڤ)D)ǎ=ZQIc~^k,_ttW`S5JQ{2V7yNŒώ>ؖ=B1|D2:/feBӉv >5dF  SÝw|R A:ReTڥb,px" ׅp| ÌTR B|Ғ{;) ikGv(+4']N+yaA8 ?dܗT 1[mhȼUZ=77z3?%yOon,DY4I %^TlLChi@OGv  0OggSgfqRX>5\D;ӟl"oOe +(7Qqr\2 U2 2:i6AΠ=0 폃yn= ,R:5EZEڳ5goI>!;LAz?]fR7'zZ-)/,KT2ɲ#?k{U<]M㣤J=1O’X 3Qw2yu^-ogJ=髷VL+N9lفS(7;9$@<.#&ټZMThky>;Vhଓ?H_zEkNYӆTn^cnr?MݸIc+/gy'i}yֆKZ7 >5\L=: ŧ~={⳿ȉJ`d5*=r)pdIb r]A6 7z) Y*({84GF0NZE!9=䌘.jB Bxp:ypZvkD6N֝ᦛ<擻sXFQ2eAKg4K;ʴeg7gO=2~᰿+a~0u]|& oÍ7|>4A0D}~=UuNb6pmFA2ӦMG ?ixx#3`C(gLAoO/B'~jSyFpYI#?h}_7jF4r\ mH+oE7c&Nf(>5eAll >pE\(ml >aY0X_% [#@<4Iܼ|SʽP0[6TJy^ހ(%%K}{{4=0x\%P˿s| %uŁE7|SnVe IR\ܪm&VڥXej?_Bp' }?<7~_EOU A'bq|euۊrƦ]g`[/7TG__|p)rOi'NyKLxZsql[Ѿ+%,xF9W^FeL;c)|yy;w~Fྣ1Sr(7M5tAأ㧃OqңrλBs]]UIŒI AF٘!gAJ6aw2cʹY8HjyMϳ휜#$E%ְ(VM,fRsuoj?r%fUG/{FD r-2:]WWL40Xjg}yVB({[f5Ŵ⯳g ܾp:d3ez[J?mYTTr/w Mp_NV3|9wݙm$5N֖.~t'<]]ȃ0cJ1Fפڹ#ZwX.9?OwWԟk|lk>5{[)sA@X0x"L8D媒J p G.[BbJڧb %T\ɢ`('r- o%u.9?3R[z)/bwlVLs%.Uq3{,- D/ѭ33ѕPh.X9緲l_sA'6ǜRz:~~%d b2F4L?wEܡ_GZ~`Ϯ.Cݽ-:nχsGkC2.0-l bx4/ hI.+L\ R *e^]j8Üqq>5{t>T '?I5 >@,])$p+s{a cx%_g̀psw“ fή/sokߑX}2W|QgTՏY$(:ܦ,Yi W?W}]$rfx)C<` 2,~uQ/b#N)%sf2fɦ*{`J۵sw^/ʖV:Z$ߖ6ZОeuIm3jkW҆FV %ܟ_BK4*iӄKihC.ԥh+{,FM+ yV;hOzp3l@>5[;D UéWz >P5V]4UJWf Pۂ!azZ"+++﷔@{eQ2""Jw0Z#W PxF@'FחXWsM* ׍rԹT}M,{!~"w!禚ٛoi`sN8Y2[Xjm}@GLyv\˩3eqr3̽!Rh3fߨsz -GHhxf+=Dxl!fb*#[[*^a׋\L)̉8$ig~DD1hg{M{"vK76Rѭ_3!yf1)աuN8$k^5u DӢ[ (-P&0Xn,!v%p,H3f sX.(3J#& =dpqn =('KM[Wvڱ҈N`6#%U½}z7/qɮ]i߹ $RO5[w3Sc sY&Sw[t˺Snkf^5$n ~'j8I¯y `-@8:.InGXRUv =UP+dmX :M0YT:y]u?{M4'):j+[+CQ-pU+=Jj6 ?욏OCD))%Z}?it;?ng(̖ΞrMLJ8ٚ.}s s7-r ?c7LbFpEf>=35"s+lL4m5jWf6 WmxdZmD3 &d}ZFC3aQ {)8$DC_1ǜRCd+]p=xخpTUw>!w^fzn⭀hCՙ񾙑\+/ ΥW >E+OS1My ~e F (V;baE$r0:0/غE%[A@ױ&^)@prיe~$|{p>l@d_9E۞a(N9Úo=\MU6L)۽YגOPtjMP|8L60юj*xqfH |ZE?QsYSڗvWwN+ ;hs= |w7ճJE)F˴NaxTL徂 OggSfqPB >5le>{n3P5S} >e մ ])I-IInZ|^HΗ)y)0 2=Y [ǖc%@NE"A@LO}`au;._`i3q(\,7G-/i5a5??" k]Wq{;M3vi?7dQ^wU\V1nO4rڙ\btW($9/wOVh3^k4tWs/$Cp/"tƤ T0*k;>lNs^T kj'mʯE.@=rUJ͵ipPebyw9Ιس=^&X*>5z U9ۼn?K ",NU%"3xH ?^GPh铊l{#^Wv,~ 7;k+XÔ<]lwdTg/-m=rEC|}'I8`W7XB27UF@˿eb؇:3޳ߛ/iNO|;v #A.K᠌Ŧ/b.$R̕>9_ECݰCA[}k {hqUz~.=5/?&6 YZ9!"JŊ)MkJSPVy۳St"Ur p͟w\6>b&1.>5}-NSō't?'2Ȭ,l<.qWUŒ$L=ñKl Z);ݵV\f%{xB opӉWuth=&{|AN$ie,st?wձe5OU(λuRs%m+7`sMt%ec_*3! ^Q䢰ѓc?K,'v,VnԋUd(aY>*LS!+MO5\i~8^Bt+m}2*}(gSk-Ͳ 58N ,a>f"HӤg},؂a1!?j]` >5}=3O}w?3 5P(r,&`|QrZ:NW^[oh⧎u@(a\ hr@ў\ٷi%y[ 5{~Q7gZ_v//'\J'҇pcw9* խ4Y-}A4)R$R&Q4H<-0{Fڴx5\|?- O4L wws? *AZP]s$ᤪ+UbD$ZnGTצw=mgٹXMt\NxYW ]VΏ۳k&RMDs禬=FEv |ԧ.VW<֏> M_%r{8z)ڲ{9eg'Ekn W31z`^>4cƋkKpykUYI ?l{Zr#FRnZ̘ٯ`41-&k @OǞ4U@vgGgV;`un5\}wI?pDt~}#@*& 2kUD4' #N0H EV&|9c-i[ aBSM}O6+Ѵ2SBF9gQr2m iaHeT+/{(2Sv腅Eqzcaۙ֍MtJ KGX (\|AX(^8y5MxȀp5<]Gt<#~ AF%`1f`प+.s %FJ #(t@W=n:"6P2f 5R+p&Q~MR\\u2UoZ_7-Xl]^EZ)3M=bƐpL|gA-;F\bxAq-&9\R|~aZ49tom6˶j:gLda9k+|aˆ,Jt^=0sl>5Mx >o)b D쟁2`xr$rqUKr>9濻z$R!))'"O!pU3j*5u?]I|z?#O}( 'P΄]I3$"@(S l^ B# g̀فeDuꕒܟFVϏշKmH|K_YZud$1? 8^/E=.3p;`c˥D_,W28V6c;h`8? , W@?M=:Z:;Ca8t#&^9D[تM%/ы}5yf6E,Hx8!YEav_۟uA]&}Ň0ɵu9#4)J%'m+]Ǣ'uLNq4/ط{q补T:P w?#z{'͗,w6L9 n( OggSfqh~5\-ڽ%?J|.U~y,3Sǯf?Ϗ-wz9yaa{ϥx%ĕi'(=MiLQBk'6 V`e*C{O2K1lsnW̬ѫ_Foi2wLi;헚 Eeɶ3|1igV_OzM$nr1ج<Ԫ¬"();ewQ}2jO綫<^58Ϛz7Ƅa`P e tz[l޿1{^-Xu>5M'05]="Z& ?,'`I0r]IKbX HKD.R]q3^C[YemPdvU̠}ZY:w}UgZ\i}>Wrť\V7wY­'9Vt/Omwy1XTneb^j9;oԨ wb^x "lbGׁI'؞虚].uJmĻ̯c^7Xmے ɹ qܻeLx_|4z>Sz~Yo+4::˒جLז'%V-|eicrh g4eՇKXkMl(2|sblMY:& G8#{*g2~5 UX5xjpT\Ē$ Rй> B6y ,ږ!PUdXBwO(ojCXĨ{QqW}]hbZ1KV>,|9ikE_R~)_S<[;Vb-1sWPJI~}8~ᚪoXyX8?]'+3 {D#lͯW;gb,e2YLђ>;V~y=u[OUj:&LA?+0hw=1U!5NF5Ÿ])7eDJX*$qM^ 2@B3yOş݈̎hS{f=aǿP^5\ZHy$Qaj; A`U@ ՉTUwUUbIL$&F '(fb$7UBPXGJG˅fY.9wjĽ~Ę~JX9,2啾g3#g.\̺םt0⚗ꈓ쇌 b `ng9o `YāP?%Wg ):@f']6? 8i;f*[WVj~3}X:cfTWp'MFuAou7 I9L])D:ra{FN3Ӏ]ϧ[_jbˬߍir&ߵ>5cD ~P5S;a5)%HX8TR23Q#OnoЧg׼WWHJ T @ շw'Wf'9h]jwԪr[;|t(9~b3KeS9Lf{t}]"ɯH~L_/_b]`# ^'t@X{%u"E?E%ً biK](GYND_gżye٠Vt1g!a,jՈX7mA qun}6g-ey,lʕ<،|^ zfw֤Sy[9MSޚ6mqyUt{-uxu,e?M17!qN\>5\jp׻I?Bpig5j8oB8u\\bch `4b(S-_crsvӂB @PwË _ĵ%z{LdD|ӴYgc]ٽwk6{'#">'sǸvJv1WRi qO!*.= p#T.y?q{7R~\{fd24?l }S=-v̺3BrfO~"!?1Nv^x* ?YUg;ŴOAAu}ڠɤ{6ê!G(i:%;/#>5c-Ns-wɷe k((7Y%PWu\$bfP@( r!)j$X9{'Ą6`햧.氡/KAc.T0Ol)YJ 92[a:a)Cekb=A3ZXĽ7}rܩ{4{YeӶD]a~a}gZt_]g2sKBbGȞ ?4i*[|QG¨i֭V}aZ`LoR\ j 5B# r9q]Vnm^&Lk=<o[1g^j5l*A ^E\k*jw}?T %;% `W3W$q]!&N K@Q<_ix]9s'?wUnSjٔrXq5A`o1MhZju7=^zܱd3!4K]07 lo2'ׯI!YuMP =CێbRtF$wI%킙yt8,Ft\i 8}ыZM[&\c)z \iPZjTVerv٩V4ЭupdLVXԵ`~oAdS9 n[_![h`%>`C·>pmnIF;+㿴s|~ƭsJZ>5Sm燩aKrG/(YQ0!n@J bUU,\%@z(@JiYOc5_).ٕdBV$H|A3 nbfψU32ŏj"GE銜TC'o*S_u9m{sb䬓nt/W IzL._jׅ:15w⓿N-xd@,d XvB'K+j $qvHNϕGzX@DH3۹R}<@PL ^4 /#_WfRd>-wU0º!琗Pՙ8"YEKtE펨gUvDn{cmRd5v{>:OTsk}eI}^uoaXR`Pr͢ jLO {W^,k8pi _nKD&7+W+X703yb=nٮTCmwNa_  HMDrJ%4wێUkck%γXwY,fRlI17Allc_OggSfq[>5c-gc{l ~0Ȳ rPR Tu.X"#G b]@DB@DJ p:ozD§{~vk?93+r!DO[$W-/f핱%оn}w Wi~Zlo#g/ɮױJ9br~P^!Z[č Ht} 䶧0ws?cw*W,Q#EO%Q8̓'y7Goh> uY'0ϗP-ӺM;7uzY/]5'I޷y'.΄ \gnhkm0m*7S!>5k ħ?+L 4V@|2'H`k޽[d@tWRqq. 3/Ҩw Kȳ "NGAZ 7m*M?Vnwy;OؾwLTꇵqc3~x8Q:Ky!Wkpr>} #YK/_[y a]M6\H6䩵\Q׫`3:RX\9ng)v?ұ|^u'օhq ۮ Ns!dmO+Xe)&6)E;asxF=g{,*5.-; ٖs^ֲMQQ2S8W5ϜyZ<^Q׻ GWV 5uB|+?NJ>5b=: ħ~?T $Zt~;??P`q@U&E+NbF #^ipI]ë'} Q,BU Qy " gtK7s*q i\*wV~ä<&pԧdex[!˄ĭýαd·~v߯5,K؜f671/ytt}T(fyKS[swi߳*mlmBB||~>/ ݿtϕ'a7h6`{lY7ۻ6uo.>EK?K.I\A0Dt @bjJ%)K8Q6@ "b(5;iN>ym0mkX}y%[nOI6{՗&F{;- (NV7=Pr7 ,RWerۿqFQPGg0k[K Q+Twngz{T\ ^3 *!7.`;U>lqݘsgb'f#xa;Ϯ f͂ЌKH>)We1\R+ 4"8hn}DU1sKA.qBc(Ԇk<&d:vl̂x֘kqQ91[M΄XƮUZ>5\Z/Ƈ\o^ &9.PSI*TwĈ1ۈj#) t+MXn{xgh3xDD ~t՚6:9U}g\NL%jZ D^XE:_T"T~&p e_.RS]rޙsC\a hH].n3vkj_!3zEMtK$џ:OA[-8r'D%hj3Y,M;oõRei3V1 a-sqYss;j):3!~>tr/i_ermV llTQNl2{ nOjR6ݞa`*&B,aI*(^>}GM9S k*^5\j׳`(~05\bw`M2(Is8V$a# bVa)QmX *gÑZ ߦ*@\: &CZ|7͓ٜ-ln?$lL^Y]?} dĔ%-{_<6e's͌~׼ʡ\ s.,5_\eg>=ï);8v{qeOq}W+%ulfl^3=f w>CZ䂳೙wMzEkBtw9 {nvw}fbp⾀-vX:5\\> WŽt weDJ@7DJ{]IN@)WP[)[9_5="D%55M+• }lPֆ0\=f/Aq_.ufX^wbS[GLB^M]6KX>|o5#mEEspʔRksbtKje'ppZU~QSʜoƢUx?3Zxc'S,qwbѧ_b,L@.Zjֲ߰P#^2PN#qtuXcGP͝4G,~E/t.cM @Bƞ5ҕ9'Y x}FSbρ?N2>E\|-w^p]=%  rpҝJB J9.  Buc6@>gNLsW#1>agQd Ż[0YIgQ \?79tǝ1ٕEdFS-ͽkٷIk>ntqM'|{z`lj3=am/Ww17q.sNԣUY+},o0.]dշqxӈџ0ibߦq]69ƃ[F,C_FwR//eQd AYiݠ+v[䳻0:yi#(+xr_S5)}#?RylpQNek~} }_?5Qs|C]{3(>5"ZNxh>NH~VDy` P'aT%.IR$&\7 ,a<@NL ci»e[m '!uEn qfq`lߔufҦ)YQ>WU}7*33-}.فl`U2׫4=UURpk67Y/N$EQp+&A[X;y(U7k;+܎9A?Ok(ѱgfur(?ؽn˿Ϸ?{lP7af}\۵-Tő&^lYT,p<"_O9Cױ$QsY->ߢ$39ӺK %;el%n|r황cdq>5\c;p |&,$vUId((kV48N{TЭmp6GM- WTL( %A6=xX79~ʼXOiֳ]˜Qw*qkgʷFfq ej%&kL:۰5vRι4yz:/DveiZm=rsVdfwRJlw:,Ora[er'\C>ެtyKM3bsoFb\qK_I26 ^~.S*Kڏ6+#~Ky8ڋ*8 'yj;)*JfWi+ƒgʧ +8w6MV6u^5<]x@Opw4(H{2ń+J%q$Q"bS.i I4P.' " h3 ֧k}sUvJ+$PaE1k0k(V_B)KP|N(i-D.%czHFOZmY7gh񳯡-ZuN^Ct`ZaSWt.XwXGuwA{;8l\X4ehlz&ښg}U_z5ύ\p-v5ҤPNuriFa"v?k#Cgnmє2yl:%M7g3,˚ٟDN$!wGٿ/;k9*`OggSfqٰ>55<|?XI?iw@@!\P+$qII3xqzCe*MU9;]Jtj  .̀рl]}`wbEw'mNji i#?;9OGMOO+TYK7$%9[ 8\ f./1g[>_l49pDlȜiB4?ٛ9rVcNnv=-TynLaF5Awa =)ǹ8F?ygIs)_쥸6x8f^Zؔ~ tqJrPz^ͦmbf{V[,rE{B9Q&?y+xlIsZ޽ky_?!of5"= Q(5nJcl66{P>5<|=x305<|=ѷPC(\cd<&KU\$l3$OV[ΤwI, Aƹ,WQLUmf7f<1[sO4Sv%Y>g7Bq:2S^?*2f:~4ӝElٽXO&".͜L~~ F޽3΢ǚ3Y񬘟O2*z"Wq^ynr%}#kk \'VNхT;.S XW;UKڴޖ q:^5Wj6<ȅYzwj{*NѵkȂ_aΠ,٩bmQd:sX]/@>5<|'5'߆v2H5&`avՕB$qc2PyKXGF4f c<@;$KfE^3mSˍEgZ틬iuX>ɂO}d|$ksX*Ѫo_P;jku29`%Q.kkvc/f'hi]bO8ܣf)1>h]~UQ 0P$ v_f縕evE p?SJK4dmm1x.iL5ֱWrsC!W6"0eћArN{jH|xI$:cg <Qf87/9L+ƾJ>5S ɧUóQg~ʀ *TRqKKf,glᧅ-Ŭ~GGJ꧀ @N`("]wAzPp{\K^R[=}?|RnӴaӶЅ|Vnv/n|oBR̂h7'u7c05K@?ajx;xAW De5w,ꪪ$JbHJ@6U4Z@Ar$9g鹯c2([Ɖ~Jy7Nu;bNIP*>2 ^۸wqAuB#&Wse5{~qqjrYs'W(Ľ-6f],K KeB45i.[F-vסx zYWK[i?2柠,tJck8Wirn5N_7 Pmy;ی+&i#ޞSEpBNx#`;DydM/ t~iULlnzWz,>5k SýN p*T$a]R R(.mh &rjĎ۩Ƅ͔:E@cRos{98cˆFRW\MnLt;`yk_R6+7/dOQb1WKiTA;{g:]e{`-EsJZ9İ(,fGb(d6G+dn|lu.E^ɢV#V6j`u/cvMvwb}C H!Cf-l3p7>˅+}~TǙsSۑ^C*KWh5m2)W, W[G^5k-_@p,'?0bBU< Ԥ2]U;]2N*6JXp?e~PTH9GEղ;{Q&7DEvQX[yZܤ;]7dRr3 k+w"T$`YQYXI1Nzw=g$E6tǒ;AyӞ➴>-i78>5z:#)gs#~32U%K4(T]w:.I,B89(8.x;ģ0TRF PŕdNطri;fT_2T_(uL\ܣ_x#j2SuW&S5:򳰻-+cXQcu%X&]I5,6س9 Xs(P6WDl cӸub-`eK$;Z}8Sm9uSPJKgGF->@)ԡXScoؚ2X~byr%y\őf aWUW~Okm-9Y0k-[gr ʸCZ(cg.'܊UOggS/fqw {_K>5\Zާ/aj8;{H^7 ,\ JUw;$I 4 ),ɹxZbr~syҁ1P6>q1L.9m.lgąeI$Ӆ$ V;Fj6C8q26E޶ܵ3щVVg.26;oϤ\@S࢈&NgpZ=|3 pcrn}[ .".;4Hgw+&7}X1J$m2P!_l|CW-8 K2ٳ=9G=uf nrЛYk;XA_T撬VP8WiZ\>4!sM\͝if|vuLk7&XRP{E,ZFJV>5*ꔁGaju'@;)]$I)1t P"(!|kSl(5 c bcX >2:|?~{c|_>$_=z_ .]cQKoڗ'I,&yZ[tx ~M;񥄗^>~\jN=Wzr麛)7ɰRH3,7c/]x#k=~݇cq6x6N P .zQY[Ze~oV %9z`fs͙? B1d66Nzy;8J{Oe?=q&5E5\j~;ORow߇A +I㘙@%t'Jyত?}y[ܽ] S;= t2~G$ٟ)7}P6YI8 ]1F߆,RpCk,Rw={DZo]}6O2W^:f1U_"crX 76vECAr=uIgPqEcs1n.wثFru/,$:r˧Q'q*S?v.ӬFnhnj4vR)+(&Ft0@H@+zdQΛr#~ܮeլcko5:?_̲FASd |c{͙rM<dBrY88>5]Ꝼ9pejxh$>eYST ;GMvRHu@KR°,C'>HXЎ?k3y73` |Q2dK>cp^8Yh-^V, 3L$;G̒5Z:کnu l=^LC<~Θ$n6ZIfʸT)nJL5WL08rQpl%FʓNGNp AǙNRkSo+XHۥOL-댐_V?8֑;Y{qÏ e!n`Ro&}t|rnmeY^EHV7tXQm?#rƴ]\qr3[݌Y{q;wיmNyLqe<>5مwFgl3)| , sU\%JL"#4J]&)`Y@l{4&\V4VNl3Mʐ+6[EPYG2s6_vnF5 =N6f(bab%T9 4LE8wԬ2t@`T=4q85D1n_{IMIvnԅ@SLo|XբÔCuM迷u/ nqǖe?%FP._K1vQ۲ӹˢ^-Ʋ1)<6&';V4e OYdǧ 8l7m`/FI?!E_w0we^5{d 7 Mtl`PQcP;s5S$xo@3@\!+ʥaTίN ܴ;[Xet_x~qsߟ7Ww 9xn&p鐬3!Bg~G'WLmdL;Yem5ͤr /u gU7Vw BY۩Ź)ՒYY\d$m!e 噥m_";c[3}_ϡԷV )Js iyنDR>H˛ [%?_uvr )do%? Xڹ˄,\>5|=Ǩ@mM}xB  $+#=X$P])L[Cy`d+WTk0_Oʅw^.?X4P8Yڔ/JUyzn*B 4c-aC-?\?"h(@//Kd{'9x]ēXE 9I6S7\Cws:ܲZؼ53Vd i{;y$ =.Qޘ:4Y%Pw@۝{97wYw/#8TE 2'׭{Tozn,"~5uo'${U{5uo?ms%|.stưL2`0hqE( X2 RG -Q-Ob fЮuԻZtxkY Rƈ?ui"Ј0~J^Jcza2Y@/cL\[mNG׸>Ħ;UP), @WWʽ1h%T+M¸J[ DƜS*WZs/ )p] 8bug\L@BDFHJLNPRT@OggS@XTKD%j\bbb!IIIKJL_c"ZUz\ۋgu_;+Zwo/ηoigͮIOuP$33DNμڄPJgr;-t.{Ũ{o"[<Έ_Q_VoP>zaE}F#;#JTdti zGGg04>&[#[f>E )=>wMժt|l5֓Nl_ y;r_j2w(H0s/~ #~{-N.xK & B{WK~ʪ hsy0_^~$yjUe5UE:Ԉ8vDJ ;0׬S 2D{\N\~Meԯeʬ8uqp^!%KXk9&:KsOڨq:}fn΢ZO:zS/]W:Xn=u74|+S~P䙲\jœĜRӖL5wOȾT&Bu : \"`j$^{yŁ1 52ëg}A7ՇOfґ+2?Ԥ{ |:I7 M.X5Dyȑ%`5UTeIjK(,nզM.]#}*ϗ{z_sz*dB GҨRmZ9z/_8; b%{6kiTr  ZH]p}%7Ge/=/V??c^o r\wKfal1#Ǟ6(Nى\U= >.kț6t'{^:?\Mo]2jnYd~4 :h嫭m1Oc pq[@9u qqHm8 m/ktD%5qf=_u1fRס"hZ!9fqZi ,>A0`6PͷL,\Dk)؎>gB_\+=Ouy-z}2ЯҧvU/3uMYru{qcͩQdΏ(ħtϟvdwǬMy6$}D9\pkN@ $lm+"ƟW5w+hb}LJVA>bK<ߺqyTmirc֡`(Guf) r܆jӆ]nQxۥ0=3: g7#|=ss\ IҽZ3m{L|kfD Jjc d[ԧlV0< TɓnS`.3[bH_L砩t\oGcG++56Gb|^vh1, PJ[loB5oͺHlBLy޽kY50˔pEHlrWkh6ʓ0_8((n ;"8)g1n[ ywDEKH^ԧX^}xmSc,qq|(X9#=w0bVoͷM#㳽`1Q 8Q|0P>0Z9KxvƳ^.xؐz0k[o><%2:j/~'F['iF/fZ0FZsirӳj|3ę/'/o"(m?PNPBNxdeN{.V_*)mӵm6񴮝c2ӁFo Xh-[Nr?_zbd 1jQS c׶pG>f~)C8RQ]Qkkܼ}qcYJ|ֺB5CNO 2zr-jVMڱЉGDZMUIqx)x(c0LU_X>O8E~(&[YKu&coķg)MFpt!~UwLtruUK\#Šɤ.O=1z|Eǃ2{m&q2 ]b֟lѕ'H8~r" xa}ݪo$ :l%qP}a ~Jm ૏`ՄDJi;<g3 A`S Z 5m>[Ώ'8m~8.9Dffta~i~uJէҦoDvs4 hBFa+1As8jM2f>.vWn *񊦹ٞoz<.Qi^2O*.P'Xop_"jޯϲ(RëA3p>N'oY6OK^ͯY{%:ױX{nicn8Q[Z֞:l$es'W/DVkc <2(_f਎(15/N߼%[ARqWd6}9ᴘ^}, !\{lګX__ב-ݢ$yH}KYE.Ȫ{a_s^םs p~jbx8:s-zh޴}u 4JM`| MHe;C[`+4̓ݤQ߾I[Ị̈~NfpcѦ#6`}Ve2}{nC6\:JO;4k~ۦ죵l`Jĥ ]9AKИ6͉DcT^Q6؊Fr" 65IS"dŀL':sHǏoW}Ε EF8:oD[G'9nugEM $f1r1+u@uszT _rA~8?Rx6,'0i,<m>q;MdϋQ8`I66;Q։3>Ǣ,tkN&Dm'E.!|\:º炘MĞka)eV'5,-tyM>d7LX)/w#^9<:ȉ%6f+'%eSM ޵mwyxNLB.7Ǐ̸@g5@#뀽N'j,临wVZKE4t9o'9VB "+4D[^&X>JMjE4x;e(%7bp.cG2=JYKRohgILɱ:eזۖqB]ˮ0"I2@\ĤcQZckY&-dƝ 1Z>Tn@iZre46IMNƻ[Ã7f~ӭw>%YGGڨ|zI,,Lt"Y5틩*ɣ ET;>S)]$0A`Oj?3hn=$I+LJB] ~J6z45949ni2]ı]s̩Vz }|\ͤ.YhAz9ﵕ]9Gj5<̕>%gÛ}6ܕ[ܷV~G_C"8[==|.0wU&S{3dn9ӳvW;MhoW>()F*w߶kcqf\w#'ca)G_c/h[\mé|xny '+g[qJ J~1R1K:R{j˿Qc6yKrs8cB#KXtܟ?g2}awFΠY!Bu)r+H Gλphp8`CgENХ.Ao,+5p+:=F(仧tKhXq(Ǫx?B%U_vp0 ~J-ZQ FfR)K)E}am"]ɎtS[ [M+_ɨڦfW*Gǔ]&NE՘ q6ǂ;huy}`fbzkGK3]Z9>nn.pƮG1TBW..9vCQ5o2&1& o_R5 ,q' VxR1PʠJ{tݥ>ky\b͗F,˺Z{k\Ohզț HZWrcŝbTv>ΪeOW,-sNDY(@ld:p2{w sc)ժhU&ξ;CwDL<6vƷ,ɣ%Y4}zU3jy*g@wS)#:j6&qx} LXue>Fwd4aQ{ΙTҝʐ(:zauYɆaJ8SyTαJؐ ͧU6cx1QS? -*G] -1n?ݴIU7̌)3OQ)×GGzu&7%}A,&T" }+A*ҙThcR˔Vl[Pvk D6-^1D~д, |`cV59~|`Ve<}dM}pհKÄ )hN͂5 {ȲFtж qko,o[cP6P.j_YY[W}o_=6z31o#_Ab6*4O-S8gIӬD5+W{‘5Fc)u#酜HH[K%R&=>e{+*eD?UUPn77K4o(^ZsdIpmPm`>S]}^:b_ST1X)tgկː~kӺs5m}`43>R.Kp Mzۚ7ڏ, ge,fK̎5+ +ܜ~r}ݩk=P/kO!VA x  Ex $[A~ihavQ$M)xurTu`1 qiD9e);U3@T.X)(b:>8;GoVGO[7+ k֭ #nY4,ґvؔh$ܱ>ksF&oG'8l.^1#m4vMiѐQ$HYԖHҫi}ɠnuAg8SZ@N]fA j:)1LkDV!,,oZFl. ]=NSn}@^l_M$:c_a齥áVU*4Xڳ,pV(1dY>ީ(1ڲ0]peA۩L׽gQ9^ky~nR ƦZq!riVfZ7yӳ pM0oB2`zC.F.nG<ŭj/^\ƞiE^hk_$:N/lfc:ޏ>Rz'r;~J<}|OsبJ(g ~}B?-Jw#rNPףB(_y~˱|0$f =iWgma٩umG%Ķ_)o*rzU|r:R|lx87VAsh:Mh_=GizK1~`! Z t隰ۅcev{ ynzpmq(M~Z~I|2?۬l!].q#SJn9N^2;]5NCAT?ghh3r?\T?UU{|Gy7E1rG= s-\߇J _! r"i\7e}꽽ۖͫ>Y"J#<Ɗo]Ep]`uG/{vs$7jz`E҄ aW:4~J_?Gv4T1!8ki% 7Kp}C&:ևPwz6m%ld{Lv%6,,zƼkj`%|݁0ZV`rin?(%GcK1Ǎw}R/?^E[~[?}W:>vLXfAΕCj݆7*?rsO]NyC01(#IJl)c\|!imX.+u')tq$ ~-D& K׿_`5_ch|slY `˧ċФXýa?t&IjDM7`XbnTaO&OKfOÑfde`3L[>8Cg[9ǮՎQv\\C.!.^͊re.}g=KԇƇJ3[3Q:S_ӱ@&cu {HeхЪ,gs4UzoJӊVsP4֕~9dwo2{sG +'Ne:"q,+sDN棢.}Z#|ݏߍw7ᳳ0ၸR6B?w|.1GnE~y Q൶wO+ZY@g}*ثiٟeu'ooCb70mUfg,uEoYƘCs+^i&m'7SIMEwscj$L=H +Q۪~ C^sҝ׼5i~S~=Jy ݉/ZK3$#n]{4J_ֶ}+P5yG#xp4[dwoL Yd'pkM/U}?j`Q[v;mRt4HtώmKWizD;@ҨO}wo" )>- {??F_\^MjO` Y5Ѓ]y-i ,PdxU]txs*YtHce3Ҋuq;N"\q񹺒^J>x"bsV, +#G[h-;84-*18,7 OgM~e8 O?w۪9LQErTZwM3[hhF06fZbOY#Wto_zsͰۃ,61޷^6Ƶ+]גd}xӵvk4!~IFj;GCSY 6а^8O(6 Vת`} %~?=J,sR=vCû5~[5>I4˪,;ޔz#%22Qe1l2&h:vHjQ@˝m|82~2Bfv+k6Y1Y,E7E.l7YLfۣ[ARscSkdl;xp7^ѵ4b.7ȭy)ͯhjr(jgm =r:m`qHZgLc$as*v,OkЯ ?!24n^&ti9wYho7n8Q>^=r+F9ؕ_S1+s;p‚E7^ʛXMM t.,x?U&IoKs jS,t/tns-} S9k8]u`2&o>}ӿ?n[ou}ŷsx,FKCmGc7KrUS|r c\Lvn.*2`q4=OP0]gG Cn?|Ǜ㌇xm:feXJ6pjXEުWјs:Yz>婸}(R =o97Q6brgl0r4иKNn}Vw "A9*qlWowh7wJ.N*˭=d5õBVYqT ^R;\_,Уlce$(K&~՗Q -=bjiݴZ ʈ7+]w!b.)F ܔWOmu ";1GC6Dմvbk>KX8>+jiׯ֪rUHA13w C5碕<;z wrZ7Dk6eݮob-3o`6w>f4{9%|=G|\Oobݕh]㺇ӄıjf:?^:-j!9TSҗ.D^TҚn35=^i|f{p/ }IV_䦵mO^qH1ߥŮX(븫t޸2cWUGt|.wh Ւ15»[s7o->PhE8u$8{UJ!bWץݗƋtВYYˎ]Ϋ']ymurhS7\==&;[6/oi>lw<։b3ˎ2٢KqBsP [ߢt5m"-0Չ﫠۞Mb=-0>XiYkyD^:y;$Ch_̿%^9xqCSg :WtIy}II1&lRUT%x֯,t}J-xRYbBhؐ.OggS@XTK=Jjra ۱4NF82Kz؜9 h04˃p2+7ŏdheZCo5ۖ1R9&_e3Wvsؘj⾥ o<؊H`!&J9'3;Q-GI 3Aj Lؔ2Ku}S])t|OIoZ-'Y\/'f[mbzȻ>b-?U %mNkC'x%ij2Am]|ndrZȮb9L_kV}cꯇDH5c2{;}a>DpI~-;DX91^5j /ks~F=n7KoQ(9ry܀usњl1͏>z-x-U};=7~*m1s%9vnS{QTO*gJqJXe8IKM㖓WRn~7Akד[ڜݜ,g_.XDDN5xhscVdeq _߶K8qHoΧ|Cn䱖o>;V7X4<+"#cuQYJ%0~DGҴ ]6p fE8,bp~WtkG48xB6=euzM>筲vN2k{8FSnI8s8ފZk6 JӢQ R̈!5_=yɧ ? -偈BާQ(kX$*7kvuqx/o@T }ܴ Tt=|o-yy?)u>yKDX<[&:x]q,͹`~)͑\VşUSڶIQ9 Hm Y:w1=tnX=uM Z[&X[}]?lӀʅۯJɕ3W_ԛu8ϬX2v2+A+@įWM:8N;;iP)Бs,is)䨊>^P.ܶqK>?JFvӥ.s-~Rށ$6ro|V6{!|W۾]F(ͮI:uz[8tj؆-kBToeg5>g~ =}A{z|JN542n R^}T%ILe,=K;g=,;lG959!^.IָL7]^ M A_se&5fE!ƵrХ5W,N6rv%NbcLf@wZs5=~\MxY-AHs=~~?пzua;lvMFWn\ut| ඲Sw G,{+hE]tQ\j+iȠ 13NMG >M<wox8 wK|aĸp͝MbT{871(;ġF{ȿ% ӷsoŸB0 ӻѼrRlyDNMUic\"]gufi,^-['Kj6t^o hRfuc+n_~D%:s>;h͍=,3y,|D%خ㢯V!>AEf=dä D9:Y}iV銞%c'"x zJQxsR^95HF]uNiDk "跮 ՗lp5+;Iܥ__'1cvZ *NJn4sܲlcN 䃗F3ݎYKnttnMgc5 .3͊h@b=w mL12h1ؼ}rsk]?aT9aso@Z>2=5u66t~CEiEZfwl~VT /&I G&F&F#A7 7k=KܐR? ;mW' NW ~f x8^2Ơ:ρ04vx'T~FJ_7]=q"YGK;;9ZIXA-ފ77? /a$9JlqD s>.~d>Gs=Ibº84&Km|&Lt(kKVF7#U5̭C 8uK) ASBw/\6?x `Q'Ypz'6\KI7Vm+| _/ghaч ޗӛ\|=M'7KxywUt.CJ'R{:7}':Q~WcY> }fZsyf:A;*E:H堻sSj4o)ljw6x>JM%U48d "VSGn2m@ǓrWfwwg~9xjiub:%ơ^sҊF!D` s(4[%m^:2H+~3 ׿C EގC먟ԕ1)UШS1S֬^UArsmqgYU_\$s΅Kb?ͩ\7m"]jkvFea)lZ#Vgn|l8]sW,Ѷǂձ=-S}ϗfӆj0RCTĀgL3}dq|!v(vCU/ϢR/;.NG܏f{ZTsy@w lc[0-_sSD1p>vIY.+M})uӎ%x_o~~] jzg[n^ŢGn_ Ko]NFSgP٭m3j2(s}a[4] bR vj7s=٨xhAm ô%B V?xr_Wlw)gcB 7+V KH_J6BMj%MTbPsXFf"όsc-0yŅŞ v/S΄('Mmm[^d3kyJ?˜ue.@xQ7˾K'nٓa(YWZ[Z;twUX_1 +UݙO5ZWT{jwp1sC7j1Z˃9ݱfs˟`v w hm͇VĀ^G3m˷nH!E sӹe?fM[Y]c8vOm,Ld ןsWmR$̞BwId>s5K Ii3s>5?:eV"]ˌX}>qR{Xkqm:+9!N-Dh;2q0S^1H $߰o ^JMh-bݹJIO(A`zbS}1hf!yz_?"ӘÇ(Vvu*Aml Gǜ5꣉ʜ"ݧ`Fm[U.s{KeR*bQqᵦn-zG0.εL̺o*0'o{2JJ]?vMזS[v2BWW)h H{ԧ,-Ɩד賂mW('RoES-W_k9t<)nd8c"GHA;'l uQ'%9S%Vn$D6ey(q]+twF`˾]6#.HbL ÙIŇcP J-_f5w"c!R!p-E:50m?Skjcf:h3ȤSwxǬc1Xsxv&{eyf{dvIVCJM=^_4͚׮.9WC7D^/SW5r ؆ٿ1Rkd_%^-Yz.Yyɛuu^N8Pvl7O~3`l̻Xn/7^?Bik{*q4XL0? ߉ xx,qӣ{\sJb?O2!=ʗR5gZ~,"1 ІȲF^\Irٷ(| ?{౦Ϡ*+߫&J{DDDi>zIU5I=QDddb>f.!d> eRObO )O1KXќ<hHb=XuJה{ŧboeB݆ۋ|$95gI.0 d-f8{fe/@eژE "eϸ[Fʁ ҟ'WmC0PYeUVZ=*&it.ncAھ Jz=tɨ󜨎ugPog,;SByP>h3]T1VNh֤^1ўűAO a`r%k͈T}bOcyݬ::ʭ6Z8+h殲_R~P0>^g1['>9>ȭ)X9/7RSsFkK#yR FmsjqH@um->Nʺ9J]'/t1exʥL$בHA޲Lx>\T'i~~[-w^֋)=~JOggS@XTK~:M3|ؑ2%Jy$;F>h'f?`JE!{ IͲLSqnor޻78EwvjIk?$n#㣏^k'$:SjĨ_Q!4h¹0 dˑu1:m%EX=b{|F0$^J8 ,ZbsM0*FHFq_s_ӡg-A2\a#kG-菖ǥɘ%esw%2ȾRw90C6͉vȖ(*qͿ ޼վz+ U(cۍ?:ٟlˆK -sqI#~sr+;FNz7{ wWB\bQĉacO3ĵ>IY4֏l؛[p;xvtKxMF}y#z_uޗqpIQh:>#t{;-wѣVqgNDjQAqÇ_|eW;8ϑMvm~~3maQ-ct~ѿFCGFBi)R\ 0d|Q3)(]}>J%M0~^+l8 Q%!æ_Dc mul4<8=90fʇ' AIۈhh:5dmybkSu4kQڮo*ehӜrfi82>PWh! I~\ou%Mso ZV?}W`1Ak+NcV+Eqp6%P|RqB\:72K%pqRպ*.v[. Owx^&ZlXR/m:*XʟvNX8>eƿcV6ݑ͘Fmg[)y&ԅkk^Otֱ岸# 6 ӯ~σB蝞N|͟x'~o%r$ڱFa_qőqɀG{ɀu;'ŽGEDol]Y@aŤ-^J 5 I WX:uh7iq6 ovyHMĕXǭcfZ>Y%,iT?Xyx}=Ϲ4z&x_|wM}?1s߆^-L943=`0jT۬U2_ۣ5ʫ08[.\8vԦ[P~M ߞsl7Ͻw铪AW]˟cy6(sWh[׾6AJx,.m6Nle??wتŎH=ܤ-g/uv?Vն[XЎq3 z˪^t枍j%(zh֦ߗȊ`[b\"S:|J&9֘H"4РKt.aZͽx<,ŏ,iІ|B)LͷDPiZ"+:fbJqjK$9av^:-6 ש:ԆшQJ#I1*ƶ}xQmpu4e1Zݝ;r_H{ |<(:-8}Q|!v#'\}\*:6E;ToaqM&_>|s.8QB෵dw*"K?R# TTKЈl"pJzRJCx1]SLpT^ M `| V;TFՖHhHۡCPVq:ih7de= F&o[Eil\#wmto۸^]tWOS[+9!1Rkf\(yh/[VI{ Y7MPq|MFaCrhPȔSQ}?eZYrv_5`$# נo+ a·E=eOq}<\cr~?]_J6ޑ\KJc%7ث6eK*a =cq^OiDmkse[KrzXok;Q`jVs: ;r:1|s(yO{K(N^X]{~^WU n+Wj֦4zև&\o*:C81r74./*/&X/OI:zkȬ <,>qʗdj}qKG8-Yt󀍟rn}W怣.tE֕3{ٽLo'O-gs_]>ii9~>Gĩ?}F!u!`Y,|7DsyՐ81ܿ Κb fSOggS@XTK+j~J-6 ǵb4=A/CcjFw$eSJ?rG E)*I6oy`3nsOA'{t L]Qi s5~shs!\~ˡW@RiȶsJu ?<ĥiľs֓G;#EIZ,9MVl1>,hJ><wkv6V߾hl|ybKchyuwysn N}LN0o%7j?Hޝ3u{|xn.7U884 qfV6^{gF8ЛSY$iO8]gG9*hi&R=/U.^*.J 3|\`$*zv4V ,YY{3ݬo1uOkýnͪy|3zܜsm _ i1H\΋CQE B VpQ&k5\C*H:ڧ2u7鳸lؙZ^JaNM^(c!P43#J M爉n5~JCe~-{(I_xOI΋ͧm8+פ^gvE ]1~jѕ7??^=1XeyT(wۦ!y{M+r~wr$. GE2HC|+:=RhBopl+ޭE[7-S #F'xl\#*;u3J6H=_mAr${ВW%5vW?ABk푩/ \/vw@] ml@z*O`8m2f)5# =[k-` ? l#K0ßEx5Lxosnsa2{7~ě}o -nU_<)<26͛ʹtU=X%*S`$AfH%[ƛ{)[7IҖfF[ʗ|h_Uc6sxs6Xr΀ư5-PQo!OX=Wp𜛛R4'P c'֣CwBndژ]x/ۛ }GXq5 Np]}v,?kMT׬Z.qFǻscm? <|#ԍҞ Z[wh|5ڹ%El pֱ}7S1x*A{z)F֢X!S}G#ό6䊘'p}ştquJ#@Tűg*v?ՙjt'0|$PI9 ZO>}T2?X<խ.Ø?%>(E#1+ mL CQ> pIww 7ňVĚ̛l}77cvMm(=~3G[ #!:s<(e/}/wp_FxպG-N[uymP^ZL:e7%cQ_&fs]l{?7s_ Fod7wyJu˥>?޿ 4_n].Kms;;;ۜ-ń7"=MT P87 Z'QɖӹZ_ln] uUCB}ǹީw?7~7wbOzLjmYlH]A!|q1;E##-Kt_=o6AȌ?iƟKGn~N/uxgj;6ZrSҠp|aV9Y"N%M6FiV@'8-2z<?Mێǿ2۾xTq<~*>Y׽o (H*.~ MZ$d#H{m9L+T-o$][&& 9[ &zB~\?aMߏO9q{rU'}jqH _:;e84 ͭR9aXpb){ wRUBUD0L洙1bMKvΎW(DW1;Jq=`*E濱  '>~SmJeUNԛgt޷օ9_]B7gmQMr\Nd1;bE}FS~H+?{]}o9r4_Ab[2E,#^n x 0|7l L{x&&\$ Қ>8{vJ¯,qٍ#:\U3?u, [>ғb ryx($/0ldSxw>Jo&ꍈV>tTwh#i#ML|˅vp%Ij8MIZ֫nogC*b2*1cpVԝ틚7Dr |r?gʢs^;;jZɀTfWNexO{ ؘ^Y5+u+VgsPk#<ߤD`OB2-ݻ}yɫC%\i>`˧ at{*i;'ǚA:]mKև>KGX5@]E,~'=omfC.7eě x;Na'dK&-N[o:vjCZ4MI#g75Tgf7>="_Nc;ZrI -5 r钽'x~*珺'ka]A+6+ HOggS@XTK E^JqAK'%j6i5sR Ǻy885UjyP 3(=8sudw1홗W3MKA"1V ;}<Ѿ5[JZFu4>'Geγ@ j(IBuB&+k{&&˦o5CdUnpsI(U"0@%nC_&zr THZ1݆eL1w-Vu V٦{;{;#zap+џ̈2k S z&AL0n܉$MXPCpuc4²i=%OL4M{SY>3STmwˠlQfJMFyemNbaWx[fGᾙNBYGyO?[|/探f[wλ^'<[oq`[a%-}N$ Xs+]Xyq<`j1Z}GO+mAU%<wp^d)%&p۬=:MZ2܊7m$}[vv9XR$Xsie%*sqܢ$<=VS~+;i`t.N,MBﻯnm+H MlBl)ӖW-. ʩ)J|̹XhV(s1pfePG / Ԭ^FK}Ubg%dZ>?9#qVRC!7P-GҒBW3=&%Daywy.*}Tͅ:e) Ta ͘ݔ֤Lv#3 +e'Mndn]/Ji&7u&gY7oRhÅcf>+1&Ø󝮿2osu2n\?XcHɡ5ZdzWoʔ>s3\ W߮f>=Y[#q@ V<5\R_a0 Ak`zctoDm$cZ;Q>Om$G^4#*wtD[?z_vJ ncx-M. j;'/bR~Me0?Xߓ% qyAdT¡c?iv;RVs,u?}o/NH{Qg"Smrߥ}n{iiYә>ǎFrat&t5y8ޞj؃k&2nWTtJ1F㷷~J-4 >~$Z:TBdrwCm0TѩU5Xҍ^*d\Er0#Ga/dZ7fv&Ky´Rv`kmA,zbdwuq_(+2n <Q@ZC;lVdwh[/{Bk~Jt2 4Q\FWG( wJ \D hlGui#.U_TBIeF;g<ӹgV2o[}y~ -pZQ6A(l0ʖߡũvyQ[G=꿁rX( hDDi#߱Z?Kku9E/&ql *o!ôcnQ)CYNӾБ;_"'xn-JS0/oM֠J$n 1Rt4%oL[W)/j[獆x'ʦݭ 齠e=$z45gtmW&te1Fpw++JJmu- @ZG5jM;{BLZ/Z])w%/511݌ՕOnt7AgkD:6ݣKkr1^[fh̽<aaV\7帙ԯv,!)Puݳ5pؘ?ΗS~q\ 4w&;.f?w|VU:$;Tc5!Gja"<4A62!L??jWuukbGPrl{OO2wIO͙?, eN$غ ;%GDm F0;_-3w_>]q oV<Y5։@鯫i%G6w/Ago D;S }Jq#Fdw$&3SNr>+ZAkcgM"~-?M0N OggS@<XTK Ue~J_[I)!jG.5m%쌜$kb[1ܴtEӇ%h+`!4^ޏF9fqVy-^/w0XW}‚"IE1fUq3,՚]Ɂ1۫2m!@ (`kdf~Xra;~۬Ѯ:8ABS ;ѴbXf=4HnCbKMol|}hZ*zT>v*o;*[&VZEK۲hҲTǚo~T}v8F\ W:(hlp%)ەtzmďi"u{Bd?Û +s}Mr}ՌwyҶX$̷ n}dp82.)ھoO$?"K%5,`uK spϷum"MWA!8 .ě8~[#e uw@zّ_=UQ^ l_&+ W.\j(S:\[oX*~T4 Nc~l}!R~;eǧI2vIv|l%l@y,U4mg\ishp8kq{hO؃s0.;yuuWEOI&Nҩ}LTߖqάmv$5R&mǏJ\;\..}GkN,Pb5ZK wN_z4!w*Վ+a{ :\lFv6V⹹57vCߤL/"mFdB9ɲDhHQ=TY[R 9.Xo[ݖT>J8GWćfΟ㨅>CzHľb~lfʹC QdW^_S GsZ?=|1X,˸Kv2e{v֗ԦLn]-KJ K^q{mD%V濙:(<.1`9WcD8m ]!9)9՞cÓ]Y0"9qBw-l\dg \).lV;"Z_.z my[ݤS[r,(r?"{52#E1fp?ш~ x$=lKdٺ6=/p,>[^nMq/Wmab ;{<6߬1U/mҳ"ƀ.Ax^JM uT@rz2[H)ՐN3Ȳ4Xݜӧިjz˃ѕCrYt%-cj N6V +-f(la#RK2;so9< eyޜ?:Y~pkwЖ5hU(UKZjm9%Da1tע'UReH;lSbso }l"zCs Qc:l7xEVyFr}Zo74=aאQl ;RM 8$D |=l_E8ʌ_:z"HQK(wce2ѱ(뉢{v4cŇeE5͈r K!O7bNDWpiʖ_$eVnk|NpMNN}9:^D(u=?ieP41n9${|47ysoH^Ο4׾%bnU(J6 itZ46V)Q~aM[Xs@ƥfJvø ~Jt3߲~:FjY-dN܅~~K5a-EneucIWZl1RBT4@\?Ϝ#o`g/r:p˯Yw'D9Qr4%("ý 聜 1-b*MQnus;~7\}}!PIwߝ_ 糞5fb2VzzfEtݻE'€2Og> ~jYmߨeKvE+8D+fKk7A0;5^:BHRF]:R5Nzq.Uf00ں}fnt0wլ ^Ǜx8+-[26:M̹_Xf|dX໏n[*3[.M[َzGͻmuzDHTg. 2A$pOFcth&%0]{mTϹ} h *]ǘq桢%&§U#3^pyz[9Q~VU@%GC. 2M{)=f=YdmeT?~TN5|w<bM5Ntyp=c4sqqGkU(}Rc kXn0K$jpjmE(٦efJ9ܣ"YxnvSgՠ-Ԝ_l>öNp; 1`J-6p+Dx`%=rY-{15BlYG332m͵oki(~oд.ms,R-io!0iXMnz7:k=k"N3F]a f͊t >׆>ͤ m\f?k,Y OAtGYpM7_YY{.] jNx>[%IdUޏͮnuz1?npΨ}X'KoSxcU,?K.9_QXpZKV״L+q/_b===/ω EFD69%ZˏM"'SyTR]r-ΕGuO#)bTB\IBa:k}e_?knD r `*:<+|YHGx)P졤܋땍@ # ~Rᚚg6w "> 6tn-]e m"5r{տ~p8֠,&BMit+YrtFsS|SНsi,^icgjڛO9~S};.\_,KQZʜcCC3^VE3p Y>?QL#`bi\$٧|2տ.`N_4KW=1%>&ͿټJYP*.>MtNJd:'<]ǾcB|"֤/.ލEz;m Dl8Av}+v3$w;{@^Oi ZmWkEݘ}n: 1'a` h\$neGba iL#35ހ žx8@!ٻMҥ,=XWcRFZv,Ǻ>#eakPz@ $^J uH4KQ bҌ/FVMWhF:=<8qکivشQ'ID yIX$es<$LZJ1HmYW_ D}*A%e|P!76[45filo>ӷ+BdV2`z -}MP!v@X=YvyTx 2F;C(ķ\KVbqx+) <͟z y}ز%Gğ%7mRD8":|$74;I=C+Mr1x#ˠoC?G|0FMb!="'|'"axK-/Mc_?Qʓ)TrԿ߿쯭[ժ rLg5mCߎa l7M76Q5D-OPib_U^d")ݡ~P} BaS_Lpk8 o}OggS]XTK @%"OIJJLH`^:M`:Af_ ?fi(G/mi̧p/pґuM_==@vyѬeKXt[捰L~2N}©Կ֣( 5CޕQ?lO͖~`Bx1y3I,6%2)ĂM'n%Y~gkgiߟ} >'gLOǔUcBߨyף66Ķ(| }Ac)S.l!<`ZEP~ -6Dm&uR#Ui܇_L8n3.bipWP3 rRY>\)]?wPٟޜnqL:*OcQ/h]{Z1S;&q֟`atzi<ٛT Ms`B+->5gf WTp>ؒ uuE.NZ8? 5nG\ı_;jee wE1ޟ;v^JnswSGj[./N7g _"¥M,*؍ruHuUC9IRǷxȸ~qg qQ]FqPcJ:hg8/xR0w\[?#-1 M;D||%.4pF;teCma+fܢuZ}m-H:b)]~ Z48ۡJJ0Wo М*_7'#- koG{2ʏcR4AiγuG[%ӗ%Yv ȦwRi WG*a꾴~2lh|uGNEX%!|'KZw$VS~T'Gչp3'+얟`K9B|bFjS1|*v-<+kI=?C,mtR$zOߓ(8Ͽz}7[>ˉ?"r[/xcioƍzZD*8uxL2q hmcjkt1OmcܯQ?Fxe(urBADKlǩ8mYmÞ܂d\[ 7-*.vzy iټ2iVoAGݾ1y*jO_+参(˘uz,=%#9`Wgo9WYM޽0&ZkELOc^5=!Ǩ!x{ yZƼ ECm:U┫V> g'G$s9G-fik'`ZVG,|8ZZC}vgJ]lNT}/1xDulQ vpC^sp%ĻSYMC(BOγs)%QEld;+[Ј eݛ#z=•zM!VBO mF }&SBDӮ)j v+؜9w4l[~? Uf Y߷mMgN[k㬝irC7u ߵCU2qC7h4obLaj6t߶ Vmշ}cWoY重*(p.]VNr>KQ *r. z߽&6YfN1QY񓵯=WI*YiMygޢo d}eL Fb v՞Lɗ\ȗ?j29JڊyּNvXO2Y5鍚öA YHSɭ_N =)l9ҨpP5%{Ka,r{@}op0q7TӋ_G/,Qek<#>ߚ\&! %h`O}zj3AMO0Qɍ-rݓ=pNBA}xEHÿ 6Ԃ£W!(V4ilJ[d5I(x-EMduMtD;|k4'WwNvckiUGĹ1{#ntֱA8=zU30ƌϕC >MVnCW;5Ʀ̳HEø)XtJm9^U@p٤Q IG[1  7xr;;+[i*$S^-txǯbv;\qbq qC8!FM̎9ilٹ!E7 zNDLޑϤbD!j)l-iׁFʙdsQd s#]t c_:+3}t@u0\Π^HhAT;r͋\`qoﱈ}k\=+ 26:-b!տ,oӯՙfYgm.=zԒűxUqɢ//ݓ:W-$7M1t^,OL''ёW}KZAnn6a c,\Rڛ5?~l}yM=.{#\%0rZq(9jmҊp[8y6^߷j^}IBMI=9p/ hY+٧۬bͿ\Upϣb.zw]vY4:vKGGUu29v4֣FH O_p}O8k+I;eVQO7(-}FlE>d[ lp>ڽ> Lf 9`-GZEˣZO*|/vb _|dkoҕ4H͸nՙ]d/f3ވ~Y\tM(bg1yx9 2AAhm/7wx0_Dnt'jl8nsTc9L 03~% !׏ݎ02JޡI|.c^PiSMXs^VfO $ N b$C-Ny6 -h9^5bÙiniJ3:wEvgKyoT:`!AmY[):,A'">᭓ŖtݍvD-5Za^k]h*nh7OF Bs?2b ĵ C{]3[VAϽz_F7Zۍ]__i)-O+mt☎5b-{v/-O+N۩}=^1 2xG9fkwTjOggS@|XTK o,aa`]cJJd`2:t9;랳}Xw wyygs{,!gW:Y'9>RoD!YxS:nUotq6<cJCXgpnԇ;}nݬjy!1ERNN+EN)^ %W#[|%ʪqz3.h8Ekmm|{WIld߶b;LCOqG8!{h֩aFZ7Si/Sgn>SvYє۽_~0|f@Oy^֬>;^-@i>CW wXywk(KO7D~{=,F;"E~HlIa(S>K2*ϋcI»mTߒZ0X %GN'N\ iL< wg u_P$Ob$VsC>>|k)yZݏKݚo7WpmKmJU՜ƥ0 Gl~,}is?ξ@:>ɫ4J8=<~xmP7i|yh=l"!.tk!aۈ!ȷ[PV+Wde"3ExT*bI, ꢽvvamE52 C8TGJYRn Nc4~{GZo}apj$̲ ۗ#g Ȝ;ibH:|J T0:Yӛ[KZnS=j/I=tmL}j ۏ R鮓iayI&S+d̥&CӲ]vYkQjQ{8uc6rQ!k&f?؊׼M<.&~`M*;2jGDi;?x~(+q~͙YP]=(V3b.WNm7 \^U c*>%BNsni%Ӎ~AԾT}뜱v<[{⏣>V2NDHX%^7'ƴwE0_{dINJB5ZjW];̊=. ,>sdXa9{6"ۼ쒨^:M&(tDIm_i%ӪߝhlR+m{RryIV1-|Z Y4n܄{>|Wߵc6Q0ӇNjJ?/wH-݇EC:L?ԨM &s?Qэ}7o J-{{NUn:~K~M*Cq7=&؈hQbyj@o9+Ŝ\xǾ~vKygzݚa{CR 34-5'i\ˇS!S5Ec)=>~kjft fpĠMP.|@r|NS;П[LO#B܌qӸH^J-`+_}| bGiPUGHAya#LAgzf引yL=,wC{"r/j29 ,<GVdd Ӓji]& WZxg,CxZ#9Yc f/%wO[r,zoUڒfdcTzCsgJ}Mk?UMo 5#6|N c7=quǹEQ5 KCG(q~R$3Hn/S (_S ?\q[.alv2>P>ncTt7qC,00'Gevo!z]OQсv`':~ܣĺGb>j){>8֧9'b7 Y/v¿VKiP)XnjϐUdz=bbXnR5.aا6jaKK%GUQxsGfAe]` MZKWH;Xu[=g2tc騰·f~028<%9x?Q,ZFrf; #/[u֬]vt)WތlZ<`6r*w1z#-2+5Z+]g]5nnΊzuPtp@Jܦֺm51&L&h5g\6[kb[ܠbٓi[ j9:Vfe)H]b;>kUoI8ԯzw2" m*٧̪񉾽c.ϥ?2ᅯ|J[l6{?%)x'|[%,-v+5wS.Dr2=q֘WmϟK/% f_b5bOへ5xm־g65c<} eSƇmzGk =-[~DRKpagGMY&]?|~-B`i#gTpͩV@>>J| ;EԉǔjtoOJ6W~;>PMNf:fńS~a,yj=&ˤ[8֮1/r?*s,}!z[{9sZg"Jn;=8oRnE) ҿrv=~84Su~O&|&@!d_5cʾ<Ό!&e0HFzx>*ݮ>[gilRpV8Ow5-%bhLju\;'H_~odi\=.fbs* H+]7۞>갸{P t)5t N+ǿb9L_Uhyx;Ɠa"Sd :k>0#^YF?]3ڙs!׽'(t*0ԓo/I5pA<܎! szǡ n߿ʖZ~1;,QE@ (^:mx }t(,Ӛ+|m:=M\.SR4 y8_ ׎9TK m!UR%oSy'1GwnULJSxPa2jRh9^9\T^7$`@4ɼ VT*;lֻ{:FYGg_0N_xvOVL2-#Z<Ծ2=5jvE<g`IgWfj>; #p*]};4 [Tt,6-L\:}e&oȄ島V@:m t*|r뷔Xx.1>6_9bdL X9BSd4N{Jrjss{fld+ )eGe#&56}oTx/[wQsE(G~Ćzon/ص/ycxwUV| -.*M6&{t>ߖeر]ߎ5b_ZOLF9~Y:89m5::~ڬttrQ#6b>9\qh@~BD$)oIx3v~[/3s]I35um/ruJ'N]yʓY&]_Z؟}C?-S ַV8^&#1鮞TeAN λƤ7#̻0ojNdĉJ4./e׼Qۚ4{XOggS@XTK lmeJj@A>UѕLhs*GKҘ ѧ}e}jsӋB>qZ#sX8bDL VIoNڡh Z_fюҘQ՛c?Sޏ,61J2R}d)Jyrk|N2t+X{mכͮ9e),Zf=S#ɬ^sH{y;i_Ю;yem-{wMMK[v.Wlk/ܺ9Geq7Lã2IrSycV[bvZpc߽", 9tP$C=i3Gǝ/ӈ~m˗'G͍wa*j_Q/K~J`j Qɠ)-4gtN1a>Oԃޏ6-C=Leՙ̕܁^p6ic2#+G>:o-f|?.>f}W70&,3Qk}i_u" `f/%_2@OR8{fl7n4kn  njVn`C͘'S9vzmY.QYW|V‘ųv[}=qX=?zqyjٷ<"׷ݩmkxcG*cF1vFr,y'^X?o6}< Xz-N\T/"B%Ў/F1ctʞ9w$^9Y_o0/דK\Qĸ%_#YKz/DBr gdBl6B|g`վW=j S|+{v7j(•k >[nt9(Z(^p+[`h{4GY)[(^/tj}[J[q|o)W6U4'} &cJ^݋"XW_S,FI̩$kr@Ŵvڏ}X~vT4~: _Sj-v'h߸kC_5IGkN*Nm#ƺV[.7?{J q@UM,Y'Mk@LCB 6J}xAt^W?]&iRųfnkboYL^E[sht7cc,d4wǐ[>ʻ3JO bM:yq 7Ջo?-F=:1ōd?G> :LQ~un>=ŵ- (2iwunŔrj3]~tY]ԁmY]X:e ~x}Yr(%-v 3%ܾ[z=!)g;PF6~7ȧe|wGړ5?P+G$)A.e^p~O췌8d |ESx|uLż7ӣ xg+rwHwŒ4fVTuC9brbW'd:[n!A:->>FTDSxk}+dN'ns `Vx塭h}d&Y5N<2ltk0eʨŇi|6tv_|Z>>- w_ZQǤ^bRXdx;6}rѠg&v 9B QLmGCR`l~{#=ysZz>H7wikoTvmRuޜ^]E;*1˕gCjyۏcڛgu۳]nk D<~=6oJEdϴrΚxEhtCXY פ?щPJ$-k[=N<{?\{QҥwYÎv ~H`& U^P|PBl7c䠜˭^p=@L^zM$ѦS"2AaF)&{ApMx)q|* =Jeتh!~J6^#!S+1hw[i2ZҜis GtbPPu]{GwpX g]ikr;H5"M+Fa`ސZjSM8T?ˮ@_bġˊxnj-.Jޢ3aoe֯fvͼr␟Ԅ? UM頹e?ZSdp>{uz*N|x%=ݙʐAٕg}<"U v-.z牫l)?NޜϢsNJs9^CD;-%wSK!g-/'~=7#۷zid>Z&|j{Y{}:25V^{\v2"9n>?U>ů_θ~RA'rZ-2diKMtu %S&kVL\Ʌ#bų5!pDdY~ MhfiH_?Xi2CVihp*yTƅr6/fL7ҡH`9ip~v"=xv1y⚾^2P'f ")\밚Syy#e+v6b&Q=.ask6 162?kcתבմ^{0{a3˵R>wv'0KEFdA>?:h*jod ّ\MoIL85_+AG[KV^ MpF_2CɆFM-# s}eX}uBJlCCe>l ]K1 5lr87c>];ph3VTY6+l09ɠ'ٱCvf!$w0r0$юm!:heta]~f =w gHea0`T-OggS@XTK1~J=p5!i9ݷzҔҷ%&pXڮ,A(y>"j}WG]~~sH6s1kV:lF}t*lvrwO*ǧm`޷[a7o΋5$lZS`yZ;s[鹛+L!;}G/PKãVF}={J ;v=7Z'Гej]*.SFcdBuok^8ۛqPh &<E *[p<ˊid{Ŷ>XIFBmVUἵS}.Z居Pl>4ruo3 s+QNT?p%3#f#~xg1hn+}GhU,38$V%%Py6C-&W`+qD׍nL@MD3D~Jb_?/HNŘH15hy2d3s,[VQX/Q:!*q칕ٌCև~mDkoO1tv*Siͫmnm?mp].@S2?{rF RWiEXM\;E'fWmS'=lx\^uxйC2n "(0}Woi|} %҄urt@zU5%]1W^ANg,xRd|H"Ga, 촶:jo9aQ  EC^]xl#9Om^[ B {A# Aǟdu+~0j]}N&x?iwK:(p$es&FǷ֕|I Ζ5~0^jYZLRF $[+QveqѴ+ut4[19[~̌D~*CjEH*J՛ 0Xr{!qeꬓ5փpѢo[:N]qr:72M8/F$3b7`h0㿡O^%]7Ӧ C?ۈG%ήff Ͳj!5Aa#ECmdGgVe?\ؗ.>o?':[ܯ5mZ;YPشS[%9%?b~J%hL. T} $e5(mDֽT;{\/R]}3HZ|W<^rn;!C¯iz\}[HFwJ$XFޱ{;r_i<-JEwx-!W~^-``9UBRztY{88Yu6[߹6};'F?sy2 {,kZѽҬ=> o>3:/4篣K4Y{߸"<ۨYWﯴz͏ndƦs~j=$/ZВ >cSQbe_6bT:2aSY1JyG@k_qj<_ g:,: J8?eĈ=aV-z6v`4fkyZsN'L^;k]5Sͭ@(O]"&+{`ϊ͋dET!>f~GQkBaoh#GD5yw3 ~c躶xe`ktm̃O}_һRP6@c37smtxk#rqq:ocOfP梘\q:Xi%]0ZSGS{H4Ox'#, їj5dR^LoVz-bIdy"ʊ̊-?1A!&/JBe_0|G`# uKXMoaފc&ScRΞ?K֛e!v>M;T[-%cw fL /O_|?^ ѢIYR^1ÍW g%la*'ĆPZ׮ȃ; $:TIE{?@5C$e|#FK0<)NOggS@XTKR^ -AHZG e7d4FּK2)Fx Oؽ^@~T1+ ]:\E(Pފ Xܚ=Zܘ]=-o0xMZMTǥJZ*rHB'qo7v!]>ikNH/}$=Ps\1+Ehlkyh3?<?Efsؿb_8[f^WZ;dl?:rT$=pr$~ԋZ1ׁ9+kT1 ->f2ꮉ)v@Vr|'zlCTlъ+Q. p-0ruZ+VTKu{~~ֽwVeDɗ9ĸa4qꙃ#C Hзh߉hbվ?IQaƵͥҨz~uJΛai)SEV Wy~{^ hc+IкxȵI0)B̹NGB˒-ӭOus L:`]7^VyoW[9oNcB7d|*ddJ6 4 ]c1{L׷BXe+52+J˹2/bMY3#Ɯ3ROrkMW _yUܟk7CC*3㧄1Ky}.;i2ѹ/SHCKu;Vp|:bw|=+: R'0׿_s<~sG{Cur{ဋޡ$ׂ4W>Q&kkyI7K~hV=f0두kߴ^mXAV\]ݴElᎺ%  k>xxls %˒=ʉF*Ais- <}CB9WQ̖uiVEۛ>s1C߿Ai*]Tl˾h*(@)Hy#$.o`38Vyz MUG狣K["GtxJ4E#Ka7Ư45YO9Q?aNvIUTYnh\_=^&X[V`4B71ݥ@rЍo}ؘo'\ZųٍsnqF: JfuX:xy @s]izP>ЙEoZn7qh.Xf!Omc҃zo>Қ6kGZXSO`ucw(=L|viz"_A7}GAPyxD̉$Q\mC1x4^ qlYroðjPC s6ф4bs"e) ^CEɆjQ:k޻^sp'GRg2O2 ᇵvvaKn>iwQGT͘ѧ-BySm8MR+pLbaYBa2p.3qcM"Hb*qRП]3t߆wluMC9 )ƉE cP>oo GזϢcɼLnدQޠ5{kݱbS@y<xG3l۾K:pFb'Η/LEXLc%b+ojIWW@Z'2]p(EX fPN{LɍlFLuES -Ry 4kJ`^ eLU0E$%-_@#+Xv ARh\k^~J- | Rn݂bEhv!V ~ 偪 1d JL.&5<}f:n?N?U h0P%ƙ֣߇#rY)zVg~oΛo#!Y{NjJaW8\R##0~eZe D꤬cI9ej/V/z܏h_k/>nP[͹ވϏ:]@f3A←le ȯ;c2^X6}}?tS[m 6B,2>Wrn}⹴{y>HWf)J~ye{4LXCn]][]'0|0:,-u:ka1w#,#2,d$;ioypm>*BxSs/[*R$v:+C= k S htXJz6iμTt׆Ռ5Y?_YrknE v1<\ -4my)}dW蹑ah!jtjK-:2i;VITM"iFSK>OXq&H_ds8>sY|j[R5k˟.q(KNWV}ˁFGXW <E;.[܋*m%}$%"Vo+Uk6,˲b:t.'*GK,fZHe;ZߩM=+[ EڷF5sJ6&'w܃_[&v9>m?u:N 18)(n _~3,9B)(@z%KSPՇڀFR' ; GFFHw9:%Jm`p4bCab0tc}7't's8 óv&uľ9aͰEۢ^ Cڎ~Wz਱qc{rغ9ݮ0~m_\0m|Eu~}\uFIh<34w[ hMmWcq2oCgmS5ws"]~t.Gń í߬0袉Ѱ!-ߠǏ9zWG\;_?lJ>ݥK(? _եI/(=i9:d}XjG֯e'pfo~ 7qZ8n|-M4uW{4r Kk$bʈ ?\f̆m|o~FZ%UZަtf'@ja=^?,Aߟ)LճRtZ.\x}}vްf-:i;<sV:30 !:7U(IdvcMݐ՛P;5ɋ]i΋|A[{^ΝΕK\ыp(qP>fm]+3M=ne$Cj9b2+j?o0̥''_0LOCdOy`rۮʽ,anE^;٫y&iܮ8jJ-g5>+}'/B^)UVAߏgܖ,Kq]BcO 'ܓ$[O~Ȇ[7~ pSk ۢ|zO9j=~'"l }Yme`uWkU:y*s:O>{^;?6EeޠnmF=$dlV^%]?4^Rp__͘S/c"TԫoE N-Wa]V1;+2BQ*MGܨ>Y^-jѕC $k|~bI]UeTRHl8n:] *_yN9-e$-ݟU$^B9WgC0  aJNDڀ׍끦EƒFgOj# N< __8F8XOggS@ XTKjx `Az=AAGt0N̉R15̡ʨ]s7be}9_zۃ쌧ݒqM!{\.ӫX/](CN;XxxxQM6A8 me)Bm_P?n֖DFYy69vVݮW6Nz$ŏAK'*iK+0E8{v>턒<:K[lu)uf̣xzCf6A_mI}Dt 6?EE_w"\ГsN08{xY4~ԨH~?~h9^dz}US;|f9%v|s}Ƚ_4(F?DW["f66xUJT8/&kh9ܹ|Km+{ɩ6DsBRM|,u{oǣD*crQps'͵h?F E3J:-֐rKΩ_mfi'ۤj[݃2-''͵ͮG_igkoy, DcjWܥZ;GB&ӑAP6 62b=f8}eӮg5%? L0>'LVnyȴ`s0vNLs@cVulȘߢ =XM(#W_wec͡X!U%؎te[Dr.uy/rЍ|[ֻuvъH:rl> Jd'a=VGǯyv0>ȼJ:*f:%h(gN\Yn;dwG˂ S`"ܪ@/߉ުGry с2 l­q>A/!jU3kUZO—  [#8z}&[܆^7vwz҆;_eWLw uI䓑札>}vT܁7qE@> E[Os6܍<\=?$Jt*Z6W;&u'o:*H8&2A TJm|z>t6ZuZ02S~4]ܑyk-)āך306+-O_iV9?k2ʼny{a@յ!ti̘SV*Mϟ,Vw\yo4?%Ӊ׼ja0TMN$J5DH錨MSm~:HORL uԊVj^=OKƐ`02:k-eQ@ ĩnn_k՘*Xm+hUvjTB4kޭ׫}jGӾwCV4YSfkvбEf4/ `8> ~JruT-]o/NUu<%z{+N:1oth0{/;|Z"k2d&.DˎFsUZ wglF2K#EɆ9fjL4rj'嫺+g(0FVwv8Arj%O˝f=7ӹi&owbR"QCPN಴!`q`$дһ2="wجHUui?b:=Kevt) Yq5urugnlPRq|ب)@d(j vQ;?e.&=Rq~?Nޏslχ׶PunNH*k-k;&Qn~Z9?7ʯV8ob}cn;lȇ:?I2lu(PnZsx Yg3eXFݽqvxW ^mVl:}џY+C?1i^Q K-%gyq}bZ*,vo֞'DF'/EٽOرK0ccHǵ@~ ľ~*mKtD%f(>iԴuq& KuƭYmkžbZ \N0>+;-ׂF#FPeͰTbJk4;v>} \n.dX1hh,viCi`,tg mɀ=ߌ/G Sc9ސ^ɖ#$.EqK?n}6h_g:*q0Lqvl$9V^>w8A5Z~ jүw};w++>}H^pl&V?d0D7ͥm2a:nFCek} 9^z Cr9ʧSA[-Y6rsژ|x|ѩ]Hi2?bX#>9M2,eE Z\B4?A}ɆaqU{ʹȨZAL|14HLz~ hYQq%OggS@0XTKI(~>J%>0.)v j:9Xz,y̓f0ml#fɖ>Э=ݣ%z7E}0c`9FJ;F %3NK0=O nr9~1OGt'^f+)P}lsmPhX WNS ,̻zi,^aM|_m+p l='&RWTqͨgSï@tr}`H_`:V"d OW~>jGǑ $M{R;xEbV׮ yz_V#>> w%܏(<S7(y{\}|j+~wޫ19jApMzGlcNUh4шb||Hkc]uBLRO3[OLa?#wbe^jafFWyqr6R!PzoK̺osHjv<Ąao{Dž7Ch DLl0>28e׊>(c)yF.g[^ 2e{tBZdNƎL$S#>#ab<&zv+:_MXرu%Asp,A_-/kAzT`rFt!c1y4!kT]\ +5`&=(6r3i#7PJ(tPZ_*!(aw|u!O*R'} K݊pq;O2eov/gA6JMaNA)d|w>^ u-Ce"˸ 4d{g4$#f∊'K^bcG\λ$:jZt44 uyt65?V+=wphOaG*VBYSsڅ7X.ŏ'1kT!h|OoM3wݦ0hFhP=%aWr7`jrԡ+DƼNATYM&>/m&LGʷfv4$Gaq*x1ٸHN]zIg12\>E.GGʣJ5(iݶ'bӏr֠C?ݣPY'$c5ZK#Q:2'`O=Z:(-)_Ɠ1!;qN_RiXHF [f6+$Xy 8j&.=9 &<|aAf E͡PvR%">:5 Xs`'lcl&HlLY\-u&ޭ!\o4{pWi =Rehv+eh"Vnokˣg쫧c_9Q%B@"Mfb^%ףih8&HS^k;{^/_cmGsCvD7 ލqeqT2:|cuE)Vh>FZ~ aye#*?R [5?x<xi3Qm&R_fZ7O5VJ]Gc+ŘUXUDWꑳ@e'_x;7ԇ$82FM9Z}{hm.z់1$Q]?+<m_Si/-[B>@be@%ta:mjI!&)Dlͭmb8ѱ\rSL1m;2\ {-}L#E|^YYF;zf+Jjx5GQUfO֪GrWe8-?lZ) M;(VEsS3bDŽz[8|M9ۦ{u;[cgJ_PLR첄 Y,8sl'cUSV*&GLlӿ~>-x.s>T()Z]Ѿk9z辡oM1xQiKVp/T>$Ďxe<7m=0ts my{^%ꗭY۱J'qS\#$g R=}ƗIxURiHO]mI8/~*2.4d{HF ]@{ 5QJCSyڠ-Yzm&+|6bZOp7T`RXaQ1 V\c03ڙ :I >އiLm0.Y8AB2 mVhX޺5ݥ?y&z!zڲߤN)@m4@NJW+sxDE̝țrp2fݴm|ď-xrk~8(o  xnJ Þ_]d1Uz9=hH`6B#g@nj"ZJmh1*!ȢbFTv1F(R ͍L&C!I ټF|ӭ3Ƹ4ܭcgk+.FfC{ar.Wn!=a݄ ȳo NJ'VXip fwaʪRGpԪsN͆NJD1lj7ÚM r8o]c9)6}߭nqk%^Ym/iXU~C&_UK>ꥧc6kZm9AoGޫ S[S_vZ; ڗrYm\YE ~prҠЎFiǏmغ_{Ii璥Ì0lեf9Z_Ͷޤ3O J9[UFyg}0sܟL7t/QUϏ;*-oMhf_FXUA٪ &_U[9F%D w֬.,uXOggS@RXTK-`]a` (&`Si5Z$.ڌ\͜e=D=HŏFl#u6l/7z gsВ8j_;47.׵2AnBƇN0*H TB^׭ ʛk+e @HqK lU?ÞurW=RVC*j9ۭGuƝ}9ae>_8/Ž-}b7,jϿpwnH׬^fZګ7wHep2MpkICN%kck֭nK E/䧆=ŠkĶ ؝nc-kW%7D7o8ay,h=_VN^3xp(wSo|}`cV9g2"/G_CMSY :禝a>hm  ~J-oB@ _?3aNIǛ!&aMY؟Nyı,Ф)ǮW]_lRρYFVjcOXMHsؔľ84v{tg]NbR(?vX5$$󩣻Eb([VZg4y._~˿M6y' ?oˉ5t(蕗(Y x#ѥ˧R<Ow6n{DzֿѰ}b}",zЕAPQ.&z#W.u*}4$?`#'7:wY?HlQ3}ތu϶ϣ`426*C;`6A۰b> u _9%c(H+hi ,hcP_uFEӸ^ߒƲ`/Ϟ) ]G*nt"i l瘧Z-sHŴ~s+qYժP7z>7>wv!nv^{}Nf:}CTĀ?EMg36B|uI3drphaVW0 :/Yj;O} '.;f3ַ ($ԏ0fޙMDdӦ)B5sdr$ݝcGmF{zH'+׏j_5ߑO%ꣲPI{sض}Vmn/7ۗ{{M;ސb%ӏi|{/49\ND6󽽈zܗn7gGn^Du OdH]ʚ6+>s8wMe=Inm. ܮk&žD"^JM5I:z[C̚w hvPls^כpZ8w f%|qTSFzZ 24Xi'WoJzDc^e9{1+_8H H&b[a9ܦ v!cKe{*\lߴ]}<#I5HGVo|/~FNW- @|4jQ /g~+ vM#ch"j=nmϝ[:DJr%:8M(ă@QZ^&}tI DWN[;뛟cY]&";5 =k-PalF>(9xwéLe|)6m>3B[D$ǜ14`<>"`'A)[%VcLwdD5EXvf}2ho\>0nE3C&u%ٚRg;rBk^ڽ.[I![qvx6Zڭ>P 7f>Q9'MZVo|9]8ѬA9jH [ VeBstþݲ^J ߖAmUw_VF{wFRԃ5 YE:]2,rֵ# Zd/Y`|'>J|j>KK&#bf\sc<\P>qs\O۽1)t+p=BN~`erU6>[ƾlr>fθ]X}U5Ķ [ZW7Jӕaw.]]ri4]0.~~s1VIJj 7bqvZo^`?\9!S"5SB,}n1Uots)UKWBy!6U{_\X7*`:["rb;^NReץQ溳Pӟ N)O3qrծgn7޳ʳ}e Pm@?!k , B?5*NSƈˊiɮ/q֗-uJƂ/iks|ҥV(Ք00{>Kx}Ae,š"JAܯM?]Ȼs?[)52o6qP7`1* y7CCm`@7<~:m_OA I4DUH׳\)J$tsӌxת-.c̕;%hwssn'_rLm J9撒*QC*֦ uVSk3CЊ(qY.p}:) 4&3Y~t[iP7|h-wpu"n壤#DZ6[Qk;ϏATvx`J]/o o>Ŭd+_J(uaY'Ʊn"V!Ȯ⅖In&+yO">/rE{~܌;OyZ]W} 9OrlULT KAS #3: Y\`XT]ؙnMUF@#]}8ـs&[!QH@bgٍOggS@vXTKYGs^LZ >FO!կŔ@\d%0iHl9t6`\ŮK.s2fEan4C㐰$uvnGS-,GǔrϪGc Ӣ~ưh٘tv61#941Wy=q*v߷nKýEE>l|yrC1>~_+|3警>S;>a}GyKeiAw I<Q cKFV _p%lWF΂[,MJ_WZ{VNo&ח/ImTb;je;KlUa7E|TV[0!*2-'_Bΐ0 1X5^VlBT+Z?u8kb-ߨq}lfXˍQmWcHhsb'IU Lo/jDx_ZP?qܘ6E lN[,~ (ZIq:mI}}yk6am1VsF~Ƨづ}(Aݛq9ܘʳr} ]4a"Kr}?Gi>t|oin/xe6Jjlۨ8MyuCm*?epz"q6`=>{'Њ(yO0f2z Ǵ^1/[0"[U^r:4I( *4%~3 nI-=>{n/!ܝV,kY\ZGJNo!cghAvX~1csL0V[gm-GaZ1n9e_]^||`mb[l9jIJj9r\ӱNZcfn^-V'B):>+g-(1jWL+ljg "`1GsObl8~:hUBamI} u2s핖ƫ^rAoAh{e'6}¶.ƞJZÎEkaFL*X􃣁NTTTx3n}xHos{H^ G +Z{b~g9=n?OCҘJ:"= O>2޸}=X[OEHLވ&Vmsjo6znD~w+]l|$hɚF b$Fc7/b5Uo†TJ Zty]k0Suv=VUA ⤌# F}V@gUuQ{;#3U)6&V9kJkey3s#Ԯ2q3 kk?-H}R&pĊV*lj2t[iA8YS`lRk_5C[{A\wg2`kK:AnȝuZrmD(nղ9IƞҎJՏeًe>ԥP~YGWOEW|Kdr0fB6˞Sw~o'ms#yȗDJ~#l; R\b]SECj7h:6>JBw-=>7z.O" '4k#N~:ʶg:7mv.~57γJbe!FTsƴ5ϥ@|-M.{V\ܼ:t4OP_w:;EUK덦ݩVKY:W-?{iNAoQZxf,g˂j ?q(|lOq_R*7[?Xި30:#mske*اcJ2{>G$Stm="ۺ$*X>m7qz;| ʿ "M|v0]$Ur/D BKl_ÍbF; LdqB';]V?lR`֥yx}}j 2 /WdeS/", >J-h_q3!FDlcLc&bz84nM[UtY?}-ׇ.؄96dɠ9ͶL +FC4Fe ֱ F%/Y^c]۾+<99˥ምWFـfTC2ULA( xqy*<~nᒍ:@>3%5q 2*_&2nObezlg6r)]!f,'e9yUE;[&OGXÖ m"~:jq:X[+~Tгêc˪@BBxЛyZ,5}8<Ħb0RFl/l߆=ֶi,w hG634mg>Դ{gvاb!6QVGLRӏnW@#ȰmЄzr(Ѡ@+/JxؙG7 -tרvt+^][bY\G.UL9V['v澺ꃆA4ea8l vl.إ>ַ{3?T9k;uMЖ1@|Q)ؔ&):Q0kbpw0`kbtvJ\c9Ξrb&^UUk'߂W7ehA?>|־Y\27 ,ű+n6/nNevL1gtR}v䱢&MY_^1&1_.\{19@UrƬ8r* .v'hGewĭ`zn](,()6~=~^1K˅jS?#(X:J3'֙ ~8DS>QHnpD/.Ƭ jyLBj1 7zxȍ_1ZU=7R֧Co=s9> ;w=tϬ着6v+}wc3?QMu3)QC@xMS%Z vTji9In~IFN<qVwʜg(I+֘@Zk~]$U9)乱ѣd\!/9Bruܢ'2L>b*(:$o16%g-ڙ{NxfRRyg},{@meK _&s?6-ލ z=)]V)ޤ [WgT*X$\ٟL;%p3k.xSm,uݦW'<Q}*zgԮ,Ϙ&ʨJ+iF:|_1RMާֈfk %$5ibh8ʺCs}j5d*<7ۙE jbkaJuSn>/ne`$TP`4-3ØW/Τv{tz-j뛀8k3Nhm"*)0=-EEFF{0>[)E_kx3dWˏ}_o؛q89 vêКk?Lۄ G{}2W=ӓ1wQ7l~en.)\4g pQ3^ TFDϺȴownwkPүak1y$*;*{$,o,WNǟ jP S~`mJ=j9:^JkގY>X h3'ˡQ`rU&gr!nt j2jzs~e)׿RWX,2Ak,~..:t*y)׬!BuMf Wg1i yE!=y\XnT8U2kL|?}}p?sWb1G="~L-P(L[hPX2zOl6 w{`zawtE9t#t;sMu}k4qt5Zі&ܤY4kdk-|>NOl>a ~m<Z~jo{}(K}`Lְ+UX;1P/CۧՖCPYGz_X^t2&ObѾ&gҡEq6!EUJMf:k9+7zj8;(mweNlخG!* >2$0v,U]w~8hsjn&ҨzJ8RJvI;MjvM?Z/\9T?Z$@gbi(HczrD; ɍZ~[$ӲUsS{c;z:ؓ>{9F&C˯hYOW{s4N`ǣ; )i2~>p߯:9W)lzQ-ι\\?(sDM[gNnb^T&ղ"/͸7u05ՒlL* (V߼nvpCV`n:P{ߴf_ФH#nq̓.I-wrU!aHN2p{c0/*X|n%m!kHBۧ𽚏מ^l휽0p$+VJ(?8gZ_v/g\Ͽӳ^v_u֥ߏWVr0}TXJp ]4F1%skݗwp;N@y6Z=~WV;2٭ˎmO=ہpFq_r ?q6εzP6FAݝ_Z5K#|&\D28e~slo} [ܑ͛~)hgrℎnorE7\_\9tZceya?rၗY[n'y8P`z9.5d0M/OfwI &= Uz5$x;+ 'bhb{^XEL&YWԘto`>Ywv*?s9>4YYcn&xr`}pͻY`^Aִ4㯲hE03;"G῵Y\gi~<_J,5s`%KQ|5wUkgN4anMb/q5fzrZIJ[e|/zeM€]'ZF O,]=~R&rOݸ$X4:b';ܑ:J xEsZ0_pcGG0jLFpx e.cڮIaRV+t-&ppfO_ͳs]x|ϮZT[ϾBE)ޮ|dnO5w122xX贝p*>:mMel(7cЍs4[z1k9<\tn)7̞޷k4T99{q3V>(eVeOf@#Z6>Z޶`@o64j fF;^5l|v);^JS_߸ܻ2匆+V\}h|}Qq(jSn= 9A~-׊(.㭌^SeGB.F7YK; =m0V9H~f =P[Nb}W68nlT.w} U_dɱ>]Xeu8jPVw痸S@`e h[}<'լ^ A} [鰋8,<3S'AgS-GDnn \|ahM swb+}a>R;w 9w/|6]8wB\tQe~P4-.;T'[I+@*!NQiw\%'_ V:գX֑xܙ8.w1$l ҄ǿa+׿vPӶ< 'ZA GO~݉F1ȫ%G{qvy2sNAtLO>ݓ7KoG[xU7̼wޚ(X`=GwJ{qVc]#qﴭ?\ʨb粘xzbb=Z'dC,ec"R)KZkN?t& -{裛<-nwC}oY95[ /s;,Ni7#_ɋPjsb>:]lmMތk.'OXbm :K5Qnz>׶EԌVh8nxx,Au ; VkWA/YoInyi؇h/bb[xPVQWu^c7`u~zw򴦂jx Vj䜷Fe|D8Y@:f=E3--N,g'L6?z{NU]U=NdZ90F*$/D]vޞEx>+5>ڜCxuhTvHnAHܧ>?끍_l?od2b%S{W;60u,~'RBfd|pWfwrmi[oio>yհØ^<_N߶K;kZ;vk)eu)7|[7}fJkcoyBM@Oa݋uA.ߞhF'`D1*\*AýZÕy)0ϫu3͎yvӗ1T&A|ps3l#TEX\u>7lֻ}c´{{5N C!Fԉ,w^cѩ ͊ ٤ :R+5H,4i4̤4 UlvdS`1f=Kc]4Rw'F<9-8S4 K>$,.c7p,Nsfq BE(k O>]?ײZ>n(Ѳ{A^ o kп C^w!o6>x 7&dfvfHG"%Gtde2V &o W"aW鸯{OSl_ݩ;&d`֏wu;D P3=)5"e G:~M7{z`qS[u0prw ֶͤ{#>[gbMިu=60 BrFW^q٘k{ _\Uǡ혊-.C*TE>ZFmrJܼsSS$6ǩ|ƾɕkKIKIfb"P9u +xwW)_+%1ڜŜfM|2Gm$_vSÉ9;iwN&n_˥*}Wj[luUfM>[^]._>Y5?MD m⨜l|4h|8DtC %*&F @CwDB ws7 c4| 0e_*o_ ȺI>Y$n3&;~Eng!E& RsVQ-.B)0RKD8h(c%Mo83~״HJLNC=B>cF[w 45P) D''1$ ֿjq7D&uʶ"Bvu-9M`e*D6"ӨԾ>@Z梽lś#ٻ7!>^Z^oȊ<=]\sosψ4];0ҏ3wRq+v\퇷7Eʰ`G8=|`G+Rmg]w<ׯOEmv<Օ鉥 ;sζq(2=v|u³+[M@\K=`_Zڽ_tr SyaQ[VO kB*:Et?2pyҪ=jjkDustRacing2D-2.0.5/data/sounds/carHit.ogg000066400000000000000000000241331360473665400201240ustar00rootroot00000000000000OggS4vorbiswOggS`bsTuvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)ARTIST=BradLipinski DATE=2011TITLE=CarSoundFXvorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s,%m;lw) UsP,2^u0 U'uzvy懔KˬwWd} `"2֚AV+D(oC*t͆&@<^e (ZAӃ (,Vt#唺J$$H⬲"\@ Hkͥ@[7O,_@6$!̷!p cY&Ih-(=# h:64SJTӔ)ޮomdcll-o uFoEj8Bf$W/PusF, \ @V7 `c1ړdO(ɑoԷ2wn^ψ hYY TRC6>katuA3ϣ{OòDX\X S,3t׿_:<煔3zh>511Bĉ#/zV\C,TcGǂeX:Cug:#Kk[m$Vz^0?"ܦzty:rZm5.wLˍP&\L+lLӏ]мbXO=mh=ceܢ_H}7EQIy8z!<(l7] ᑶeۮ;]Eb'R6)%uӼW 3+/:o[FkK4TCR#''c;w \޽VVxYSۭ88Y@8q'ڏLۦ?fzz/cA_ij̇Π&VXaKhAts1-c`\ KH`N$]%H#*Lx+Ykm#۝t~.e!gjk}be[ "J+,~ٽc=mn~-@?d7Ժ f|+jW,k`~2L}Ə˪*igwu;Od@T9|zޚQ:d"d55깰q.$eSſ ܎kUoɄmr7*) 6c Й5vR/ DkCS[ð܃¤TMl>H&T`^ 3@Ė3gLJk[2Nζ+O[/Dڟ^"4*"׎Xw/Z˃=>yL*D\1QPKum4AU+xZ<&튞;I@MiG_;ϟ[){5*0}B}==1n Ce^u=A5 y+iwW}pSfl@zLueK[P3aR p,temigle$MtuSwӕ`Bb='m8j̯#ȝZ!)/~*=; H]S^2.5sjk2{4m4%x=*I xiNP>[3|j@U1jh._N:Vs>3 1*Ea HIO򢭩%33RQ$K4h;219I@@(ELSy G(=kR8x)Eŕbӆ\~J[ i6kJt^z@`940VRQ)8xvڳϏ[rw.'r#A :J ܜŢ_iz>g^W5"#Fvr]3t<3]a cǕ*(- R1MfTtwrq}İ1C…VVeVE 7Q .5G7hy ~_Di c/Ѳ,a8{W6 >v`+s^]ryοu:kW-XK[Z Lmդ͐|э9/͒Z 2)-sA{Gt=7b({Vo1p?z+o`WI9 SFćS䌉nߥzyx˱ 4G%Ew ]WFA!ð9K:`T[0rι ; gAA [%::̀Ͽe~ΠOV?}H߽9Oamui[`L9fN'yn#/\s)g #DT tFԚS$s)7;b_1g ٙsE/i7hm` _tppA/ϫKFEE(2Jg~{sta^mJ+$j~8șY)w3L2q, Ɯ,J}+wzZlȶng ~ 3ܶOvQG(c8UE} ڨyEs!TM ɥ/QzNHQ;L-lM 5DΨxl,b`ϟ{be|6cɆ)$_V d㴬gB!Ѹqĕ©Tq Уy pxp-bB{=)IW+DŽT"=a:SM`n{p!t]t 2 >KMt*r PnQ6SYi=I=4o7=}H>x*KDBr ;?tAe~2۽Wr!]`wl1O,p 4>wWޯunf!$) [8sݾWҊ" +E{])׶ieFqA}n ^/fq6+pbC Z'PV9?j/W';5/]i}05~2b{/PsqAy:]^'LϜtdI<|4s~㫋g(߄9G+p>"v4a/$׏+Cɏ:dق" N -4:rI .l{M[)' ?Ʒ|͏޳VܢjZ |BfPZުȣI+)`T:P vj7$UgUbHsh>8l`_) Flh’v\9sMB\LhNj֩ԡ(n:t @O`owpijZv1mbf~FbKe3SWu cKڰS< Y$tA!Goh_0932.-dzfV51G Y엖(]#5gF-0|A2(⋧eK/ɾ_1Wҿ>Zzh\_ o+ I~9f;s͠zN>wv>Jh)^@jp+z HfĔ{h(`> ܿ8ڗ*[5YR\'=!k֔A E4c-XK1/1n#neߙwSE*!}rک4 wnߨL=N& J?~*vOggS}x ñ˿dh }@mV]U=hu~83?ehN.!uҰVlq}haJsU}4nƖCގk1+m'oeYic!``%*r1aakJ`- Jj;qƨA4p2,`bjyӿQ8Ncn^tl s,oPՖZ.= a<3'Sfg,̒4UhҾ6R?}w6otvlf8%I| q&X#LZ'qtD.4̝nH#tT}yGTC< މ4 `SSVprTB mߺgws2&KXz[!(`m(rE;8{C\xl<<ݤ*|%PȅqkFZ}]YI%6"Ӊ=mT}|sD\o)>(6!!#M L̗|\wCSoPPCLQm3B[`̗R斗O>musvB b} ɱ8옵̐UXgt*w-4cɠ!- A9CS3I} db M~zB-z?CwO"Z؃>Z><\)S6۫6މtl -@J\`ZQQvӃ: x;EBfϦ{RF=R,x.~UA@ќ,f!4:IW.Xa3qZCc~8uFFv;\#һ M1t[Iu(=L.E4 lhM,&waz脱 3o6囟ef}L>zY:ȹ>&f6is2.jhd2sor@?[FrS E"WAfR< J,qKDb< sFLSDfUZlKPd@,wʱd\C.+eu=MBWAtbU?ƆU0XF c>trz*8%i!7<~N[v@nd]lo?gHz3"6iLI;K}>dud^y2kTLP6峟m ~rW SQ>[%2R6QqX%hQHM7~4 3jO@[)ڲltto~Щ^oӃܳHKz|{lӜH.[JK _]o{Qz?} R[B2@lYa|-R ?6wk2>/;@9"mJ]_?ɆڌK _.9eE`C1PՑED%LCZXݦ ,WH|+BnMrJ.Y\y1}@^ <v6Us6>z Tfo<7Z&qt"Vkc8PL۞xA&vХA~iS'E:Y-X5YdiV+D ;yӶ]_\wrÒU9[0ڬkN"[6Pܣ vqXr㩎8[eHHHU>56S<48h*5.xOcæuP8jҥQiV"ζKc"k|Q q7"o4ʜHgq0sdYg@Ƌ3WE8Pvxգ ʉ?#L&i*2.)lu$w ӵjnLr(K,=-knI NcF0 -,p]XSM6{edu4>`Lq18|8jjV$#uS}_n/3sw'O2s 8ʻaJIk>J#'.5:/KC$of! NFM;g5]"3qI>{HRGp!8o`G 06neb/6{d7ܜ4G俛~R "\]o%p@0Ph޷-9- ިY'%/oBƴmb+Fu$(~v X]Oc7* g(4G{r%Ke cSO/6U3r(KT3fҾػKzlM@'4.ީ3nҁm5}tP`-i+r`%h9H0mVEq)q"efi2!~CRtN@7P3Y>E7w~a?Bΰ6M N"3禈\VaK@kbM&d=p3Hdp ,뀍Jh//>0=~fZRS67U&n>XR fǫOruPtsڞ hpJσ4+)Aؽ8A:MY@RG1-b6oS&lrsʌh~- ⸍ Ǣ<Dtٜ>?q ›=6p esL # <EM?}W~7"MQqMn"J6i#anV@A^~t@A#DR} n{Bk,Bζ*!ߦw<=ެؠsoRGFc["T6T3$=`D]qh}*.C+]ֵS +u-=:ZxMNLRH8#s{> H!~^Owgv&n}i2_ &)/ MWwo O-ZE{^9yCQ`P2AC4sWЅXt+Hs1g-6*gÍb^ Ӄ8lxąw>Z?V9nVcQt!76 TtfUS^(^p(0ڼhDz>VxH87+- OgLD^ z[:IES񅴅pd4e+Lo+œ0v\kg9P6WS ^S3ς]G#@|"0j:̉?pkcY3:o+Zr xb, 5tvY 3>` b1ҍ[`%"kޭ7rW?)idYųyR-oKIQFQgh EĐ>𔈪W= a.i L@ DKŧa33 M-#/aP!`AJ6N=%,q5ĸARq & C&KT~ pw  F H6 06nno{G_|Ʈ]Gl01ׯm'Q5k@TAɠ9xv=aOSaPSI+;: T6>sK9wFa)c0%n]˃;ZbkN 0a<\2v$۴?|<0,V5JlB,* Ъ}6n:-XkMz %Se,AtXha(?w4(i)D6 oYOYV 7PE^4Tp׉Lǵ^hbMU@$'J/ l Bk(vs[zy)oy5}dh3/۴IwT~ܭ.6(ze9DĻAD@pa8: *F$&*jIA1=E h{P 'a-m]7-ʭ3}yjF60]/leKٻ5̚-SYu݇y^dtiD8=@zH;srpOߜϴ|z11&-j짿k]T c,&P \JЊblP(ʂ]JZhwG \qE5!*q1hhqqZm[Xcz@}agN3{ygL2w.fOggSI@n"čƬ>rMHoKt$3j$ ųcsM+tx"+j9߯_SWCh*ۉDpW/R(C7Lh\/ NfAxJ&@~[\'*[e#r*ewv~Ł% mjWYN% 8(й Yʤx AI y :cr6͟3|[7b:;zޓ:pI0td:Jŵ)ΩuILcPZJv{D"UCy y\g<-Z,XP;;'] ^LOV %*Zc [ 4yTzſ%$*V5T@>b'2xK / :!pem'Ŋ:hfgZgxz<Aì/KaFƤ,`th糵J_pH'<$a3uMHnD>r,AMO[(#p.)=QL~0ϧiM2WJ28󮘩ERV{])Ƃ5|^\S4qaV-aS,oi1ڳGI 0 ej>] òЎ+x<:#⇠*zw` bEo)sɤl% P`tIRDSL_~o}z6]}jxe5L`(ͤ!Y۟~ꎸXm 'j e,C@秒{M kB<]PkmA s %!fn8^ˋ^Hȉ7kKM ]vh4U,/o[5 2št Ψru٣3L"ҴIVNk{'6 ʆsloN1娸vLG\`#p"+*C>RͩGxh]!lqwhC R3e֮\RxQh9\6`H蚒6bn28ks|DQjH ]" ѫNJZuU܆AN !Hgѷԗy bq3|z%(zg>>c:SѮxa^RXe=LNhė6$ {M^fzcgkbmR+lF>b!XK%4`!c9Cew^?QK}Fs-5E4ҥugO3# X<#s~N2$Y@= 1&jFB9 bRtZ ӯkd(% 9빻dO, ;;<u"UP'R49)Y~9~f 5%jI*;Y뷦Ci斩vG_nڜyUd]e'>o#/Gt?kwtTG2=ߥ*NrhÑ+ fEwrEn#\KMA(tIDh m QWu3)ʔ}WDN{Cߪ/V8> -ҖH ~Dx 3S`|׏ZlLL.L^>ǯX>l2-Dg8a6h0(}W}‘U%CvizLV9Z&+jUp8. {R>,2(A R=1{g=Ӄ" f+N؋)JN͘555DT!UXY!EАӜtf A8ǻ1jYhAŖԤgͲkͦV1c3FmaZrÝlz7$ |札ᶸI~tt^ޣ@-ͿʖacE&bjy qYTg C6YV/7 ~(vLݞ"'z5Ln?plՍ~,~,GMZ+ & M)+2坳4,\h<%5 V,T3ǹC=,l+a4n]Zcz@p>MQ3R̨uCB $esỉ]s%+ZE@{By0j? D'lXF\\pCxɈ'6c2K_7o~1 {+n̺Eət܁A,r#r$(w5kX.7# -Mr# +ꯈ'1=cFs3^4*x _֒LqyS I㍠Z;}ul4^x n'Mr֚lfˬC_|ikշamN4a[sNo7vRرYf#_K/Vr[:;Ng> G~8LܕՃjy9u7-)U7^+E=&,h\'O@HQj _e.AB=r /Wӂ.YP4 ~t /') b9 -phׁ7ߜӳI2!փ9T| D+$Qܢ$M{ |p%|)ڭ3Nxb \Rg}'\(q̣ ~\2}z1I"F\}Uh<+Q8ZJ0!Z |vxx#:ktH8㵇'awi,·ɟl'3!ŝh5(JD<~F\:bsVKI۪{w9ɐx.iB{㯋l.HX *~iT#kކl P+N,PrF3l WO>~-bRN&I*B ZbE#I) 0멾Bhŏ/zwe12cl:2IG³RM#ϯ#Qm}x@͐Zx1pi(Jʕ% T޾x+X_bvȥʣDvgw=/R$ PUA,);b%w۞+uK @%6{=2+9n1_x{_voS͔c~tbOT IRZ,F̳\gЀ>#T}uޓ`zOy,Tie#rX;&qB <eoKCjZt(>S뭡eR&kV3V1f~3'PioO\k"<MXjMAiv)UR[ :pPP( &{g_B8Fe[fe ߻øw;p r4MUaK`WtϋSgeϳ[R 3p$fkQ_OM#7=YƝx$Le kkV6FB2A!T]7E{] w4mdt{xàjO.SLmJv2z'w Nf4|c Ԋ]UgYO>C88׸xz48<\%g9_Q8^Iy@]3ZatU'*[gm6[N*[n-!8N|w #s"X2rv%<@1Ќ且3#]k.k+X5i2Ӟ/> @xЙԖVhmĕ]^ rZ<5hFQlgBәc=;YUIºS ܈bgm2\z{re_{^x򝗺\ʙ(tN2-D՜,Rpc%d"ܖ.d풌y%GϷt5AD; I i70j'CSDmlIHVZ;kSj`5r(r` )mܞ{}'͹}=Uiݰ,b8 'q k$XBbMNNDw?rC?5#lk:&*Է1lj5ma7b6JiyvH7EհWI"K~V2әt@$@ ?JW[[}c/(jн*aJC&`q4&=aܒl:֟L?K%ȽsZ|YLȧmW;A!ü$*;k."5V2 IKߣ8=h$鼶ށgޥLu{Kbz{;{Btr#LwZᡐb/-քKZn},fyS(d\'^f ʡ UӸ^q*YDf;1s&Ρ6qnN8`ZbmVR$Sr v0k "8l~5)UT4q>lۏ#@%>Ǚ44ӗ$VmdtExYkP:1hb D}UЇ^5]A~A XJw̏El'LG:{w`l dK9)M\wr--}p{@ZARLG ȟ 'ަ;+QțGhI#yqT]է~呌S̛X:tgǓEz]3+g.Eͬd#LT53dGҲ jQQjYe0ݭЯVGVsY I<o>vG mTy n$-ry SOք'S5 @XDustRacing2D-2.0.5/data/sounds/cheering.ogg000066400000000000000000002531051360473665400205010ustar00rootroot00000000000000OggS3c:vorbisDqOggS3ca=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS.3cu*JGF:IQ:;8?:A?JNLC:????=JOM lfg` +_s6P|LẄ  `b6ɄP<] V5(ysS "6b5C+w}}E,|Hpeϳ‡r[*E&*dK5"(EŮuc`U*"Z<= 8g 9q`97+ƢUQZnhDm &`B4r<{PP<^끼G ̑ CA&ґ b19VWآ}g0=at==G=a?ӛa%a1\4U+JXEbŪmPTC00v[.2B1ͯzC!M} ~}7d {n8G9nfVS 9 ꤊTe6BK^nXUdh*v3o^k@,v 0`İ+jg%^*5TM x.sME:\oXFEozȴ0`5 7pbjTnն (+D|~_<1}i\i/T<Bz8Q5E[%OhnK^0J%{o.9z~%q}|?]v+mFjDCuٓ9a:=<]^"WC`ok##Fk܈:E&<lrK~R:j-}yjwfd `1XULI0,&E:ŬĪ:U hT dcJr`,>l&(h @!&X2<1q._HTЄI.#(JX㈙i5T5LHh-FU` dTƉ)hAXR `nr");8%1Jw]ܴW絅j1"bolmrs|b,X D}F\'(APe!<@"{KJ&9}*,m rnľY_T\~g::%P7}P@ ;8r(-F ^Kb.  jgg,(liVc ,"MCŪiUBAPTѪD`lkIH I^j2"؂RQui!"ؔEkdGԐ?>`1@\O8U$X ƞĔMhb2w)P,aM-}$6}~!kǷgI;|08yVʺ fo}`rA?, e52ɨp~r"@bC@<1I'4LcZƊU[ ,0"z) )* :PTE` {h*2Z+ iy(a9VӀEAOIiWD`:AlK@#Ϸ ETl@!Y|+b`-""dJAZYm}윿2\7Y蘧vD>}رplɊ Ž:#w+B: %h "JJ @~ح !_Ů&#C cS%53fWm $k4l$ <Ҹqq3p2slFoCN1@:&Ev ml/20=oAI{Nύ ]*jD"AմNQ]TDFADc[AU ELPus)+\xZ-#E `u6.`M`kŋp)"ժU-DCaAUA@DD"yz/3 1IITLRA䘉HG(4>7`Y"c,TbۄQ5j VZ4Ztd0:P^ۅ^` ` "jfmQ R+XU~yŶ "T^ `@۲O2s&p/q^:X@`ZpTDTQɼ؆@JH%W`j`-^/wczu@$RށXbB14Zi`'lL1 hP+#ZDU@agXR#Z^ΔhIWk7y.Da  t8 A9~N$WJ]툐ZK0MxK^]a@%7v|"c?i0' VM/2_AGk*VMSdV$ J ڞʨLґxT1퐊XLҮK2 TZ/F1ֈ(j JRl12F XhUXL{YeD+b@d5]j퉺q`lG~0<"ƪVqmX!@! %#"FVPs4. /aj4 ¿2G Ém*(5bJ(@, $X? Y@ d!cJ^]G15y*}QLMd2Bd-=)D$ʑ1SS&xӂF`#XUc#b jPMSH"ֈ`.>( `ˮ][\wD.#l}Kqv"腫*w9[u ,P&,Y%iDP*U%ۺ2l˥ C>*s+ F@1@[OggSe3cC % =8?=MNK E9r2φ~-{m//R؁.n*ẂIՌ5XEՈY%;GS-BM & 0b EPT[UԵ ri [AE(~_&-I M*Fb"`$ H",jbjH<@A Ce|=Q@\OJi%*l[#k"a0GpK)m=b4p(̀'|d~ oWWH ЎքuTķ8xvℝ3L@EC0[*Zjca8`D Ӱz=5/QQhl"ZEV0Ak+Ro2a !JҺA" X׼NümNi FgZ$dN% @Qd!Bd l[ֺH+ad2%  yq6d[6LS 5^˾#&8 RE!bAZ9-'| Eo-W| E? dMUJH2cY@T"VKaaG~^Av{;SS<AhJ1Gt`7 W >~J=r66; ~ah |P[վAAloJ #M1QC,rhF%cPEhE)ֶDH{bW fck(شZ-kUQ*h,,VD5U#*ŊkUTi#Q5 ,FUr47Y@"w;&$PKhaP JM6,_'ըb0[hDȊE1U9RVtD4f#2_bo1BA:$Z"A^Ad5(VP,%[,A5VQӊ"ʩtVK/\bK/\["A@BDXUC"bj"VDX$gmB*1ʧ F>YF$PRTC`:rB,r`O !fvIji1V<:iD5L&"A+dX'Nգjs 6'%~ʵGVF>bCDdB"u奝 x󩜰A0'f6F3JR1k1du8ic: [QLQ LU*ZcER[UcXsT3/rTD瑧ǥ}!mл""123 JIE12j[@PFQEf9!}$ h?ڽRFueHq" C;hE FB(!^{`50! X @ k8܇x a6K˗N8PN*ީᄉŘ`%z[Qk/jA3Tll\; Q5i@ PpU> dah髴5~3!;|ʐ3D\nXKm0 쓻2,HInDd#_\fp@Fr@l&DG=⠐mTzPE!BzP9u&Vr҅{VbI2?6{ HKZ!8ktpř+>F*1&N$@ iQCq&}i&Xai}jhTV$ =.Â:2Xhb hU`0" 4(>|K!z|?X!ml]v` Р `Ш5[`E``Axb%U,Rhi [т- 0HH8XlE3P0E*yH&p/1 pzf_i8$c㗋8 '[[SQɪLBIJ* B_K堮;tbƊIq5ފ$"Z1F$Dc  ꪢh1D*zpndȐ1UۘRE$1nc+`bc*,,:DVH Q](UNJ d@"Ekv<)HfPuRTPa*XRu( *]`D6i X"* @h hZ U-t |X ^@`bEЈ@\{I`=H\]Wrٵ>F; c C@7ad43ڙQL ԡ N|KxQd\r' Qddl`֯OFS1PWeǶ 跽q(~ 5j=OV*EĤ$#dZlgST'%ok2M=24ʪa"AQbP*r!DFc3d4d4խ-M(34K$F.LԩWc!*ru1:T'NAU.iE# /{Wٞ ۟(HbgO>fZ*V@QBU4N#SջWPTXxZR_cӟLDfV"$E%,r?M/V"!H$Ħd)aVbk j ɏbߩ8CnjH M 1x06@ `o˺[Wk%;)N`!]BŹtӷ'G7:gF~oc&olwT`7Q$YH :OpԚfxbbI33ڤ^DSl&a1l⭑icbb5ZA@0Xd٠Uv>c@EmP0F.w@# imXX (X*$tEȀ1ִRfUu)Z`8CL;ݶnH[B[`<'5x,x;rHV88ؖY@KU N ڮ~zͣMӷjЊoh8Olj!*SըFDjd,",p>U ]17&Bޥ+wchBeHPPAJZU ZEl~Tz]p^ƁqXEPRk-1 X+ 0b((%uWE^ Bm  Hl]a^@`/z1-6F!Ȃ촲*u*En(B8dr-ف|^T|K\zuO ¶^p-z%Y LY)`c@QLq!`j 8Emϓ v =c-\pokE 8|\5C0D̡EjVш괊EqfmTU8h~',ذnG{i2i%O$"PQ+Z1+QEV*:5EIWJ* ѳnio}O bvs$*#wq閙 5acS;հf{`ke^X i:AT_k@TՊTEE ?3^V"I!,KBI#ZT >XX &4*9PȪD@#bqUO  NGX A * cɲ0 9#w\ۚ  'Uo|ң ~a~Mz^Du J A2LCb!}[3$7bb jXk11f h#(Z`E| A`@j*֪P&;bA ȅm`_ْ8hLȫ/HezjaELm P W$TTHzCIȄ@ݘH8&3! # lP1XD/꒮ibƨ` V` ebB(*P&ȿڵGիkpS+&M[ 2B`-OT(H\/poNR9X*GpwJ֋۳Z lSF1*۰+  bіs4/Rze)@ЪbD@+)iLH@ d0LAjQׄXAf LF*4T$ R 0fiAk`)EPTA v%fDD ~%#  иU$\RT@1.SUgxc*47,*$ `!(P\&, шkU3S5RV0|DP4*U-ibP7"V,T ؀Vc^dy턤}zuf \px9Chjp6#QsD*#r 0a ,ADmRh E`Xl @܀Bz܏@mHRJA y@M39/Vl:~PXOjU23dfv@K3ŰsU Ub1Imm:jXQXUZсm Xa/H`Yr>vSTU#Vj K,Xb!&$/Ć6̆9ͮo F/#`DH`6IThku'j Tj9Q ί/,a2px1`K-MF{M~l퀤o3<,퀤Be֌JG,JONGiAO=sP  WRY2I6jd!M?G&g3133#7+;C 44(b0&1f6Xİ`v V\(亂JaтeeC b4JDbD"`@JE\ۈ9-Z`sPJo`† `D" 1XP@F18%Ghܶ:ZA+bURvIN06$۹iNg鮶L~Q/7L> gAP}f70OR2@R<ĥ(e H UKLUjV`kc$ZX(h0&jUlRD4DA8Kmm ,FkUQ,J,j^pg=w &Xb/FL,3&^0"i kV-l!:yiT؈ VѪT(~%NϱnN"!j k:MTAՀ^KkO 3 $_nzP ?z\,5O K![| `Z@,hGކ4$cIY ԰`@@dЄ<}Pm8OggS3cHH'<<@MKG   :mD [upݟC6b PFϙ}ǟ_NgGZG:~Ks<{KS 4*}XDPCܺ/Ac4;9q#v Hi/Uclc6cfD (*)E$p -j XV+PBAm :ѡ[YcD VE0T1BGh^휁8, qDvAĪY"z3$A4:H%W| !hCbf53Ac0'`݊G[1.jXS| Z8Fc쭖 .Ι!C!a4L-pAp>k<ّwMBݥ(I9qƻԫY4l- 2.ImtK5k[&t\zJ/ a` 0]_W=8-V54U h;>XdrtQKo{bɱ ̘q9:ubAPbb%A>iUР>|kmv=g,?^+3y6A }^Qhb+Z VhЊZ#p+*|TTL ù.N?ys]8%V:WݠVSEAcQ;"BBXPAZ])*#ڸkMfbws]h2c?r*eQEFQ-BFdA)dDM`tpp`W .8bbb 1X6lMF@H#UۂNb*`uK5lKB)VQ""Z)`JѴnr+Z9!QIiƓ $\(%Lp8[YM8LdqpLFe%pj^, 0} hGIWY /2Nkݶ{)s&&nkTڵGb~-uˊQbӗ 8B8s01b)Nbk 6V0MƊaX@ɜ)fbZ@Ahi V#r k V{OD/ VAUUm,$@Edp`Dk-X.ثQ`:C. -2!!=Z9Nbl2uT@q9aPg&@#E 1pT-^7M\C&o0@6kDpȑ.1qCċbYհغVC4X/j1L0-ULk6YV-0V@%*LA5Ɗa؂ub5v{5ʵAHh!k)g^ѱ2`9*J}ACZ+k۬TNANʿ6D  *"1Ё)h=@*F(t\`zUouD&)U{li"xen HONQ)f8JSAaff&dzc:"`VSl+jET ^AEEE(-q QCRћdTՊV `TAP K D,,R4BKuK!I]ٳ-VAFE ºq6(1R f##`\C 4ajaWܫ~_>!n88G&$(%~Y{Uoe%*f^':TNĈSRŋk4QZ#*)7RX2󦍊څC; *(FfԐEJEl4 ! Ub@o EA`- T /uX-7wjФ]7WM`m.ZЃuPbxWJ$hDIIɀjDʆ ,"~`5)˱ j3.ЂU^(f }ՋxB*)}8ݑLAX*%3iogQXEl,՚Zl a6i6jAg*"bQ&ho7h" ,P"P8tlT32!`Uђx&ɟa*Y BZ^*"@Bls?_+Z58%b$!cV)Vb6%e]`Y2t`QOV&}(h›%tx~.xTSʺDL+n HfPijZ LW,baj#:jMj&R"bUXLj` B.(fIJ!&T)$("H.$E$3AAi*LA*aDD-"BuDqJ@ 6BF$d",Xj'Zxe^{leV^륊 ɄVoc4@Vlqm_Bo=,?jt"TzK=/v»=AogM*ALjx4ˌU-RмHjMu 5K`w½]jaٕaֆJ 1 G3X|{_{!U֏~}O3U"ma5Z-L{w$&@.`2fU-1MVF4ZDj{e"vTBE(z gOT['OvgLAu:뤉X"j0bEE*UP`5-+bؠCk 6q $ 4 0A,Y`UUiq_֬X;]bfP1e[A,ZBuͯ _ =rjʰ3Y,΀(-ALL,d-uiezaoumL[{{ig)Ĵi UAQbJ-`RzRERDA,!c-pS98w0A@ V)Ђ dZ|#!Oe@kYVȊVI_89dLB{C2#ECP0r>> >&=Xs> #Bk^;TF> ѳIDp>ij`.|Y8ƑwibfvX*[i0-u86haDXQTĊfqlZVYl֠(h *pdl:`D$G(1JjU>CwƳj(V!2tҔѤoH$k㹿FO\k4iK;svTfUUQ($۸knOJ0؄ RxtùYW#үLoc5> 61UL[YׂFuSesh)A@4r"hOggS@3cgMD!<=?NL   $ U$p+]s  UN9$C@1;Td1&& ;iN1$x9 b{cJ"hHRP\7AZt#5GG2l)_T(l0`,aJ: H2 0@Y_? iGI[L&;S3\,z3`>E0zoH2!0p!KeD  p`7 -ͰG߈'|F¾o=( ޲(֭j!ʘ)=EP)d@H@xs% "@ZLR5NU5؈UM;#ΪԨ:5*RQ+*`cEV6*nmF 1pPSp!""N1US"!X`B9/OE5 J9;hLrQ?$F؁$0R"֓>"2 IRo۾E |#(a[bsN'HnlS(Vv%/ |KU(TD7 h L-ʝ\~_D?kF.,@Dl!qQ.DPF+hjDZ K߽e=&IOZ"z|<HLWȨ2A#q!v䈘p133 cը Xl0E+.3@B1.)cZ'ª,EVe3*b(4& J"5Ksqe@2 #s,œ]]]4XE!`klc:2Ls&Ĕ%0Hm:2]? " ڦ]J?~=:ip$`HS> g1Cb [^QRp6ӧrpR13310 kU{F,V;VX-`b쌊W0(kj"*uUSE b SUQPm" RVDEqc%A6 ir%QKhABGDZLNNaDJn,*h  )-*0cxmN7)2"l.X%<$Cւ 9$eNM$Vމsc11bf&@l 5 ;gjUkEPT-Vb$""iU6g4AEk1"(El 0Rz\O'Gk5IB̂%aH#j q%` J H$x)aZl~B`9W3pĈь-4(Ͻe k0~ʵׂ(^ /z"!'+p p$3; WPuX hijSEl PCE{ "c6Q#4r,Q la)iU%D`--ꪬ~mEňE@Rl%KMD2$#%h,@Dh3__Sf 1 (0#͒4} v `[XvC21)YaP١eb(`8 X1k OBfU CU p[[PU&abX D$j1c{bE`b٪6v&!>Vb Xb`( l-0 `kPE¬/įKQCTD5b RTH hWX4 FD{V>T)ԥg݄ʦFepD 0` *ţ^" a28ߓ0ǝc>INP(1iI)6k7~ RCצ2  dM>)"+ n{zQ̒UclĈ 0xX#5bP E0@QEXQ`/H QP ȈT Z܀$af [j*  W}&9κ_% X ƆPZBf#IQq;,{@CJ?Uȴl4I;&әPDS0{+$.I=>ekQn_PT2z9z KBoD"`qFfY S9q`^Bʮki֑~T6eV15(He +<*n5"`#ѭE@P uDUlݕVɋ% },- eM[F@T[Պ h6XR18pp@pX9̫ǀ [$рD(VXl2X`XYa@sHJ6@M (O(Pg!n':bU+QsFe .G8c3+.'\bvp vĮL$b6I0*l 5,."b10m@6ĺcgaEՈ)&尨Pv"!ĈXR8@2 ׫,c70K/ 6%:|y gZV "b A9p*2LD=Yc WCr eXVct!9ɽٵs>GSWepG1觮 *̬=BgI&gJ,xňTwvkԪM[l,&=bi@+UkV0lduD#+*[UТb Cڊ(P"8PsZ,u@V4"b1"@u#Im b#ݚCuG7٘ rxf-iH (KK T^}a:ʫ>2!ć,IDY',TxRSSHp8rA3@`Ԉ#jQUZ4 F UA PŪj&UUxޑҠ h #hDdB4~)e&Ut  `B-(A@ %,TR "# ef ?"9 +Fӭq=l鑨vp2M.> Nx|&_3`Rb@rive&ZMm +aS[;kbihggڈah10рUX*Z@0h`XQ0Z0"`UT- Ƣ "ω9}5 [%DlRloE02]YneeUE#RXCHI=? pS$XHlX?/ #` NOggS[3c2q?>{般"W/}#dakb=))TU M xZ`w6 0?;kC2O| %dڇF)i g8v3큪pL{ s5ap$XvBb򰵽 #h^ʵoqpNշ~ 5YDN:ab1f1cI%YjE0A4#lª Ѵj)&Šiukm-؈Vg#0 CLXڀ 6Xd{:$h2A, exA'9DK ,A` Hչ& m;WK+KBH?x^Sbv5iƿ|Aŗv1(daUV@H4L4͐ᡁ:(fwy,h7F;~J(>@GB nЦ$#P !NM戈R',/ka;H_2I^62 vm 1Ebg jah bU uV;*" PT 6JTQDx ƒm5؋A6xU Рi4!Te]RJ4B%tUUhENap9I >PF쾯V\12*e!@jP i@ުUhU(2Z.#!ND0/^<%^bڈYL,ŰZ-ji۸VQjX@RljXA,ȼUEc b" (l˶}iR xT `]DmP6kXdPRɒq ^@%4j[ՂB~5v r8d",Y-d"Hb1HHFT#-TB;R  4V$ X=B < +Cwr Viq]?| `&8|z @X lb?{`RԖ=yR cDp**QW|v*OggS@3cȣE$=NK"  DC::?;>ONTrw*agzwUhGIgo55uI}wX1ϔ%b,|rKOdCoCKvl6^UE5`#zhDQlնV,JZDDQHQ 0jc0|j MxM޾[xGQ[K'jċ 4lX:NUD1XXywn*j$ڨTB<UDv{Ч}i2GQ[)JT2E#"[+9v:82Vq(Yf&f`GzoPEDԱ^EM{;C i5PEL&LAĪ)]*5ET 6b@ ؖd٪D>}dI+Sf+jD~@ SyI^a +R圭Ϊ~U 2"ȢYDRPmv` -!ֶm]H%+AU GA0p@Z]V~}ŋπnp> w,:\o&Y^EYRY[GTVv"F+ IӴV "aU5D;یֈSLTRKUTMjݬl046`[K(B[jt.n$Ł@+K`Vna[ЈY%\6 V,Ih(Q|aR,Kxuۊ wZskqث?`S)@%c>sK |1lު૏<@,>:''`ӑĮ.-]bLXT "fiuvuz:bcLSm $EĦ̬lؘԢ*X0k$5:BTQaŶE*+D x %faF  t& Ym,Ȓ0˫߀8nlS1HglIcPC[$l%< ,g>]=/eMo)~G)BWE7C+.n>bj8pej:hIF8b![U-VW jbii},"7z[iBRUbhVC[&Pր 4Gk)`-^h 9*lV2U@GYB#` #jTږy /Z@ t 0HN1``@rӱ0D,;G(] nm75JW*pY`T88)rbR:0T V,,Ŗ"ӺYh՚ͦi&2E=0̜qh*`* 9Įz  5F 'k@ BՍG>N[B,F zS9c`!- Z1ՈfTs_Z@UDQ 0phM@“XmE|+>DeL6[(0!= 88 #A, P 0n~c\'h V}m Ո2 )qG8EBvdZ1ƈQUlvbӴniZXjj):jlYaE LQnzDh <8@BDȪL QUUk 0CUzD1(F/d[ 5r4]EP9YIԜ  ,@9(Wy- Zc2P0Bd(b) >rJF2^ wS@]IĦHU+yaIN*@@,LbbؙXZԴ؉BV&5R-MlUD':4 Fm=mñB#V5[1 Җ@B ]TX@%MdX6(JXl @S9;P. 㪌tA?V&8wˣ5W-tZ8{$&G%О(rdw4Q0u7/$IY p@ӞqKvy~ɨ\@jWd. 5d"B¶ GOL,xbcځI%E0j /$\"΄W[ZdYhU%SE UUP hմ`VPI,1kiPPCDU$C,@CQT Mݰ8 F ϸ (b˧]m"'=*!ށY:03(#[i6 6jcښvXXXZb#ef-TUcD .] kA A8PZPxj`j00bMkv~P *^d7@C81 p𛴵U)dzQb0bFm @ 3ī6:iy#_(KS`MOfy7 L5L~nHUuã"ׇ)CI-!pH%މxs LLXL1j-Vxba/vع`UTFQZ"4mphri";@iAFQ,[ dD&@3Rh ɶ qـz)#b76ΐFNLJ3 bZIF5W,*۽5 ^Nr8x<-G a H|' u_gF{%~>Cɰ> @rpHEL,%Ѵdff(ac;E,VC-ٛjgERC"`%ST"(4 "+XDVV6 G>8ުn(iqr>Sh9Fu{DZ .(*z~ `i$- c^t*I`@ų' DZ#)`TSn+HW 2U&e<˕~:>͠ϑ(, nmuV (+YN@ GRFbNДdff*, bQib^L{T1miE ͱjBPQU# BK1ElkEĈZաXd?WnBXdƀ@&jQ+iJm)e#lVfR (b,aKWDV%d_4 AVy(Kkrk=qGw.[AM7A0Һ:OggS@3c +p     Wc fWo!j =&Ah'N#ff&$v `V-2aC`VvVsęe[.l0c¶ծQAXDňUuHE3MTe[cL '_gGP0 06+,G ~#6BN )T }0@ H`P@ImDHoQlo`4 Wh nxd֕  C=E֑YR؁؉!RRM& ZkEEj[3MMnَb̷[Z+bJXEDDTU*F#:"XPDR-WZC$W82M9T>va M@l9Q#2*l,z9.?""4@iͺP Ȩb  <#5@5@v+"Ph,@4`5'I"F"_<~A\ Lp?6 2| LEC3`Ĝʁ # vF:Cj(he M PUE+`""R-~#!c BE*1 h (blłV#bc8QHbP)g!ϕFQ.GAS;sM 8,A%Rq:LĢK&2<,܏SZ@lQ &HSD(f `F%D`7?鵹W H; WrA F`zU r֋YLi1q(fW0X 7bc`5$.ւXU#h#h5**jU+""*b#b! ))K"h Jq6ODTHhJp>zm n rBd C] F)?0 UDkZrTpDlǂ fgaC! \  Q܉$I@@L]  WrH&! + 4𽥨 @ đSxNK)$j 1*"b6NEK0a01Qb)e!!*W9TvTm^3bX5ZcNV$di_}q<5%2Y!P B!cu)i@AQB|Mk0 gZm KB Y@ )I1 8$#E&5P^uYlxS~y[5 KRwpD v cb111Q1 F}R^<- Xؠu #bibV[RMcY,*"Z3*}ܔv@ !t@Q2.!l ݮ,AՊ1 / D (P(˖#l_=(Bžjʜ=ooŃXfRKWoh @C֦3qFJ%!J>*Pa_*"6-6~ h:888!0Tb$P{4b&co݊u+Ӷ *BBRV̌ i9  Z-ةhmQ-VP4j#6j?w^Lֿf  b')Dz.&}r  mjR]_ @@uj7 NhDTUVIp&H\z 1",$3 P> [ 5tR<`3 w B?880xtj$"+jDqڪL&v@t$ b(TSP+$XU@@^V""Q-"[6&L`ßaOXCT ‘yB$~>zj1D=6̧)kĝYq4!v H J@AbB# 4t APUPӚj,Z Va h(C~U'@)pz,. Z/#'qp x&vAtbc`X-1zVl&+d:!ŗl _ŖQ(.!֢"(x)+bbщP`)J +)G4j+-]:/ ZBdLS "w6RGTABPŽdqcdBڈO],.ݡl85VZW RO*%:6ުw<Fw\ s|j%2Y7ρ#q(ىN\$@`ojTFU5vՒ&bXTЀ*S#D!r:b"R`&eI=nr;_@,E?u4HbKvҳrTk׮ O\+ Yauy A ?6dp(Wpc%J .%6Ʋdc<@^`"~!5uD[daRiz36ǷusmD.xok#^c 2""HQT;IO,FXTE5V5bi Ö`-ZSET!ׁŠQT,XQ"9 4 bHC , ("Uqry~|nTL ӡ>kR` FnrYrD V ,H6cg:K b|Ijh 1 !Iv,7ܜg=)Iމ ԸjC7sM(E@r d^ g[\G9bFlmp_s$$e9qpOL !&H:F&MQ4vV0-"j͖ҊU5maZW+(qa`c9Q똸 Et D*y97[ph`@OKW0KodڮBhK.SV."cK,^$"M*_BkHHLxl*qYA"\h %\c~ @~zU3!U3!p8Oĕ;8qp℘e&Sm 3U65lZ3R f6Z`+FРj( +- XAPź F8(**bTD#b!!툨 Nk 9~IB@֤ɡDV_Y";\\e p$篟7Ibgv9kd OggS 3c ܱ# V`-#Ʋ).1NєxZefbfbZMUqVQ[ -m.XUKF Kh,XlѪmFBcXłֈ4Eº7e] Kc#;ʄ$`t"$eRR4FD"u@KJDj U ²tŒl`Qӡl %T\d|$l}m>הL (>z"1*N6YdZG2e;1/D<M*:۫%CN ǁw2މͨ1fͪ>f&M/H$ HYbNPbL**1 AT FlV{og{[hU4J)Z4 ؁>b# QhUЫ((\YBhB ^%cd DN}<+{ ;6@`Gd@ l_pԽ>2Ht# L$ltZ$*Re}IXI(}.CM1{ Uk(!ftb87B(@$63đx ^L:T&dze{"΂EFvcUcV-TbAQD %#! IBKB2Y~j FuBpEB1ZTl @mY#Ӯb!! & yZ?hU薊` 2G F!0?K}5@PRl u#sapϺϾ8 E!(RS:#%R 89q`)̒YLEUDJCm԰`l @:|*yEHkVj*bW, ,"(bŋt92 FO$  #[ aHf T.M 9G-RPFƈ"v/]~ hAFB\9Ç$sT8C3ȌSg69XP^z=)ᵏOr",,5ЄG9bY(61B60;I3TPlr /9_Lw-{J|cn,Y@blPCX- )L v <Ǟ߂OҞ%^eY #H1ZZęh7 @NQ\zAX f@!dl(i}9ʽmm_<菮}1 >zUw0 $HZ仏 "Dp@inb ߆xW\3b4H[CTa`;H^6FD66V*ZEATY)`b,֐ 1bd: rr ТWU@$FB B_(*9@VJH" [B\&2p"29tEJVX^s."Yڵ^* % 6hpL@,%lYo,(>ƕR}vC58S ~㌁TG҉#bqR%>KH$fjc{â&bؘ,p5,Vִ,֠ZŪ ֢*GH"XUzI8<EMijbTADТ("Z.,XHD>[P aVZ@6 2Āe"^TA \({PQTqj+&` E6X8=@ġb, A> ^zUѫncdmԬ>m=ֆ6;來JS.1$ ҀmXMDI KkֱjU,& aa&Ҵ4UKѢXZc5UEQ0=DF0&Ŧ(1FGE9@ 0@lG ìn+06  dTLGA# \Dz/N0 G+ZTIi D܉! Gؠת A]?}_GY yxis|Қ|8~̠MG(B ) H2$ƨ{{i- 6dSR,PaH"6jմLzAEAjEBySQAS"(!ML'G62UOMAHDZQe,*|]^xq/ @|[H$ %T XD2aH:":@JYmA<5 xCZoA_C.ၔv z ) [oMZ"(wjT4ڳ be{48}7#zΏ}{o5߄Mu dXQ-%UuM`4 v=nAA1\dnAAn5r0\:%b?ťENlyAgblMbIT7/}K)$G] 'Q8݉^I\כ\ج8)z qJ j"QD 55VS*U9;z ׺J+pk\ɧ@+(EfL; @2xZH1'c1111&I%%@kU6BKtItÈm IRҚ`y8( Ek#€JRAbACAxM+2rh c3)ALv7Ad #DF A 'Uw`lI!6V(L"H=ɰqD*AΆAH؎sda@FȂ4Ea<`#T4 mOggSL3c :MD ::9Hygy j-sF7QS { |8bbd1کL 69,j`bVX\ZM;bcX@*Zć{ADGې0Ȓ XTU+F,]@52A*9hA$)mh%1O}{Ba!R_cMd2hB͕ "ĪQjBۡ1OڪNY'|3Ll\@7PQZ4)UG1֨nݪS@m@&dY"sbB8wb$IkoQ-iU;FD#F,U1*V@!B % !6I`<ATmrNP`@ ZV-%0fٰC"׌K"|`C0`,͊!.bHαFH*g:E''ـK5fwl`MO B'`Ph8?xI G߈"ΎF~@:z)Jq Ѡ s &&&ibXԒ`EU6YF1 +UŊUE:"(a%S X{`,F̯fA e⪦`[Ų-FD dwOl*+Uhq_A,c*Ybhb.Ow σAH®5 ][ jT"BoPGq.p8ģnI+] టYTRI≝033&؈jbZ붴Ѵje0lnȈ5P[Pb#Dl,(d (Vj*`(T.NH-Ybº%kKF$,S-$jBCG!ϚIp4AEUUYʭxOW$}싙 v2މp=Ǖf^-dYxl^(>Ӝ%/j"$l RN!gXBVzHF@,0AŁ("I?(  PH0A~wyHqmĻob@:wrTĉf/bL2 *uj8U00\"Պj;ptSC0 QxY ,ZF`V,k$pXlkA/T1 (ە" RD!jOUFPy-[@&rǪY쒁@B,B@XV!jG29"gF^[f0(1ę^>:/dm jS`i wpf 0mz@wP#jmBBb0:8N336D11bDbkc$`YĴ3,$&5TQX`X *i歪QNz $N!zemD(J*)< ppp ӎX2Lъ$b]ӱhIKw0T5Vh F5PG)՘&Ixro VZH:C ξ.[F{2@L@}~wЏ5򱸙aF ƈH3" %|/6R@2(zϏXS`^j We1uϺiej  e'gkrb-I@|SԈk\jc/0R[`Xj&V"Z[UѡTRMYrJF"QcH8"*I HmQ UӠh `@[ EaA`ـAh @Xi ,K+~7DB%je@w1bUlA*X˰ѩ,W)[oGGjt a-d 0sVΖ C'n@{>؊QPZ-Vʊ*p_D&T;I!v)-&FĘފN{1-X2fd!-ɪa, :DQQZJ,ցA >6l 9.9Q*ZU@bEX1+7QU_p6Xq9ZAF?\! f}Vd (,n% & 00,S9V`ln%zީ͐rhW 4FpY$, 9G %V;;j#,jURٻPނŪ‚. XEUORc?F+ QƊr[/:S؀M hYKin%rT>$Ž/ٕ|dظXQ"lĀ C*TJ4ؒX8?:BZ\gT݃x `< me=-~w\|g.2):BQAĻ,F3;q@;033$BaaZ$ɈZjZkۤj[fUĊ-hA 4`[ Zj-+bkRA'0! l"ƠKUJd2Al­'~&Cᒉ0\Ahr FD#*l8OMۀ- %F\$ܦ2IjTNW, a4y)ctjgkMF.@9Jqb!c 4lAX{b{{{[ښh)ZEU0[XKB2 D8,X0 RETlj`ۨL)Oi*$4%va;@ȦdLA66p+-)t *UDM$B]sZ"X[ɱ #u_tTh&R5&cܔT <Vg~@Lm<S[JP)-6S S.I3dམ`GQBP[ kja%!ji:ŪZQlXTU4VТSQ)SZW>e&z1!$ԈU!2H:Ul D,F%Ĭ-V#9TRnH`!Ĭv+en?'2Ǫ `  4ݵcalhǛ&&MS4~\!hQ`YТvɡݗAVWS"HG>Yg9rlf˽ q$MwrD'1-ݽ! 5 /a<Trw><Ȱ+q'84(- rrJ16I.Ѿ~GjqJG!Y*_[tz{"O>څ{BO>jeR YF(Xc`(KUІؒTM7[OggS3c NDdj `mr|qR!ZJX6y \UeU1P- r*DjEPXY*p 9.|v} ++V(0l{[IMCǨZTtEVJi-V8wِ':$?KҀv/uPpu*ĄV횔TD;8J!84;cbbfȬT4kkus+ b4b(3)GGF bk hmq:#, "pL#!Xb1FHa|""%phCOy*J" ( n3!T$d(v%!0ˡM,P@zUH@[8@MZ XI^1EYP~>^UGS*[̺ ȨK 88ĈىM3;03 ԫXư`@Zl -i0mUԊ E#Qz},(@1 rVFlD:s.VDz9}xfR #X6E Ѥg & X-j1 5X-)XLCLPgVKˏ6$F_qIbkZ'[!; rkR(7$>1JzOQD eTÉ]]1ff1f^LvaccIKj*0 Dւj P@4yp , 1FPcxB"5 P1iES#-0D )ß?;HHBaC1- Z9ř Nv_ ;{RdO ï+>| wF}R( :"!Ax %RNYb+uuiQh16UAؘѴfa( 0֊W,O[ u:-.l]ZY,pr<'ɦ~Ira¹SobYFC $Ǧ\9ϟ7@D `,D![ȹ+/X2(S,`cB+FFd]_^#9ߨo@@C yqdf6ϿoӅ ,"kEmFYҒĆ'44861ƈTDƂEDc-bl@EUjQ`' YAb,K4 ذ ;N Y" B/eRq7HnfT-tkdٺ2.bb$E` (,hC҈"8$EJl!BFh<`b 1@ U{l W^ }4l9z,N L@)Nj6aF mΰ5 ;ðW10UQE"ͶP+`0XQ,TDA@HFgbUT,%`c_>!}ͦtX=B+1a_@Xt@J6|(hYd@)0" Y4 -LTRYJ1#DvA@ H6z>:h0 DHyޔ`?N.Ŵ슉 -Q#"ƨG#1lVPQ5jU@u`UP4!n 4dKFXʢAC ph -X! GH+)ݢA`0Y2Bc҉i!h$`)p F2b[mqV@H_SoM m"0(=^۵!#IOD s׆ wOOB P1#$ ªR@P8hL ㅝTW ;e`wpx'؋;0%V{C,UXM *TCT]֭&֬[)h@A,$EQR6d9[5- `1@T@j*9ײrWYMYRM-Gl HB "L=rd;HYc e FoJ1kϝ Ą02  #]$% `}O<@D(>諸>*h{Tkwq)FVa?6 fbb'R<1M2 @}mjv66i"Mb ,Ѵ.MbaV ,X( +"j5U $6*0"+b*,EaP%8u{lۊLw4xmǞ: T 0!9xnJq6y3A@QpZ"R/P@@ /Y"@.B xNA땁cl~ `pgbNbN\H#P[;ӴڙRAP1DlPQ>2.AYcx\eXƄ0Ҡ("j!WU'V@XD Q XGV Cpd0Jz3^1$} x O5dԩ@@(-lCZ+ђ+DRUYՀm@eV0}?}'|M0b S $BKؑ`%@E>G1rܧ\}}]!/q$fɎċ.;aWI1qG v S-%!VxbR_H_De%N |' + z[#-4uv H6%giO<@dqTdDT m`BCdGf]fkN n4nl@Jk?e#wmG(a!8 @dJ6ÿC%Qؕ7**RH<1u`q\L`DĊ,b'%fc5 c'$ ؐ7bE/ضRnK,F|󱿮rCA GvE$Ѥ 7-Zvg ڂĶV%>G#l ’ݕ%"\= o'[@D8G3ȈaH6rx+^jUoR zԍ~mS`ؙZJ`#؜'f1bb&ff`JjS h!>'meh:+VXAtZTET,g2|VÐ.R$K" FQQ%T/ň@hfl@B 4 D7~aLOo;@GH,8Y gYzkdh5zL'Ԉ,L;iO;cZbb&f&PSmLG[a,Yl N ;E]&&Xc "ZRCERP-5@WZFF"X[[UP*"&;$ 5 )ĐAӦ2ǯu9z{n ;RXD [40'&H6RNѴFV-UZ$~?BUc"?iZ w()6$?j6Gmxb i&f1j0Vւ)1#2b_7,?ZGiѡW4JikFtUŶ^"`X0؂m-a Z4หؒe \jcShgr8(Xظ$mraB@F ²R";j! , AldY^ khnz02e 0!࡙]R@L րH gsFb`L w}r]l~7@bZOYNO)9ĈY<{1bNL1jU%U#Ab(jŜN5.h%1 :- ZEUD1BE0hl* 4ƀQ k6XH6 R@2O.Ts31I- Ġ>D.Q !"ZpI\܍8ʂ>20`b@րbD LGy)+],?pYpGxG\![`ffb/ bk*Zmj`c^SV؀- aXZQ#W  |+X"9[\XB†۠6b  6"XŀPX@`b0V;,7 10 ۅ I` 4c0K1!ө&msB3h\@A Z\* (0J H ޹(vm=ےAɳ> ;qW1Iics@QGl#[Ԑ4Ei;[(5ZjY &VmRk:#!Շbӑ P (*&ե*!@hAdCs<3QY`+hh#˒4 H7 ê ̀ЈfRn>\5@ !ρ'a4s^RhqPN3J/952X-Ԧt1tى$&v#&c2 qEEUM"I ho4ԴYV{[*%ւ"A SE2"UKI^{!@ !#+m PںJcIwQ4eku-e=7tͱ~AX!7 Z c&2I[@JG[a‡Q窱'@n( GW~y wx lCɰ(du uU)Hm88wPqċ@,&&]& @$UA`쳨cz ӺVԴV Sm0b,UX() -6 F4$@۴]9\"0ƴ ZDf1ȇ4!DZuQ#Gn^D-X0h5uem$!Io 0 M _@'=)\8\ eoF$ *8AX1 ?K' ~ͪ@MmN}C< pxHE'EMQ*Uon]. $۩b[=/`EMъ(j*X4bb\El)*EUhXG# HB$R)m8Eر-H. M(#LQ,\r *pT`%;DD04yd%5hڀƄòZ NBZV0`@ 8B{' 8B#.'r{A*_YX U#ګC{tG1W ̚BuKDD,M,&2$IWi:`h1mm0LQXXXglK,,lhKAtZ4 EUC[E-0P4(ZB2VEQ "YШ`A d@ -yTp 2xiͽps`#Buq@9+@TY^+M4C*$A^[BI"ɒdkN6I0dԓ+L n~.A;"Km*/AwAyY wr .Ld"jr[Xxb2-FL;881fffjzLF &:b`aU[ A,bEP@$BI"( (Af!vZYaQ$^'?7HD4 c[k7VE/=F$+,?a=GD?əQ"9!"B (6 d@u@Y| ?N͒>Q >=6 / .B"T{$%~@a 2(`jLdA"%8"4lu V XAiJ2Jvk#&@K0'$KP, P5%9yPJg6lR"$52@ S E )(ͮq.33I ƪ&냂(b%`1 1MC,*bEZUP0b (Vb`A(e,u% ZFĶ5Q-ցj0 LjwnRAD(L> )@{2@Ab ϓ_[+Kwzhsb>t҈ƀ \f`ciY'^߈Z˱>8B=>t}ģ@OggS3c͓s  گ@n~8=4!35W|"fX@l,xf`cڪ]k\Vm0[ .U@ ,T 1hQcD(,#XV9rMoƇ/i!zgS>?q!ӨeZR bcAkbL7")R̢J1i"6EUoKLHHHu|ï4˕؈wY?b`cTG1p% \>fh=EQO*#XdBC7bcfc&P7aEf$&lM쭂EllccDU1*DLfT,M54`P5L(lFjBVlTmƪ`018_zןBX |=B `-#9@s@7`X.+%E"eySv` c5>*Bc+Vf(u{NWw/ {UT> i wxXA2tfCU䌸M䲦un ӧċPqI M ðb6(vB&MZIkR(bP[Hm+֨:A,cADZ"U_+l1m0C4ƀDX8  r)ˮ aR@bP-A'zU BYh dNz7Cdow圀h>3HQ'"$--A>B!TbRb'3L^k i5-,֨oVmP0D$C,CZl,?nW.dŠD&*@#kY ;tڐ$S7'2ZHj$aѲa$B0eˀl. A< ÎŪ@aO:CCQ$$^2V*5DJNpX< 21$ƻAM U,i8`EUkDVo KKT,T 䈆||e `sHnfQ`TE0**"R Hgb~2AC !(W6^Ձ*P*HHH/E۔H (}!)gAl_lL9Tm[ZPy~ Ϛs x3r ÁŻb섘I`k"vZQ̺-Ū-mi&6 6Yb\FZ 䈑$UTIm j29Sr'ml![l9'a:I"Z|2ah[:Ź\܎m_B)0`r`|bC Ox BttPO-W.pC$dy4 w*"Ը7.F"I6_R &q9bFM7TGmg!nHBƍ(e"6X X:++\ml0"E "` (ĴD m.p3FR   #bЮ3#6:t; I`+@>ErQPׇ' DlI&"FT.]ii1 x .9i࿸midYge4W^mYly "نxGc/>cff& xj6i`K,[Zd̜dii͆ZZ*hV)j[+T(6XѭA1FHo *d-/  ZDcAdFddS0uZ%MJ[՘svI dܧH ]1dZDP)QmKWAl `_pV Vwr5~A$5IFOI 1pNk~ ɢ&Aċ1N{LLBX0`5iڸպZXbi Y*b)w-:f,h )ZzFHVJ013'zM< Lĵ*>%L3#FTagWPd%",\ l81T('!FQS8J N/qB^Y(>2,GFL I*5&RYŘ\bb',b$)6%ŴZqQ51m%RÂb"h  (b,YaFE,Xl HB@CcC?iJ-`1ł Sɀ00EdzJyۈT弼ȶ@`@@zIaB#Ca)>  VRp# p>iJ2\fs$ M۾kg*Cś+K81Lb5V jmVb+VGӂ}Ŵs4C:" &jd$jF*@HEXWKb-*`,*b[T5Emf`IaDlؖe<Z#R,"0D6wyoP9JLD KR Ȗ68 ,[qH hMIJ$TA8F `=!JP. $>y w PWX z3%k{x'SYͪ$5g}&${ǹTuCLKLIf&P;,6jڙoYMjlM[XbŶ0J5uUTT(UVUjD@1'-@A R 0"RA)m -C(ӦpK8X X"H0#NaVkF[   V(E@To}G;" @R-cJIg|-(! xSTPl~!*(jf 2 zx*kd9"CW333XDhiaGj1mմzqtmwv$j&֨[ѨVB1B$EJckE* Ѩb‚$I Dlt.7b *X,"^- FDf `(lʰ*E¡E0DDd( d V@(2rL3Wh8?-k*I:t>@= @^9 Q5~-# Mx,vb4K0,6EVV-23+6֭Zlmn )UAA] "68XYEQ`*[/X2 [f*g`1t2nMM3'D<JH>yoeLA fe%?^<ϧ V@rIc o `Gn-K2OggS@N3c <@?EHI4O|QBbȾ~ݚ}TNijx%f'b$ Id"a7lmm5 m4"KSlհni]HP2YZSEm A0 6  +*FA (hl n,{yD >a  ɓ_f J`UDE N0]Us Db@!Qly1M `5'/xƑ(N:@S0  S!j<3I-x>$e)%0&"Z F(sJB6z\ӫ/$Jw?{퇠#ugH~i}0$ @ A "Pa TfCJ&SObǶW0nj6jCf{򾙓։t`bbf#fD넀5oa{j*jV*FѩhDQTtZ@ S-0)$ՀA, Xԕ! "@%QR * 8H-B@,ZmKLچemKXSCDZ)ȓK "? p௭ĵav8EW+)z7n3d.O0>'5'8PV0>`z0"$e*:GC*ʑ#TcV5XHc+Vb`X,6V)`E>W- `D((bqg)JT [1}D E#" XDuB|z`7 b $s,ĀT,? ,9x&1@)W *U)U"?nO'Ĝ#M!;af [0igv }^R[{bLTjj ZC[U!!,;w* Vm*`",ZiDD,N0bjA"FX^lcHf^>dwebu) J8CȔkCbıLhDD g|m$0  U\["#"/? !]KYxfYGa#jK&2j3E_y2A(;P,/F,@3a$ jsQzQQ 0vڊY7Cˮ1HwU,b԰$ah?z [,P+`+vd![$/'EFTLVJ6GU*EJeUjm c K9a99T/|%NRؕ`0@70 ӯV`d4H F&iG 54kw `ڠs+h!U:/K1sIQlV(%Y5 `$A4L{[UC FDUE k < PP2P$5# Yb7`NF %ˡ:%B-P8  @5n`#{ ,-iմI! b%@Z . ̀::0@D{:=pP*%ѣ +fS*=QZ18+p!xb'`q.3@L;[FmL!i/ZMڙC u KCDM1TL *j2a(??5aORt(D r$~In 0 0(D"LPşriA)Y!!̴/`A8B0@ƲP-^-<Dd; GB8Rv49UwHYUg,|)tw4G*okbLtbccۘhXMQlL{{{{1m0*ةCFTTDX@XXE@dѢEj*,BUłhbW %TA6Al;(GSDTPb$ReCZG`,Hlas-+^ &$gyi06xAXX%yh @Ӱ(@Y'9$p9wV9]7\YcH8qpp,V1ډC9q$T-mԈj-5U*"*j%5 ɚ-l6,֥ (bD*-;:T9EխqiBɁi?U${,/#H1Dx=^{$A @ Z{/jg-a 24 21`2D( _0pl5D > *_}O3eL9(_}aʘ&tN8B<,L@ŮZM հA bgA6[pZc,B P@llj1`*hĻ! t:$!ba94w,0,Cj@ 6wMG k$1D(ۗo xɔ5rml1-JIm@YhzaCP^)}BgqQActpYL;TbI&m{챷`M%fcC U`ݪf-maXZb#X`4DUpŲ* U""XlP4XVAtJIdnL$l{HтUvJÓwnb$|0@ФEwU` l0"@Ѐ>!!0C (QҀBZE@+ [ OggS@3c,~{ lB-yK881sdL2[5lP a+vb;#ѾlFK ,lTӺZYն*V"U#6,XNr݂ƪ Xj+B`T* k.,:PVQTbT4w-LhTfIz=/t.$() W48I g48J݈$VE*KN\LIX5 %ګTVe[62-A+PF bVْCJ15A8$Mh#FlQ"c: EB 6ø 4(,(V$B:mBD,` n쇣JС^=С+ E, i@LA{AA5{hZ,@ M0⡀^ Oi@7uMBH+%51D`a֬"HNDƦ0X($p8L ;0ײH= j4 ²AƂ-z ǖ& 4𵌁 _j4lb:DyUSJ }M}<(fweXpabbJIZ$V!nD޾dl1X ((Vtb,~$gz ADZDBP%4eKQSn'꾷P#jQzUbh=2^Lb;KQƫUTU@G[S|.C"bH yy6u}=Kt|o)Uwy yUy \o ڽm:"#XX11ׁ]IY,=Zba,V^LBUU[@PUQ#bE+,*Pd*F1Ri mB·pa;`yߐ ,7߰vjjEPY‹Er w3?Ӱ@G[ !)emDA@ 6 @1 ̫ml#&Ҽa 0HD*!O,b!hcf&@X1,V5L; qް3 5Mlm FDL\ 1BE"`Q-VU vxe1yVWb>Ī"֊ZY`6B8ā 0DR )q{FDa*Lk#!$d..9""m ̿B6kn1d!$! e= @IF)w pZܻo8/@mRRpY05ZUEŚ`FM-l0PӴjPPL bX*_YJXJD/oWEA- {FDP`[<+s*b '^j?`X0FˉB%wl?`r~C4d6 ddWM#N: -e ??\hrp`BBx1X t4M;C L{Djk`acZIMêV:"bШ(Hh[X dV9 厄p9e8d5[=l^u*IAPC`]]vjvb aӒҫ*P+``s!+@` Ə"HȒg倌د&  8 ^ Ԑy R&)j!?DLLfbf`Tj"jpm)jk,4Њ-ED4*`Q-(ig ,Y^(^j-b"Z+FVE@-"Gx5 j&2a` ^L`0H06wـ@ Iz,0xA%%>!C 2"AVauʍ=)U;zhIG6i@ eSDwup`]GK2PkVUUbTUAlL*5[`l6B ,E"FEU1fc I?H+:[1*-Bl!Cn04`R ;3%rE8dBҐ|R7u"HP5]谎Ex":˻ [c@(5 %: `>cmxT 0Hۮ 1%bb L$heO-6fjDڈaQLV`bkhPmDzQ1*(A6_Պ@8!9^MӺ8q9e`n9SY&Hζ9Mj*UK( [ANЫu[yL(#!@(C|[kPX` F  UxVR):ƓܶXh%P#G Q413333 `gXb;+iE11 UԶfkJ}D[1E]"Si0AP*X#KxC;9Qu ALHik-q$ɵCȑ.I@,-BBl( ;+ 06ZMk IK% BXޮ kny1@JmD?L G>[B7\TM/.ƖJ|*TY8 13$PǴXao8iZMPkaʈfi!bVPTAT 65bw""{ȱ A#N6V`&We0(آo,K;4 "(FЈ`$B!BtX"C@pA2 0 !NL PYK%aur`OC: E<a OggS@3c$H%٭# ] 甤~?e\v",lkđK`AĘI1s6C}1x5KDkjbZB͐.B  LBo,-JWkZX OxQ ZUEQYUF0fY}f(KXcvh K+0pC`7x'' RB`@OE$#f> vXhIy6P.!؎!Rl |(u(2 "j#A;8r Ic1kET;("ꀈ55m,jZ*>(u_ZaI97#"*؊%bV4)@^lbА$#鴍;)(0B+[nnkGaߤ|? bHDwC @32Ƿ,3(>δg_ >@ Ra`@.6OAH m[XZ^YL*A*ELQAqevXبU, XjgE,&v"[1lP#j 1afCZ)`EEDlD,!`!t`)ǖ "VE@j (4BbUfd- 0n@#)X寇`"$dBBlLlƛ)v^!`o۞bA@{(Hh@Eۋg@S,' 1 ԽP`4T:gHsqc0 k#8IJ1Xh0Vl>A1MôFN4B-66jF(ZĀ XT} q 2NjqwA] dQ-E4՜+b]ֵi$@*)Am D/ p!| tK7Z@Ub@s8([F@ϑ}l6 [OVl09 [OSVL5 yY#asŻ11fb&$&b؆Zm&Ml660L;ED tY`U \u4(@%B `Ga- i5 ń@YB8jpH" !#A#0b`tdUA` 8<]ݞj=/wËCLbuX2UQ=@ BapP OXw#TN3c$ +ny- dЖ3#wI +&@3@jG1,b&vio`M ҴI gxʅ1:_Z3t  A#ցXLف &V1T,X-YdX7 jZZZZZn  AU*Nbv9тU@RTFF (FX8HP|ծI&! 7X4 #p5,Mf'=b$ZYȽ b~D]Cr1  I~#c9ܞg >(R?VR[_Ind"2UK ޑC*bbb1)LbLD,:vFLWАPn(x<EYTj/`/VR?m[$,r(ˡ-8U4bĂX ÄÖMe3lkDRw up+Cx$w\cФ[D4'Tdo7i(k\_Ar` 2@iu26 a"!U7<&3=1R9q"bN8xsFGl[بZvX aSER`EPl@QQ^ar(X(8ȚaȄpx#um;@ :2>+D()Uň@elo.Oˆ024k cBafy@u?rd8ͨa.XͨIcLmc,"ܑGQ%v v]1b5QjUj(1;Z LjozXQkVfUPAŪ Q K4",bdA LP9?˽T@Q,",qe0pP!D66 hB !Ķ(@İre"(#8ZE~37R@P"$p( AR/2a $y\B({GytN9G]HI">eݚA&d*GށK)33MogvV;UA5j5:S`$1AUk-VXUXb+tڻY(@Tn!C-l4hADcDY*K` /¼ߡr 9I6:re[H V>UY;p:ETшD:nAY R, !%pr0/?e9%ث5/bk]lri]LBU:oSS9&$a" (KFq`41 VllaK1Zk4إ`j Q @1 :%j"P"Al 22D(:1l1@DlIE %$h6!"ƢAT 97Yj~Q!8nZ_#@4V%@#Z&N`` L `,uV| $gO~-iloL;s;/$3 @lŰ)**6jFiiԬu+R,FĊiUQE1.~ZHIhk cARH `#@h3m(qUB`9^V?oC"rZ␓d;.D$R o[Zn)mKHm,?QH C!P`' %R exT"n82XI ރ 8 >GTQ~tNe8ZE%!dlydRMG;8!bđUA 4 5mj 4hifŴ&mmlKUDFTP HI""DĂ(R }DPM!Xա@' 8u7$C"D*k.؍h{&HS~D)#T tYfgZC"{%qY@;{!X.̻J޹$9F)wP IclğT mO`Z{G^&C0.GUJ1&fUjDVu4Ċ;[avvNji%( "ڊi(FŀkGcDVPBEF1k ^VX$F@WQ4lD @dH*Kߒmf*b͖V,Ed ddNYpaQ X$U`" T@U+Eda 3\Qȭgq1#-~ QhTY4؀RS!r%1 dYbm=1b,撄8iƊkERRn/v=kgEj!AP*(Zb1`V*d%"`*'DZȱ!bcTB C"ĥZ6M BY  cak`aլ@(/ BۭSc 6u'Rܺ:0I&bey͘<'ީ~9lo3+}^a#Y6`˦;X' %9F'E2:%Gmv ӑX*'eH8T233{kj_jX\Q_^5UmUlfoa Z7Lk  XFT,M$V"W `#~>YϕjuhѨ-s G Z$+Qr fQZ0mt ֱ@DE tCΚ(qRM[eJ$[FH @l@Z TӖ$llTd.=&x^7K| o OggS@3clV0 ޸Q/9@gq.Z΀= 1e&j=5,T &@TCk`TT0JYC@AEԊibMc@&0 bU B(4 XPC2="|8*2'IDP-`O@REE*unhLJ32ڒP6=1"JFQ  eP[QA1Ph@3/@T < R%Rpe8r1'x)N&/^ a`'-VU If F5QEN EUUcbZUnTF`&P'[P@A U[*p($Ki,a`DOD?4t@T1Fk qKr/)Dc,I&`rF$&p(aED 6H7UN'8BR!B@-l;0s m/BTj"/Pشu$&\R-YlOʑcXMᰥ0-& R Űk#YoZ,v"SLEְx5$fj"Ġ5FQ[bz_"x ;1A l?GbD TPETzTȔ- ТeZ&rKoaZWP Q 6"VbO^#;$ `#+_ZD TF&O|.F?&ƀ `A8-A~$TGF`ɡbn61f[M 8Y )'.1 UQ5Ji83"b+NmboxMZUDѠZEVA۰&5qbɴ,VQP +HnT,`+P閑r K)GGkUE Z\0 `!-QLEikR֟fx5p/ğ֊o( ""l ء()XNVK$ Xs,a\ ȧZnnڻ`fq5TRCYR @8OI4;,]fv#êv8ΰ)5ð6jkj &&&:^cE6`4bE mGXcFDT[UUo)x)`  -xBX! , " F"VkJbC۪ю/#.EŐ) d@@·Vȧ.)< @ VMUp`®XfrO pNoAXx[^ G4QAkR"(bTDA7QEH}R[BF trdQL #ۘXĮx*`k;ڋ%b+VTA (kEAU Z"b#E,"4 +ZNrԊ N`lnł:+/4 Q"B$,fKT!!F0# *ja S"(F[kkϫrYbb 9G(#( DAdEP5hW}lKA"*? G9ҪBc4ȑVڔ2 OR s'̮xfb1&&IDM[,8ZiDbmDjEPXXX5X؜*vU]VU`P$[Z? dMHfv6K_*-tֈ"BD'CBY%*#˛ ZPӀFvjۛ LO r\aP Rij 9@ We>(tGUQlZcTG:-Axih}u"03;0@⠭& j:lMk*v NC6 E@oƔ",LKkF#Z8v@c;&v81%@h'F"HjbXWM i([D U3ݕ~$j[t,9e V(' $%QILn*>SX !7 x,b u#!= X'#c3GI<ô0G;6 R a D =XM@1 C,AT@A հ*!Y-fİjKS (EKĺaj*{@ƈ(1VUhT:R 4Ů,bXO0H//ca@Y{y2 B]kcB@%~ɏ)H*4ATJi ( P@v @ 맂yVT&1 HV ҩ{(J#n99&R9К&Dk[AvcbHL`bg1#"66vaZl-ؚ&VD\ *F^Ƣ"bWc (:T[#(mQw^R; bEFQZ1 `@ ʓn-D6r@Ċذ U ,+,!} Hp-X wnvWc."PH|b@0:`dp @( AX~%:4Lp ؞ỦRʋ=׳+b,hY )fff&8QNSC,UME=["4QaaibiZbE歫ea=ƠZb0’XYj-VEUe )DAIEЉ!I推tE'*&P!b"F@)#9Ö]$pd6l!Hָ>`<￀Uq! B`:䉵o0 剽o6+z,RH*%^hI@Ku.31Ym^0@Mb'j/b6.RA 6EEP) hfb "$"Z@U,Bc `jM-Wi/hېrʲ`P d mz5*vp|B\ Y3t_O@b>'1FL c$6+`I@-ɶdCde "C^o {{;$G4~\{./KOXpI8Vbb'LzXLe&f1ԪU4@DUM!bŴVPjd5RƨeVM[ffKKf+-MC̙RFPDk"b XcBL(qEflDU[ ! ĊhXX R_kÆx @`k ^z7[e%dT`ۻ,u㫌a$g_ Ff.GռW n4gu 'U!d!^ ,j1CALULQl-3U1kUԠE--XUbfjaKQEՉl-T@xIkmAqDxeA'#YB'2%apdo 6T1ֈń9vdz{VvPƺ#A=)ҰIn#m9.}a~EByޢѥn VʧuOmS*j2#Uv"ZXs#Ib`aU5 j$XQňu,xTU- w]D:DUDbDlPUU(hdؠ BTv*"12Q" 25j"`ئE֊2{ A Y XTQa8jãPJV~Hbqh-(kr9 F#7it lOggS@V3cP  ~mOCԀin\M3OE=d R2IL,؝L$ bc֘i+jڢao1TmX5 ւ&>$ae+UDPݒ 9I)* H`[BP0QHJ4!ǹlvM!#>]o,p%0!BA1p;,H:JKɡmauۀ`Fw%D\0-މxf1s4DfmPi{DDʤ^EPQA&δZcl6nZXĒL*(AF(VPh- X[A$FPbQDBbF@UKYX@e`ςK!`l:\{AXBjf 5ؽ" :(zV 6B@!3(@ dG8""pXz; e`1p^$7:j0Ncp@u޾'2k'rA&&&IMTU30 ӫigc j/8@UkU;mb`4(X# KĩnLEF`c20""T‚qc` .h5+5}0 bchQ%A aXd aai3=~G.˽!!Pg(ap> `>¾~ 3F`gaDR _R' 9,,%N$YLb0MJ<6*6V IAZ@Q 0-6X&"VTj3(&zHZjh 6{ըIxp% )Ơ^b0 c;3Q:D@dcHAMQu?=3:mD z4@<@LՕ 0D{7H:E?|$CoNJT7HǨ?сd6T$\ODKBLD6Z؊ƉjgbD,*6[XVmQ`TU@V6b)s)hl*Qń& 3RV#dֈذ<԰+v1 c(X "֬هw}FRN6#z9@K$ZC2H4:Ȟb[ 4gm3$2z|YǸ3\bv#/"L2 MQUlLE,jڨM|0uL`:|d"1áPjZ&SEC5@ "P*];2W "S5#֦d\' .rB""`#];@DE1ZR{@ cjXkP!5m&p`{  ~ȴubK3u\p&BiĶ $TD N$3131@PĪjib@T@-q6X\;Y-L# *F[:&jQXG:I p@m  jD)`ck(06NY^-A,% L@BF@p0 r$V8mq!N"6ϋ"Mdg{gS8bJq8ME k'\<`pמO.q2y @%sz.hΘi#F,ƒŘ$@kZ bcga؈EljZU Z-;11F+L@GbňX~@Ujj2 <= % C D@`pg w0L%YUėbb*`@_Z/  xh0.x ^rOh 9~EKLp3Ir36Sh0X03@6mb!65^-`[-85lmQ*1T5mVAP Y VDr.+󲐍 "$*Btw>mn6ڸE;ƈFEG% Hl=hk"b,P @1V ?$ fW p8` w~شkO Xĵo'ܲ%%SePB"@bS29Y7mVaNp֖ux'ĴKJ[c' `z1 Ӟ8{[&& v V2vb]Ș9fDD*V+*b]B(A1I;-ˈQAD X0XE`@U 5"A6IlX$ D4M^a 0 XΜMh5؀@Fjv+q PTFúJ@ Ki TA @8 1<  6 9@ [G 6Cޭpp o&>I*b)񎉑L bؘqi$uN1,vfo &IiȚ Ua)*l؞NGYU" ETV -0 ("0"8++E$;]`DA9"g(mĶA2)bE) #(ypk `P=-"D8(8^ᵎg.*K2:3VNe#A2ĦEIbf1&`bvX՘ڈմڹby3sVL6؀UPDU1hujDDT@؊ I@"`ńV`@ aZr("XPѯI*5-AHAu`cDO;j0KiIIjѲ0آh4+ITaƘH'T%L$s8k+'+3B]@X;'OggS@3c,r c%&q(lc@02m2ȔNB*N8%ff 8M;D"kXĬ& 9%hUR cD"VED#@ (2WA[Jz2Fp̀ddK Czɲ,ضԈ%+,;F|1s4+GBt}2,e@cA 8QM)GT+Wu*wq.Xp]+@*w:wppp2Z%$ JF[dMAq 1RCJnUMPĪXT@tZ(#FB0(04_el#bkjD "i$T')@@"ΉZ, (IIHF~Q>|e$)WhX_]$V1?銭"DH$(,JbFz 14wV')"XgM+^j_3DYҪTȴGgU$ Ls'bLL &b@$VՊ-qZ(Ul6[t[ (,*ZؚBk1bQъ(FlaZAPP`TK e}_^nMZHØ3 Z)~MeY_P}&!VQS 5Fj8`xrz>p;g̐Ю02$>Ю07F}R9q"!\1:02tQ5jEފbagcZ\tZ88-"P1:tR"D/0VY7 +NR;r"i4keX!r)Q!- 2QXLjB lԥ /@Pe\*zkG#*kxSIAplgVX)K$g; Vusʸ^gT{FqRM"|jMb'&Id"\1Ndi1fkbAbQF XL5&#jb *(`k,**M&(%2In@@j XCY2C ,uEHT.>[ 9D @`%9p ] T%p`c!V+ 0Xܝ v;XTk4 ^X ȱ Dm08ϜwG1_=%H8*ޑ8B03$8#ǫ` 0M,XVE [hX7Tp#z XU0bĀ*nX`C E%E (6=  xEA6Pl“@BZm!)> @ p6` ("&  8|Ƞ"5@MuRl@|vB/$*2$Zp ~aH9e] Kj:#؁bfb1fc n]B Pa~TzB,屄O*+hT,HlC [ xD1FA@ڂrCjs;!! 0Bo1Xժm@6 -DzOP<=@eWI"nVQ)*/`3O$ DS;o$M %>5Co}N>"^g wO$D ;껧z0R$Q)RF"!r#!f$F55V,,Ҧ,4ÚZ**VUUE< *F c"% q,a46RҷTЈߚei=u9$"bB X5V4//OL0!V\s<,0(K P(ecS#O~fGN2uiY:d"(kaFY" 8;/;$IŊ8bQ1ފ6YhiaZAfqp{%j3"">i!qqdTJѡ"X"ĬDE0@1dӁVR.{_EJZ$mnF dban#r5A R<("0hظ0b(H>`#8rptp !ybf G6?9b2$Vd)3g*q{',&@L&ih!֨5t1"e D-հF (#AD['"*hۀqD iX7$PUA[/ q"c b@@ 7҉T=z1:\s+zKgȦrdPXA thT0ʤWv{0hV (e(ƺ ΌCG"d8v2&LBF*Gq!L+3 U {[ x:Ƃh2XLFn V KVEATp:*B4bA.Wrhتb@8 hT ԵFHR5[^E+3jkg|u OSӠIQ h2y@I@$PPf ڐn3cPuIvu^Dڳ~;Ivp`(jU F161`ؘulcoE(QAkkUEQT#+B)eY$  UT bA;38A[?dHpל_H)X @O'g⸜t0~ ~(X̗(Tր rp\`53Ifw h3o ""eJ5W{81&&&v/ĘIجSء6b`1cF1 1V ( *p=7OTEUEI:-`шb `WԤt!N{E7x5mjzjJ^}MD=;!G FR7C =Y`?`.,5 AOggS3cįVӊ>f̄#Lp32d~\6YQBT~1OL31ad&Ijg q85ƈFE%naőњ%j`A`SBCC`0bblI%D5facDa`hBaŠU-*- 2bF{=-l+@"y̍(BE *"B篵xspz8TpB ;'ĴfZk ș'Q[*0ZDd$bZlamF`mdUHTU[`%˱1ˆѢCU-@$tcD,R/$"#ܪlU E [y@x`F ,keiaL[P|emDV+ Zi&lR7œn 77e@<bJа RG$~$5>fɫAr ό3yMl~grppppUI90NT,h1ưbacvV`,M붴.jgZ5jk@-QQI Wene05'N{[ I})p\\U ""X`w)R2Oc5p (w?2 4@iAVf.@ؓ ,F )NfT}LyC?(C7і2)8!111:98$8ؐMKiQ3bc[ [[(..^mLްZ bLՌ*&iO`w(@{]N lPZ,+t)kW4{) H^hi]Ʒ6@"DX1lP]prL|ڤoXuM8’ImbgL8Vk4; fW _G_2ߢ,jSP ixOL;r%]!he8^,F[-v`+TD0 a/_; 6.9ar a h,*ã%y2sD"Fe 8wF; #(0 BH`E"(9ax]Bk l4 a8%"wkP eɟeTȟR=-pO5ӽNhb!a1b11ff`ԉFD`jPK )jflaՀUT5Pd"y12bcEHOJ.y̗X '9 gc4"Q \yL5DI)I# 䫦ASE\nQZ> 6 d{TX p000@~eI򸰁,#F7 S w\e@*G\1JKIUAاzjִP[CNUzZ tB,~-F`," dOIŵ֤SH9"F֍M2.^R4A(rA.|2@iaBeT(r3 :.Mhl@e=E{r_1g0ۜ7))a+@D;iC`U E0EETIpFFa peaBFFZXD,$X((RP5P"#8PX`(%,DustRacing2D-2.0.5/data/sounds/menuBoom.ogg000066400000000000000000000701031360473665400204710ustar00rootroot00000000000000OggS1vo_<vorbisDwOggS1vo_r-=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4su-P[[. Ht;J{>-ఽw_3]F6АFJC35@nD*U`^j;~SxG_j~˝riCī@R(y?+'C AY&3'g]'.v'8`3D/_'gRvg_wйut bofT[9tT!VD8ù0C2L X/HF2\ٞi8Og[OzvpJ2ġٽ;ĺrJLSٓ_$`lLXM>B@G܌Cmi뺅-:RJz"Lzj0NLZSQZ[jb퉠Vܚy)voY8TbrJ:*:`qmMOh,oLF4ϟP\5OW= @^t20LخB}5sI J~H[# mxs\mCF2jX^k7% t~=@5\udKjn,{4^Ԕ{ܶ@F+AXg 8]ݶ?@"wZzއјu~E*g;@b7`k퍕lܮVnb  (6L2[Wװ @>zpS"Ba;uu 4_GDſe.jE-w~sWXUrЉ(ƴ{@x-=-Q>qhy!aR1\=*\uRlTƠ4`IzΑb{)Ogh`UߢȆ ?o΁W-Dl`j}f璒lmd.j(G8z&ر4Ab?OeM#9.^1& dlNU!vQ<;4"}ܚ~Z>H߭a#td2̄LwP ZB[41a*/UzzBj,eij!~$]M8y[ThcQ-ETe#ͥ9 }eh0](3F> T}tqMv4en~-}HxB^k\OImIbAɅ')S},M+b=88:YΑ>L@M ;Qb[@n0͇o2pKU9dM]-5[Q iCHm}2L 6[ܻ-!l\9X Mt (D,ωamJ3cNf% 9d xBo @JK@] <:mo33x[_6*_k;e5;aOo Xܻ~)Tz]^h2ѝG":T> F`颩M̘%\Jdžɶ!o 6ЛU:˕q\XZuUHLuD;IGV];(r5"]GI"ԖaʫbUk g&m-?WRsㅏwΦơ ia-ܘg[ d\ 3z:5Ce~bٺ q%ܒUVu|\Y3L,рHLj425=jt_ցK^y[Jq~%-2L&sоjT9U=:uK$ivi{.>ZϺp"Le/JcWQfWe&.WiX&:<2gi)8fPW??"e7<6~ <9em?,Oz^aYzi{\r[v5BaP9z  \{8KiR7ly59gߝӋ$)Qb%0A^+r?euMZh'}tKk坃YkZOvot6+fm ~PUH׺3y؟ۓ7[\Û ֓5]߸9K%k0dg4c+"~ (D%=1ddbϷ ?d3'f">'|6KK`VzLEK;xb,") cf [Rip/jW(J'7s.G(g쀺vM QY;@Ats͠5đ|GlE NDw'2y:pߒ3<UKu?^C E=UzgU*kZ~hLW4vԵ+VbNi |\n?~&6l' VizЖY»۔HUM?zʠBB3̙!Et1N75TTZyH%u8g|Ȧ xz+~A(8쩐fe6gFSb}48:f(lؘL>G츀)8*6e@K:907OYLmߘ{V,1ve-sg@gO+}M3N!-Y )yHEj+-Y+M_R|KB06E s&}(z z~#X{#pU6{1r*\G wcE9  1~]i6mnצf6KXTڍ|}G 8jܨ(Yd ٶ$ut*1Ɏ_Ts't88sQhGX^,SnBXsSQ0=pzh*̟ HKn7 :D#jL9Lb5Cfmmau Y G-w3։ dBj&5UaF{gujjD NHoQZgy W A&/Z29JEԬ)hvE'zkwfML~,MۮqXL|` oc#}rރ7n9E_I)5B)|nD;e *`[@/-dоτ EK|bGxlx$ 3$̛ 1`)/^a+)m+]w%h#t΁MDGh`]Ff8(,i檵nB ̆1Ζ|̝[NjJm/C,k fKq߯fO.Y곜S웴mߢw}ܪRvmum6" $k=4&*rz6 ךwv,.v'דCxrµJ9ʩk"l- f{1T3~PO0[>@)ZQ>B]]8 Cg4M$5Gp)0Ub&SCO~ xf5IZ*zTj¿_dߤFWLdp0P{(`% fahNs`lxAq@שэk+ riz*D'6IwvJw:1}#~K|A`RUIB0?Ƀ~߾v; 4ƃ5^?;;O* {Kno^~<sm!e'Osa%@(Gr/p][tc8rJo pi `:Ư>%[XƢj#hD.cˮIEUd<^YX S=hw[Z36:ʊcmv[\^֏Sn"0NFWU! O_ْrFЃ szJI3tC?uY$>t͝Ns:umUDӢfցI"D'Ѻ)RUA*X9)"B9l682b~N_AMiߦD3w}c'pИ۝+m!A8&ZNdtqgsI6/M$g5Eg?qZtaSE'֙J)38!HuIiAE+sN C(hpGV]q6`sHL*YW̴k%zJbj= SA+j ~.B 1L@tT z>}#<蹪]f&_ϟFHz"zL2Cˡ;4X#'{*!e<)̨ڗF` YqXZ]K1e%onU&#R)YWzD yb`4.ϫQ AAj`{.9[XoSl1*"Z撁pƖ ?3]*Saڎ egOթv8X]|ιvH-;<}5 06%LkՓwyM\ڴuKPSiJY >Ʃ*dR}+Dx~̯%$DLFU+eߙ'-^ʵZ9& 0wVo͒CiQ("H$HT -uϜWM*P(ϣ"hK8d@q;;mXM49Q7 |6e*nE1{4@FՌ ; hqtKT70L(S ;qХx.WfupqZ ϪK$yŁ1ʓw:a ߌξǁ EZf"]o~'AnW/"%DXO0'-ۋ˜,{wpg.6.=Դt%dPJٯP(P/fRɹDBv*7c̆Qի4r%ko5Ʉ5(lӔVJٚE=GToŋR#5Dz)} IJI1Hg >+"r~7Vc%϶p&+*HOa_VMو DKE[;&3#2\ g`A\}〪Kͤʻ:;߾ݗ5ylo=uy e ߤvo_d3"t󤟉e-isiTtg|]2̢ ,-. E|q@B:Ïq9#cGG:Re]4[ZJx:q@+.'*_U²Iԅ0_2z0vr#M)!)su̗lUNʕު5ǖ$xirp&Uob5JȒI־ B[ FlhkX걺VP껏 w =@ZcZ#P|w y3?߱R? @bOGf7ؖ8/&$ianR{cŒ ܫVhaNH*7rE.! U) NXL& u*n.O4ǼBHI!™OT5_|%WAVV[^ ~K34o< f0* @; -5&C3>s'ձfap}cd˜#‚kg)\󴨸 ٕ*/"9;)-ܝW0 6%ՙqXe| `/%{m~3lFbqi"9==msɰsڰLJv["L3H6U{2O0/,31T-2 "(A՝2J&N\sjd$C --gI.)顽g{P^*޻W$j +"(E\Ȧ|zw~rʳM:Fd* UG)z5y/uK]=JI $Vh:h4Vw8N، X*yV0nFe$(Rrb>'+;5cqϧu+R4҄'C6ϰ* wO k_* .{jG WgX4:X§ܦVmWK_!dSѫB iDw0V[$va|ξ9ie}_J_;GU%&]4H5ޚ^@ 㯊t WE)߂lyF m(žo֚Q:^O-\t]f45+8,L&UaL z Xį#M⺨[};S~܃eRJg]⯸"JuK`:HL^k̻`aݍKt.qQbMQ  ]a<@VY KDpǝn3r,=X]q֨tlD[xM8?*/჻gbg\.>x&;> !,3xq1(yOl7azUA^nK |Yi9_\(ds残Wܙh_gxT>/iFzc6jغ])2BMmjsjH=ڟxE`4V)wF!z3~.=wDdȿSakw:XRvWVuωpAD#|[5~A.>pɵ[jU7M1'u'Dz+rQeawd' Zߗ;`y 3Il={\PXUƐxb{B; /:{ >اBLHoM*3=(s& źK wMͬ@ g|L94Fr-OUY^DZ%JP.}L]3{*dsiЇ,N}*QT$yxlGI6 r Z*N^kݯ8໪ h ʗP áڞw|3_1O c565_!dl2ro3&7{pn3|I|]߀>@J@zcj*q>ȝkјl}>6#/f S`Vv/×/˄[BJ%Qɧ1"k#e&%鑚ž˂Ҏv4A7b`>ي{X}ܪ YkPi)9㐆`h~{ pA'lh0"+J2*|oJq <l=?+I2e4{ m'tt 6Y"Dmx ++ij߭Ji%4?ҤB*\)v=~b=FYd\)gt4H0um#'iю`7K08nxZ /DY`@̟U&@VvɍS6!BX%ϷX$ٺZd::t:+=o.c5 d(FoIpmWulytۢ{dv+r0:R6"oPo'kMӦpY)nt5 qVgfW!M@θE%r [ѻ0fqeGP0_mlMTɄAs DiyB3DFOsMr5 #- ]fA>m+54 WcAVmkOYF {SoC,}y"y!0/ zbHbEqNtm=]NTIt'}-ufkə$F8%~\ZY; =1Nt{DǞ5S<>]6_AcK /QTq\5'h`F~1Wٞˆ 09~d{? 0wEiUUԖ}k.zi>ہ/pmr-Rwb#HrԤ9Ĺeje^:c{ F%"{%`Rᨦ0bJ"|o W=Rs>+S ޠ3J-y+3=lPxV+|Y2|2k˅޻ݖ?A D) ,ƴ9!9ڿx]99x5(7,27K xxz͚]~IT)3 GmGG_lse H}3O{P=QCZu-&?Ge]=i[=HWST dˠRM~kOff wwĨIZzUM5;Ӿ:P#\t4~]; )@[1I i(]iWe\ < n|˄D䭖|++!es淶թfw-t(~R(`G3"w %UI /zVOyO#tg}wyd4dU`WyP˝^,KlJn (Y)uvpW1]nkΎDyUDVyT{A|.+jsb.޼Y`7YiR~ aw+.O2߆@YQYFS8tkCbza3m f.ˑ(2lN #94 ^}?4͂ ybp<;ӇxN )GLqԑl+.I:sd^h4vϬpX31:i nsX.\5ʋ<{< }^]4͂澱&q RkދlkT$XLV;2.?c}_F0v`#s IS^0j4\"+A+hN,[pvn/N:A\L+% І'7-6uuJA?A͆\(20 Mq6^K=ݯ@~skn8^cnYhCgHIwȲ\1KNwa`U6BsW-s0vN?,g-$zz@4.sפؗʠǷFXFk\[s^ʶ_ԧX.ފ6ZݚX CW0-doJ $©#h#;቟e~NgYǰDv'8#opܹFJk4Ua:Dw5<M@2z07Zn !;48LIu9{JzwMqg{ҒVk+/ &޻7Ҿ`0c9\~muo盵$ݳݦh7$![Fn^e]cۂ5Q@P!Ǻo0$+*TшOjHœu:[&'Mr!/zҗ߮gv|2=k=j rǝBWpq(+>Pc-q,*uDJ&ayJ6VyYťYwcSU/Q wUگgrj(8/7ۀf)@L8N0%q-Xv[qT[,%m27=^˟pf0%G|ynsd~Jf=Kn\K޼h(A _Mju #"@">Mz`,ĴfzwyO8q;.o&:^5]q2 h:5- $һJkrP;Ħ@!Tֿ mOl cS٣e?ϟ{v\!md:ݨuXˑ(xx=VS)Qm:6D4edOLKa<{`@{>nYD@b~~@KiʷKZdo!i;:{1 Uq aOpXu̵U:4^ݦ "@+:EtlX]"wΟwp%ud<>9}`9Mi0񚤓 VсPCD ;t^r]1'ͬ/$-Ðh=7oI6O 5Z&^뽔_ !3,c[(4/ef~Yȼ_LN2{޷\K9W5"?)1ܫ2. 7[k2R>"(s{zH)ͱĞg4 nD?$S-v%[Y4-.LlA/ zPf, OggS@1vo_l¾Ƕ=*M3K8m_Nf{۰&ix1?/0lL]IX[vg[sbvC Ċ9%jΘ%Kx8; LX:B-h2GB* xx$_6oIf^3c̤J8cDU$ۊ#-T,P2>+=(wu2UrԊ|x: k ^xolDƚJdLR|ytKg?RsFbֲboZ``BiQq 74AP%,V!wiF[2< 񄉃Q>[$Z_VLp,92^*.a!˚G䙳e(M>BWŰ[U {0 pԘX)?TH-h= 퀱-Qm)`ﰽ1g=lݷo#Ұpytl)6=osϰEŀ.waal `m"2=tQ@#WAͨˇZ*gӜA@a?;S`+6>~MLzoˢ5+P[1(n;?JHE'ׇw=;4]ݩv|e8-Bh~u5Yu<gy͑gtΥH{oMϪ:QO:_OH]KW!It MO+_b$MP9"Pgv%lZ]n @ %8f ii3]뮓 rH;5 xXb᫮';b_H@e6"ޤkxǯ^B.ٍ`aZi*쇕6y!V'ΊTRWXJ)I]dݵ*TTbTnyrs&3 h~:]h}jv:[Wb3O6wK_mg&g!;e.  R&dzK]%o@,k4ɵFkvZ3Y_*S>_uY4bKk'(|GY$0X*6s;!Po#hFf>\w p#4%Rtoro뗙zv'6_'FC=KaUQ}-bu$+s8>d!_(15j*MjM%O6ǖqk*C[?!gńp4mJEȡwk-tB2 9փ-nҒi> =O * 8^zޖ:kоIwk8I9oNnB3t {o˺rdImY_7fP&Ȇ?>~r|gɦ~AX$x``Žvfr3Z9u/-o^KJ=ID7 B@7J;7*X?m91eQne`Jޔ4g{bdD\֏IiRr$>e z5 LʁCN1Bd]㬋}Wj]]{?|/~׭ mgvR`o2$JFvw,&9& 7|iMM1-٩քxd.ހ!RS0xipKK4jpfrq_.%_cT69J-mpyR.:Dgt e6]]O@HLbr~hXEJ2ǩn~ÿoYtcl*2ČAɶK[rS*`3=;!0bUhޯ,$dnEa0ȂG!ܳ~OR~6u5Whl~`˥;]rK.l&jw 10hd[}:Qŕ_l,#*|t!3>Lm2z~Aw"@Jd|njLd9+aj!#Zn[k=4y=W&D`l+~LRF9?랞tZ2,K8HG~K ̊ XrON0)D܀;9YWWIm/w|@ <@pqEt$I?>8l@HYn :h$>P i e@1ru ߭.ss'TکtLVu*Չ CBzt8YűŠiLw Wb m6c|,n973LQ}`>[V qRvEj{>>0$UЙgxp+oF ŏ$M~2PL&Ζ@%K%֌1HC?+,(VTʸ*z޼thYQ!`"\#ݝd@`ZM$-ZE#/"Scf=.#^~0DPxo0bK&0V"JVôfb;1ٵn5ID"Ǩ LRT/f"7 Ieg׶N^|V@`G\BocW7p}A'$5=2i$ʊ4VtOref$,O)2~  }8`҉ce/^tqu?we%4MOggS1vo_UFke3Z}ЄA+iaq OYr܌̑͠ɖ!;ܰݺ32zΐ&%e˗%HMH rm9xѭB3xqM~t),3?7ݷ eѡTR-嘷߬5̗=V~4Px옅BxM%Zݹ#f04wRtMs6E;v˅q]6CC3 2*[TBC ]*`{GAc$8 e~uCfD D!p5 | Y8Q:&~*}1&N e]0O.]=ش|y}}=?dx92V2`z5yb.ƈ'4S(}\nzfބ~<ﭠ?S{~nQ\%@38ƧyU,ZGll(7DYF3&6LLh 3Ǻ`Vi/VCnߤG^}:)d7.L0[(t8+ 89hVH C񙅾EU~{#^aWp=J ls?شd|J{ͿNĐ 2&* =(`oD>JׯpDޙh/1Q@ / ޷-WR-dbp[]8{(4 wQ߁ʝ+ cGVѵ.sc!f4h](5X%R(™jÜ&] l: J\S >:p D"eɡAt*[J`79_d;Ud*3{\I'QBX8ՑMǠosݒ9Bo25;5VA@:/-Ҝ42 I?0rqO-a>U~O}tK Pi `[$-8u$fon獳fD|@3jaV'n&:@:ye ZZ|,;Qg ȫ ԆSSKwHc.a}dԹ ʐ{Ipw'a<J|Eq{N=ɱx2jQQ\e^G:#a$c:&bVPu)ŖQJcP[Qd|M7ܒb %CF)ӏVm}Eݰmj; h Ti^d/@;1ݏ=Mέ6wyw)m0# 5v{K~jDԩ s>!M{N(5a} Tfk f$@#QLPڏ:5sy5 I80T\b2cD`rU9p 0_a7nHd@xR-?a ?/˚;?>f`na[ w|q#u-T΄Š3ՠB|9FsCiC f iQh8&NҬ( :rd]knƬ[o|ٲmcMV4g ch=e X}j%jJܲBo"JbT_ɘ'vGdS{0\ K_sjy}f~l|e` &mUNQ1=GRrݭr;ڤgPS*HUyϰ'{@m%^X1ͩl6 sN~,fIrmH-N' rMzVnF! ˮ7Vv'˘-BYǤoܸgKt#&sZѷt,0|۬gPZF83 RNHhr~ Mt+iTSV4>i07a=%IE9zpr ˡw)lFym4m+iJŮ֕؃џã7 ^:" :~/}5Pzz Ζ%c9<3EY1+İAx2ƷX^űrQfCEUP5&>Ѝq_ TUL$43Yf%'+[8=k1֔{׏{(Aq W4RdPP͙q,cОKY9tk##]=}"wlm*3mۿ{KVrP;1uWG^9[.&c̑n^?pxt`0cAaO'ܼ#k%>x]\j~܆v2p~ku5(#=*״Ҹ\jbO/6aoY 走@4OёaOD;Vv/2 TP.V|qSxtx|;lm H耶L@o׊L}Nkp\0~egG>=eXDustRacing2D-2.0.5/data/sounds/menuClick.ogg000066400000000000000000000125361360473665400206300ustar00rootroot00000000000000OggS 'tvorbisDOggS ˂e9=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis+BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNPRT@OggS f-Q߶).^G:/޾C|vj?6׾6?e.ޣ-:ϳ@CUM2=Qnj?&٨0C w5s9P1g*@DJi)\?z( Eq4H0PN|R}LRiwkCjԶ}<imS'0N$"쾳t4f`/9q8ɳ?rb9` (^ƔB+X>%8 p &h"Q0(@`0*6Ƌ w\f Mq_0^|y$Ay۳|R 01 `0 n8 Rͮ3C q!1 qJ0_`~H;P117 xE$` 0+qxK(!xxxDU("VJ IX &Vlg5 >kd$;d\zKz>Ƽ0y}3r?JSHđH٘P*b)Bv25XYD>C?(bN v@@b,BLJKha BXx.Wf=V)ljvT{lGe 0C5?4<-SGW46>HSZlv5LA7X 2c iUx. Xh@ҡ3P&g,箪dئ?fleɴWN.}4"K=g5&۩_E\i%s(ˁi\qYI4Dpv$\"y%(n}U޴58Jzc` f:2K1ƣoq!PWX $OqbGqy{>{6h=Ea=gѯ/O{3\vd8$oe(Yӧ5b;_ߋH,6>/ngdU!]¡nT\mp6` p`Yo l;x<϶,N}N; DustRacing2D-2.0.5/data/sounds/pit.ogg000066400000000000000000001530321360473665400175070ustar00rootroot00000000000000OggSkLz,5vorbisDOggSkLz3L0=qvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis+BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s6pR4XhJ 01Ƙr9s9H) tNJ)=Bz!B))C(!R뱆N:k!Zj2(R=PRj){K%ZkK*)z9RL-``'EcbC BH)RJ)c1c1c1c1 V+j'tfdȥTD#5b%ء`!+2Q5^+bj, AAe($)XSȔRY%tL)F)BƔc)tZ=TJ @P` CpK(0(I @"3D"b1HL`q!246..tqׁ P@N7<':xH6hf8:<>@BDFHJLNPRT> "9@@OggSkLza!QQOUQMPPKS_u}[~\tײ?rە$tbL~^zRZN^q.|xKR|.v׬߭G]Cw3*HA5y8րCUf$y-:`0ߏe2Vcfj)!׈ݚn\Uȴ(XpHG**z*;_['Np YzY%6OtmnUA ]\xwg?-1~"XP5R38{ZO4C:~i@$.|[ml9vu嬩 A-YJ۰Y~!:ps# Əhyph}J؅|.ֱȒoWWhtpsL9W9(&uoKz@=b+a6L*$?s4#vGzy]׿/׋{n[+ ą]:b^M:fi$߆?Rr-}M2赉~ vYyYg4,VqlSדҩiQx{9޽VT7i ,^e[\_|\bCÕbge!~vf/''cқ^GTuFHYkvd Gg{J 8 ,-zw#״ȝڥu9clbf ZJ-kCʾU={Y.*b?)3n}y~<ӗuf`؆k35U˚`M\oZ/uإGlq\lE mB&@2Nqam2$nz[2\T)KFnj,e]XzMX2w%`VZu*Pxy2{mP,neQ@v1Fwմt^Ow]D9\Ǔ9t.s{| {;jt\qan:3fE-u#d1# ёJeQ.ORPP!FP<혝]s,`%\#FqÇٵ{ptKl83fT/URu\>x53cA78liF]C{(.O>~SVu٨1꽳1=. Lp*+7l8rQҔ9L[Vd&vljpDƶi#!󿚽 4g##hQX2dݮLUTǸy2Rb\; Ld/ܖ᧫":V̈́qM}69Q4Y8,]o ɛ7fy,nQTt")lNxp>ֶ̟؉xʪg,Sp3*xm h 4Vp( %f wZ{Tk71W3 i Ǟ3ҕ>‰4G1d,).נE2{̰ /s[~=A峱T\Kf.^#,kڽɏRdE\yxHRZŻcAߕnD)c·Zd<=>O{{U^W!gvJ(zYaTDHQ(>81̳,B*Kd"w"*SCH,+ u:VlN+:5RufL/N읿~寷p_xw<廐<0mxn=fgT?uʷgc}L5:9t7G'Ӝ_Zg܀gNMߨ_!1 lЂk[e#a%]Uu$lpuyβ N 32rÃ)?,oY){8 UDg1k i!%.3tZ$MdKxt-ʵ_|{Eگ#0LTdVh%R^k-^":7g5]3ԷXY\OR U W@ձ:Y5ZrumAR[¦JM)1\Ybկu_Yk \B~JQώ|uR/bKǥ)g+XW,` 07DBY {<:AfqZfpz8cZZUǝN*҃c**2"..5kX>S"=Zv߱C>..D`e,׺Pr{ifzdu5K?4^o=qu>j"ɝrG RkS]_}niH%p~os4׎vbU L`@Md@y nlLnzT{tW`Trߔ {- ZSe-5Wz-Q \v6>&66^RJ}/9j=U#5;kZ` ~$(&l LIFIa d˸f؎$U:]X GDzxzYr``}0R2r;$Zb\pU-p׀HQzR:;Xu`7Qؚ!9RL#Ў"J([)X\z%9dOtZn*u}ݲO|&kqa8&ӱjXUZ3U)E6y"K-fb 6YAnPeu[0F΋k{yARZ[(Nbo]`LbZC׊<bG 6ҪR)rB^+[uM_j^𶀪 x^lp)TA:dC伬f;7]a0s/\kjx'w\b,Fzncl]ߟKJ9[DGlA@l KDwoՉ/gTf+y0Jg-33f}8EF[ڠڲa0z"5- 2S` n5MiYFwZGu%1<{?ߏR;&1lkjDG`Np=k_$цRb,)h!7ȟA1C>)FѾ_y?$rac[fg2wRAG?ʧagƹZJQ&bLĒ4_i;3K9cX|CXIS_hhnfuZݝӒ`ԝ^%jRF2S<։)e3P$V $_=Edz"e^nM %|xd ~#A _*;zq~,+hZԯ)duC`YvY"!WA+0'zAn 6ާ#\?;E K{Ϡچj̥yzas4x@cϟcb,J^~ ==%=,OU G(jDCx"y@.ºLܹVsWx)-qY,;lt{Z1Ip6u.➓Ĩ)!xT`u%DdsMҔH 2(]yxp^3V]Hr *}'6]s9"[V)F6A_EgMn@8K dd_gl73Y^m߫yaՋȲiO!*m&[_ 3[->On߶n*F 2:650bο۷ lo 1nܞwǟ ULFEY<6}6onݮht+-+q#/08}3br,L& Py41tNeHR!7m22 >`'+\g)L%Lo)׵=:י9F=TT&?=8bSHO^9\۪p"i1"{zpy}9wL)k#3LI5q|9]>(1XcEfVUDDc̻l;?6bE;2Lzt:"(7Q-V +zosl/mPГhe5ߴ0@1 X+M˃;: K֧\Yuxt [uΑk^"¶\V_|3(2ˇ-%az3 V%#K);[,y,%+K~ !N!( !02Bn{)zv})Z< 쉸{SGbI{I}0! njת;o-) A(7/꼭C ؽp,3xxYo!#f)#q\dXUd` !}vYl=r!(u5e *Y`9jvΎ5Zf:YV>OaDSog#͟隆NaeI[ΗWaeuA/Փth:(T8o=mygW.BQRM7Ԁy 9Ҍytr 3}y bp{M G!յ]ڷ{L5jLs%i99~[ru(l()9dJKfg)Gip$$9NG~yjT35nk3"ɞ41NLfg,6$/dW,cXd}G\@s򼟩Xsp˙""j郇Nt\Zz:=OsChHt{RJLiVN8iԸk&ZcǓ‹a )䘕00 .EAʔܲrbb??\yxM˘Bg..cr9f8빽}4-pV> NWɬG.S~;߬t,+ JQh\J{j...7~@XI,uͭɉ hxka4,@@{, m %ٷ9:SXOyE瀽:sL'ؐϲV'2M0;m2!w.ִ^{ Sgӧ;t zb `, 2p2B ֥܋wˌֲv8̤b%4fGew,:OFQdDw(%;dZ[`VX)tjqHݸiaA]e_EΖ\)oDvw<`Rvsf_ aB+F-g=iVcfQZ*j@۴u<,ILȯ_3|Roqn|fz+Iݙ=ZiVL] 2 \l `{PJ({n6i;pXK媗^&dk{TŃ,G ~~zSr%3yq碃^ηFtyV??i'{'gT1A،E]/5էZws9@~ ) nORbT[3qy=۞&SoQe+QZUz} ,M5 [ V=k_Rvnxo{qlP)P{G*OggSNkLz( WSTUSRUMTRVU򠡕TUl:e`iȺ3GVJd?2xO:˓wf/r{fqîf->O{O{γ(#)~vq3ݵO:k|پs;쏙`g]t6)J@lTbPg!;w'?vZon݄\2T fQ rom%⑑fv4t%GlnGƁZ*q#A 5) wJ{UwKwjy3Q Mx>Sg(ut\)؝9)<=oKz׷'-oW˸\6q1gFi5FCiE띑~VHRctӌevԇGZʐ5r{8ĥs帲=8Dݕi )ɲ_[sr1ְp8L=_Vw)˖[ZlN}uGW=߾(#id+OkkٔlA @xv2$\x *J㾑0 =~l"nK-njv }Dy^Wfca>P~;I|}Utin],(4&7l 5Ȋ99ek-kU>և,S_3Jy }'Z>+,6 *V,Y9p^\ĀBzAVE6 d3uzSKh׎C Ee+LA)p[d #v |2YB]V# L1&SnS=l "!1jKcE; vZ` pn1.RqeUSPew]?2ͷA%!u*XJ򡄟jjyJ*"Gh*g}0_BHHN3a=z^@]q{ՙRE}{ϸ}(}~Z~~oވK=DО4_7L7Ng˗9at:2;i`~?L3'lbkvbi T> %Y U剻-ׯˑ&=9I'R/h盞z9}'f=rMyJҙ@'gw6EօߟnOcN1ZC;n8>ͩZLjjmD> *RJzkAh~ocC9Zl57KS#>KU'bmG ;7 YљȞWozSUHtgy5w"Kz{W+X]W#{LV+K| Ol'ۉ{y[qgP¾?3d=&ٙ&DK3{^yoXvK-,e+fnPL-ݞo7UrKi42˂gt%5!+fނ"YiPE{>5!GIj\ ۶k/묯% ,&\dB9'RD^1J p7ޢ΢{_ԮuXV7 ]iS,lVJ8DK T'M< GϜ-D@+ӘqlQ>3Qwxά )N^m$\%_Jc{XDKV2X8,gq(?FnT2ӗ[5z\ dDaLXmS^{'5LCHCr l9Q6%E ~ҳcEizI4 C.pgXR>d0e"~n>2Uxb2'|pmˆXwepH/@}? 0SߵX ­"=,6k/B,_ow,Z#U# ݾ$UїW|^=AAiH1QCl ).&GB"sOMcy";A157o=;9=T3j15\(Q=zuvr!Jij=]%a/Eӛ}]_yݓG~\r_!lQ,rANkO1뿬DDZcrk5#vM32뭗_(AE})">. [ϳRĞεwg=WK|3qқO9}_vOuY9ax+_/wص|v8<X݈ 6|[=_>?P+?.^se1FkG'r8X26f__= |CG01J|^K3fջ񭝻OoIi-9r팗ZKNMSB=f^avʂs|y(cҹF/)?!+ VXOkN J(? סüJka ȝV?vV+EA8_L0F +Z#Ne{qy0m e+y(zl>z4_rpL XiKBY8^ sV5MRX=HD_"IL"99rOID;{*I"[=ݭV/C}X"= {Ua6nAܞZ;[MM_xo Q R{BW,6n HkHg3L} J DH7Z)vڅ1z5m2fH Ҳ%kkK`V23^Iqq[%%ͤǭTL|6xgޱbm%yln7:qDi<#: l" &oFZ\ṚJP$hϗ+Ybx0;̵qsyq80٥O^ -dzB.8TyqG}+I?mM}Օk)93:9O}շWʘ=l{ZdoQuww?S\2.Y3\6㤒Vfwߗ)S]ߝIVdn3\L.eqXPJw5}qيcGfE/7R|a8 ᝿fe1o9ӶՂ;:;OKE.^?[OΤ>*Af%Jy+qqpkRةҤ ,٣jfWGo޹V1mS#VQD-s%_r#Ȏ݌׽w?=:v, oi;13qk>8yisޖ98\J,+h, Ge \؄6U |FŻUk+ +Vi]d `X3=$`Ùۃ3q5-\%Ncn$Fh>Cp䕅/ܳ ,ԸU[[=X`B;i"WavWOggSbkLz!WSVXVSRRRUVSROP wg3I,`Q9 =b"8);D`Ѧ|_:YƖ{aVeskHXTnL^aY03IUD ="øJy=Jihz#hP0EG`ݡ~s_m6vf&Z[wZT7%{XU+A,3DÚ7Rﻠ/4k2͏shc%Y7歵=mbs'O^QD 4flAy@SV)zn Bӷ8|vs",a|h;OnK i-],esk ?Tٳd'>eP2',Uafٶ.6a zΌ=CHhIGT]Amwu\b4{+@NZl6N_ZߊW={w =u 钋cN#-C O?olh}>NK*9~c->ӧ8G{=_9ģwg쯇 9lk~wb[81-Sq¿inޫ]|_"<2& W!UR ]x0vx.̶nq6}AFq"ϽSOcofN*詢uSkˣClfj~7-ӟz?_N]\q¡S5'}?vxw3]uIJ&Hm(;)6wZ7LxU5?' Ug^˭8gbq.ZX NjU3L%f f:V@TAJe#rΌ>(^u-1dު gUEo,"5B{S䀷ې|*K!mq!ǤB#&iXq>a>Uyr w~+x>ڶ'ʉ]TG!#^ AՓ\tϷ>ӭΎtS~c^DgqX lFʀAgfh߽۴gnwKnWm[NB>}nM^7Қy`wcӳ|:9ЬĨԞhzbQ9c,8 -֡C j>F qX|]ơ=S|%ԝtVre`Q$p3˴*/4=Ɔq)}Ԓ~FoG?OkoI{4>a>jEtyō9&D$N~Ars;w8lc|T[{{))cN};ys}~Gm~ᆛ~=<3'vBt lQp zXUǪ+GR]c>х.2Gfȡ"J9 UuvWt|~xv( LW]"{nU.6}w LD˂&Nut=?i,NβzBRLBKvV;hflvn)l 1ۄnܙΧgO2; mzhE܎ɓĒt穟g9}ury#6{0{ϹZε<7nŖ0̷.lݟt"l0y,6`1=V kUyFǬˉnzX)VQo~(=fP;|{-3:a+\*D'%: !k~H}jb3 o|0.(vJL'&\}Ke6&?X^WY2$x<˔'ph,UcHwIǩLdʄ7~!׾5]oK%d8z5PPiEb6<{<~$xY# T.J8ߣx"t$~>%6~k+Ei۵@˚/ؑO%jk}_Emw =e?I,4"ddA:AFM0VE'MoS[Ζbnq";N{yXLF:O5A ˲y.!c@k[J%dlV*W L9u?Աߡ1ym)yda,V$&/azlaU}/1X Xّ\[xP 4%P.+C|yH^xՄX9:(kFCv' T&tDL*t؋j!^9͈,k[+ၐ7ii-LڸlrNMT}$WrJUKhI߃Ӄ^Y(F6EEP,{=No1968I{~oe=3G:U7ev?~&NNwj"oTΝ[7et^ -p&Ż$9f ^'clk.R z1ꬩMh%d^)\:NWy{rwOhuExLPZ]sZT OE\~G3=Lݓ^:"Yn3/OggSukLz < VWPSUMXPPSYUZY$*ˢ=v 4z蠼VDtGW{jnhS_䰳b-^.O gr#-쭬7£^L$LCWovE_*vJHbG$yv=(::cZDrXC H#¤gOyxlz$`,ˤI=l!'%H9\&Qe; 57X|xnZi`cJ:bz8L{*6N/Q⪘YݖɂҩpTFLTd1׬'_8=e~f]//eezSw}7<֖.7 cys6J/a'i[IDd΍iv6ZI oH ^QyZ|nׅފbK $\Ynz,7Y5y1smwX?o::y:tp0gUVqt=o߉'?5Hz\J}ṳWdӛ<%0CzU K}RK^=R΍Y&B%G-q6}޷Y>FoW2vz┬ zi"$Ϟu{|$g{22NXo|"sv|. sI.j# *v-|왚@z/ZbFL$k̩6KTДDYF%^~\z)nIǞ';zqV۱۸t<^fot X7: '\}D2}u9*}jEx5mdƎώ`IEkl,VwY[p>AV\>rz?jjŵV o_5PLv}[zLq[3lxo'nt*a6`(ˇG*n׬0UFΫuc6dWm~z19וwڷ|W*-VԭĮ[׫{hY蘇7-U2\2)rCh,21ɀWH`L3"mt읅 l"%UM"]lH*ۣޛdHdEn_Q=>HQRe1--Պ.ԏ0D-5c՚.!q8GGs>*ܳnBWgιrŕ\B[C l{(.Q]Z~,#`[e*_V]`Yy5Wˊ:YK4ms^cZ+KJ+QZ̪`c[|~w`YQi?űaZyU|_8-=D3a㛙1xޚXIQ.=}\g+j\\ \7yqzV˝,#aD#H K JkӽP ~\nZVEШv(Ub'f pFDث;1LJ7ޔr,j$O$%,6~J`U^عj@y%v/g~zSv*ʋ \\ٜA~4lLܻ( b&8SM)ey6 wl-+2w dlz[^9C|JKffY?wYwo;mzw;n?̭w|ַ.ǯS::::f;%\JA|6}ABae(;룵6={[uXbMM;WyRTf| sƃ#Γdw߻:rEy =,PN-DB3TBɤ'23P{;~sCdZ"}hĘoD!z\gq- .$w13xрtyWZ{ھwZBsq^[=R^ 5]u)/}ws<7WToݒۼʷ%c4+d" $HdPy`H^P)h.SG(PD]&QxqrTR;0FnDs~߿' y4. ?Ԝm({FFdxkIiG.fb3t^f"`|x4I'z=p{ՇXYQs)ᳪ$X,\o}2y|V'n?ӝat`'߶f].Z4MK&ÕC_0l.skk1#f(dX٭>ȑRVzJ5R6 ߕ#Y^]JogRV ~~;ۢi8>w )gDy\wݯ9=\N^WLK=RYvPh, 6_T']A0eX~f.8m>SQLn4 }7M9 L*K~AVҸ Q&Bzsi}s<=]zI+ޥ`Q.6I+&GOp L~6t]OggSkLzWUSWSTNTUVꛘSUXSL KJ$1X*5%vDH/zqN%4tMξ-޻ @~$Xk=!Ç Lu6B̑GbQT휾#3 .^>8g̼tnHn̒SKECۣ0‚GW1@*Cd0T"jChWyrImnG]bǪBJS̅%;M×A㡋~#E18_-lCU~ǔO;7r(UlZ% F>H8x=^QODR^d&=Ќ[2[*'}{E]D7+3f3U-oYDN$^"էF!hCBH9M\Ny#~[X}pꉃӿxtޑ]g~kŜ:uj۸DxF4*L(S"@{'Y;UYBZ㜥zvƚܣ(Wb~rsӉX bHz|vPT,j岈dpğUb^lOZ-#gv׹۶,R>|ם>KT6Ն%sƭH-ڒW=~V~#Vh<ޫ|֧a^Žf/{#?cK7NӒhʺ_zjM^}1W %>f!Hq6ޞu)CPf =q ,˦!zWX]SVN 1 k0Vml++ ÿ̷T%B'P@RM[v2e`]F7n.ۧ+mM01 pMmgqA]sE[|D KP({+3& -XVouc92v_׳JX rxΜtjc==:;*.\ !m6.ښ-:4h_qtVQl}Z[(+bY?N۴?Y>c0-uz8}3~VƷIf=}κ7]r7}[N׾\^ U(^V -P ^: nE_SLlfQ'm70ר.?Z%X^"eGZGK=F]R1nۮ7" 䙲+oϯ>|19[uY^R]4.ms#뷿8\y}ޮnb&sX:}ܢXq zlZ y57b~YLCxQ_/%>\:Ӂ=a{Vt{os-| i~+͙]k A ̳-3dtX*E`@ܧUԻ+=oo{Ӟ3Zsr5߰?u&Ϩ/sF Tfa$[!qͽ\x7rs:st<H`;/2Ht`W R!o0F" V>kF.K-q[QĸjdfFU;.8)Eb680!Ś[y5۱)>w? 5lF1H*Z}K:Vz>]v,Ϸo̩Ed,+Zu}]Y9&wܺϽn7a#Cޖ.2̍cy޺*rHOQυ=\VFyJ$kHea+RjzJ}?:)gs@z| GiuR|Z3pگ [?3N%L: + 叫LW}?Z7s?ʕ'nus,>psõ޳\Z~|(KϤYSj;bx4W(LJo0GV./B O7Iܭ-[=|Eͭl.L)BnV)K~'y.B\w[,ٶitaV}So)e;mU:Md}Z*uͻ}I^^ˤi+b{=Nz8);cb0kSOBH{^l9Ӈ!9o;\o9Ll")B5S2U&)Y'2VQVEK;i!riN^˅oR8iK.yR;eo5cCιvOξg%V~f*]dyꦲ\Osp{X?zXotZ޹G& }* dE`̤mC_R5mjVƊ*5D3&$ ;|%Y2e˕O[OggSkLz`"%YQWSPRWQSUXMUUUVUURTUT{%R9OX˨'15ptow8חRlzw*Prssz!ջ.M8>t2opd `0M.F2cfjfccriZmf9r{g zX#~g/:49dUE$)D|h К,lc~GDb/~-Ԟh8L>y).ߋ6߹COy+xL^L{?9iN{ГU_! 3,'q䁝o՛3ge8n 0svF!tR eQR,s4B癭mS[)emhтX/v f're$,ܝ쁈.RNʽra{7{x#.h?~1}7;1ŵ<÷1S\Q_&O`?Hi?i+~).bEYP_^^_ Q07[鏃U$9{RTuОiHG F.!W퇥U1-}l `t.78ގr^!,%]% s]ܐ.аd8znMyv򕥜A­ ]I=XnܥrMLnwOlg L) R j RHi}qQ#igl?=I&VJ(vyO:ZO )>VW=[~%E-8£.DƦ'rX/N}f_a # $*'c.bs/ cO9cηOw۝g88v?˜=24"$,S&w,fd0eY:ԽzzD-l-ե oZ]HnퟲkZz}u%2V$-]rXB\ A hxfDQJ FI ޚ5ȭYI:D0}Hኌ+(L~E}Ed5E3Ec<#Ed<Ąneve>oQ;n~L"K qɓ7(e=a 7`LgKC> wm0cUWq.ku⿞&DOY$, 1X˼gڏVo- Qxڂu)ëS޽I T4`hr`#Wbs"? A>ia&_=8 Vq. !.H;)Rx_g,\d$EnIZblxѻ*SIh9B8C~ڰ W{5&"SͺK@o]v=]&kvBϠ_'Koqz~v7 ]e,9.߾%RM{~Q%#{n731w˪ Ge)mO6%'?d $3$w8 yvd+HD+lG]O6hM>Q\榞:1˭jɼ5Y۟L%A:-v5$wY8vVct2Hǘx]T>˱YKd)cuDYLT2Y[:YXNi&n <˲ C@7(em mk%M̈a o&*ٻ GgBgRq3mbDYyrvK37d ,qΏn䯈kőBxOʘ!v2SC;|xW~fAˉgWՍ&Fi)k]x6yt`t3\\ FòUyya7JPO@Q+f&E筟ɔRϪ9{R֜pӾ|: +~%i=ǧu?1D؄JWfDy6 X0xX;597uR\W!yRm`ELS&E5/ ;lA=)d4 ui~3Ncs^dٌospqvL䢗!$wy8Jn|nƩբkug6\?QwNc/UO؊=k;7+,Rq$VVRmJ)+b^niLIYtFP?t_7ꋦZ/ܖF[rOdfv0f6us7^c&}wv7jڨZʵ[N['||ͦ䉜4ߝ5+. 4.K=I%c2"eE"u^+c"QQݓBFXG'{ +RQVdⵛf/K5 ھI"EկKӉlǝLk&O[n~WNllEGɭr3mIe[B YUDʔE8dB .,?G@pƻ YX7>3< y֝[K~\lͷuzq,X=c`j7OYhl%BxF|mbe&uNX%~kuz{'0_4Q{S"'NbkT FɅ%z,v@U%{`=fSڿU ꓐ8&ZLNRXj=<^!y>'Y/)l8!N=V-Gk[,`+lGg8%¸PYNq4~(jkGM=pD"azeXu(Iϲ[QD3:3G+bMh{AZ[K H;g4/ɼ/djJDWEiA>uţ hp-oժA0RG Mla~v~'D>) u g,J?{fm8M&WjG jTn)M@\EfH+Jۣ]?^\߽Ģk_'ۚ6<ߩZիq4S 6gWSfۯ_ݙ?GdB TԭD14$}uǘ{dʘL5lh-'6\ P5£F՗[#R,v>O5޼^+WWֲ?j|s0-:n{\"}3@B7W3f)+=з_wTz31WFT\rGwswۙl&ڟ^K3KՕCa*؊:SÝ~ZlNqݫ\>haHBvLM2.#2[o?^p#R#%nQoqRP,{j.SvVL!J],&ŬmEo$~}ŽY㙶i}3fbZnRSL_z\ڔ<DFK9a YbE8za\v#Mƻ W5e?2,|/zkz~Lp ,JHTmzz#6Co}|:v/ݘ_!r&ŕ=.}of5$k#wVw&5Ѓ:O'JT6&^7.<lvrZZ=n㻁nQүtozz3B$n{u쒸'xDS;Hh{ oUg8W_E=g{.<̾w]򦐯7o[aeyt{?!9D&K4Iq!^ ݣ>Q+=UJV\WZuW_rK#@j΁omL 'hiS1ZF^c,AzMQekzqlH_Ehx}Lp+&C0Kk]dt6}FRpeQ*"*x͋"3`.T:iUB}Ԙ-Rs0Q i׻ u6Z+EF<)) IMg۪-6mz=n<.}V%=>@J۷WhK ߯O7L3m.[e-'w?}&<ߙSܘsnMljr|)Py&]3K8i&fD̯evZslJnWv/ŒyٽZ.\JɩLұcL'vq왌w7߁TV}F|aY\߱y}5˖l2=3/UNS4_TzH7ngO9"j\F^#e$EI\Y>G zwSU3\(0gry{wj.|bJn>oԧHwtW9Ȕgܓ_Z<6ot:nK e#ӓ<*>2TQNxІ;m4.%Q:OJ{4Y''z onfW/) ?n[ mE3/n rw~H_7j2oy8JCqcDﵨy歝M5S99sJzI;B}(k =Gڳc"!3!`)⯮1mx?;5Mڵ0WJIsItYسm,'1e)6E`@l/Eن Mcr+BfҌ,/\U! l+8m[~ڐ/`A'׎gtWe˰\zzpvj){3B\&%TEQly@#/ٞ\b>@j>-oVL'םbJHbG(ڛWnE&B@ϙ2#VT睸kvc9{d'{>xF &#JSs,\IGzM>w(Wj^[]w<9*Vw"'sK\3뽜!ܫ_>5r~r\s$Ͽ ŷzA̛M~wS=>Ek~{dYSww\"ו$"2^Yu*E(Iۆ1jL_~WOM㕨WUS{*/hu!q)#Yp[+b)ea _,hu/1Z`I#[ F:KnR3"s:V;Z.cnkN"i8 22-jѢJ 7|2X枧qKQ-8[/{G+m}|+h@.`@֮^[[_7DNć`H~̫;H^\X}, 9.kNӼ{f̋GsufTS+nM,]"n [-n;38R +4ݮqHU"TnFEb[U{RW (Z8arӃO+hXZ:/ g'uX;*-uFei~Gb~_"<*n:~3Ke; GVr\=l juJc6ɀ􌁙g̴:,fV6OlZ11nQȐArQ5֏ ® fcڮ7GpT R 3/„#0䄙'p*piyaZ{d^+9 P9Lx_uM# Z~6y:A)jVt,m f]`qq o]}VC%B:vUX$$ Yڎ>V1kaؕTRS$1@sxwi8cRf[?}w:i[5]$Ea>iiʢ2V%Y&-Vz) (C&j\EmB±bMKKSn'c5WkDVGYyۥ"ô8[0tӖLJjUtbAnԱڕ>B:.먇*ᓰRVS*UR9X|+=Q}ᆫ2oFZD,}+n΋Ededwr3'qw:87m{c7YH,J}{59ssY2m.nT*>s"3(oooooǣ4B2 8,d`TS= 98W{V]5@q*bGޣ!Ș\w:dE2ofTau \L{e̼뺙W]޺IJͬ7zr/z5@gw:KonQ6rkڴ(U'EۉOa`TíP-*ѓdjkJTYc̲^tsL+]Ha~~Ugian E1p]by޲~t*ɢ,,S/q(zH瑷JY!?i$[=pd_Ek?KsRfzg9YkOQw)okӫ/Pvv홳?=ҐYt>uʥ^=˛TVPٹ 68ln(bocTV:^1nd90wj$"&K.̀XÅСY)Yh΋{yOĄ $iL _:!9ԓ%cEY=X!֞iߩJFiYtRE_/7_=gdVT}ڌd_-HQ^4PE\ ttm'M0U`:K](qeY̯ma-9:JtPWJ* ~Zn%NM/ci0 /y^5!HOfj#:SrxOCM21\a?Vad;q^1KN.46gMXMɌޟ^Q24#&hR뭙6҂]_|W Zgv2?u3 $ah'o:K'<`QJ`n{7S5^=j8ŭV3w~#Penw E)z`ܢOn;ye&]37q{-s@YYR~Ӽ!|ոk/  , c]s㭽7Sc.F?+7ּW09KL}to]-YWlǒB\  |p<Q~s yV"g5i+FˮP;Z~-GD'4T4CG\ uxv d 9@րrk옙2p|W <Қ{mؼY_|y [|Aj/:|̼0lu &} ڹJ˟)=2鵧?jaPivu0#lmM^2[kZ!z=QB.x.޶+zΕRK1^/ہۂa{vO;Ln.#D{\ו]{O_.(ץ5hsd?6Fxr_fKLَN"M_vUŕ>&1QR{O,"QOO^4u] s; a={ON"?׃u^cb3Bas|^:Z ݺVӯVM{v\\$tjN~D؍ZVǞV?.8uz'ϯ:QeϪնEjqKMٶqlL3yLw a%-jjs7 z6_^4_(hCDx7!t_zRm˅ERˢ~x=R;ciWE3qdvߔ -FA0~O737=鳚8iŵ 0K)sٞ7Ҧx̤slF'Ȱʳ A/w^o%Vշ}V~˃ֱgkNgnr8r;g:xq+ܒ}w/;.$ k:(7lf,:Y-焙gyezI#u^ty.:oOd=qz wZL/)Vfq]Nf9eJmbpTl6jx"%ݦ_c3u a{Rع[s~gLo0|g}oGnasz~kZ}90}Yg40OggSkLz )$MNOQQV[NTQRSTTSURRO4"2bتxI{\mB}97D}ܺIbҊ3b'5rW%>&row9JؽIJbn;3_82NN;wd__"f!@1O{תbL&2XF[\G ({.jHGdBai#)57mWV+6:e{}M 2FYr:۟p&o3q<\ɛ1tFx5V*8 ͔)jxȯX):iGc0>&vX+|r<4ZK7RFιNww+d I̐4^㰔yBSL=,GF 6e+ʔ>.Hwkuvrb}1I ܕ,*9d'TRUD"K1d0F 39:*3R{0vXcՙt깸T\y;ءxizLHՖHޅvU 'ELT.+V1uwK>3l7Oƌ?qv۪뷛{DB @΂Dp%a2 yHk9-f9\MZUO(V+PeoIdΕ(VMT :>[^OCvE{No+~tY)u}|Sx:9qMO?߷L_?fyʳ$B7:O uzN:T:N8\U{u=;#٩C_XtXa+4Yxy\g+nzsrפz s&<\3 ޽ǯ:=r~ikt-7&op\i/[5g:~"_m\.L(A'E+=r\i#.՚"%/cw<Of =38,?;8;q^^ɳZ6>NfN7G|:+ˤuGY>w ,BIH'M^ rv\!x4`wu;lFVB7Z|%\B}Ƕ)V8 cޙ dw_ˍ[{ZKˮgEEbY֯ۢdhKSz;N}a(s.2=I2adB/Ez7̨#UGs hd7UQ U9n(RW+{W9}È*sǴ2V>+&9(ޕW7{;cĵuॳIqӞo6v8 D.K 6,HBt]]64eBAs8ά:H&tV|w\xڳκX]\JLziH5 LId4˲V07d!͘ r9KLA(llkR\"Yl[=J LKAJ2>c(SpP0:uf_H:+BɺT#j|_+}5 TلaFsTR1sLTy ֕DqZr\ABi; Ŋٻ 7.Ѥy%ZdJӞuUf {.L NH?,oPD%v'&t~^~[憦0!_4E{g6ON=+g TL }%sL Ā+hJAS1Bp f9y 5.jb]jŅzYVȸZo0=ЃGpD`0{z!q$}H19mGYEJ)Q.ٲŐvy BR^R S붞*lI^ߞǛI3l=L6M[kn/v<;c٫9M~rXzv!L֥VrVU1C"o^,X߫ =82ߝ̴\}SfblL=l|k~uokSj;s~yB= #`'%ц\k9Ѻq:۸ M]F9'>8spqP<tro{ཪ b{~O6;.U>?O㪷KZvU}gWL[Ι/{u[t6uYi203joc\Q;ni{5nvjŠEު9AqG/yQ|v}VgK#Zx_IS`%Y;.v7muɢnn/W}d. UD@ocxzmVFLVח=3inNsnXmLȎev%|1| D,ћɣOJV&Izl4y*k~T Qv0x,ҧ%Vڝsc3G(Aa9;DKRToXP{0FJ/#IyĄVMcTVvd{5}a>(1V[ @l$Nll?qƪ"ǿS z4+/x=/j7gif/D~{ e0 Q;ß!*<[o%pzAlq{%R'+R)ٌg0D`!oRE灑-aO@HBJi:͹U1:XhLq%!,{EJJUbJYg wTowDڵ;QQ9r EHgeß|GwO˔IdN ԑ>cbZדg~O8ssmf3KӁ@vs3W9/3?S>;g9ݬe ن:x=qɒ"GK\t/qک´x!¡+8T~SJ,=PQJ&}А Ƣ]kpΎչg"baX9g L#cuzxAJBh9|kkz/GRyU/&k.yt@$Y Jณ |OggSkLz X TSRSRUYYURMLO< }Co]({b )=*hL+3y8\뒳D@ihnuX8CkqG{uܶk䳽X&d5Yqi:;Ilfy;Mt g ٱNL83eBQ%{9ud\'c3<4lvirƻH2\ iѥ"Tk}rdbDaSgD#L}lt'_62< " K)bKrr!4e& fZLU#cLxqa)ɒ6[^9qg_M+fȁD i(m%U)B2ݦW% ѫ]md).;\.F1 Jt*kK6)qSR1LM!3tJDe ߹nnv5m66˄b=SO8:ÇT;K|Yc]D.Kӄ%w,q6Z[ӝ܃XR%=.+ ڐx nJ^+Vr7[1vBɪɪ[{5ebJ$e-*H|ӯ ۼiq'Lktԃ}m܇Rfqdu5) 3d{ke%v^k{}њɭWkD#ՕڮDZ/Y3A|ȅg&"}_gcHsyvt$JM| ئک2p, "ʐCN#_FVQ$[tW?Y3a[v\"C1Ȑ+#B9jI Vi}lƩgLLͶͶY;=\t}n) L %J7 Rld}k cbZ-ÜCIeNu5ÔH*NO}ΫN4!=T!/`s$,=dé I|amoUk yRrƶy{G dbg 7i5JEg{+K'gej򬲾iiOw:+J_lgbr٥NHlӐ4NK420ۜzM*h믯C(9fHt 17aU/5WO9sbo!hQ'YaDӆ?  r?ɓo8ϝ9u}Ozz2oN_gNuJy!,eKӨb*+*M1-%H-_ yY :l=#قx(p<Ԅu vJ+֩l. 6'b2 8w!jJE>H'̩'FWtV*Lc7̻mܿ wHP,T6Pl,&w$O`ͳ"TfBj9|S⻻}jr4s&uD+!qwT3_:t2͈ ^&`HY(O$ hwIK*a?aI d){Gck"= l6QGddHC@GMGSϒcU‘^ n䌥gTde~cp4,*KNѷ `x|{^z$L!.[]t*\V 3ׯX%1bOI[)l.A E'vFv, C.C0T,=\-upj6 x8/w?lשͺ7U7M-T.6ST >&Ż*ib|y%1WN3s~N,SDŽ/Nʗ벙tJQFo6ETZ8}pU?fLRΎ<ӜV{|ydž>q'tm=CٻD6W#t6`*㘍DЊmrpG?md˽NxajڔThFOd\1!{ )wJpOt/Y]kle:%V -[{UO:[e^|Z칓58M|?yt>c6_pl/dȰ/7˼O-o摡xgD!lUL֛qZጻz(w:o{ʿ=jcg"=z㓧=rG }B( i'nktFaٛvg~Zw3kl* =!XAf{͞uZ:h:zW}+jwʕY̜E =.ۈ1Oh]k9޻%A~~OVsZQn g$;*Mq:]}[5 h3UVFן^+_u\__à kh[ۼi,2L:46rTuSx͑.vIzg&?) /O/~:bZgFaZR #ZF#V/ݾQuCn1LKBnC᛾=[nWylOwuH-=t@skMQA0cb][$vh]mz5ڰ{-nppZ{+隉kV#${OyU>Of߈:}*˭ij0 &nV>[tiV@"((`j IakαxEB.F،Ĺ8$IbK7Of-f? ZshH)sePlTZuůU[_;r/˧j26ܷViAik$K쎓Kw A>~ *\6V}ldj+aj B/\^d]Vqen?BqnKf/̯ 2u$쥭F͈&|{aݬ-'+\g4 By^܅{{yI h^YɲJbž.鱾5hণǁ&kw~l\ivUqi>f6G 0@CR=A#Qpg_@6z6JM,@vt $ U;5zơЧi|}Hj]4TXLi˼LAsWf{XJt#*_Bl?JqM`ѵ[ʗj2npW. uPw)s_ yhd%l d6Vi6O4g'U}Lt,g:tf<2t1u?DwS .^'vO:1 DI "bd9Ov'ifHo9CT^ds>8FjaAf, yoVN6biZ[a7%6ùt) 1<ǩވ]n0]kw'E8&Ѯlwgp3gˑCTĚKUwMV[muHa)+RXZ]s:Aeï}g=LZ[SfE74䷤ dSfZ.AB8 rKo% }h+q”1Qm956·@Nqo̽'̸K*Qr_ \LhZ;w|Gq{I!2;6I/{t%!иKhMZc[>USwW#$MYv3"z˫O@6i%O?ulwk׳Fyr*=1Ո)jˠ һ *qV7DžеӃ#["R(/%rgV8+ŸBM>p2B95۵p\WzDv:V+|^0$Lm.h!+Ljμ@/~ӎ;9fgvpf*(tZ3EcJ7r\alDB+;h:Vҡt%Hg 3P' zqp`ݨKT`gֺ8 mrLh *|IJL >("A(z'_67{$9NK]~8JtZ4{4RSz09Ҁ7xu6p.̇[Nx}kHJz#E~iV]"r>3wWLgRsIlAél6z+ &]ۭzFZ^MsԎ+K ~&;V5smW~9K0iKT?cNzNt( UHΘmԾ vS{fs[MjY(bbNkrCܬ[5/]ںT[c"^>幆ףyT%<ش#]Û}z?9Cڅr^a~Uv}2|ޗ~=2-7ɿE2uv>z22'Y䩼'_|K*[T~ eo1߹̃l {Ʌ.F/ut,@gxJ6XYŷ o?w9ǭ-&t9{i>UMr@LĨI+"V `Njdrkz|*= cYJ_::7QV\/X׺䤍:ajpvv;:8JsgzRGfYt'@ [P,$%*I[ffn.eoX=a^~6ո"a Gd}}Z> &Y6GH KNb (ȱ1 <6h[{>qO ir&xhRS.zMԞc4&::&#u8Fܫnxȅ>~E~^J#5+Cj.볲sHiy4="#@-B OaxRZּKx'fýly5 4‘׶$ 3ʺcohiʕXT,CWX SF߈^XV!%=ԷId`rԹwꎷ[irϜ@5z%;wMDw\i[=b?XZ~>5;4Ciaj_R><=#7HEk<_2/^tv\$@!V#/0nbˏsSw_ܿ<[FfN̻iml?7>y{3MmuYUWjjڨ[:ޥ3?Tm%S_]?>uwY9%z5aX]fimuv&wY-\]|yo'lɅZ._9 rlzgsއg_U^,ܯ6tX¸ 3q |=qs9o,ece+"w?SJuE&{&LH@o"v,챬7ITνQG\gٝF DustRacing2D-2.0.5/data/sounds/skid.ogg000066400000000000000000000405421360473665400176460ustar00rootroot00000000000000OggS"0~vorbiswOggS}uvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)ARTIST=BradLipinski DATE=2011TITLE=CarSoundFXvorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s0/J82D*<ӣG(u>3dU j^Ĺ*tR]Cͻ_ЅԭsvySv`UJd9jEcxSś0g8ZlTw=,ݘU<VvևI+Ed<$ƛC^nqq0?#%J" qbimobr\Fp>q#oW:PM!oKڒHr!@GVC@x@DD4 JL[Ht|*hT4"a7Q}DPکTw_rT,0DS0Re!%фDWbf+;^ f >%s+w#Hx $Z.)}z>g6͝NɘktV AUHu~K ;xNcIG@3qDUm*f솟W XFٹQ#T1-SuRJil8(ໆbV[77^ V܏.~Zqd҄uBX 5zʚc6V>tY/LH@[m j[&@CAP~+}/7hLAj/;{8}RHtW|Z*(yGFf(jS ̭5*,!w7> G@ !CD}$F *0^ %"m* v~Ԋ)~aY^f*'98N I81#Y޳qx,JhI BfQ]"1[W7,$W"guox؃ӡ@i=K >ٿ!eQ7WJ˛V%F,G_FGD1|B V S˗?$*k1lT7Oo~U0wȿCczhteJ&"-RUlC:)0Beañ+)D?!^"lW˓'>/éG:A)ҽmBPYVӏ`Gn:r!qM_T` X~ԊSsY~}KBsWrKn]Mo!"bX6}@NSDkٚ!KZsxَ@;=\c^ݏ] CX`GtSס:ѱTMDAKtU*ir:;n)k0M#1I ז"r-q'u'zߩ`Rl<_S%gÚq(%3~ih֣3'Dg(=c vS" ]H)$&m٠l2 ƅ>|<:HB[ԃmٮnj[W/ٜƁ1z{~^\$uf =kfm. 1`GN+RȎdlNb\l=$VB}lA+)H |܌9+4S0E7zZ3_bZb=CD, bf):c,Jp7<ɉ(YPߺ&) \^UoAlJ+?+!i;zmԑͳ4~oq~t+W͋zhUTFgQأ!37{"a%l c$".T4]L4JaF=oW?urD$0sݸ< fDLzʞ$u^R,D,1Nɮ!dGMC'V{m'?% `u`xq@n !ou՗u \I ZW$@1wO?itvDKXxd5;Bֱaj׸T0@rO{ yLֽٸFW>K4 "=xnTxev^迂|MOԊ;( Ĕ5_ l[?%zDw J&:Y݆,Zyh)jK_vàEfkDl3*QpM(֭bPLQD-DL@wxyW - $W$~ fhX'׌R00rT yiwOxs)RT" d+*Tɧ:I9 Kg@x@SGN,:p.r?X8mwJai[CGɮŚB%5ST7N׉l"WYSIl*1rCZ> A 8`qu"&>TODO0+WWV|ͽ6XK=řX* pWTTŭ+-G_B);nNlڕzY7$d$Z:lXUм.YkI|k(j'0Yx?eo' EB1u^ٵDCmHP+v( =M` OD;^/m5n(gJ* f@ڹ#kܱ|!3+GW4]A{^{rd, .Ї\B{hڭ(X=iX*KBHNM#4%%֜vbw=*r1h4P$ iO ⷯK6a@%q aS"EfNDKSjJWf-Si t5%vTO[qpkt k3?xhS,tuwo; bW~K;RfGhDn͉(i4c5#,1!(yܗ1+j7!~ӎ_o|۲-ưdgƬmv2Zq%3/vރyoJ%i)ulOl=})CFdq(_Tc ߣO&R 3m|u[ÜswGStfJJ>`2ǘ_A͟~ h\) BgUçFv|TFX5B3&U皵mVdx|om"MSQRtM*: YVfzXnmv55~iYpXjE@Nx32q7Ҙp9Jvx( 1qSE ^e(ů'PP JgX4^%忂^^EC5ݎl_'T0VCeݽg\?4k?5}wDmA,kNSߦ-S*rVE!#gXlA+jpKSE8iJЕ%i/ /&5݊б9-3hhP˛ޔ5w_f\h>GkoD dy/Dt2{A{,8oTNBoKTh"R,.(K=f{/5ՎD^yN_^d-R,g}eoY1H@&֌7kؠ J)Gɛ^; Y1d +̈́'|9сn|M? r[6 (YHs8eYmg2AoH@?j(o?m˓\V u?r aM> y sWLQbt^Y%+׋醸䶈&|k-آ`w~c$D]30ћ׾b,Kd7<_V.HlWR+ ͞|]Z>L]+K3Ek']-S@[PwPIlK3o[)t J<y>vDl YqUŨE/>% @lV u`@K mݹZ5aL_YJ )eZ\g@ ږţs:ʔM?y+KWy7"J?ۨW0ԔHۍOk2zpKAw֌'mvtP2Pqem2&+ׂ0IԆmú;v#P-ٚtv23pU9"dsʀ^iТ0O)n u/9!Žϲf2$HW_ꦠ'"TVi]\CXBb˸jkp{l/ؕWtfJ[w,9#;LM}^mstA0⮌*XBorևwg{޻3k`|RH,>/f6D<s5#^S{?v5[)8wxՔⵍWAOʶu5LO ӫ4?sl_hWUiߒWA6gKOJ0 a0=EWq-C@ZqZBeXI!R `O_oru^tTJOp]u@\U]NJAtD[UGxm6c7HHRV"AT*RrT|~gV5"m'F}vTh3 ;x)i^9%O b!ZtvQƂp)MEgD]F~F6f&< UsuxvȈH*'?qA n$ovLNQ 5+SoBŤ[/kφw *s(ګt'Q3seAL߽kyt"4Yţ%*~*'6Eď:Dpb-n*xk&W^u`ה&eA s^ƞѺ8]=lҮ!bMJ 7&7Ȩ!G 7VUQ5R:)uT綇HcD(zw4eя Hp$ fi%&lŸs3ጄf$zMp ~}=}Ii*.N`u&&jYF/Gr0ksi4dOfzN]4@<EZQو%:VW@gcf^%Z zm`ꥈජi/FQޭ~1 Ƹ,F\Rb7& <,:M A-%2rokw[ևr\yJhSĐ@us9^pcK>XyQ;PQϯdt5hw &=}@)eP>H-wEnnYC8=PUF1geIL߇`GoZGH,r.$H]>[0iW_)?cpO#S֟{$:JT35 9"c"!tĤg;: +;mf?;3xgw-E-@@вqp!)̝? Mm |wmN";a|P( ,=hphk4+ѢGKXZCBχo^=CFeeU#VeU29._%n@H~7DewTXD`W1ݹ%r⥋뉝يm+c]SR a.~69 EY߮6PGGzMƧGc<94u=44' =u.Eq.MQoAi$]'.ge&rQUɛhOggS  %_A ?DPammRo3gwet >wKZb53(}Ch֝,;N#$t B KԾ4q|[]z?TLYT:^$>uWAެ:I%"yTsdΩY4i/b[?K,T:Sdfi%K_oɈSK)+ 2Sh[߫jp.m3iY>*/3MPYtKR0 11ᖚLpA;i%2G½PF Leվp >jdWeqs/쟇Fe?劆$i7ZN4T&|[[iJv0DJ!bo40q>;rLjkur~}L@ k s]~THR)쒚&/Gܮt,}%biGY+tXyz=tZf܍.%@O8_yez#S5i JD*:D"D*[󽖔$̃h0& :~ONCfLNط֡ZA;n &'lrR ϭ55j]\={3ϩ82Ǵ9hHrԆ;}'>7+:pd `C27_>`izWF0 %xqQX\ %>r1k|&oJ0dV-{HiU:AD* j7e o :jca #wY*5Wm$}/ 4~yT7!jaпhǒu >]1z}&9_곳1;JΔ(C&IVIl> (p0ĕ9LN[ug(Gc|*6Wwl㻹}WU״.=kE+q>->x![ MeBi\YUp~OLTt)gB|׆f{G͡[$_Otdj |qlWEXH$ӷ1snef,xzv5Ղj+-b 0 MKd>6YƮ@gXڼ9wiE/\. ~<|,npP|t` F&bx939wx<:EZ+}/gH]kl^.'F~co(]Ej,z!#S\$ׯ3(4YsǼ#*lf`P#t.C>>?Rj~ L+*i`>w2&>ϒ1Ie\dɿ@sn,Fby #zAF hGXDcQU(8X誩6r>34$!L%w!EI5Vch]=|V."~iyFԗVmeק3rbfN_Ky}@$o,,QZ)GmMIMeӆH8Qg~2ΜDi6I0_0b`I#(GPp+#ʗ] mj,, CE--%l7 ~Iϒ(BO6J/v~YWgJup\ۅ]a#CX[^3[bSx hi9S8#/}7q<:8z|)8{4l7[@mջ+Hl~[h?Np 1e> 1KBvwKDuI_7MI A=7Z$2u䕓,gZEqnSFT"d c?tqO2ҽޙֈھbrx;>mMһ\uM AMMi :\l8.M- {` c%R=<ӅyRHb O q4d2A l:i,A5ZK5izuroux\_}J8FuxsB:o *[Cb{~2XQX+y~9vc: 3[3sqLڡ [Gt^lh|StBMV\'P}tO4IW&yMXl _I)0X/X,]ټ/٦(0Q57rx|=yr^ez n2=}Zxfg,'7 ϨVK4^3.Dpڑ]d#lfL˞y6{_l I)fYbzRĿ5ʉblgh%{u.>s,x_wEpFf3{B ./~F<Qi{JMQ(ڨ[C?fdA=J(UB9 Tޙ^hZS;r䗂 i(3fDr[־3_YsGhv'^Ǒ:a^(]$_8BEWKLQzϖQnJeK= HΥbbD +(Uu呑=y 1')xVzp 7@#n\jO/ r|yi݌x|=IJVo,Ih41Hn>!bmxuGyJiO+jݼ~)BEp~kZV6!?ac^[ɹY˄]c_bwDH||ڗdP4#n$3RSr3=:73Cwz=T|}stK6GcG (U$Y1gtOKul%{oꊼ1u-|US"O+X\^穁tLK>ڢ>؊^bQ՛1CXⲬ{seӛVoH$  32/z ,i~t3ۦ@PS\.|fdZ_ m}O L)}{7oKȌ2Rx©vDr\ţ7%Etʃ[㗎v310 gM7u2֚Z2Y$[hY̶mWB BW5'wk!9N fwX~-Lɘ #YP^CYڱ!_dO/х J\@nGtKZ7Ԃ3ڽJGg;ssʧ&ɸuVM:P sSt6yZQi z(HXe,Bi>Ti!EZrP!S|~v-׆Kns`Jh@չqy<]8&b?b^i񯫟Dg^Jɲ-N'\%X DustRacing2D-2.0.5/dustrac.pro000066400000000000000000000002551360473665400161560ustar00rootroot00000000000000# Top-level Qt project file TEMPLATE = subdirs SUBDIRS += src/editor src/game data.path = $$OUT_PWD/ data.files = data AUTHORS CHANGELOG COPYING README INSTALLS += data DustRacing2D-2.0.5/packaging/000077500000000000000000000000001360473665400157115ustar00rootroot00000000000000DustRacing2D-2.0.5/packaging/README000066400000000000000000000001301360473665400165630ustar00rootroot00000000000000README ====== windows : Packaging script for NSIS. -- Jussi Lind DustRacing2D-2.0.5/packaging/windows/000077500000000000000000000000001360473665400174035ustar00rootroot00000000000000DustRacing2D-2.0.5/packaging/windows/dustrac.nsi000066400000000000000000000133201360473665400215620ustar00rootroot00000000000000; Script for NSIS packaging. !include MUI2.nsh !include LogicLib.nsh !define PRODUCTNAME "Dust Racing 2D" !define APPNAME-GAME "Dust Racing 2D" !define APPNAME-EDITOR "Dust Racing 2D Level Editor" !define COMPANYNAME "Jussi Lind" !define DESCRIPTION "A traditional top-down racing game." !define VERSIONMAJOR 2 !define VERSIONMINOR 0 !define VERSIONBUILD 5 !define HELPURL "http://juzzlin.github.io/DustRacing2D/" !define UPDATEURL "https://github.com/juzzlin/DustRacing2D/releases" !define ABOUTURL "http://juzzlin.github.io/DustRacing2D/" ;!define MUI_FILE "" !define MUI_BRANDINGTEXT "Dust Racing 2D" ;!define MUI_HEADERIMAGE ;!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange.bmp" !define MUI_ICON "data\icons\DustRacing.ico" !define MUI_UNICON "data\icons\DustRacing.ico" !define MUI_SPECIALBITMAP "data\icons\DustRacing.ico" !define MUI_WELCOMEPAGE !define MUI_LICENSEPAGE !define MUI_DIRECTORYPAGE !define MUI_ABORTWARNING !define MUI_UNINSTALLER !define MUI_UNCONFIRMPAGE !define MUI_FINISHPAGE CRCCheck On RequestExecutionLevel admin InstallDir "$PROGRAMFILES\${PRODUCTNAME}" Name "${PRODUCTNAME}" Icon "data\icons\DustRacing.ico" OutFile "dustracing2d-${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}-windows-x86-qt5_setup.exe" !insertmacro MUI_LANGUAGE "English" LicenseData "COPYING" Page license Page directory Page instfiles !macro VerifyUserIsAdmin UserInfo::GetAccountType pop $0 ${If} $0 != "admin" ;Require admin rights on NT4+ messageBox mb_iconstop "Administrator rights required!" setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED quit ${EndIf} !macroend Function .onInit SetShellVarContext all !insertmacro VerifyUserIsAdmin FunctionEnd Section "install" SetOutPath $INSTDIR File dustrac-game.exe File dustrac-editor.exe File /r data File CHANGELOG File COPYING File AUTHORS File README.md WriteUninstaller "$INSTDIR\uninstall.exe" CreateDirectory "$SMPROGRAMS\${PRODUCTNAME}" CreateShortCut "$SMPROGRAMS\${PRODUCTNAME}\${APPNAME-GAME}.lnk" \ "$INSTDIR\dustrac-game.exe" "" "$INSTDIR\data\icons\DustRacing.ico" CreateShortCut "$SMPROGRAMS\${PRODUCTNAME}\${APPNAME-EDITOR}.lnk" \ "$INSTDIR\dustrac-editor.exe" "" "$INSTDIR\data\icons\DustRacingEditor.ico" CreateShortCut "$SMPROGRAMS\${PRODUCTNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "" CreateShortCut "$DESKTOP\${APPNAME-GAME}.lnk" "$INSTDIR\dustrac-game.exe" "" "$INSTDIR\data\icons\DustRacing.ico" CreateShortCut "$DESKTOP\${APPNAME-EDITOR}.lnk" "$INSTDIR\dustrac-editor.exe" "" "$INSTDIR\data\icons\DustRacingEditor.ico" # Registry information for add/remove programs WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "DisplayName" "${PRODUCTNAME} - ${DESCRIPTION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "DisplayIcon" "$\"$INSTDIR\logo.ico$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "Publisher" "$\"${COMPANYNAME}$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "HelpLink" "$\"${HELPURL}$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "URLUpdateInfo" "$\"${UPDATEURL}$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "DisplayVersion" "$\"${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "VersionMajor" ${VERSIONMAJOR} WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} \ ${PRODUCTNAME}" "VersionMinor" ${VERSIONMINOR} # There is no option for modifying or repairing the install WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${PRODUCTNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${PRODUCTNAME}" "NoRepair" 1 SectionEnd # Uninstaller Function un.onInit SetShellVarContext all #Verify the uninstaller - last chance to back out MessageBox MB_OKCANCEL "Permanently remove ${PRODUCTNAME}?" IDOK next Abort next: !insertmacro VerifyUserIsAdmin FunctionEnd Section "uninstall" RmDir /r "$SMPROGRAMS\${PRODUCTNAME}" Delete "$DESKTOP\${APPNAME-GAME}.lnk" Delete "$DESKTOP\${APPNAME-EDITOR}.lnk" Delete $INSTDIR\dustrac-game.exe Delete $INSTDIR\dustrac-editor.exe RmDir /r $INSTDIR\data Delete $INSTDIR\CHANGELOG Delete $INSTDIR\COPYING Delete $INSTDIR\AUTHORS Delete $INSTDIR\README.md Delete $INSTDIR\uninstall.exe RmDir $INSTDIR DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${PRODUCTNAME}" SectionEnd DustRacing2D-2.0.5/scripts/000077500000000000000000000000001360473665400154545ustar00rootroot00000000000000DustRacing2D-2.0.5/scripts/apply-clang-format000077500000000000000000000003551360473665400211020ustar00rootroot00000000000000#!/bin/bash CLANG_FORMAT=clang-format FILES=$(find src/editor src/game src/common -name *hpp -or -name *cpp -or -name *hh -or -name *cc -or -name *h | grep -v moc_ | grep -v qrc_) ${CLANG_FORMAT} -i -style=file ${FILES} echo "Done." DustRacing2D-2.0.5/scripts/build-windows-installer000077500000000000000000000010061360473665400221610ustar00rootroot00000000000000#!/bin/bash # Builds NSIS installer for Windows in Docker DUSTRAC_RELEASE_VERSION=2.0.5 CMD="export LANG=en_US.UTF-8 && \ export LC_ALL=en_US.UTF-8 && \ export PATH='$PATH':/mxe/usr/bin && \ cd /dr2d && DUSTRAC_RELEASE_VERSION=${DUSTRAC_RELEASE_VERSION} ./scripts/mxe-windows-build" if [ -f /.dockerenv ]; then echo "Script inside Docker" bash -c "${CMD}" else echo "Script outside Docker" docker run --privileged -t -v $(pwd):/dr2d juzzlin/mxe-qt5-18.04:latest bash -c "${CMD}" fi DustRacing2D-2.0.5/scripts/generic-linux-build-qt5000077500000000000000000000036071360473665400217650ustar00rootroot00000000000000#!/bin/bash # Assumes, that you have installed (static) qt5 to ~/qt5. QT5_QMAKE=~/qt5/bin/qmake if ! which $QT5_QMAKE; then echo "$QT5_QMAKE not found." exit 1 fi TAR=tar if ! which $TAR; then echo "$TAR not found." exit 1 fi LRELEASE=lrelease if ! which $LRELEASE; then echo "$LRELEASE not found." exit 1 fi NUM_CPUS=$(cat /proc/cpuinfo | grep processor | wc -l) # Package naming NAME=dustrac VERSION=${DUSTRAC_RELEASE_VERSION?"DUSTRAC_RELEASE_VERSION_NOT_SET"} ARCH=linux-x86_64 QT=qt5 # Build $QT5_QMAKE && make -j$NUM_CPUS || exit 1 # Update translations $LRELEASE ./src/game/game.pro && $LRELEASE ./src/editor/editor.pro || exit 1 # Install to packaging dir PACKAGE_PATH=$NAME-$VERSION-$ARCH-$QT rm -rf $PACKAGE_PATH mkdir $PACKAGE_PATH mkdir -p data/translations cp -v ./src/game/translations/*.qm data/translations && cp -v ./src/editor/translations/*.qm data/translations && cp -v ./src/game/dustrac-game $PACKAGE_PATH && cp -v ./src/editor/dustrac-editor $PACKAGE_PATH && cp -rv data $PACKAGE_PATH || exit 1 TEXT_FILES="AUTHORS CHANGELOG COPYING README.md" cp -v $TEXT_FILES $PACKAGE_PATH || exit 1 # Copy some needed dependecies DEPS="ogg vorbis openal" for lib in $DEPS; do cp -v $(ldd $PACKAGE_PATH/dustrac-game | grep $lib | awk '{print $3}') $PACKAGE_PATH done # Create start script for the game cp $PACKAGE_PATH/dustrac-game $PACKAGE_PATH/g.bin SCRIPT=$PACKAGE_PATH/dustrac-game echo "#!/bin/sh" > $SCRIPT echo "LD_LIBRARY_PATH=. ./g.bin" >> $SCRIPT chmod 755 $SCRIPT # Create start script for the editor cp $PACKAGE_PATH/dustrac-editor $PACKAGE_PATH/e.bin SCRIPT=$PACKAGE_PATH/dustrac-editor echo "#!/bin/sh" > $SCRIPT echo "LD_LIBRARY_PATH=. ./e.bin" >> $SCRIPT chmod 755 $SCRIPT # Create tgz archive TGZ_ARCHIVE=$PACKAGE_PATH.tar.gz rm -f $TGZ_ARCHIVE $TAR czvf $TGZ_ARCHIVE $PACKAGE_PATH ls -ltr echo "Done." DustRacing2D-2.0.5/scripts/mxe-env000077500000000000000000000002331360473665400167570ustar00rootroot00000000000000# source this script export MXE_PATH=/opt/mxe/ export PATH=${MXE_PATH}/usr/bin:$PATH export PKG_CONFIG_PATH=${MXE_PATH}/usr/i686-pc-mingw32/lib/pkgconfig DustRacing2D-2.0.5/scripts/mxe-windows-build000077500000000000000000000042561360473665400207670ustar00rootroot00000000000000#!/bin/bash # Assumes, that you have built and installed qt5, openal and vorbis via MXE. ZIP=zip if ! which ${ZIP}; then echo "${ZIP} not found." exit 1 fi UNIX2DOS=unix2dos if ! which ${UNIX2DOS}; then echo "${UNIX2DOS} not found." exit 1 fi QMAKE=/mxe/usr/i686-w64-mingw32.static/qt5/bin/qmake if ! which ${QMAKE}; then echo "${QMAKE} not found." exit 1 fi MAKENSIS=/mxe/usr/bin/i686-w64-mingw32.static-makensis if ! which ${MAKENSIS}; then echo "${MAKENSIS} not found." exit 1 fi LRELEASE=/mxe/usr/i686-w64-mingw32.static/qt5/bin/lrelease if ! which ${LRELEASE}; then echo "${LRELEASE} not found." exit 1 fi NUM_CPUS=$(cat /proc/cpuinfo | grep processor | wc -l) # Package naming NAME=dustracing2d VERSION=${DUSTRAC_RELEASE_VERSION} if [[ -z ${VERSION} ]]; then echo "DUSTRAC_RELEASE_VERSION not set." exit 1 fi ARCH=windows-x86 # Build PROJECT_DIR=. if [[ $1 ]]; then PROJECT_DIR=$1 echo "Project dir: ${PROJECT_DIR}" fi ${QMAKE} ${PROJECT_DIR} && make clean && make -j${NUM_CPUS} || exit 1 # Update translations ${LRELEASE} ${PROJECT_DIR}/src/game/game.pro && ${LRELEASE} ${PROJECT_DIR}/src/editor/editor.pro || exit 1 # Install to packaging dir PACKAGE_PATH=${NAME}-${VERSION}-${ARCH} rm -rf ${PACKAGE_PATH} mkdir ${PACKAGE_PATH} mkdir -p data/translations && cp -v ${PROJECT_DIR}/src/game/translations/*.qm data/translations && cp -v ${PROJECT_DIR}/src/editor/translations/*.qm data/translations && # These are output files cp -v src/game/release/dustrac-game.exe ${PACKAGE_PATH} && cp -v src/editor/release/dustrac-editor.exe ${PACKAGE_PATH} && cp -rv ${PROJECT_DIR}/data ${PACKAGE_PATH} || exit 1 TEXT_FILES="AUTHORS CHANGELOG COPYING README.md" for i in ${TEXT_FILES}; do cp -v ${PROJECT_DIR}/$i ${PACKAGE_PATH} || exit 1 done cd ${PACKAGE_PATH} ${UNIX2DOS} ${TEXT_FILES} cd .. # Create zip archive ZIP_ARCHIVE=${NAME}-${VERSION}-${ARCH}.zip rm -f ${ZIP_ARCHIVE} $ZIP -rv ${ZIP_ARCHIVE} ${PACKAGE_PATH} # Create NSIS installer cp ${PROJECT_DIR}/packaging/windows/dustrac.nsi ${PACKAGE_PATH} && cd ${PACKAGE_PATH} && ${MAKENSIS} dustrac.nsi || exit 1 cd .. && mv ${PACKAGE_PATH}/*setup.exe . || exit 1 ls -ltr echo "Done." DustRacing2D-2.0.5/scripts/qt5-static-configure000077500000000000000000000012331360473665400213560ustar00rootroot00000000000000#!/bin/bash # # This for configuring static build of Qt5 itself, not the game. # PREFIX='/home/juzzlin/qt5' ./configure \ -opensource \ -confirm-license \ -force-pkg-config \ -fontconfig \ -release \ -static \ -prefix $PREFIX \ -no-icu \ -opengl desktop \ -no-glib \ -accessibility \ -nomake examples \ -nomake tests \ -qt-zlib \ -qt-libpng \ -qt-libjpeg \ -qt-sql-sqlite \ -qt-xcb \ -qt-pcre \ -pulseaudio \ -v DustRacing2D-2.0.5/scripts/update-license000077500000000000000000000040741360473665400203110ustar00rootroot00000000000000#!/usr/bin/python # This file is part of Dust Racing (DustRAC). # Copyright (C) 2011 Jussi Lind # # DustRAC 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. # DustRAC 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 DustRAC. If not, see . # # Usage: # # This script replaces the license plate of the given file(s) with # the given new license plate. license lines MUST begin with "//". # # e.g. python license.py gpl_header.txt `find . -name "*.hh"` import sys def main(argv): if len(argv) < 3: print("Usage: python license.py [licenseHeaderFile] [sourceFiles]") return 1 # Read the new license fName = argv[1] print("Opening " + fName + " for read..") f = open(fName, 'r') licenseLines = f.readlines() f.close() for j in xrange(2, len(argv)): fName = argv[j] # Read the original file print("Opening " + fName + " for read..") f = open(fName, 'r') origLines = f.readlines() f.close() # Skip the current license plate headerSkip = True newLines = [] for i in origLines: if (i.find('//') == 0 or i.find('\n') == 0) and headerSkip: pass else: headerSkip = False newLines.append(i) # Add the new license newLines = licenseLines + newLines # Modify the source file print("Opening " + fName + " for write..") f = open(fName, 'w') f.writelines(newLines) f.close() print("Done.") return 0 if __name__ == '__main__': main(sys.argv) DustRacing2D-2.0.5/scripts/update-ppa000077500000000000000000000006431360473665400174450ustar00rootroot00000000000000VERSION=${DUSTRAC_RELEASE_VERSION?"is not set."} # $VERSION-1 for xenial # $VERSION-2 for artful DEBIAN_VERSION=$VERSION-1 rm -rf *${VERSION}* cp ../DustRacing2D/dustrac-$VERSION.tar.gz . tar xzvf dustrac-$VERSION.tar.gz mv dustrac-$VERSION dustrac-$DEBIAN_VERSION cd dustrac-$DEBIAN_VERSION cp -rv packaging/debian . debuild -S -sa && cd .. && dput ppa:jussi-lind/dustrac "dustrac_${DEBIAN_VERSION}_source.changes" DustRacing2D-2.0.5/scripts/update-translation-files000077500000000000000000000005261360473665400223230ustar00rootroot00000000000000#!/bin/bash LUPDATE=lupdate if ! which ${LUPDATE}; then echo "${LUPDATE} not found." exit 1 fi for LANG in cs de fi fr it; do ${LUPDATE} src/game/*.cpp src/game/menu/*.cpp -ts src/game/translations/dustrac-game_${LANG}.ts ${LUPDATE} src/editor/*.cpp -ts src/editor/translations/dustrac-editor_${LANG}.ts done echo "Done." DustRacing2D-2.0.5/scripts/update-version000077500000000000000000000022421360473665400203470ustar00rootroot00000000000000#!/bin/bash # Updates Heimer version in all build and packaging scripts. # Must be run in the project root. VERSION_MAJOR=$1 VERSION_MINOR=$2 VERSION_PATCH=$3 if [[ ! $1 || ! $2 || ! $3 ]]; then echo "Usage: $0 VERSION_MAJOR VERSION_MINOR VERSION_PATCH" exit 1 fi FILE=CMakeLists.txt echo "Updating ${FILE} .." sed -i "s/^set(VERSION_MAJOR.*/set(VERSION_MAJOR ${VERSION_MAJOR})/" ${FILE} || exit 1 sed -i "s/^set(VERSION_MINOR.*/set(VERSION_MINOR ${VERSION_MINOR})/" ${FILE} || exit 1 sed -i "s/^set(VERSION_PATCH.*/set(VERSION_PATCH ${VERSION_PATCH})/" ${FILE} || exit 1 FILE=packaging/windows/dustrac.nsi echo "Updating ${FILE} .." sed -i "s/^!define VERSIONMAJOR.*/!define VERSIONMAJOR ${VERSION_MAJOR}/" ${FILE} || exit 1 sed -i "s/^!define VERSIONMINOR.*/!define VERSIONMINOR ${VERSION_MINOR}/" ${FILE} || exit 1 sed -i "s/^!define VERSIONBUILD.*/!define VERSIONBUILD ${VERSION_PATCH}/" ${FILE} || exit 1 for FILE in src/editor/editor.pro src/game/game.pro scripts/build-windows-installer; do echo "Updating ${FILE} .." sed -i -E "s/[0-9]+\.[0-9]+\.[0-9]+/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH/" ${FILE} || exit 1 done git diff echo "Done." DustRacing2D-2.0.5/src/000077500000000000000000000000001360473665400145545ustar00rootroot00000000000000DustRacing2D-2.0.5/src/common/000077500000000000000000000000001360473665400160445ustar00rootroot00000000000000DustRacing2D-2.0.5/src/common/README000066400000000000000000000000771360473665400167300ustar00rootroot00000000000000These are common files shared between the editor and the game. DustRacing2D-2.0.5/src/common/config.hpp000066400000000000000000000050571360473665400200310ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include #include //! Config variables for editor and for the game. namespace Config { namespace General { //! The base data path given by -DDATA_PATH. static constexpr auto dataPath = DATA_PATH; static constexpr auto COPYRIGHT = "Copyright (c) 2011-2019 Jussi Lind"; //! "Company" name used in QSettings. static constexpr auto QSETTINGS_COMPANY_NAME = "dustrac"; //! Path used to search "3rd party" race tracks under the home dir: ~/TRACK_SEARCH_PATH/ static constexpr auto TRACK_SEARCH_PATH = "DustRacingTracks"; static constexpr auto WEB_SITE_URL = "http://juzzlin.github.io/DustRacing2D"; namespace Unix { //! Path used to search "3rd party" race tracks under `$XDG_DATA_HOME/TRACK_SEARCH_PATH_XDG` or //! $HOME/.local/share/TRACK_SEARCH_PATH_XDG` if `$XDG_DATA_HOME` is not defined. static constexpr auto TRACK_SEARCH_PATH_XDG = "DustRacing2D/tracks"; inline QString getXdgTrackSearchPath() { const auto env = QProcessEnvironment::systemEnvironment(); const auto xdgDataHome = "XDG_DATA_HOME"; return env.value(xdgDataHome, QDir::homePath() + "/.local/share") + "/" + TRACK_SEARCH_PATH_XDG; } } // namespace Unix } // namespace General namespace Editor { static constexpr auto EDITOR_NAME = "Dust Racing 2D Track Editor"; static constexpr auto EDITOR_VERSION = VERSION; static constexpr auto MODEL_CONFIG_FILE_NAME = "editorModels.conf"; static constexpr auto QSETTINGS_SOFTWARE_NAME = "Editor"; static constexpr auto SELECT_ICON_PATH = ":/cursor.png"; static constexpr auto ERASE_ICON_PATH = ":/cross.png"; static constexpr auto CLEAR_ICON_PATH = ":/clear.png"; } // namespace Editor namespace Game { static constexpr auto GAME_NAME = "Dust Racing 2D"; static constexpr auto GAME_VERSION = VERSION; static constexpr auto QSETTINGS_SOFTWARE_NAME = "Game"; } // namespace Game } // namespace Config DustRacing2D-2.0.5/src/common/datakeywords.hpp000066400000000000000000000041331360473665400212570ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2019 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef DATAKEYWORDS_HPP #define DATAKEYWORDS_HPP /** Keywords used in the track data files. */ namespace DataKeywords { namespace Header { static constexpr auto version = "version"; static constexpr auto track = "track"; static constexpr auto name = "name"; static constexpr auto cols = "cols"; static constexpr auto rows = "rows"; static constexpr auto index = "index"; static constexpr auto user = "isUserTrack"; } // namespace Header namespace Track { static constexpr auto node = "n"; static constexpr auto tile = "t"; static constexpr auto object = "o"; } // namespace Track namespace Node { static constexpr auto index = "i"; static constexpr auto x = "x"; static constexpr auto y = "y"; static constexpr auto width = "w"; static constexpr auto height = "h"; } // namespace Node namespace Tile { static constexpr auto type = "t"; static constexpr auto i = "i"; static constexpr auto j = "j"; static constexpr auto orientation = "o"; static constexpr auto computerHint = "c"; static constexpr auto excludeFromMinimap = "e"; } // namespace Tile namespace Object { static constexpr auto role = "r"; static constexpr auto category = "c"; static constexpr auto x = "x"; static constexpr auto y = "y"; static constexpr auto orientation = "o"; static constexpr auto forceStationary = "fs"; } // namespace Object } // namespace DataKeywords #endif // DATAKEYWORDS_HPP DustRacing2D-2.0.5/src/common/mapbase.cpp000066400000000000000000000054041360473665400201630ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "mapbase.hpp" #include "tracktilebase.hpp" #include #include MapBase::MapBase(size_t cols, size_t rows) : m_cols(cols) , m_rows(rows) , m_map(rows, TrackTileRow(m_cols, nullptr)) { } size_t MapBase::cols() const { return m_cols; } size_t MapBase::rows() const { return m_rows; } void MapBase::resize(size_t newCols, size_t newRows) { for (size_t row = 0; row < m_map.size(); row++) { if (newCols > m_map[row].size()) { m_map[row].resize(newCols, nullptr); } } if (newRows > m_rows) { m_map.resize(newRows, TrackTileRow(newCols, nullptr)); } m_cols = newCols; m_rows = newRows; } bool MapBase::setTile(size_t x, size_t y, TrackTileBasePtr tile) { if (x >= m_cols || y >= m_rows) return false; m_map[y][x] = tile; return true; } TrackTileBasePtr MapBase::getTile(size_t x, size_t y) const { if (x >= m_cols || y >= m_rows) return nullptr; return m_map[y][x]; } size_t MapBase::insertColumn(size_t at, MapBase::InsertDirection insertDirection) { at = at + (insertDirection == MapBase::InsertDirection::Before ? 0 : 1); for (auto & row : m_map) { row.insert(row.begin() + at, nullptr); } m_cols++; return at; } std::vector MapBase::deleteColumn(size_t at) { std::vector deleted; for (auto & row : m_map) { deleted.push_back(*(row.begin() + at)); row.erase(row.begin() + at); } m_cols--; return deleted; } size_t MapBase::insertRow(size_t at, MapBase::InsertDirection insertDirection) { at = at + (insertDirection == MapBase::InsertDirection::Before ? 0 : 1); m_map.insert(m_map.begin() + at, TrackTileRow(m_cols, nullptr)); m_rows++; return at; } std::vector MapBase::deleteRow(size_t at) { std::vector deleted = *(m_map.begin() + at); m_map.erase(m_map.begin() + at); m_rows--; return deleted; } MapBase::~MapBase() { } DustRacing2D-2.0.5/src/common/mapbase.hpp000066400000000000000000000045121360473665400201670ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MAPBASE_HPP #define MAPBASE_HPP #include "tracktilebase.hpp" #include //! Base class for the tile matrix used by TrackData. class MapBase { public: //! Constructor. MapBase(size_t cols, size_t rows); MapBase(const MapBase & other) = delete; MapBase & operator=(const MapBase & other) = delete; enum class InsertDirection { Before, After }; //! Destructor. virtual ~MapBase(); //! Get column count size_t cols() const; //! Get row count size_t rows() const; //! Resize the map. virtual void resize(size_t newCols, size_t newRows); /*! Set given tile to given coordinates. * Returns false if impossible coordinates. */ bool setTile(size_t x, size_t y, TrackTileBasePtr tile); /*! Get tile at given coordinates. * Returns nullptr if no tile set or impossible coordinates. */ TrackTileBasePtr getTile(size_t x, size_t y) const; //! Insert column after given index. virtual size_t insertColumn(size_t at, InsertDirection insertDirection); //! Delete column at given index. Return deleted tiles. virtual std::vector deleteColumn(size_t at); //! Insert row after given index. virtual size_t insertRow(size_t at, InsertDirection insertDirection); //! Delete row at given index. Return deleted tiles. virtual std::vector deleteRow(size_t at); private: size_t m_cols, m_rows; typedef std::vector TrackTileRow; typedef std::vector TrackTileMap; TrackTileMap m_map; }; #endif // MAPBASE_HPP DustRacing2D-2.0.5/src/common/objectbase.cpp000066400000000000000000000025501360473665400206530ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "objectbase.hpp" ObjectBase::ObjectBase(QString category, QString role) : m_category(category) , m_role(role) , m_forceStationary(false) { } ObjectBase::~ObjectBase() { } QPointF ObjectBase::location() const { return m_location; } void ObjectBase::setLocation(QPointF newLocation) { m_location = newLocation; } QString ObjectBase::category() const { return m_category; } QString ObjectBase::role() const { return m_role; } bool ObjectBase::forceStationary() const { return m_forceStationary; } void ObjectBase::setForceStationary(bool forceStationary) { m_forceStationary = forceStationary; } DustRacing2D-2.0.5/src/common/objectbase.hpp000066400000000000000000000034031360473665400206560ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef OBJECTBASE_HPP #define OBJECTBASE_HPP #include #include #include //! Base class for freely placeable objects in the editor. class ObjectBase { public: //! Constructor. ObjectBase(QString category, QString role); ObjectBase(ObjectBase & other) = delete; ObjectBase & operator=(ObjectBase & other) = delete; //! Destructor. virtual ~ObjectBase(); //! Get location in world / scene. virtual QPointF location() const; //! Set coordinates in the world. virtual void setLocation(QPointF newLocation); //! Get category. QString category() const; //! Get role. QString role() const; bool forceStationary() const; void setForceStationary(bool forceStationary); private: //! Category of this object. QString m_category; //! Role of this object. QString m_role; //! Coordinates in the world. QPointF m_location; bool m_forceStationary; }; using ObjectBasePtr = std::shared_ptr; #endif // OBJECTBASE_HPP DustRacing2D-2.0.5/src/common/objects.cpp000066400000000000000000000034001360473665400201760ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "objects.hpp" #include Objects::Objects() { } void Objects::add(ObjectBasePtr object) { auto i = std::find(m_objects.begin(), m_objects.end(), object); if (i == m_objects.end()) { m_objects.push_back(object); } } void Objects::remove(ObjectBase & object) { for (auto i = m_objects.begin(); i != m_objects.end(); i++) { if ((*i).get() == &object) { m_objects.erase(i); return; } } } void Objects::clear() { m_objects.clear(); } size_t Objects::count() const { return m_objects.size(); } ObjectBasePtr Objects::object(size_t index) const { return m_objects.at(index); } Objects::ObjectVector::iterator Objects::begin() { return m_objects.begin(); } Objects::ObjectVector::iterator Objects::end() { return m_objects.end(); } Objects::ObjectVector::const_iterator Objects::cbegin() const { return m_objects.cbegin(); } Objects::ObjectVector::const_iterator Objects::cend() const { return m_objects.cend(); } DustRacing2D-2.0.5/src/common/objects.hpp000066400000000000000000000031451360473665400202110ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef OBJECTS_HPP #define OBJECTS_HPP #include "objectbase.hpp" #include #include //! Container for all objects. class Objects { public: typedef std::vector ObjectVector; //! Constructor. Objects(); Objects(const Objects & other) = delete; Objects & operator=(const Objects & other) = delete; //! Add an object. void add(ObjectBasePtr object); //! Remove an object. void remove(ObjectBase & object); //! Clear the container. void clear(); //! Return object count. size_t count() const; //! Return given object. ObjectBasePtr object(size_t index) const; ObjectVector::iterator begin(); ObjectVector::iterator end(); ObjectVector::const_iterator cbegin() const; ObjectVector::const_iterator cend() const; private: ObjectVector m_objects; }; #endif // OBJECTS_HPP DustRacing2D-2.0.5/src/common/route.cpp000066400000000000000000000060731360473665400177140ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "route.hpp" #include "targetnodebase.hpp" #include #include #include Route::Route() { } void Route::clear() { m_route.clear(); } bool Route::push(TargetNodeBasePtr node) { node->setIndex(static_cast(m_route.size())); m_route.push_back(node); return isClosed(); } bool Route::isClosed() const { if (m_route.size() > 1) { const auto dx = std::abs(m_route[0]->location().x() - m_route.back()->location().x()); const auto dy = std::abs(m_route[0]->location().y() - m_route.back()->location().y()); const auto closingThreshold = 32; return dx < closingThreshold && dy < closingThreshold; } return false; } size_t Route::numNodes() const { return static_cast(m_route.size()); } TargetNodeBasePtr Route::get(size_t index) const { assert(index < numNodes()); return m_route[index]; } void Route::getAll(RouteVector & routeVector) const { routeVector = m_route; } void Route::buildFromVector(RouteVector & routeVector) { clear(); std::sort(routeVector.begin(), routeVector.end(), [](const auto lhs, const auto rhs) { return lhs->index() < rhs->index(); }); for (auto && node : routeVector) { if (node && node->index() >= 0) { push(node); } } } double Route::geometricLength() const { double result = 0; if (m_route.size() > 1) { for (size_t i = 0; i < m_route.size() - 1; i++) { const auto dx = m_route[i]->location().x() - m_route[i + 1]->location().x(); const auto dy = m_route[i]->location().y() - m_route[i + 1]->location().y(); result += std::sqrt(dx * dx + dy * dy); } const auto dx = m_route[m_route.size() - 1]->location().x() - m_route[0]->location().x(); const auto dy = m_route[m_route.size() - 1]->location().y() - m_route[0]->location().y(); result += std::sqrt(dx * dx + dy * dy); } return result; } Route::RouteVector::iterator Route::begin() { return m_route.begin(); } Route::RouteVector::iterator Route::end() { return m_route.end(); } Route::RouteVector::const_iterator Route::cbegin() const { return m_route.cbegin(); } Route::RouteVector::const_iterator Route::cend() const { return m_route.cend(); } DustRacing2D-2.0.5/src/common/route.hpp000066400000000000000000000040701360473665400177140ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef ROUTE_HPP #define ROUTE_HPP #include "targetnodebase.hpp" #include class TrackTileBase; class TargetNodeBase; //! Route is used to define the race route as a sequence //! of TrackTiles. class Route { public: //! Constructor. Route(); Route(const Route & other) = delete; Route & operator=(const Route & other) = delete; typedef std::vector RouteVector; //! Clear the current route. void clear(); //! Push new target to the route and return true //! if the route got closed. bool push(TargetNodeBasePtr target); //! Build route from an (unordered) vector of Targets. //! Will be sorted with respect to their indices. void buildFromVector(RouteVector & routeVector); //! Return number of target nodes. size_t numNodes() const; //! Return Target for the given index. TargetNodeBasePtr get(size_t index) const; //! Get all nodes. void getAll(RouteVector & routeVector) const; //! Return length based on target node locations. double geometricLength() const; RouteVector::iterator begin(); RouteVector::iterator end(); RouteVector::const_iterator cbegin() const; RouteVector::const_iterator cend() const; private: bool isClosed() const; std::vector m_route; }; #endif // ROUTE_HPP DustRacing2D-2.0.5/src/common/targetnodebase.cpp000066400000000000000000000032221360473665400215360ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "targetnodebase.hpp" #include "tracktilebase.hpp" TargetNodeBase::TargetNodeBase() : m_size(QSize(static_cast(TrackTileBase::height()), static_cast(TrackTileBase::width()))) , m_index(-1) { } void TargetNodeBase::setNext(TargetNodeBasePtr nextNode) { m_next = nextNode; } TargetNodeBasePtr TargetNodeBase::next() const { return m_next; } void TargetNodeBase::setPrev(TargetNodeBasePtr prevNode) { m_prev = prevNode; } TargetNodeBasePtr TargetNodeBase::prev() const { return m_prev; } QPointF TargetNodeBase::location() const { return m_location; } void TargetNodeBase::setLocation(QPointF newLocation) { m_location = newLocation; } int TargetNodeBase::index() const { return m_index; } void TargetNodeBase::setIndex(int index) { m_index = index; } void TargetNodeBase::setSize(QSizeF size) { m_size = size; } QSizeF TargetNodeBase::size() const { return m_size; } DustRacing2D-2.0.5/src/common/targetnodebase.hpp000066400000000000000000000041461360473665400215510ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TARGETNODEBASE_HPP #define TARGETNODEBASE_HPP #include #include #include #include //! Base class for freely placeable target nodes in the editor. class TargetNodeBase { public: typedef std::shared_ptr TargetNodeBasePtr; //! Constructor. TargetNodeBase(); TargetNodeBase(TargetNodeBase & other) = delete; TargetNodeBase(TargetNodeBase && other) = delete; TargetNodeBase & operator=(TargetNodeBase & other) = delete; //! Destructor. virtual ~TargetNodeBase() = default; //! Get location in world / scene. virtual QPointF location() const; //! Set coordinates in the world. virtual void setLocation(QPointF newLocation); virtual int index() const; virtual void setIndex(int index); virtual void setNext(TargetNodeBasePtr nextNnode); virtual TargetNodeBasePtr next() const; virtual void setPrev(TargetNodeBasePtr prevNode); virtual TargetNodeBasePtr prev() const; virtual void setSize(QSizeF size); virtual QSizeF size() const; private: //! Coordinates in the world. QPointF m_location; //! Original size in pixels. QSizeF m_size; //! Index in the route. int m_index; TargetNodeBasePtr m_next; TargetNodeBasePtr m_prev; }; using TargetNodeBasePtr = std::shared_ptr; #endif // TARGETNODEBASE_HPP DustRacing2D-2.0.5/src/common/trackdatabase.cpp000066400000000000000000000027631360473665400213510ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "trackdatabase.hpp" TrackDataBase::TrackDataBase(QString name, bool isUserTrack) : m_name(name) , m_index(999) , m_isUserTrack(isUserTrack) { } TrackDataBase::TrackDataBase(const TrackDataBase & other) : m_name(other.m_name) , m_index(other.m_index) , m_isUserTrack(other.m_isUserTrack) { } QString TrackDataBase::name() const { return m_name; } bool TrackDataBase::isUserTrack() const { return m_isUserTrack; } unsigned int TrackDataBase::index() const { return m_index; } void TrackDataBase::setName(QString name) { m_name = name; } void TrackDataBase::setUserTrack(bool isUserTrack) { m_isUserTrack = isUserTrack; } void TrackDataBase::setIndex(unsigned int index) { m_index = index; } TrackDataBase::~TrackDataBase() { } DustRacing2D-2.0.5/src/common/trackdatabase.hpp000066400000000000000000000044551360473665400213560ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TRACKDATABASE_HPP #define TRACKDATABASE_HPP #include class Objects; class Route; class MapBase; //! Common base class for track data shared by the editor and the game. class TrackDataBase { public: //! Constructor. TrackDataBase(QString name, bool isUserTrack); //! Copy constructor. TrackDataBase(const TrackDataBase & other); TrackDataBase & operator=(const TrackDataBase & other) = delete; //! Destructor. virtual ~TrackDataBase(); //! Get name. virtual QString name() const; //! Set name. virtual void setName(QString name); //! Get file name. virtual QString fileName() const = 0; //! Set file name. virtual void setFileName(QString fileName) = 0; //! Get lap index. virtual unsigned int index() const; //! Set track index. virtual void setIndex(unsigned int index); //! Get if the track is user track (unlocked by default). virtual bool isUserTrack() const; //! Set user track option. virtual void setUserTrack(bool isUserTrack); //! Get map object. virtual MapBase & map() = 0; //! Get map object. virtual const MapBase & map() const = 0; //! Get route object. virtual Route & route() = 0; //! Get route object. virtual const Route & route() const = 0; //! Get objects object. virtual Objects & objects() = 0; //! Get objects object. virtual const Objects & objects() const = 0; private: QString m_name; unsigned int m_index; bool m_isUserTrack; }; // namespace DataKeywords #endif // TRACKDATABASE_HPP DustRacing2D-2.0.5/src/common/tracktilebase.cpp000066400000000000000000000040661360473665400213730ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "tracktilebase.hpp" TrackTileBase::TrackTileBase( QPointF location, QPoint matrixLocation, const QString & type) : m_tileType(type) , m_location(location) , m_matrixLocation(matrixLocation) , m_computerHint(TrackTileBase::ComputerHint::None) , m_excludeFromMinimap(false) { } QPointF TrackTileBase::location() const { return m_location; } void TrackTileBase::setLocation(QPointF location) { m_location = location; } QPoint TrackTileBase::matrixLocation() const { return m_matrixLocation; } void TrackTileBase::setMatrixLocation(QPoint matrixLocation) { m_matrixLocation = matrixLocation; } void TrackTileBase::setTileType(const QString & type) { if (type != m_tileType) { m_tileType = type; } } const QString & TrackTileBase::tileType() const { return m_tileType; } size_t TrackTileBase::width() { return 256; } size_t TrackTileBase::height() { return 256; } void TrackTileBase::setComputerHint(TrackTileBase::ComputerHint hint) { m_computerHint = hint; } TrackTileBase::ComputerHint TrackTileBase::computerHint() const { return m_computerHint; } void TrackTileBase::setExcludeFromMinimap(bool exclude) { m_excludeFromMinimap = exclude; } bool TrackTileBase::excludeFromMinimap() const { return m_excludeFromMinimap; } TrackTileBase::~TrackTileBase() { } DustRacing2D-2.0.5/src/common/tracktilebase.hpp000066400000000000000000000061661360473665400214030ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TRACKTILEBASE_HPP #define TRACKTILEBASE_HPP #include #include #include #include /*! Base class for track tiles used in the editor and in the game. * * This is not the most beautiful solution to share tile code between * the editor and the game because it requires us to downcast objects as * both have some incompatible additions to the base class. * * However, we can avoid dynamic_cast<>'s because we "know" what the * objects really are. */ class TrackTileBase { public: //! Hints for computer players. enum class ComputerHint { None = 0, BrakeHard, Brake }; /*! Constructor. * \param location Location (coordinates) in the track scene. * \param matrixLocation Location in the tile matrix. * \param type Type of the tile. See setType(). */ TrackTileBase(QPointF location, QPoint matrixLocation, const QString & type = "clear"); TrackTileBase(TrackTileBase & other) = delete; TrackTileBase & operator=(TrackTileBase & other) = delete; //! Destructor. virtual ~TrackTileBase(); //! Get location in world / scene. virtual QPointF location() const; virtual void setLocation(QPointF location); //! Get location in the tile matrix. virtual QPoint matrixLocation() const; virtual void setMatrixLocation(QPoint matrixLocation); //! Set type: "corner", "straight", "grass", "finish", "clear".. virtual void setTileType(const QString & type); //! Get type const QString & tileType() const; //! \return Tile width in pixels static size_t width(); //! \return Tile height in pixels static size_t height(); //! Set computer hint virtual void setComputerHint(ComputerHint hint); //! Get computer hint ComputerHint computerHint() const; /*! Don't show the tile in minimap / preview even if an asphalt tile. * (Some tracks might include asphalt tiles just for looks) */ void setExcludeFromMinimap(bool exclude); bool excludeFromMinimap() const; private: //! Type string. QString m_tileType; //! Location in the world / scene. QPointF m_location; //! Location in the tile matrix. QPoint m_matrixLocation; //! Computer hint ComputerHint m_computerHint; bool m_excludeFromMinimap; }; using TrackTileBasePtr = std::shared_ptr; #endif // TRACKTILEBASE_HPP DustRacing2D-2.0.5/src/common/userexception.hpp000066400000000000000000000017621360473665400214600ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2017 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef USEREXCEPTION_HPP #define USEREXCEPTION_HPP #include #include class UserException : public std::runtime_error { public: explicit UserException(std::string msg) : runtime_error(msg) { } }; #endif // USEREXCEPTION_HPP DustRacing2D-2.0.5/src/contrib/000077500000000000000000000000001360473665400162145ustar00rootroot00000000000000DustRacing2D-2.0.5/src/contrib/SimpleLogger/000077500000000000000000000000001360473665400206055ustar00rootroot00000000000000DustRacing2D-2.0.5/src/contrib/SimpleLogger/CMakeLists.txt000066400000000000000000000017501360473665400233500ustar00rootroot00000000000000project(SimpleLogger) cmake_minimum_required(VERSION 2.8.12) cmake_policy(VERSION 2.8.12) option(SIMPLE_LOGGER_BUILD_SHARED_LIB "Build a shared library" OFF) set(VERSION_MAJOR "1") set(VERSION_MINOR "1") set(VERSION_PATCH "0") set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") # Default to release C++ flags if CMAKE_BUILD_TYPE not set if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif() set(CMAKE_CXX_STANDARD 11) if(CMAKE_COMPILER_IS_GNUCXX OR MINGW OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic") # CMAKE_CXX_STANDARD supported only by versions >= 3.1 if (CMAKE_VERSION VERSION_LESS "3.1") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") endif () endif() set(LIBRARY_NAME "SimpleLogger") set(CMAKE_INCLUDE_CURRENT_DIR ON) add_subdirectory(src) DustRacing2D-2.0.5/src/contrib/SimpleLogger/src/000077500000000000000000000000001360473665400213745ustar00rootroot00000000000000DustRacing2D-2.0.5/src/contrib/SimpleLogger/src/CMakeLists.txt000066400000000000000000000012651360473665400241400ustar00rootroot00000000000000set(SRC simple_logger.cpp) set(HDR simple_logger.hpp) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) # This is the "object library" target: compiles the sources only once add_library(objlib OBJECT ${SRC}) # Shared libraries need PIC set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) if(${SIMPLE_LOGGER_SHARED_LIB}) add_library(${LIBRARY_NAME} SHARED $) else() add_library(${LIBRARY_NAME} STATIC $) endif() set_target_properties(${LIBRARY_NAME} PROPERTIES VERSION ${VERSION} SOVERSION ${VERSION_MAJOR}) set_target_properties(${LIBRARY_NAME} PROPERTIES PUBLIC_HEADER ${HDR}) DustRacing2D-2.0.5/src/contrib/SimpleLogger/src/simple_logger.cpp000066400000000000000000000147221360473665400247360ustar00rootroot00000000000000// MIT License // // Copyright (c) 2018 Jussi Lind // // https://github.com/juzzlin/SimpleLogger // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. #define _CRT_SECURE_NO_WARNINGS #include "simple_logger.hpp" #include #include #include #include #include #ifdef Q_OS_ANDROID #include #else #include #endif namespace juzzlin { class Logger::Impl { public: Impl(); ~Impl(); std::ostringstream & trace(); std::ostringstream & debug(); std::ostringstream & info(); std::ostringstream & warning(); std::ostringstream & error(); std::ostringstream & fatal(); static void enableEchoMode(bool enable); static void enableDateTime(bool enable); static void setLevelSymbol(Logger::Level level, std::string symbol); static void setLoggingLevel(Logger::Level level); static void init(std::string filename, bool append); void flush(); std::ostringstream & getStream(Logger::Level level); void prefixDateTime(); private: static bool m_echoMode; static bool m_dateTime; static Logger::Level m_level; static std::ofstream m_fout; using SymbolMap = std::map; static SymbolMap m_symbols; using StreamMap = std::map; static StreamMap m_streams; Logger::Level m_activeLevel = Logger::Level::Info; std::ostringstream m_oss; }; bool Logger::Impl::m_echoMode = true; bool Logger::Impl::m_dateTime = true; Logger::Level Logger::Impl::m_level = Logger::Level::Info; std::ofstream Logger::Impl::m_fout; // Default level symbols Logger::Impl::SymbolMap Logger::Impl::m_symbols = { {Logger::Level::Trace, "T:"}, {Logger::Level::Debug, "D:"}, {Logger::Level::Info, "I:"}, {Logger::Level::Warning, "W:"}, {Logger::Level::Error, "E:"}, {Logger::Level::Fatal, "F:"} }; // Default streams Logger::Impl::StreamMap Logger::Impl::m_streams = { {Logger::Level::Trace, &std::cout}, {Logger::Level::Debug, &std::cout}, {Logger::Level::Info, &std::cout}, {Logger::Level::Warning, &std::cerr}, {Logger::Level::Error, &std::cerr}, {Logger::Level::Fatal, &std::cerr} }; Logger::Impl::Impl() { } Logger::Impl::~Impl() { flush(); } void Logger::Impl::enableEchoMode(bool enable) { Impl::m_echoMode = enable; } void Logger::Impl::enableDateTime(bool enable) { Impl::m_dateTime = enable; } std::ostringstream & Logger::Impl::getStream(Logger::Level level) { m_activeLevel = level; Impl::prefixDateTime(); m_oss << Impl::m_symbols[level] << " "; return m_oss; } void Logger::Impl::setLevelSymbol(Level level, std::string symbol) { Impl::m_symbols[level] = symbol; } void Logger::Impl::setLoggingLevel(Logger::Level level) { Impl::m_level = level; } void Logger::Impl::prefixDateTime() { if (Impl::m_dateTime) { time_t rawTime; time(&rawTime); std::string timeStr(ctime(&rawTime)); timeStr.erase(timeStr.length() - 1); m_oss << "[" << timeStr << "] "; } } void Logger::Impl::flush() { if (m_activeLevel < m_level) { return; } if (!m_oss.str().size()) { return; } if (Impl::m_fout.is_open()) { Impl::m_fout << m_oss.str() << std::endl; Impl::m_fout.flush(); } if (Impl::m_echoMode) { #ifdef Q_OS_ANDROID qDebug() << m_oss.str().c_str(); #else auto stream = Impl::m_streams[m_activeLevel]; if (stream) { *stream << m_oss.str() << std::endl; stream->flush(); } #endif } } void Logger::Impl::init(std::string filename, bool append) { if (!filename.empty()) { Impl::m_fout.open(filename, append ? std::ofstream::out | std::ofstream::app : std::ofstream::out); if (!Impl::m_fout.is_open()) { throw std::runtime_error("ERROR!!: Couldn't open '" + filename + "' for write.\n"); } } } std::ostringstream & Logger::Impl::trace() { return getStream(Logger::Level::Trace); } std::ostringstream & Logger::Impl::debug() { return getStream(Logger::Level::Debug); } std::ostringstream & Logger::Impl::info() { return getStream(Logger::Level::Info); } std::ostringstream & Logger::Impl::warning() { return getStream(Logger::Level::Warning); } std::ostringstream & Logger::Impl::error() { return getStream(Logger::Level::Error); } std::ostringstream & Logger::Impl::fatal() { return getStream(Logger::Level::Fatal); } Logger::Logger() : m_impl(new Logger::Impl) { } void Logger::init(std::string filename, bool append) { Impl::init(filename, append); } void Logger::enableEchoMode(bool enable) { Impl::enableEchoMode(enable); } void Logger::enableDateTime(bool enable) { Impl::enableDateTime(enable); } void Logger::setLoggingLevel(Level level) { Impl::setLoggingLevel(level); } void Logger::setLevelSymbol(Level level, std::string symbol) { Impl::setLevelSymbol(level, symbol); } std::ostringstream & Logger::trace() { return m_impl->trace(); } std::ostringstream & Logger::debug() { return m_impl->debug(); } std::ostringstream & Logger::info() { return m_impl->info(); } std::ostringstream & Logger::warning() { return m_impl->warning(); } std::ostringstream & Logger::error() { return m_impl->error(); } std::ostringstream & Logger::fatal() { return m_impl->fatal(); } Logger::~Logger() = default; } // juzzlin DustRacing2D-2.0.5/src/contrib/SimpleLogger/src/simple_logger.hpp000066400000000000000000000064451360473665400247460ustar00rootroot00000000000000// MIT License // // Copyright (c) 2018 Jussi Lind // // https://github.com/juzzlin/SimpleLogger // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. #ifndef JUZZLIN_LOGGER_HPP #define JUZZLIN_LOGGER_HPP #include #include #include namespace juzzlin { /*! * Example initialization: * * using juzzlin::L; * * L::init("myLog.txt"); * * Example logging: * * L().info() << "Initialization finished."; * L().error() << "Foo happened!"; */ class Logger { public: enum class Level { Trace = 0, Debug, Info, Warning, Error, Fatal }; //! Constructor. Logger(); //! Destructor. ~Logger(); /*! Initialize the logger. * \param filename Log to filename. Disabled if empty. * \param append The existing log will be appended if true. * Throws on error. */ static void init(std::string filename, bool append = false); //! Enable/disable echo mode. //! \param enable Echo everything if true. Default is false. static void enableEchoMode(bool enable); //! Enable/disable date and time prefix. //! \param enable Prefix with date and time if true. Default is true. static void enableDateTime(bool enable); //! Set the logging level. //! \param level The minimum level. Default is Info. static void setLoggingLevel(Level level); //! Set custom symbol for the given logging level. //! \param level The level. //! \param symbol The symbol outputted for the messages of this level. static void setLevelSymbol(Level level, std::string symbol); //! Get stream to the trace log message. std::ostringstream & trace(); //! Get stream to the debug log message. std::ostringstream & debug(); //! Get stream to the info log message. std::ostringstream & info(); //! Get stream to the warning log message. std::ostringstream & warning(); //! Get stream to the error log message. std::ostringstream & error(); //! Get stream to the fatal log message. std::ostringstream & fatal(); private: Logger(const Logger & r) = delete; Logger & operator=(const Logger & r) = delete; class Impl; std::unique_ptr m_impl; }; using L = Logger; } // juzzlin #endif // JUZZLIN_LOGGER_HPP DustRacing2D-2.0.5/src/dustrac-editor.desktop.in000066400000000000000000000004651360473665400215120ustar00rootroot00000000000000[Desktop Entry] Name=Dust Racing 2D Level Editor GenericName=2D racing game level editor GenericName[de]=2D-Rennspiel-Level-Editor Comment=2D racing game level editor Comment[de]=2D-Rennspiel-Level-Editor Exec=dustrac-editor Icon=dustrac-editor Type=Application Categories=Game;SportsGame; StartupNotify=true DustRacing2D-2.0.5/src/dustrac-editor.desktop.opt.in000066400000000000000000000005021360473665400223030ustar00rootroot00000000000000[Desktop Entry] Name=Dust Racing 2D Level Editor GenericName=2D racing game level editor GenericName[de]=2D-Rennspiel-Level-Editor Comment=2D racing game level editor Comment[de]=2D-Rennspiel-Level-Editor Exec=/opt/dustrac/dustrac-editor Icon=dustrac-editor Type=Application Categories=Game;SportsGame; StartupNotify=true DustRacing2D-2.0.5/src/dustrac-game.desktop.in000066400000000000000000000004151360473665400211300ustar00rootroot00000000000000[Desktop Entry] Name=Dust Racing 2D GenericName=Top-down 2D racing game GenericName[de]=2D-Rennspiel in Vogelperspektive Comment=2D racing game Comment[de]=2D-Rennspiel Exec=dustrac-game Icon=dustrac-game Type=Application Categories=Game;SportsGame; StartupNotify=true DustRacing2D-2.0.5/src/dustrac-game.desktop.opt.in000066400000000000000000000004321360473665400217300ustar00rootroot00000000000000[Desktop Entry] Name=Dust Racing 2D GenericName=Top-down 2D racing game GenericName[de]=2D-Rennspiel in Vogelperspektive Comment=2D racing game Comment[de]=2D-Rennspiel Exec=/opt/dustrac/dustrac-game Icon=dustrac-game Type=Application Categories=Game;SportsGame; StartupNotify=true DustRacing2D-2.0.5/src/dustrac.appdata.xml000066400000000000000000000067271360473665400203700ustar00rootroot00000000000000 dustrac-game.desktop CC0-1.0 GPL-3.0 and CC BY-SA-3.0 Dust Racing 2D

Traditional top-down car racing game including a level editor. Traditionelles Autorennspiel aus der Vogelperspektive, mit Leveleditor.

Dust Racing 2D (Dustrac) is a tile-based, cross-platform 2D racing game written in Qt (C++) and OpenGL.

Dust Racing 2D (Dustrac) ist ein kachelbasiertes, plattformübergreifendes 2D-Rennspiel, das in Qt (C++) und OpenGL geschrieben wurde.

Features

Features

  • 1-2 human players againts 11 challenging computer players
  • 1-2 menschliche Spieler gegen 11 herausfordernde Computerspieler
  • 3 difficulty settings: Easy, Medium, Hard
  • 3 Schwierigkeitsstufen: Einfach, mittel, schwierig
  • Split-screen two player game (vertical or horizontal)
  • Zweispielerspiel mit geteiltem Bildschirm (vertikal/horizontal)
  • Game modes: Race, Time Trial, Duel
  • Spielmodi: Rennen, Zeitrennen, Duell
  • 2D graphics with some 3D objects
  • 2D-Grafik mit einigen 3D-Objekten
  • Smooth game play and physics
  • Flüssiges Spielgeschehen und Physik
  • Multiple race tracks
  • Mehrere Rennstrecken
  • Finishing in TOP-6 will unlock the next race track
  • Rennen auf dem 6. oder einem besseren Platz beenden, um die nächste Rennstrecke freizuschalten
  • Star ratings based on the best positions on each race track
  • Sternenbewertung basierend auf der Bestposition auf jeder einzelnen Rennstrecke
  • Easy to create new race tracks with the level editor
  • Neue Rennstrecken können leicht mit dem Level-Editor erstellt werden
  • Engine and collision sounds
  • Motoren- und Kollisionsgeräusche
  • Pit stops
  • Boxenstopps
  • Runs windowed or fullscreen
  • Läuft im Fenster- oder Vollbildmodus
  • Will be forever completely free
  • Wird für immer völlig frei und kostenlos sein

Dust Racing 2D comes with a Qt-based level editor for easy level creation. A separate engine, MiniCore, is used for physics modeling.

Dust Racing 2D hat einen Qt-basierten Level-Editor für die einfache Levelerstellung. Eine separate Engine, MiniCore, wird für die Physikmodellierung benutzt.

https://cloud.githubusercontent.com/assets/2587783/7400283/69f106fa-eec4-11e4-9014-76c086f54d89.jpg https://cloud.githubusercontent.com/assets/2587783/7400318/956180d0-eec4-11e4-9d3a-96e83d4b0e52.jpg https://juzzlin.github.io/DustRacing2D/ jussi.lind@iki.fi DustRacing2D-2.0.5/src/editor/000077500000000000000000000000001360473665400160425ustar00rootroot00000000000000DustRacing2D-2.0.5/src/editor/CMakeLists.txt000066400000000000000000000053071360473665400206070ustar00rootroot00000000000000# Translation files in src/editor/translations (without .ts) set(TS dustrac-editor_fi dustrac-editor_it dustrac-editor_cs dustrac-editor_fr dustrac-editor_de dustrac-editor_ru) set(TS_FILES) set(QM_FILES) foreach(TS_FILE ${TS}) list(APPEND TS_FILES ${CMAKE_SOURCE_DIR}/src/editor/translations/${TS_FILE}.ts) list(APPEND QM_FILES ${CMAKE_BINARY_DIR}/data/translations/${TS_FILE}.qm) endforeach() set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/data/translations) # Set sources set(SRC aboutdlg.cpp application.cpp draganddropstore.cpp editordata.cpp editorview.cpp editormode.hpp floodfill.cpp main.cpp mainwindow.cpp map.cpp mediator.cpp newtrackdialog.cpp object.cpp objectfactory.cpp objectmodelloader.cpp rotatedialog.cpp targetnode.cpp targetnodesizedlg.cpp tileanimator.cpp trackdata.cpp trackio.cpp tracktile.cpp trackpropertiesdialog.cpp undostack.cpp ../common/config.hpp ../common/mapbase.cpp ../common/objectbase.cpp ../common/objects.cpp ../common/route.cpp ../common/targetnodebase.cpp ../common/trackdatabase.cpp ../common/tracktilebase.cpp) set(RCS ${CMAKE_SOURCE_DIR}/data/images/editor.qrc ${CMAKE_SOURCE_DIR}/data/icons/icons.qrc) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common) qt5_add_resources(RC_SRC ${RCS}) qt5_add_translation(QM ${TS_FILES}) qt5_wrap_ui(UI_HDRS ${UIS}) # We need this to be able to include headers produced by uic in our code include_directories(${CMAKE_BINARY_DIR}) # Resource compilation for MinGW if(MINGW) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/windowsrc.o COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_SOURCE_DIR} -i${CMAKE_SOURCE_DIR}/data/icons/WindowsEditor.rc -o ${CMAKE_CURRENT_BINARY_DIR}/windowsrc.o) set(SRC ${SRC} ${CMAKE_CURRENT_BINARY_DIR}/windowsrc.o) endif() # Copy desktop file if(ReleaseBuild AND UNIX) set(DesktopFileSourcePath) if(USC) set(DesktopFileSourcePath ${CMAKE_SOURCE_DIR}/src/dustrac-editor.desktop.opt.in) else() set(DesktopFileSourcePath ${CMAKE_SOURCE_DIR}/src/dustrac-editor.desktop.in) endif() add_custom_target(desktop-file-editor ALL COMMAND cmake -E copy ${DesktopFileSourcePath} ${CMAKE_BINARY_DIR}/dustrac-editor.desktop DEPENDS ${EDITOR_BINARY_NAME}) endif() # Add the executable set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) add_executable(${EDITOR_BINARY_NAME} WIN32 ${SRC} ${MOC_SRC} ${RC_SRC} ${UI_HDRS} ${QM}) target_link_libraries(${EDITOR_BINARY_NAME} Qt5::Widgets Qt5::Xml) set_property(TARGET ${EDITOR_BINARY_NAME} PROPERTY CXX_STANDARD 14) DustRacing2D-2.0.5/src/editor/aboutdlg.cpp000066400000000000000000000036731360473665400203600ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "aboutdlg.hpp" #include "../common/config.hpp" #include #include #include #include #include AboutDlg::AboutDlg(QWidget * parent) : QDialog(parent) { setWindowTitle(tr("About Dust Racing")); initWidgets(); } void AboutDlg::initWidgets() { QVBoxLayout * vLayout = new QVBoxLayout(this); QLabel * pixmapLabel = new QLabel(this); pixmapLabel->setPixmap(QPixmap(":/about.png")); vLayout->addWidget(pixmapLabel); QLabel * infoLabel = new QLabel(this); infoLabel->setText( QString("

") + Config::Game::GAME_NAME + " v" + Config::Game::GAME_VERSION + "

" + "

" + Config::Game::GAME_NAME + " is licenced under GNU GPLv3.

" + "

" + Config::General::COPYRIGHT + "

" + "
" + Config::General::WEB_SITE_URL + ""); vLayout->addWidget(infoLabel); QHBoxLayout * buttonLayout = new QHBoxLayout(); QPushButton * button = new QPushButton("&Ok", this); connect(button, &QPushButton::clicked, this, &AboutDlg::accept); buttonLayout->addWidget(button); buttonLayout->insertStretch(0); vLayout->addLayout(buttonLayout); } DustRacing2D-2.0.5/src/editor/aboutdlg.hpp000066400000000000000000000017641360473665400203640ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef ABOUTDLG_HPP #define ABOUTDLG_HPP #include //! The about dialog. class AboutDlg : public QDialog { Q_OBJECT public: //! Constructor. explicit AboutDlg(QWidget * parent = 0); private: void initWidgets(); }; #endif // ABOUTDLG_HPP DustRacing2D-2.0.5/src/editor/application.cpp000066400000000000000000000054541360473665400210610ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2017 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "application.hpp" #include "mainwindow.hpp" #include "../common/config.hpp" #include "../common/userexception.hpp" #include #include #include static void printHelp() { std::cout << std::endl << "Dust Racing 2D version " << VERSION << std::endl; std::cout << Config::General::COPYRIGHT << std::endl << std::endl; std::cout << "Usage: dustrac-editor [options] [trackFile]" << std::endl << std::endl; std::cout << "Options:" << std::endl; std::cout << "--help Show this help." << std::endl; std::cout << "--lang [lang] Force language: fi, fr, it, cs, ru." << std::endl; std::cout << std::endl; } static void initTranslations(QTranslator & appTranslator, QGuiApplication & app, QString lang = "") { if (lang == "") { lang = QLocale::system().name(); } if (appTranslator.load(QString(DATA_PATH) + "/translations/dustrac-editor_" + lang)) { app.installTranslator(&appTranslator); std::cout << "Loaded translations for " << lang.toStdString() << std::endl; } else { std::cerr << "Failed to load translations for " << lang.toStdString() << std::endl; } } void Application::parseArgs(int argc, char ** argv) { QString lang = ""; const std::vector args(argv, argv + argc); for (unsigned int i = 1; i < args.size(); i++) { if (args[i] == "-h" || args[i] == "--help") { printHelp(); throw UserException("Exit due to help."); } else if (args[i] == "--lang" && (i + i) < args.size()) { lang = args[++i]; } else { m_trackFile = args[i]; } } initTranslations(m_appTranslator, m_app, lang); } Application::Application(int & argc, char ** argv) : m_app(argc, argv) { parseArgs(argc, argv); m_mainWindow = new MainWindow(m_trackFile); m_mainWindow->show(); } int Application::run() { return m_app.exec(); } Application::~Application() { delete m_mainWindow; } DustRacing2D-2.0.5/src/editor/application.hpp000066400000000000000000000022211360473665400210530ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2017 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef APPLICATION_HPP #define APPLICATION_HPP #include #include class MainWindow; class Application { public: Application(int & argc, char ** argv); ~Application(); int run(); private: void parseArgs(int argc, char ** argv); QApplication m_app; QTranslator m_appTranslator; QString m_trackFile; MainWindow * m_mainWindow; }; #endif // APPLICATION_HPP DustRacing2D-2.0.5/src/editor/draganddropstore.cpp000066400000000000000000000033551360473665400221160ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2018 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "draganddropstore.hpp" DragAndDropStore::DragAndDropStore() { } void DragAndDropStore::clear() { m_dragAndDropSourceTile = nullptr; m_dragAndDropObject = nullptr; m_dragAndDropTargetNode = nullptr; } void DragAndDropStore::setDragAndDropSourceTile(TrackTile * tile) { m_dragAndDropSourceTile = tile; } TrackTile * DragAndDropStore::dragAndDropSourceTile() const { return m_dragAndDropSourceTile; } void DragAndDropStore::setDragAndDropObject(Object * object) { m_dragAndDropObject = object; } Object * DragAndDropStore::dragAndDropObject() const { return m_dragAndDropObject; } void DragAndDropStore::setDragAndDropTargetNode(TargetNode * tnode) { m_dragAndDropTargetNode = tnode; } TargetNode * DragAndDropStore::dragAndDropTargetNode() const { return m_dragAndDropTargetNode; } void DragAndDropStore::setDragAndDropSourcePos(QPointF pos) { m_dragAndDropSourcePos = pos; } QPointF DragAndDropStore::dragAndDropSourcePos() const { return m_dragAndDropSourcePos; } DustRacing2D-2.0.5/src/editor/draganddropstore.hpp000066400000000000000000000030401360473665400221120ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2018 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef DRAGANDDROPSTORE_HPP #define DRAGANDDROPSTORE_HPP #include class Object; class TargetNode; class TrackTile; class DragAndDropStore { public: DragAndDropStore(); void clear(); void setDragAndDropTargetNode(TargetNode * tnode); TargetNode * dragAndDropTargetNode() const; QPointF dragAndDropSourcePos() const; void setDragAndDropSourcePos(QPointF pos); void setDragAndDropSourceTile(TrackTile * tile); TrackTile * dragAndDropSourceTile() const; void setDragAndDropObject(Object * object); Object * dragAndDropObject() const; private: TrackTile * m_dragAndDropSourceTile = nullptr; Object * m_dragAndDropObject = nullptr; TargetNode * m_dragAndDropTargetNode = nullptr; QPointF m_dragAndDropSourcePos; }; #endif // DRAGANDDROPSTORE_HPP DustRacing2D-2.0.5/src/editor/editor.pro000066400000000000000000000044531360473665400200600ustar00rootroot00000000000000# Qt project file to cross-compile the editor for Windows with MXE TEMPLATE = app TARGET = dustrac-editor CONFIG += c++14 DEFINES += DATA_PATH=\\\"./data\\\" VERSION=\\\"2.0.5\\\" # Qt version check contains(QT_VERSION, ^5\\..*) { message("Building for Qt version $${QT_VERSION}.") QT += widgets xml } else { error("Qt5 is required!") } INCLUDEPATH += . # Input HEADERS += \ ../common/config.hpp \ ../common/mapbase.hpp \ ../common/objectbase.hpp \ ../common/objects.hpp \ ../common/route.hpp \ ../common/targetnodebase.hpp \ ../common/trackdatabase.hpp \ ../common/tracktilebase.hpp \ ../common/userexception.hpp \ aboutdlg.hpp \ application.hpp \ draganddropstore.hpp \ editordata.hpp \ editorview.hpp \ editormode.hpp \ floodfill.hpp \ mainwindow.hpp \ map.hpp \ mediator.hpp \ newtrackdialog.hpp \ object.hpp \ objectfactory.hpp \ objectmodel.hpp \ objectmodelloader.hpp \ rotatedialog.hpp \ targetnode.hpp \ targetnodesizedlg.hpp \ tileanimator.hpp \ trackdata.hpp \ trackio.hpp \ trackpropertiesdialog.hpp \ tracktile.hpp \ undostack.hpp \ SOURCES += \ ../common/mapbase.cpp \ ../common/objectbase.cpp \ ../common/objects.cpp \ ../common/route.cpp \ ../common/targetnodebase.cpp \ ../common/trackdatabase.cpp \ ../common/tracktilebase.cpp \ aboutdlg.cpp \ application.cpp \ draganddropstore.cpp \ editordata.cpp \ editorview.cpp \ floodfill.cpp \ main.cpp \ mainwindow.cpp \ map.cpp \ mediator.cpp \ newtrackdialog.cpp \ object.cpp \ objectfactory.cpp \ objectmodelloader.cpp \ rotatedialog.cpp \ targetnode.cpp \ targetnodesizedlg.cpp \ tileanimator.cpp \ trackdata.cpp \ trackio.cpp \ trackpropertiesdialog.cpp \ tracktile.cpp \ undostack.cpp \ RESOURCES += ../../data/icons/icons.qrc ../../data/images/editor.qrc RC_FILE = ../../data/icons/WindowsEditor.rc TRANSLATIONS += \ translations/dustrac-editor_cs.ts \ translations/dustrac-editor_de.ts \ translations/dustrac-editor_fi.ts \ translations/dustrac-editor_fr.ts \ translations/dustrac-editor_it.ts \ translations/dustrac-editor_ru.ts target.path = $$OUT_PWD/../.. INSTALLS += target DustRacing2D-2.0.5/src/editor/editordata.cpp000066400000000000000000000214511360473665400206710ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "editordata.hpp" #include "editorview.hpp" #include "mainwindow.hpp" #include "mediator.hpp" #include "object.hpp" #include "objectmodelloader.hpp" #include "targetnode.hpp" #include "trackio.hpp" #include "tracktile.hpp" #include #include using std::dynamic_pointer_cast; EditorData::EditorData(Mediator & mediator) : m_mediator(mediator) { } void EditorData::clearScene() { removeTilesFromScene(); removeObjectsFromScene(); removeTargetNodesFromScene(); } DragAndDropStore & EditorData::dadStore() { return m_dadStore; } bool EditorData::loadTrackData(QString fileName) { m_undoStack.clear(); clearScene(); m_trackData = m_trackIO.open(fileName); return static_cast(m_trackData); } bool EditorData::isUndoable() const { return m_undoStack.isUndoable(); } void EditorData::undo() { if (m_undoStack.isUndoable()) { m_dadStore.clear(); m_selectedObject = nullptr; m_selectedTargetNode = nullptr; saveRedoPoint(); clearScene(); m_trackData = m_undoStack.undo(); } } bool EditorData::isRedoable() const { return m_undoStack.isRedoable(); } void EditorData::redo() { if (m_undoStack.isRedoable()) { m_dadStore.clear(); m_selectedObject = nullptr; m_selectedTargetNode = nullptr; saveUndoPoint(); clearScene(); m_trackData = m_undoStack.redo(); } } bool EditorData::saveTrackData() { assert(m_trackData); return m_trackIO.save(m_trackData, m_trackData->fileName()); } void EditorData::saveUndoPoint() { assert(m_trackData); m_undoStack.pushUndoPoint(m_trackData); m_mediator.enableUndo(m_undoStack.isUndoable()); } void EditorData::saveRedoPoint() { assert(m_trackData); m_undoStack.pushRedoPoint(m_trackData); } bool EditorData::saveTrackDataAs(QString fileName) { assert(m_trackData); if (m_trackIO.save(m_trackData, fileName)) { m_trackData->setFileName(fileName); return true; } return false; } void EditorData::setTrackData(TrackDataPtr trackData) { clearScene(); m_trackData = trackData; } bool EditorData::canRouteBeSet() const { return m_trackData && m_trackData->map().cols() > 1 && m_trackData->map().rows() > 1; } void EditorData::beginSetRoute() { assert(m_trackData); m_mediator.setMode(EditorMode::SetRoute); removeRouteFromScene(); m_trackData->route().clear(); } void EditorData::addExistingRouteToScene() { // Re-push existing (loaded) target nodes so that route lines // and links will be correctly created. A bit stupid, // but is enough for now, because the vectors are not long. std::vector temp; m_trackData->route().getAll(temp); m_trackData->route().clear(); for (auto tnode : temp) { pushTargetNodeToRoute(tnode); } } void EditorData::pushNewTargetNodeToRoute(QPointF pos) { // Push location to the route TargetNodeBasePtr tnode(new TargetNode); tnode->setLocation(pos); pushTargetNodeToRoute(tnode); } void EditorData::pushTargetNodeToRoute(TargetNodeBasePtr tnode) { Route & route = trackData()->route(); if (route.numNodes()) { auto prev = route.get(route.numNodes() - 1); prev->setNext(tnode); tnode->setPrev(prev); dynamic_pointer_cast(prev)->updateRouteLine(); } const bool loopClosed = route.push(tnode); auto node = dynamic_pointer_cast(tnode); auto routeLine = new QGraphicsLineItem; node->setRouteLine(routeLine); m_mediator.addItem(node.get()); // The scene wants a raw pointer m_mediator.addItem(routeLine); const int routeLineZ = 10; node->setZValue(routeLineZ); routeLine->setZValue(routeLineZ); // Check if we might have a loop => end if (loopClosed) { m_mediator.endSetRoute(); auto firstNode = route.get(0); route.get(route.numNodes() - 1)->setLocation(firstNode->location()); tnode->setNext(firstNode); firstNode->setPrev(tnode); } } void EditorData::removeRouteFromScene() { for (auto && tnode : m_trackData->route()) { auto node = dynamic_pointer_cast(tnode); assert(node); m_mediator.removeItem(node.get()); // The scene wants a raw pointer m_mediator.removeItem(node->routeLine()); delete node->routeLine(); } m_mediator.updateView(); } TrackDataPtr EditorData::trackData() { return m_trackData; } void EditorData::setSelectedObject(Object * object) { m_selectedObject = object; } Object * EditorData::selectedObject() const { return m_selectedObject; } void EditorData::setSelectedTargetNode(TargetNode * tnode) { m_selectedTargetNode = tnode; } TargetNode * EditorData::selectedTargetNode() const { return m_selectedTargetNode; } void EditorData::addTilesToScene() { assert(m_trackData); for (unsigned int i = 0; i < m_trackData->map().cols(); i++) { for (unsigned int j = 0; j < m_trackData->map().rows(); j++) { auto tile = dynamic_pointer_cast(m_trackData->map().getTile(i, j)); assert(tile); tile->setPixmap(MainWindow::instance()->objectModelLoader().getPixmapByRole(tile->tileType())); if (!tile->added()) { m_mediator.addItem(tile.get()); // The scene wants a raw pointer tile->setAdded(true); } } } auto tile = dynamic_pointer_cast(m_trackData->map().getTile(0, 0)); assert(tile); } void EditorData::addObjectsToScene() { assert(m_trackData); for (unsigned int i = 0; i < m_trackData->objects().count(); i++) { auto object = dynamic_pointer_cast(m_trackData->objects().object(i)); assert(object); m_mediator.addItem(object.get()); // The scene wants a raw pointer object->setZValue(10); } } void EditorData::removeTileFromScene(TrackTileBasePtr trackTile) { TrackTile::setActiveTile(nullptr); auto tile = dynamic_pointer_cast(trackTile); assert(tile); m_mediator.removeItem(tile.get()); // The scene wants a raw pointer } void EditorData::removeTilesFromScene() { if (m_trackData) { TrackTile::setActiveTile(nullptr); for (unsigned int i = 0; i < m_trackData->map().cols(); i++) { for (unsigned int j = 0; j < m_trackData->map().rows(); j++) { auto tile = dynamic_pointer_cast(m_trackData->map().getTile(i, j)); assert(tile); m_mediator.removeItem(tile.get()); // The scene wants a raw pointer } } } } void EditorData::removeObjectsFromScene() { if (m_trackData) { for (unsigned int i = 0; i < m_trackData->objects().count(); i++) { auto object = dynamic_pointer_cast(m_trackData->objects().object(i)); assert(object); m_mediator.removeItem(object.get()); // The scene wants a raw pointer } } m_selectedObject = nullptr; m_dadStore.clear(); } void EditorData::removeTargetNodesFromScene() { if (m_trackData) { for (auto tnode : m_trackData->route()) { auto node = dynamic_pointer_cast(tnode); assert(node); m_mediator.removeItem(node.get()); // The scene wants a raw pointer } } } int EditorData::currentScale() const { return m_currentScale; } void EditorData::setCurrentScale(int currentScale) { m_currentScale = currentScale; } void EditorData::clearRoute() { assert(m_trackData); removeRouteFromScene(); m_trackData->route().clear(); m_mediator.console(QString(QObject::tr("Route cleared."))); } void EditorData::setActiveColumn(unsigned int column) { m_activeColumn = column; } unsigned int EditorData::activeColumn() const { return m_activeColumn; } void EditorData::setActiveRow(unsigned int row) { m_activeRow = row; } unsigned int EditorData::activeRow() const { return m_activeRow; } DustRacing2D-2.0.5/src/editor/editordata.hpp000066400000000000000000000101301360473665400206660ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef EDITORDATA_HPP #define EDITORDATA_HPP #include #include #include #include #include "draganddropstore.hpp" #include "editormode.hpp" #include "trackdata.hpp" #include "trackio.hpp" #include "undostack.hpp" class Mediator; class Object; class ObjectModelLoader; class TargetNode; class TargetNodeBase; class TrackTile; class QGraphicsLineItem; //! Editor data includes data and functionality related to the current //! race track and editing session. class EditorData { public: //! Constructor. explicit EditorData(Mediator & mediator); DragAndDropStore & dadStore(); //! Load track from the given file. bool loadTrackData(QString fileName); bool isUndoable() const; //! Load track from undo point. void undo(); bool isRedoable() const; //! Load track from redo point. void redo(); //! Save track data. bool saveTrackData(); //! Sava track data to the given file. bool saveTrackDataAs(QString fileName); //! Save undo point. void saveUndoPoint(); //! Save redo point. void saveRedoPoint(); //! Set track data as the given data. void setTrackData(TrackDataPtr newTrackData); //! Check if it's possible to set route. bool canRouteBeSet() const; //! This should be called before user starts //! setting the route. void beginSetRoute(); //! Adds current target node objects to the scene. void addExistingRouteToScene(); //! Push a new target node. void pushNewTargetNodeToRoute(QPointF pos); //! Removes target node and line objects from the scene. void removeRouteFromScene(); //! Removes given tile from the scene. void removeTileFromScene(TrackTileBasePtr trackTile); //! Returns current track data object. Returns NULL if not set. TrackDataPtr trackData(); //! Set selected object. void setSelectedObject(Object * object); //! Returns the selected object or nullptr. Object * selectedObject() const; //! Set selected target node. void setSelectedTargetNode(TargetNode * tnode); //! Returns the selected target node or nullptr. TargetNode * selectedTargetNode() const; //! Add tiles in current track data object to the scene. void addTilesToScene(); //! Add objects in current track data object to the scene. void addObjectsToScene(); //! Clear the current route only. void clearRoute(); void setActiveColumn(unsigned int column); unsigned int activeColumn() const; void setActiveRow(unsigned int row); unsigned int activeRow() const; void setCurrentScale(int currentScale); int currentScale() const; private: EditorData(const EditorData & e); EditorData & operator=(const EditorData & e); void clearScene(); void pushTargetNodeToRoute(TargetNodeBasePtr tnode); void removeTilesFromScene(); void removeObjectsFromScene(); void removeTargetNodesFromScene(); DragAndDropStore m_dadStore; TrackIO m_trackIO; TrackDataPtr m_trackData; UndoStack m_undoStack; Object * m_selectedObject = nullptr; TargetNode * m_selectedTargetNode = nullptr; Mediator & m_mediator; std::vector m_targetNodes; unsigned int m_activeColumn = 0; unsigned int m_activeRow = 0; // Scale percentage int m_currentScale = 50; }; #endif // EDITORDATA_HPP DustRacing2D-2.0.5/src/editor/editormode.hpp000066400000000000000000000016471360473665400207160ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2018 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef EDITORMODE_HPP #define EDITORMODE_HPP //! Editing modes. enum class EditorMode { None, SetRoute, SetTileType, AddObject, EraseObject }; #endif // EDITORMODE_HPP DustRacing2D-2.0.5/src/editor/editorview.cpp000066400000000000000000000514461360473665400207410ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include #include #include #include #include #include #include "editorview.hpp" #include "draganddropstore.hpp" #include "editormode.hpp" #include "mediator.hpp" #include "object.hpp" #include "objectfactory.hpp" #include "objectmodelloader.hpp" #include "rotatedialog.hpp" #include "targetnode.hpp" #include "targetnodesizedlg.hpp" #include "trackdata.hpp" #include "tracktile.hpp" #include #include EditorView::EditorView(Mediator & mediator) : m_mediator(mediator) { createTileContextMenuActions(); createObjectContextMenuActions(); createTargetNodeContextMenuActions(); } void EditorView::updateSceneRect() { const QRectF newSceneRect( 0, 0, m_mediator.cols() * TrackTile::width(), m_mediator.rows() * TrackTile::height()); setSceneRect(newSceneRect); assert(scene()); scene()->setSceneRect(newSceneRect); } void EditorView::mouseMoveEvent(QMouseEvent * event) { if (scene()) { const QPointF mappedPos = mapToScene(event->pos()); if (auto tile = dynamic_cast(scene()->itemAt(mappedPos, QTransform()))) { tile->setActive(true); } // Tile drag'n'drop active? if (auto sourceTile = m_mediator.dadStore().dragAndDropSourceTile()) { sourceTile->setPos(mappedPos); } // Object drag'n'drop active? else if (auto object = m_mediator.dadStore().dragAndDropObject()) { object->setLocation(mappedPos); } // Target node drag'n'drop active? else if (auto tnode = m_mediator.dadStore().dragAndDropTargetNode()) { tnode->setLocation(mappedPos); } m_mediator.updateCoordinates(mappedPos); } } void EditorView::createTileContextMenuActions() { const QChar degreeSign(176); const QString dummy1(QString(QWidget::tr("Rotate 90")) + degreeSign + QWidget::tr(" CW..")); auto rotate90CW = new QAction(dummy1, &m_tileContextMenu); QObject::connect(rotate90CW, &QAction::triggered, [this]() { if (TrackTile * tile = dynamic_cast(scene()->itemAt(mapToScene(m_clickedPos), QTransform()))) { m_mediator.saveUndoPoint(); tile->rotate90CW(); } }); const QString dummy2(QString(QWidget::tr("Rotate 90")) + degreeSign + QWidget::tr(" CCW..")); auto rotate90CCW = new QAction(dummy2, &m_tileContextMenu); QObject::connect(rotate90CCW, &QAction::triggered, [this]() { if (auto tile = dynamic_cast(scene()->itemAt(mapToScene(m_clickedPos), QTransform()))) { m_mediator.saveUndoPoint(); tile->rotate90CCW(); } }); m_clearComputerHint = new QAction(QWidget::tr("Clear computer hint"), &m_tileContextMenu); QObject::connect(m_clearComputerHint, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); setComputerHint(TrackTileBase::ComputerHint::None); }); m_setComputerHintBrakeHard = new QAction( QWidget::tr("Set computer hint 'brake hard'.."), &m_tileContextMenu); QObject::connect(m_setComputerHintBrakeHard, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); setComputerHint(TrackTileBase::ComputerHint::BrakeHard); }); m_setComputerHintBrake = new QAction( QWidget::tr("Set computer hint 'brake'.."), &m_tileContextMenu); QObject::connect(m_setComputerHintBrake, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); setComputerHint(TrackTileBase::ComputerHint::Brake); }); m_excludeFromMinimap = new QAction( QWidget::tr("Exclude from minimap"), &m_tileContextMenu); m_excludeFromMinimap->setCheckable(true); QObject::connect(m_excludeFromMinimap, &QAction::changed, [this]() { if (auto tile = dynamic_cast(scene()->itemAt(mapToScene(this->m_clickedPos), QTransform()))) { m_mediator.saveUndoPoint(); tile->setExcludeFromMinimap(this->m_excludeFromMinimap->isChecked()); } }); auto insertRowBefore = new QAction( QWidget::tr("Insert row before.."), &m_tileContextMenu); QObject::connect(insertRowBefore, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); m_mediator.insertRowBefore(); updateSceneRect(); update(); }); auto insertRowAfter = new QAction( QWidget::tr("Insert row after.."), &m_tileContextMenu); QObject::connect(insertRowAfter, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); m_mediator.insertRowAfter(); updateSceneRect(); update(); }); m_deleteRow = new QAction( QWidget::tr("Delete row.."), &m_tileContextMenu); QObject::connect(m_deleteRow, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); m_mediator.deleteRow(); updateSceneRect(); update(); }); auto insertColBefore = new QAction( QWidget::tr("Insert column before.."), &m_tileContextMenu); QObject::connect(insertColBefore, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); m_mediator.insertColumnBefore(); updateSceneRect(); update(); }); auto insertColAfter = new QAction( QWidget::tr("Insert column after.."), &m_tileContextMenu); QObject::connect(insertColAfter, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); m_mediator.insertColumnAfter(); updateSceneRect(); update(); }); m_deleteCol = new QAction( QWidget::tr("Delete column.."), &m_tileContextMenu); QObject::connect(m_deleteCol, &QAction::triggered, [this]() { m_mediator.saveUndoPoint(); m_mediator.deleteColumn(); updateSceneRect(); update(); }); // Populate the menu m_tileContextMenu.addAction(rotate90CW); m_tileContextMenu.addAction(rotate90CCW); m_tileContextMenu.addSeparator(); m_tileContextMenu.addAction(m_clearComputerHint); m_tileContextMenu.addAction(m_setComputerHintBrakeHard); m_tileContextMenu.addAction(m_setComputerHintBrake); m_tileContextMenu.addSeparator(); m_tileContextMenu.addAction(m_excludeFromMinimap); m_tileContextMenu.addSeparator(); m_tileContextMenu.addAction(insertRowBefore); m_tileContextMenu.addAction(insertRowAfter); m_tileContextMenu.addAction(m_deleteRow); m_tileContextMenu.addSeparator(); m_tileContextMenu.addAction(insertColBefore); m_tileContextMenu.addAction(insertColAfter); m_tileContextMenu.addAction(m_deleteCol); } void EditorView::createObjectContextMenuActions() { const QString dummy1(QString(QWidget::tr("Rotate.."))); auto rotate = new QAction(dummy1, &m_tileContextMenu); QObject::connect(rotate, &QAction::triggered, [this]() { RotateDialog dialog; if (dialog.exec() == QDialog::Accepted) { if (auto object = m_mediator.selectedObject()) { m_mediator.saveUndoPoint(); object->setRotation(static_cast(dialog.angle() + object->rotation()) % 360); } } }); const QString dummy2(QString(QWidget::tr("Force stationary"))); m_forceStationaryAction = new QAction(dummy2, &m_tileContextMenu); m_forceStationaryAction->setCheckable(true); QObject::connect(m_forceStationaryAction, &QAction::changed, [this]() { if (auto object = m_mediator.selectedObject()) { m_mediator.saveUndoPoint(); object->setForceStationary(m_forceStationaryAction->isChecked()); } }); // Populate the menu m_objectContextMenu.addAction(rotate); m_objectContextMenu.addSeparator(); m_objectContextMenu.addAction(m_forceStationaryAction); } void EditorView::createTargetNodeContextMenuActions() { const QString dummy1(QString(QWidget::tr("Set size.."))); auto setSize = new QAction(dummy1, &m_targetNodeContextMenu); QObject::connect(setSize, &QAction::triggered, [this]() { if (auto tnode = m_mediator.selectedTargetNode()) { TargetNodeSizeDlg dialog(tnode->size()); if (dialog.exec() == QDialog::Accepted) { m_mediator.saveUndoPoint(); tnode->setSize(dialog.targetNodeSize()); } } }); // Populate the menu m_targetNodeContextMenu.addAction(setSize); } void EditorView::mousePressEvent(QMouseEvent * event) { if (scene()) { m_clickedPos = event->pos(); m_clickedScenePos = mapToScene(m_clickedPos); // Fetch all items at the location QList items = scene()->items(m_clickedScenePos, Qt::IntersectsItemShape, Qt::DescendingOrder); if (items.size()) { // Check if there's an object at the position and handle that. // Otherwise it would be difficult to select objects that are surrounded // by a target node area. auto iter = items.begin(); while (iter != items.end()) { auto item = *iter; if (auto object = dynamic_cast(item)) { handleMousePressEventOnObject(*event, *object); return; } iter++; } auto item = *items.begin(); if (auto tnode = dynamic_cast(item)) { handleMousePressEventOnTargetNode(*event, *tnode); } else if (auto tile = dynamic_cast(item)) { handleMousePressEventOnTile(*event, *tile); } } } } void EditorView::eraseObjectAtCurrentClickedPos() { m_mediator.saveUndoPoint(); // Fetch all items at the location QList items = scene()->items( m_clickedScenePos, Qt::IntersectsItemShape, Qt::DescendingOrder); // We need to find the first object to be erased, because // there might be also overlapping TargetNodes. for (auto item : items) { if (auto object = dynamic_cast(item)) { m_mediator.removeObject(*object); m_mediator.setSelectedObject(nullptr); break; } } } void EditorView::addCurrentToolBarObjectToScene() { m_mediator.addCurrentToolBarObjectToScene(m_clickedScenePos); } void EditorView::handleMousePressEventOnObject(QMouseEvent & event, Object & object) { if (event.button() == Qt::RightButton) { handleRightButtonClickOnObject(object); } else if (event.button() == Qt::LeftButton) { // User is adding an object if (m_mediator.mode() == EditorMode::AddObject) { addCurrentToolBarObjectToScene(); } // User is erasing an object else if (m_mediator.mode() == EditorMode::EraseObject) { eraseObjectAtCurrentClickedPos(); } // Default actions else { handleLeftButtonClickOnObject(object); } } QWidget::mousePressEvent(&event); } void EditorView::handleMousePressEventOnTargetNode(QMouseEvent & event, TargetNode & tnode) { if (event.button() == Qt::RightButton) { handleRightButtonClickOnTargetNode(tnode); } else if (event.button() == Qt::LeftButton) { // User is adding an object if (m_mediator.mode() == EditorMode::AddObject) { addCurrentToolBarObjectToScene(); } else { handleLeftButtonClickOnTargetNode(tnode); } } QWidget::mousePressEvent(&event); } void EditorView::handleMousePressEventOnTile(QMouseEvent & event, TrackTile & tile) { tile.setActive(true); if (event.button() == Qt::RightButton) { handleRightButtonClickOnTile(tile); } else if (event.button() == Qt::LeftButton) { // User is adding an object if (m_mediator.mode() == EditorMode::AddObject) { addCurrentToolBarObjectToScene(); } else { handleLeftButtonClickOnTile(tile); } } QWidget::mousePressEvent(&event); } void EditorView::handleLeftButtonClickOnObject(Object & object) { // User is initiating a drag'n'drop if (m_mediator.mode() == EditorMode::None) { m_mediator.saveUndoPoint(); object.setZValue(object.zValue() + 1); m_mediator.dadStore().setDragAndDropObject(&object); m_mediator.setSelectedObject(&object); // Change cursor to the closed hand cursor. QApplication::setOverrideCursor(QCursor(Qt::ClosedHandCursor)); } } void EditorView::handleLeftButtonClickOnTargetNode(TargetNode & tnode) { // User is initiating a drag'n'drop if (m_mediator.mode() == EditorMode::None) { m_mediator.saveUndoPoint(); tnode.setZValue(tnode.zValue() + 1); m_mediator.dadStore().setDragAndDropTargetNode(&tnode); // Change cursor to the closed hand cursor. QApplication::setOverrideCursor(QCursor(Qt::ClosedHandCursor)); } // It's not possible to make nodes overlap if not handled also here. else if (m_mediator.mode() == EditorMode::SetRoute) { m_mediator.pushNewTargetNodeToRoute(m_clickedScenePos); } } void EditorView::handleLeftButtonClickOnTile(TrackTile & tile) { // User is defining the route if (m_mediator.mode() == EditorMode::SetRoute) { m_mediator.pushNewTargetNodeToRoute(m_clickedScenePos); } // User is setting the tile type else if (m_mediator.mode() == EditorMode::SetTileType) { if (QAction * action = m_mediator.currentToolBarAction()) { Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); if (modifiers & Qt::ControlModifier) { QString typeToFill = tile.tileType(); if (typeToFill != action->data().toString()) { m_mediator.floodFill(tile, action, typeToFill); } } else { changeTileType(tile, action); } } } // User is initiating a drag'n'drop else if (m_mediator.mode() == EditorMode::None) { tile.setZValue(tile.zValue() + 1); m_mediator.dadStore().setDragAndDropSourceTile(&tile); m_mediator.dadStore().setDragAndDropSourcePos(tile.pos()); // Change cursor to the closed hand cursor. QApplication::setOverrideCursor(QCursor(Qt::ClosedHandCursor)); } } void EditorView::openTileContextMenu(TrackTile & tile) { // Enable all hint actions by default m_clearComputerHint->setEnabled(true); m_setComputerHintBrakeHard->setEnabled(true); m_setComputerHintBrake->setEnabled(true); switch (tile.computerHint()) { case TrackTileBase::ComputerHint::None: m_clearComputerHint->setEnabled(false); break; case TrackTileBase::ComputerHint::BrakeHard: m_setComputerHintBrakeHard->setEnabled(false); break; case TrackTileBase::ComputerHint::Brake: m_setComputerHintBrake->setEnabled(false); break; } m_excludeFromMinimap->setChecked(tile.excludeFromMinimap()); m_deleteCol->setEnabled(m_mediator.cols()); m_deleteRow->setEnabled(m_mediator.rows()); const QPoint globalPos = mapToGlobal(m_clickedPos); m_tileContextMenu.exec(globalPos); } void EditorView::handleRightButtonClickOnTile(TrackTile & tile) { openTileContextMenu(tile); } void EditorView::openObjectContextMenu() { const QPoint globalPos = mapToGlobal(m_clickedPos); m_objectContextMenu.exec(globalPos); } void EditorView::handleRightButtonClickOnObject(Object & object) { m_mediator.setSelectedObject(&object); m_forceStationaryAction->setChecked(object.forceStationary()); openObjectContextMenu(); } void EditorView::openTargetNodeContextMenu() { const QPoint globalPos = mapToGlobal(m_clickedPos); m_targetNodeContextMenu.exec(globalPos); } void EditorView::handleRightButtonClickOnTargetNode(TargetNode & tnode) { m_mediator.setSelectedTargetNode(&tnode); openTargetNodeContextMenu(); } void EditorView::mouseReleaseEvent(QMouseEvent * event) { handleTileDragRelease(event); handleObjectDragRelease(event); handleTargetNodeDragRelease(event); } void EditorView::keyPressEvent(QKeyEvent * event) { if (auto object = m_mediator.selectedObject()) { if (!event->isAutoRepeat()) { switch (event->key()) { case Qt::Key_Left: m_mediator.saveUndoPoint(); object->setLocation(QPointF(object->location().x() - 1, object->location().y())); break; case Qt::Key_Right: m_mediator.saveUndoPoint(); object->setLocation(QPointF(object->location().x() + 1, object->location().y())); break; case Qt::Key_Up: m_mediator.saveUndoPoint(); object->setLocation(QPointF(object->location().x(), object->location().y() - 1)); break; case Qt::Key_Down: m_mediator.saveUndoPoint(); object->setLocation(QPointF(object->location().x(), object->location().y() + 1)); break; default: break; } } } } void EditorView::handleTileDragRelease(QMouseEvent * event) { // Tile drag'n'drop active? if (auto sourceTile = m_mediator.dadStore().dragAndDropSourceTile()) { // Determine the dest tile auto destTile = sourceTile; QList items = scene()->items(mapToScene(event->pos())); for (QGraphicsItem * item : items) { auto testTile = dynamic_cast(item); if (testTile && testTile != sourceTile) { destTile = testTile; break; } } // Swap tiles sourceTile->swap(*destTile); // Restore position sourceTile->setPos(m_mediator.dadStore().dragAndDropSourcePos()); sourceTile->setZValue(sourceTile->zValue() - 1); destTile->setZValue(sourceTile->zValue()); update(); m_mediator.dadStore().clear(); // Restore the cursor. QApplication::restoreOverrideCursor(); } } void EditorView::handleObjectDragRelease(QMouseEvent * event) { // Object drag'n'drop active? if (auto object = m_mediator.dadStore().dragAndDropObject()) { // Set the new position position object->setLocation(mapToScene(event->pos())); object->setZValue(object->zValue() - 1); update(); m_mediator.dadStore().clear(); // Restore the cursor. QApplication::restoreOverrideCursor(); } } void EditorView::handleTargetNodeDragRelease(QMouseEvent * event) { // Target node drag'n'drop active? if (auto tnode = m_mediator.dadStore().dragAndDropTargetNode()) { // Set the new position position tnode->setLocation(mapToScene(event->pos())); tnode->setZValue(tnode->zValue() - 1); update(); m_mediator.dadStore().clear(); // Restore the cursor. QApplication::restoreOverrideCursor(); } } void EditorView::setComputerHint(TrackTileBase::ComputerHint hint) { if (auto tile = dynamic_cast(scene()->itemAt(mapToScene(m_clickedPos), QTransform()))) { m_mediator.saveUndoPoint(); tile->setComputerHint(hint); } } void EditorView::changeTileType(TrackTile & tile, QAction * action) { m_mediator.saveUndoPoint(); setTileType(tile, action); } void EditorView::setTileType(TrackTile & tile, QAction * action) { tile.setTileType(action->data().toString()); tile.setPixmap(action->icon().pixmap(TrackTile::width(), TrackTile::height())); } void EditorView::wheelEvent(QWheelEvent * event) { if (event->modifiers() & Qt::ControlModifier) { m_mediator.mouseWheelZoom(event->delta()); } else { QGraphicsView::wheelEvent(event); } } DustRacing2D-2.0.5/src/editor/editorview.hpp000066400000000000000000000063461360473665400207450ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef EDITORVIEW_HPP #define EDITORVIEW_HPP #include "../common/tracktilebase.hpp" #include #include class Mediator; class QAction; class QMouseEvent; class QPaintEvent; class Object; class ObjectModelLoaderoader; class TargetNode; class TrackTile; class EditorView : public QGraphicsView { Q_OBJECT public: explicit EditorView(Mediator & mediator); void updateSceneRect(); protected: void mouseMoveEvent(QMouseEvent * event) override; void mousePressEvent(QMouseEvent * event) override; void mouseReleaseEvent(QMouseEvent * event) override; void keyPressEvent(QKeyEvent * event) override; void wheelEvent(QWheelEvent * event) override; private: void addCurrentToolBarObjectToScene(); void changeTileType(TrackTile & tile, QAction * action); void createTileContextMenuActions(); void createObjectContextMenuActions(); void createTargetNodeContextMenuActions(); void eraseObjectAtCurrentClickedPos(); void handleMousePressEventOnTile(QMouseEvent & event, TrackTile & tile); void handleLeftButtonClickOnTile(TrackTile & tile); void handleRightButtonClickOnTile(TrackTile & tile); void handleMousePressEventOnObject(QMouseEvent & event, Object & object); void handleLeftButtonClickOnObject(Object & object); void handleRightButtonClickOnObject(Object & object); void handleMousePressEventOnTargetNode(QMouseEvent & event, TargetNode & tnode); void handleLeftButtonClickOnTargetNode(TargetNode & tnode); void handleRightButtonClickOnTargetNode(TargetNode & tnode); void handleTileDragRelease(QMouseEvent * event); void handleObjectDragRelease(QMouseEvent * event); void handleTargetNodeDragRelease(QMouseEvent * event); void openObjectContextMenu(); void openTargetNodeContextMenu(); void openTileContextMenu(TrackTile & tile); void setComputerHint(TrackTileBase::ComputerHint hint); static void setTileType(TrackTile & tile, QAction * action); QMenu m_tileContextMenu; QMenu m_objectContextMenu; QMenu m_targetNodeContextMenu; QPoint m_clickedPos; QPointF m_clickedScenePos; QAction * m_clearComputerHint = nullptr; QAction * m_setComputerHintBrakeHard = nullptr; QAction * m_setComputerHintBrake = nullptr; QAction * m_deleteRow = nullptr; QAction * m_deleteCol = nullptr; QAction * m_excludeFromMinimap = nullptr; QAction * m_forceStationaryAction = nullptr; Mediator & m_mediator; }; #endif // EDITORVIEW_HPP DustRacing2D-2.0.5/src/editor/floodfill.cpp000066400000000000000000000040341360473665400205210ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2018 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "floodfill.hpp" #include "map.hpp" #include "tracktile.hpp" #include namespace FloodFill { void setTileType(TrackTile & tile, QAction * action) { tile.setTileType(action->data().toString()); tile.setPixmap(action->icon().pixmap(TrackTile::width(), TrackTile::height())); } } // namespace FloodFill void FloodFill::floodFill(TrackTile & tile, QAction * action, const QString & typeToFill, MapBase & map) { static const int DIRECTION_COUNT = 4; // Coordinates of neighbor tiles can be calculated by adding these // adjustments to tile coordinates. static const QPoint neighborAdjustments[DIRECTION_COUNT] = { QPoint(1, 0), // right QPoint(0, -1), // up QPoint(-1, 0), // left QPoint(0, 1) // down }; setTileType(tile, action); QPoint location = tile.matrixLocation(); for (int i = 0; i < DIRECTION_COUNT; ++i) { int x = location.x() + neighborAdjustments[i].x(); int y = location.y() + neighborAdjustments[i].y(); if (x >= 0 && y >= 0) { auto tile = std::dynamic_pointer_cast(map.getTile(x, y)); if (tile && tile->tileType() == typeToFill) { FloodFill::floodFill(*(tile.get()), action, typeToFill, map); } } } } DustRacing2D-2.0.5/src/editor/floodfill.hpp000066400000000000000000000017441360473665400205330ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2018 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef FLOODFILL_HPP #define FLOODFILL_HPP class MapBase; class QAction; class QString; class TrackTile; namespace FloodFill { void floodFill(TrackTile & tile, QAction * action, const QString & typeToFill, MapBase & map); } #endif // FLOODFILL_HPP DustRacing2D-2.0.5/src/editor/main.cpp000066400000000000000000000033351360473665400174760ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include #include #include "../common/config.hpp" #include "../common/userexception.hpp" #include "application.hpp" #include #include #include #if QT_VERSION < 0x50600 extern Q_CORE_EXPORT QBasicAtomicInt qt_qhash_seed; #endif int main(int argc, char ** argv) { #if QT_VERSION >= 0x50600 qSetGlobalQHashSeed(0); #else qt_qhash_seed.store(0); #endif QApplication::setOrganizationName(Config::General::QSETTINGS_COMPANY_NAME); QApplication::setApplicationName(Config::Editor::QSETTINGS_SOFTWARE_NAME); #ifdef Q_OS_WIN32 QSettings::setDefaultFormat(QSettings::IniFormat); #endif std::unique_ptr app; try { app = std::make_unique(argc, argv); return app->run(); } catch (std::exception & e) { if (!dynamic_cast(&e)) { std::cerr << e.what() << std::endl; } app.reset(); return EXIT_FAILURE; } } DustRacing2D-2.0.5/src/editor/mainwindow.cpp000066400000000000000000000513041360473665400207250ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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 Config::Editor 3 of the License, or // (at your option) any later Config::Editor. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "mainwindow.hpp" #include "../common/config.hpp" #include "aboutdlg.hpp" #include "editordata.hpp" #include "editorview.hpp" #include "mediator.hpp" #include "newtrackdialog.hpp" #include "object.hpp" #include "objectmodel.hpp" #include "objectmodelloader.hpp" #include "trackdata.hpp" #include "trackio.hpp" #include "trackpropertiesdialog.hpp" #include "tracktile.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include MainWindow * MainWindow::m_instance = nullptr; MainWindow::MainWindow(QString trackFile) : m_objectModelLoader(std::make_unique()) , m_mediator(std::make_unique(*this)) , m_aboutDlg(new AboutDlg(this)) , m_console(new QTextEdit(this)) , m_scaleSlider(new QSlider(Qt::Horizontal, this)) , m_toolBar(new QToolBar(this)) , m_randomRotationCheck(new QCheckBox(tr("Randomly rotate objects"), this)) , m_argTrackFile(trackFile) { if (!m_instance) { m_instance = this; } else { qFatal("MainWindow already instantiated!"); } setWindowIcon(QIcon(":/dustrac-editor.png")); init(); console("CWD: " + QDir::currentPath()); // Load object models that can be used to build tracks. const QString objectFilePath = QString(Config::General::dataPath) + QDir::separator() + QString(Config::Editor::MODEL_CONFIG_FILE_NAME); loadObjectModels(objectFilePath); if (!m_argTrackFile.isEmpty()) { QTimer::singleShot(0, this, &MainWindow::openArgTrack); } else { console(tr("Choose 'File -> New' or 'File -> Open' to start.")); } } void MainWindow::openArgTrack() { console(tr("Loading '%1'..").arg(m_argTrackFile)); doOpenTrack(m_argTrackFile); } void MainWindow::setVisible(bool visible) { QWidget::setVisible(visible); if (visible) { showTip(); } } void MainWindow::updateScaleSlider(int value) { m_scaleSlider->setValue(value); } void MainWindow::showTip() { const auto commonTitle = tr("Save your work to correct location."); #ifdef __unix__ QMessageBox::information( this, commonTitle, QString(tr("To make the game find your circuits, save them to %1%2%3%2") + tr(", %4%2")) .arg(QDir::homePath()) .arg(QDir::separator()) .arg(Config::General::TRACK_SEARCH_PATH) .arg(Config::General::Unix::getXdgTrackSearchPath())); #else QMessageBox::information( this, commonTitle, QString(tr("To make the game find your circuits, save them to %1%2%3%2")) .arg(QDir::homePath()) .arg(QDir::separator()) .arg(Config::General::TRACK_SEARCH_PATH)); #endif } void MainWindow::init() { setTitle(tr("New file")); QSettings settings; // Read dialog size data settings.beginGroup(m_settingsGroup); resize(settings.value("size", QSize(640, 480)).toSize()); settings.endGroup(); // Try to center the window. QRect geometry(QApplication::desktop()->availableGeometry()); move(geometry.width() / 2 - width() / 2, geometry.height() / 2 - height() / 2); m_mediator->initScene(); populateMenuBar(); createWidgets(); } void MainWindow::createWidgets() { // Create a splitter QSplitter * splitter = new QSplitter(this); splitter->setOrientation(Qt::Vertical); // Create layouts for slider, view and toolbar QVBoxLayout * centralLayout = new QVBoxLayout; QHBoxLayout * viewToolBarLayout = new QHBoxLayout; m_toolBar->setOrientation(Qt::Vertical); m_mediator->addViewToLayout(viewToolBarLayout); viewToolBarLayout->addWidget(m_toolBar); centralLayout->addLayout(viewToolBarLayout); // Populate toolbar with actions populateToolBar(); // Add zoom slider to the layout m_scaleSlider->setRange(m_minZoom, m_maxZoom); m_scaleSlider->setValue(m_initZoom); m_scaleSlider->setTracking(false); m_scaleSlider->setTickInterval(10); m_scaleSlider->setTickPosition(QSlider::TicksBelow); connect(m_scaleSlider, &QSlider::valueChanged, this, &MainWindow::updateScale); QHBoxLayout * sliderLayout = new QHBoxLayout; sliderLayout->addWidget(new QLabel(tr("Scale:"))); sliderLayout->addWidget(m_scaleSlider); sliderLayout->addWidget(m_randomRotationCheck); centralLayout->addLayout(sliderLayout); // Add console to the splitter and splitter to the layout m_console->setReadOnly(true); m_console->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); m_console->resize(m_console->width(), 50); QWidget * dummy = new QWidget(this); splitter->addWidget(dummy); dummy->setLayout(centralLayout); dummy->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); splitter->addWidget(m_console); // Set contents margins so that they look nice splitter->setContentsMargins(centralLayout->contentsMargins().left(), 0, centralLayout->contentsMargins().right(), centralLayout->contentsMargins().bottom()); centralLayout->setContentsMargins(0, centralLayout->contentsMargins().top(), 0, centralLayout->contentsMargins().bottom()); // Set splitter as the central widget setCentralWidget(splitter); QList sizes; sizes << height() - m_consoleHeight << m_consoleHeight; splitter->setSizes(sizes); } void MainWindow::setTitle(QString openFileName) { setWindowTitle( QString(Config::Editor::EDITOR_NAME) + " " + Config::Editor::EDITOR_VERSION + " - " + openFileName); } bool MainWindow::randomlyRotateObjects() const { return m_randomRotationCheck->isChecked(); } bool MainWindow::loadObjectModels(QString objectFilePath) { if (m_objectModelLoader->load(objectFilePath)) { addObjectsToToolBar(); return true; } else { const QString msg = tr("ERROR!!: Cannot load objects from '") + objectFilePath + tr("'"); console(msg); return false; } } void MainWindow::addObjectsToToolBar() { // Loop through all object models loaded // by the object loader. QVector categories; categories << "tile" << "free"; for (QString category : categories) { ObjectModelLoader::ObjectDataVector objects = m_objectModelLoader->getObjectModelsByCategory(category); for (const ObjectModel & model : objects) { // Create the action. auto p = new QAction(QIcon(model.pixmap), model.role, this); // Set model role as the data. p->setData(QVariant(model.role)); // Add it to the toolbar. m_toolBar->addAction(p); } } } MainWindow * MainWindow::instance() { return MainWindow::m_instance; } ObjectModelLoader & MainWindow::objectModelLoader() const { return *m_objectModelLoader; } QAction * MainWindow::currentToolBarAction() const { return m_currentToolBarAction; } void MainWindow::updateScale(int value) { m_mediator->setScale(value); console(QString(tr("Scale set to %1%")).arg(value)); } void MainWindow::closeEvent(QCloseEvent * event) { // Open settings file QSettings settings; // Save window size settings.beginGroup(m_settingsGroup); settings.setValue("size", size()); settings.endGroup(); event->accept(); } void MainWindow::populateMenuBar() { // Create "file"-menu QMenu * fileMenu = menuBar()->addMenu(tr("&File")); // Add "new"-action QAction * newAct = new QAction(tr("&New..."), this); newAct->setShortcut(QKeySequence("Ctrl+N")); fileMenu->addAction(newAct); connect(newAct, &QAction::triggered, this, &MainWindow::initializeNewTrack); // Add "open"-action QAction * openAct = new QAction(tr("&Open..."), this); openAct->setShortcut(QKeySequence("Ctrl+O")); fileMenu->addAction(openAct); connect(openAct, &QAction::triggered, this, &MainWindow::openTrack); // Add "save"-action m_saveAction = new QAction(tr("&Save"), this); m_saveAction->setShortcut(QKeySequence("Ctrl+S")); fileMenu->addAction(m_saveAction); connect(m_saveAction, &QAction::triggered, this, &MainWindow::saveTrack); m_saveAction->setEnabled(false); // Add "save as"-action m_saveAsAction = new QAction(tr("&Save as..."), this); m_saveAsAction->setShortcut(QKeySequence("Ctrl+Shift+S")); fileMenu->addAction(m_saveAsAction); connect(m_saveAsAction, &QAction::triggered, this, &MainWindow::saveAsTrack); m_saveAsAction->setEnabled(false); // Add "quit"-action QAction * quitAct = new QAction(tr("&Quit"), this); quitAct->setShortcut(QKeySequence("Ctrl+W")); fileMenu->addAction(quitAct); connect(quitAct, &QAction::triggered, this, &MainWindow::close); // Create "edit"-menu QMenu * editMenu = menuBar()->addMenu(tr("&Edit")); // Add "undo"-action m_undoAction = new QAction(tr("Undo"), this); m_undoAction->setShortcut(QKeySequence("Ctrl+Z")); editMenu->addAction(m_undoAction); connect(m_undoAction, &QAction::triggered, [this]() { m_mediator->undo(); setupTrackAfterUndoOrRedo(); m_undoAction->setEnabled(m_mediator->isUndoable()); m_redoAction->setEnabled(m_mediator->isRedoable()); }); m_undoAction->setEnabled(false); // Add "redo"-action m_redoAction = new QAction(tr("Redo"), this); m_redoAction->setShortcut(QKeySequence("Ctrl+Shift+Z")); editMenu->addAction(m_redoAction); connect(m_redoAction, &QAction::triggered, [this]() { m_mediator->redo(); setupTrackAfterUndoOrRedo(); m_undoAction->setEnabled(m_mediator->isUndoable()); m_redoAction->setEnabled(m_mediator->isRedoable()); }); m_redoAction->setEnabled(false); // Add "Set track properties"-action m_setTrackPropertiesAction = new QAction(tr("&Set properties.."), this); editMenu->addAction(m_setTrackPropertiesAction); connect(m_setTrackPropertiesAction, &QAction::triggered, this, &MainWindow::setTrackProperties); m_setTrackPropertiesAction->setEnabled(false); // Create "route"-menu QMenu * routeMenu = menuBar()->addMenu(tr("&Route")); // Add "clear"-action m_clearRouteAction = new QAction(tr("Clear &route"), this); routeMenu->addAction(m_clearRouteAction); connect(m_clearRouteAction, &QAction::triggered, this, &MainWindow::clearRoute); m_clearRouteAction->setEnabled(false); // Add "set order"-action m_setRouteAction = new QAction(tr("&Set route.."), this); routeMenu->addAction(m_setRouteAction); connect(m_setRouteAction, &QAction::triggered, this, &MainWindow::beginSetRoute); m_setRouteAction->setEnabled(false); // Create "help"-menu QMenu * helpMenu = menuBar()->addMenu(tr("&Help")); // Add "about"-action QAction * aboutAct = new QAction(tr("&About"), this); helpMenu->addAction(aboutAct); connect(aboutAct, &QAction::triggered, this, &MainWindow::showAboutDlg); // Add "about Qt"-action QAction * aboutQtAct = new QAction(tr("About &Qt"), this); helpMenu->addAction(aboutQtAct); connect(aboutQtAct, &QAction::triggered, this, &MainWindow::showAboutQtDlg); } void MainWindow::populateToolBar() { // Add "select"-action QAction * p = new QAction(QIcon(QPixmap(Config::Editor::SELECT_ICON_PATH)), tr("Select"), this); p->setData(QVariant(QString("select"))); m_toolBar->addAction(p); // Add "erase"-action p = new QAction( QIcon(QPixmap(Config::Editor::ERASE_ICON_PATH)), tr("Erase object"), this); p->setData(QVariant(QString("erase"))); m_toolBar->addAction(p); // Add "clear"-action p = new QAction(QIcon(QPixmap(Config::Editor::CLEAR_ICON_PATH)), tr("Clear"), this); p->setData(QVariant(QString("clear"))); m_toolBar->addAction(p); connect(m_toolBar, &QToolBar::actionTriggered, this, &MainWindow::handleToolBarActionClick); m_toolBar->setEnabled(false); } void MainWindow::handleToolBarActionClick(QAction * action) { if (action != m_currentToolBarAction) { m_currentToolBarAction = action; // Select-action if (action->data() == "select") { clearEditMode(); } // The user wants to erase an object. else if (action->data() == "erase") { QApplication::restoreOverrideCursor(); QApplication::setOverrideCursor(QCursor(action->icon().pixmap(32, 32))); m_mediator->setMode(EditorMode::EraseObject); } // The user wants to clear a tile. else if (action->data() == "clear") { QApplication::restoreOverrideCursor(); QApplication::setOverrideCursor(QCursor(action->icon().pixmap(32, 32))); m_mediator->setMode(EditorMode::SetTileType); } // The user wants to set a tile type or clear it. else if (m_objectModelLoader->getCategoryByRole( action->data().toString()) == "tile") { QApplication::restoreOverrideCursor(); QApplication::setOverrideCursor(QCursor(action->icon().pixmap(32, 32))); m_mediator->setMode(EditorMode::SetTileType); } // The user wants to add an object to the scene. else if (m_objectModelLoader->getCategoryByRole( action->data().toString()) == "free") { QApplication::restoreOverrideCursor(); QApplication::setOverrideCursor(QCursor(QPixmap(":/cursor2.png"))); m_mediator->setMode(EditorMode::AddObject); } } else { clearEditMode(); m_currentToolBarAction = nullptr; } } void MainWindow::openTrack() { clearEditMode(); // Load recent path QSettings settings; settings.beginGroup(m_settingsGroup); QString path = settings.value("recentPath", QStandardPaths::writableLocation(QStandardPaths::HomeLocation)) .toString(); settings.endGroup(); const QString fileName = QFileDialog::getOpenFileName( this, tr("Open a track"), path, tr("Track Files (*.trk)")); if (!fileName.isEmpty()) { doOpenTrack(fileName); } } void MainWindow::showAboutDlg() { m_aboutDlg->exec(); } void MainWindow::showAboutQtDlg() { QMessageBox::aboutQt(this, tr("About Qt")); } void MainWindow::clearRoute() { m_mediator->clearRoute(); m_clearRouteAction->setEnabled(false); } bool MainWindow::doOpenTrack(QString fileName) { if (!QFile::exists(fileName)) { console(QString(tr("ERROR!!: %1 doesn't exist.").arg(fileName))); return false; } // Undo stack will be cleared. m_undoAction->setEnabled(false); m_redoAction->setEnabled(false); if (m_mediator->openTrack(fileName)) { console(QString(tr("Track '%1' opened.").arg(fileName))); setTitle(fileName); // Save recent path QSettings settings; settings.beginGroup(m_settingsGroup); settings.setValue("recentPath", fileName); settings.endGroup(); m_saveAction->setEnabled(true); setActionStatesOnNewTrack(); fitScale(); m_saved = true; m_clearRouteAction->setEnabled(m_mediator->routeHasNodes()); return true; } console(QString(tr("Failed to open track '")) + fileName + "'."); return false; } void MainWindow::beginSetRoute() { if (m_mediator->beginSetRoute()) { console(tr("Set route: begin.")); QMessageBox::information( this, tr("Set route, checkpoints and driving lines."), tr("Setting the route defines checkpoints for the cars so\n" "that no shortcuts can be taken. It also defines\n" "driving lines for the computer players.\n\n" "Click on the tiles one by one and make a closed loop\n" "with the target nodes. You can adjust the nodes afterwads.\n" "Start from the first tile after the finish line tile\n" "to make the lap detection and timing work correctly.\n" "Click on the first node again to finish.")); } else { console(tr("Set route: not a valid track.")); QMessageBox::critical(this, tr("Set route"), tr("Invalid track. Route cannot be set.")); } } void MainWindow::clearEditMode() { m_mediator->clearEditMode(); } void MainWindow::console(QString text) { QDateTime date = QDateTime::currentDateTime(); m_console->append(QString("(") + date.toString("hh:mm:ss") + "): " + text); } void MainWindow::enableUndo(bool enable) { m_undoAction->setEnabled(enable); } void MainWindow::endSetRoute() { m_mediator->endSetRoute(); m_clearRouteAction->setEnabled(m_mediator->routeHasNodes()); console(tr("Set route: route finished.")); } void MainWindow::fitScale() { m_scaleSlider->setValue(m_mediator->fitScale()); } void MainWindow::initializeNewTrack() { const auto trackData = m_mediator->initializeNewTrack(); if (std::get(trackData)) { // Undo stack has been cleared. m_undoAction->setEnabled(false); m_redoAction->setEnabled(false); fitScale(); setActionStatesOnNewTrack(); setTitle(tr("New file")); m_clearRouteAction->setEnabled(false); m_saved = false; console(QString(tr("A new track '%1' created. Columns: %2, Rows: %3.")) .arg(std::get<1>(trackData)) .arg(std::get<2>(trackData)) .arg(std::get<3>(trackData))); } QApplication::restoreOverrideCursor(); } void MainWindow::saveTrack() { QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); if (!m_saved) { saveAsTrack(); } else { if (m_mediator->saveTrackData()) { console(QString(tr("Track '")) + m_mediator->currentFileName() + tr("' saved.")); setTitle(m_mediator->currentFileName()); m_saved = true; } else { console(QString(tr("Failed to save track '")) + m_mediator->currentFileName() + "'."); } } QApplication::restoreOverrideCursor(); } void MainWindow::saveAsTrack() { QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); QString fileName = QFileDialog::getSaveFileName(this, tr("Save a track"), QStandardPaths::writableLocation(QStandardPaths::HomeLocation), tr("Track Files (*.trk)")); const QString trackFileExtension(".trk"); if (!fileName.endsWith(trackFileExtension)) { fileName += trackFileExtension; } if (m_mediator->saveTrackDataAs(fileName)) { console(QString(tr("Track '")) + fileName + tr("' saved.")); setTitle(fileName); m_saved = true; } else { console(QString(tr("Failed to save track as '")) + fileName + "'."); } QApplication::restoreOverrideCursor(); } void MainWindow::setupTrackAfterUndoOrRedo() { m_saveAction->setEnabled(true); setActionStatesOnNewTrack(); m_mediator->setupTrackAfterUndoOrRedo(); m_clearRouteAction->setEnabled(m_mediator->routeHasNodes()); } void MainWindow::setActionStatesOnNewTrack() { m_saveAction->setEnabled(true); m_saveAsAction->setEnabled(true); m_toolBar->setEnabled(true); m_setRouteAction->setEnabled(true); m_setTrackPropertiesAction->setEnabled(true); } void MainWindow::setTrackProperties() { if (m_mediator->setTrackProperties()) { console(QString(tr("Track properties updated."))); } } MainWindow::~MainWindow() = default; DustRacing2D-2.0.5/src/editor/mainwindow.hpp000066400000000000000000000076261360473665400207420ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MAINWINDOW_HPP #define MAINWINDOW_HPP #include #include #include #include class AboutDlg; class ObjectModelLoader; class QAction; class QCheckBox; class QSlider; class QTextEdit; class QToolBar; class Mediator; class TrackData; /*! \class MainWindow * \brief The main window of the editor. */ class MainWindow : public QMainWindow { Q_OBJECT public: //! Constructor. //! The constructor tries to load object models from //! Config::DATA_PATH/objects.conf. //! \param trackFile Track given as command line argument. explicit MainWindow(QString trackFile = ""); //! Destructor ~MainWindow() override; //! Return the singleton MainWindow. static MainWindow * instance(); //! Return the current tool bar action, or nullptr if none. QAction * currentToolBarAction() const; //! Print text to the console. void console(QString text); //! Get reference to the object loaded. ObjectModelLoader & objectModelLoader() const; //! Set Windows title + the given file name. void setTitle(QString openFileName); //! Return true if objects will be rotated at random. bool randomlyRotateObjects() const; public slots: //! Begin marking the route. void beginSetRoute(); void enableUndo(bool enable); //! End marking the route. void endSetRoute(); void setVisible(bool visible) override; void updateScaleSlider(int value); protected: void closeEvent(QCloseEvent * event) override; private slots: void clearRoute(); bool doOpenTrack(QString fileName); void handleToolBarActionClick(QAction * action); void initializeNewTrack(); void saveTrack(); void saveAsTrack(); void setTrackProperties(); void setupTrackAfterUndoOrRedo(); void showAboutDlg(); void showAboutQtDlg(); void showTip(); void openArgTrack(); void openTrack(); void updateScale(int value); private: void addObjectsToToolBar(); void clearEditMode(); void createWidgets(); void fitScale(); void init(); bool loadObjectModels(QString objectFilePath); void populateMenuBar(); void populateToolBar(); void setActionStatesOnNewTrack(); std::unique_ptr m_objectModelLoader; std::unique_ptr m_mediator; AboutDlg * m_aboutDlg; QTextEdit * m_console; QAction * m_saveAction = nullptr; QAction * m_saveAsAction = nullptr; QAction * m_currentToolBarAction = nullptr; QAction * m_undoAction = nullptr; QAction * m_redoAction = nullptr; QAction * m_clearRouteAction = nullptr; QAction * m_setRouteAction = nullptr; QAction * m_setTrackPropertiesAction = nullptr; QSlider * m_scaleSlider = nullptr; QToolBar * m_toolBar = nullptr; QCheckBox * m_randomRotationCheck = nullptr; QString m_argTrackFile; bool m_saved = false; const char * m_settingsGroup = "MainWindow"; const unsigned int m_minZoom = 0; const unsigned int m_maxZoom = 200; const unsigned int m_initZoom = 100; const int m_consoleHeight = 64; static MainWindow * m_instance; }; #endif // MAINWINDOW_HPP DustRacing2D-2.0.5/src/editor/map.cpp000066400000000000000000000076221360473665400173320ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "map.hpp" #include "tracktile.hpp" #include #include #include Map::Map(size_t cols, size_t rows) : MapBase(cols, rows) { createEmptyTiles(); } Map::Map(const Map & other) : MapBase(other.cols(), other.rows()) { copyTiles(other); } void Map::copyTiles(const Map & other) { // Create tiles and set coordinates. for (size_t j = 0; j < rows(); j++) { for (size_t i = 0; i < cols(); i++) { setTile(i, j, std::make_shared(*std::dynamic_pointer_cast(other.getTile(i, j)))); } } } void Map::createEmptyTiles() { // Create tiles and set coordinates. for (size_t j = 0; j < rows(); j++) { for (size_t i = 0; i < cols(); i++) { if (!getTile(i, j)) { const auto newTile = std::make_shared( QPointF(TrackTile::width() / 2 + i * TrackTile::width(), TrackTile::height() / 2 + j * TrackTile::height()), QPoint(static_cast(i), static_cast(j))); setTile(i, j, newTile); } else { getTile(i, j)->setLocation( QPointF( TrackTile::width() / 2 + i * TrackTile::width(), TrackTile::height() / 2 + j * TrackTile::height())); getTile(i, j)->setMatrixLocation(QPoint(static_cast(i), static_cast(j))); } } } } void Map::moveTilesAfterColumnDeletion(size_t at) { for (size_t j = 0; j < rows(); j++) { for (size_t i = at + 1; i < cols(); i++) { const QPointF location(getTile(i, j)->location()); getTile(i, j)->setLocation( QPointF( location.x() - TrackTile::width(), location.y())); getTile(i, j)->setMatrixLocation(QPoint(static_cast(i) - 1, static_cast(j))); } } } void Map::moveTilesAfterRowDeletion(size_t at) { for (size_t j = at + 1; j < rows(); j++) { for (size_t i = 0; i < cols(); i++) { const QPointF location(getTile(i, j)->location()); getTile(i, j)->setLocation( QPointF( location.x(), location.y() - TrackTile::height())); getTile(i, j)->setMatrixLocation(QPoint(static_cast(i), static_cast(j) - 1)); } } } void Map::resize(size_t newCols, size_t newRows) { MapBase::resize(newCols, newRows); createEmptyTiles(); } size_t Map::insertColumn(size_t at, InsertDirection insertDirection) { at = MapBase::insertColumn(at, insertDirection); createEmptyTiles(); return at; } std::vector Map::deleteColumn(size_t at) { moveTilesAfterColumnDeletion(at); return MapBase::deleteColumn(at); } size_t Map::insertRow(size_t at, InsertDirection insertDirection) { at = MapBase::insertRow(at, insertDirection); createEmptyTiles(); return at; } std::vector Map::deleteRow(size_t at) { moveTilesAfterRowDeletion(at); return MapBase::deleteRow(at); } Map::~Map() { } DustRacing2D-2.0.5/src/editor/map.hpp000066400000000000000000000031131360473665400173260ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MAP_HPP #define MAP_HPP #include "../common/mapbase.hpp" //! Base class for the tile matrix used by TrackData. class Map : public MapBase { public: //! Constuctor. Map(size_t cols, size_t rows); //! Copy constructor. Map(const Map & other); void resize(size_t newCols, size_t newRows) override; size_t insertColumn(size_t at, InsertDirection insertDirection) override; std::vector deleteColumn(size_t at) override; size_t insertRow(size_t at, InsertDirection insertDirection) override; std::vector deleteRow(size_t at) override; //! Destructor. virtual ~Map() override; private: void moveTilesAfterColumnDeletion(size_t at); void moveTilesAfterRowDeletion(size_t at); void copyTiles(const Map & other); void createEmptyTiles(); }; #endif // MAP_HPP DustRacing2D-2.0.5/src/editor/mediator.cpp000066400000000000000000000256561360473665400203700ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2018 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "mediator.hpp" #include "draganddropstore.hpp" #include "editordata.hpp" #include "editorview.hpp" #include "floodfill.hpp" #include "mainwindow.hpp" #include "newtrackdialog.hpp" #include "object.hpp" #include "objectfactory.hpp" #include "trackdata.hpp" #include "trackpropertiesdialog.hpp" #include "tracktile.hpp" #include #include #include #include #include #include Mediator::Mediator(MainWindow & mainWindow) : m_editorData(std::make_unique(*this)) , m_editorScene(new QGraphicsScene) , m_editorView(new EditorView(*this)) , m_mainWindow(mainWindow) { m_editorView->setParent(&mainWindow); } void Mediator::addCurrentToolBarObjectToScene(QPointF clickedScenePos) { if (const auto action = MainWindow::instance()->currentToolBarAction()) { saveUndoPoint(); const auto object = std::make_shared(ObjectFactory::createObject(action->data().toString())); object->setLocation(clickedScenePos); if (MainWindow::instance()->randomlyRotateObjects()) { object->setRotation(std::rand() % 360); } addObject(object); setSelectedObject(object.get()); } } void Mediator::addItem(QGraphicsItem * item) { m_editorScene->addItem(item); } void Mediator::addObject(std::shared_ptr object) { m_editorScene->addItem(object.get()); m_editorData->trackData()->objects().add(object); } void Mediator::addViewToLayout(QLayout * layout) { layout->addWidget(m_editorView); } bool Mediator::beginSetRoute() { QApplication::restoreOverrideCursor(); assert(m_editorData); m_editorData->saveUndoPoint(); if (m_editorData->canRouteBeSet()) { m_editorData->beginSetRoute(); return true; } return false; } void Mediator::console(QString message) { m_mainWindow.console(message); } QString Mediator::currentFileName() const { return m_editorData->trackData()->fileName(); } QAction * Mediator::currentToolBarAction() const { return m_mainWindow.currentToolBarAction(); } DragAndDropStore & Mediator::dadStore() { return m_editorData->dadStore(); } void Mediator::deleteColumn() { auto deleted = m_editorData->trackData()->deleteColumn(m_editorData->activeColumn()); for (auto && tile : deleted) { m_editorData->removeTileFromScene(tile); } } void Mediator::deleteRow() { auto deleted = m_editorData->trackData()->deleteRow(m_editorData->activeRow()); for (auto && tile : deleted) { m_editorData->removeTileFromScene(tile); } } void Mediator::floodFill(TrackTile & tile, QAction * action, const QString & typeToFill) { saveUndoPoint(); FloodFill::floodFill(tile, action, typeToFill, m_editorData->trackData()->map()); } void Mediator::endSetRoute() { setMode(EditorMode::None); } void Mediator::enableUndo(bool enable) { m_mainWindow.enableUndo(enable); } int Mediator::fitScale() { m_editorView->centerOn(m_editorView->sceneRect().center()); return static_cast(m_editorView->viewport()->height() * 100 / m_editorView->sceneRect().height()); } std::tuple Mediator::initializeNewTrack() { assert(m_editorData); // Show a dialog asking some questions about the track NewTrackDialog dialog(&m_mainWindow); if (dialog.exec() == QDialog::Accepted) { m_editorData->setTrackData(std::make_shared(dialog.name(), dialog.isUserTrack(), dialog.cols(), dialog.rows())); delete m_editorScene; m_editorScene = new QGraphicsScene; m_editorView->setScene(m_editorScene); m_editorView->updateSceneRect(); m_editorData->addTilesToScene(); m_editorData->addObjectsToScene(); return std::make_tuple(true, dialog.name(), dialog.cols(), dialog.rows()); } return {}; } void Mediator::insertColumnAfter() { m_editorData->trackData()->insertColumn(m_editorData->activeColumn(), MapBase::InsertDirection::After); m_editorData->addTilesToScene(); } void Mediator::insertColumnBefore() { m_editorData->trackData()->insertColumn(m_editorData->activeColumn(), MapBase::InsertDirection::Before); m_editorData->addTilesToScene(); } void Mediator::insertRowAfter() { m_editorData->trackData()->insertRow(m_editorData->activeRow(), MapBase::InsertDirection::After); m_editorData->addTilesToScene(); } void Mediator::insertRowBefore() { m_editorData->trackData()->insertRow(m_editorData->activeRow(), MapBase::InsertDirection::Before); m_editorData->addTilesToScene(); } void Mediator::initScene() { m_editorView->setScene(m_editorScene); m_editorView->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); m_editorView->setMouseTracking(true); } bool Mediator::isUndoable() const { return m_editorData->isUndoable(); } void Mediator::clearEditMode() { QApplication::restoreOverrideCursor(); setMode(EditorMode::None); } void Mediator::clearRoute() { assert(m_editorData); m_editorData->saveUndoPoint(); m_editorData->clearRoute(); } int Mediator::cols() { if (m_editorData->trackData()) { return static_cast(m_editorData->trackData()->map().cols()); } return 0; } bool Mediator::openTrack(QString fileName) { assert(m_editorData); if (m_editorData->loadTrackData(fileName)) { delete m_editorScene; m_editorScene = new QGraphicsScene; m_editorView->setScene(m_editorScene); m_editorView->updateSceneRect(); m_editorData->addTilesToScene(); m_editorData->addObjectsToScene(); m_editorData->addExistingRouteToScene(); return true; } return false; } bool Mediator::isRedoable() const { return m_editorData->isRedoable(); } void Mediator::mouseWheelZoom(int delta) { const int sensitivity = 10; const int currentScale = m_editorData->currentScale(); const int maxScale = 200; int newScale = currentScale; if (delta < 0) { if (currentScale > sensitivity) { newScale = currentScale - sensitivity; } else { newScale = 0; } } else if (delta > 0) { if (currentScale + sensitivity < maxScale) { newScale = currentScale + sensitivity; } else { newScale = maxScale; } } if (newScale != currentScale) { setScale(newScale); m_mainWindow.updateScaleSlider(newScale); } } void Mediator::pushNewTargetNodeToRoute(QPointF pos) { m_editorData->pushNewTargetNodeToRoute(pos); } void Mediator::redo() { m_editorData->redo(); } void Mediator::removeItem(QGraphicsItem * item) { m_editorScene->removeItem(item); } void Mediator::removeObject(Object & object) { m_editorScene->removeItem(&object); m_editorData->trackData()->objects().remove(object); } bool Mediator::routeHasNodes() const { return m_editorData->trackData()->route().numNodes(); } void Mediator::saveUndoPoint() { m_editorData->saveUndoPoint(); } bool Mediator::saveTrackData() { return m_editorData->saveTrackData(); } bool Mediator::saveTrackDataAs(QString fileName) { return m_editorData->saveTrackDataAs(fileName); } void Mediator::setMode(EditorMode mode) { m_mode = mode; } void Mediator::setSelectedObject(Object * object) { m_editorData->setSelectedObject(object); } Object * Mediator::selectedObject() const { return m_editorData->selectedObject(); } void Mediator::setSelectedTargetNode(TargetNode * tnode) { m_editorData->setSelectedTargetNode(tnode); } TargetNode * Mediator::selectedTargetNode() const { return m_editorData->selectedTargetNode(); } void Mediator::setScale(int value) { const qreal scale = static_cast(value) / 100; QTransform transform; transform.scale(scale, scale); m_editorView->setTransform(transform); m_editorData->setCurrentScale(value); } EditorMode Mediator::mode() const { return m_mode; } int Mediator::rows() { if (m_editorData->trackData()) { return static_cast(m_editorData->trackData()->map().rows()); } return 0; } bool Mediator::setTrackProperties() { assert(m_editorData); // Show a dialog to set some properties e.g. lap count. TrackPropertiesDialog dialog( m_editorData->trackData()->name(), m_editorData->trackData()->index(), m_editorData->trackData()->isUserTrack(), &m_mainWindow); if (dialog.exec() == QDialog::Accepted) { m_editorData->trackData()->setName(dialog.name()); m_editorData->trackData()->setIndex(dialog.index()); m_editorData->trackData()->setUserTrack(dialog.isUserTrack()); return true; } return false; } void Mediator::showStatusBarMessage(QString message) { m_mainWindow.statusBar()->showMessage(message); } void Mediator::setupTrackAfterUndoOrRedo() { delete m_editorScene; m_editorScene = new QGraphicsScene; m_editorView->setScene(m_editorScene); m_editorView->updateSceneRect(); m_editorData->addTilesToScene(); m_editorData->addObjectsToScene(); m_editorData->addExistingRouteToScene(); } void Mediator::undo() { m_editorData->undo(); } void Mediator::updateCoordinates(QPointF mappedPos) { if (m_editorData->trackData()) { const int maxCols = static_cast(m_editorData->trackData()->map().cols()); int column = static_cast(mappedPos.x() / TrackTile::width()); column = column >= maxCols ? maxCols - 1 : column; column = column < 0 ? 0 : column; const int maxRows = static_cast(m_editorData->trackData()->map().rows()); int row = static_cast(mappedPos.y() / TrackTile::height()); row = row >= maxRows ? maxRows - 1 : row; row = row < 0 ? 0 : row; m_editorData->setActiveRow(static_cast(row)); m_editorData->setActiveColumn(static_cast(column)); QString coordinates("X: %1 Y: %2 I: %3 J: %4"); coordinates = coordinates.arg(mappedPos.x()).arg(mappedPos.y()).arg(column).arg(row); showStatusBarMessage(coordinates); } } void Mediator::updateView() { m_editorView->update(); } Mediator::~Mediator() = default; DustRacing2D-2.0.5/src/editor/mediator.hpp000066400000000000000000000064711360473665400203670ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2018 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MEDIATOR_HPP #define MEDIATOR_HPP #include #include "editormode.hpp" #include "targetnode.hpp" #include #include class DragAndDropStore; class EditorData; class EditorView; class MainWindow; class TrackTile; class Object; class QAction; class QGraphicsScene; class QLayout; /*! Acts as a communication channel between MainWindow and editor components: * * - MainWindow <-> Mediator <-> QGraphicsScene / EditorView / EditorData * - EditorView <-> Mediator <-> EditorData */ class Mediator { public: explicit Mediator(MainWindow & mainWindow); ~Mediator(); void addCurrentToolBarObjectToScene(QPointF clickedScenePos); void addItem(QGraphicsItem * item); void addObject(std::shared_ptr object); void addViewToLayout(QLayout * layout); bool beginSetRoute(); void clearEditMode(); void clearRoute(); int cols(); void console(QString message); QString currentFileName() const; QAction * currentToolBarAction() const; DragAndDropStore & dadStore(); void deleteColumn(); void deleteRow(); void endSetRoute(); void enableUndo(bool enable); void floodFill(TrackTile & tile, QAction * action, const QString & typeToFill); int fitScale(); void initScene(); std::tuple initializeNewTrack(); void insertColumnAfter(); void insertColumnBefore(); void insertRowAfter(); void insertRowBefore(); bool isUndoable() const; bool isRedoable() const; void mouseWheelZoom(int delta); bool openTrack(QString fileName); void pushNewTargetNodeToRoute(QPointF pos); void redo(); void removeItem(QGraphicsItem * item); void removeObject(Object & object); bool routeHasNodes() const; int rows(); void saveUndoPoint(); bool saveTrackData(); bool saveTrackDataAs(QString fileName); void setScale(int value); void setMode(EditorMode newMode); EditorMode mode() const; void setSelectedObject(Object * object); Object * selectedObject() const; void setSelectedTargetNode(TargetNode * tnode); TargetNode * selectedTargetNode() const; bool setTrackProperties(); void showStatusBarMessage(QString message); void setupTrackAfterUndoOrRedo(); void undo(); void updateCoordinates(QPointF mappedPos); void updateView(); private: std::unique_ptr m_editorData; QGraphicsScene * m_editorScene; EditorView * m_editorView; MainWindow & m_mainWindow; EditorMode m_mode = EditorMode::None; }; #endif // MEDIATOR_HPP DustRacing2D-2.0.5/src/editor/newtrackdialog.cpp000066400000000000000000000056031360473665400215500ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "newtrackdialog.hpp" #include #include #include #include #include #include #include NewTrackDialog::NewTrackDialog(QWidget * parent) : QDialog(parent) , m_layout(new QGridLayout(this)) , m_okButton(new QPushButton(tr("Ok"))) , m_cancelButton(new QPushButton(tr("Cancel"))) , m_colsEdit(new QLineEdit) , m_rowsEdit(new QLineEdit) , m_nameEdit(new QLineEdit) , m_colsLabel(new QLabel(tr("Number of tile columns:"))) , m_rowsLabel(new QLabel(tr("Number of tile rows:"))) , m_nameLabel(new QLabel(tr("Track name:"))) , m_userLabel(new QLabel(tr("User track:"))) , m_userCheck(new QCheckBox) { setWindowTitle(tr("Create a new track")); m_userCheck->setChecked(true); m_okButton->setEnabled(false); m_layout->addWidget(m_nameLabel, 0, 0); m_layout->addWidget(m_nameEdit, 0, 1); m_layout->addWidget(m_userLabel, 1, 0); m_layout->addWidget(m_userCheck, 1, 1); m_layout->addWidget(m_colsLabel, 2, 0); m_layout->addWidget(m_colsEdit, 2, 1); m_layout->addWidget(m_rowsLabel, 3, 0); m_layout->addWidget(m_rowsEdit, 3, 1); m_layout->addWidget(m_okButton, 4, 0); m_layout->addWidget(m_cancelButton, 4, 1); connect(m_nameEdit, &QLineEdit::textChanged, this, &NewTrackDialog::validateData); connect(m_rowsEdit, &QLineEdit::textChanged, this, &NewTrackDialog::validateData); connect(m_colsEdit, &QLineEdit::textChanged, this, &NewTrackDialog::validateData); connect(m_okButton, &QPushButton::clicked, this, &NewTrackDialog::accept); connect(m_cancelButton, &QPushButton::clicked, this, &NewTrackDialog::reject); } unsigned int NewTrackDialog::cols() const { return m_colsEdit->text().toInt(); } unsigned int NewTrackDialog::rows() const { return m_rowsEdit->text().toInt(); } QString NewTrackDialog::name() const { return m_nameEdit->text(); } bool NewTrackDialog::isUserTrack() const { return m_userCheck->isChecked(); } void NewTrackDialog::validateData() { m_okButton->setEnabled( m_nameEdit->text().length() > 0 && m_colsEdit->text().toInt() > 1 && m_rowsEdit->text().toInt() > 1); } DustRacing2D-2.0.5/src/editor/newtrackdialog.hpp000066400000000000000000000033051360473665400215520ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef NEWTRACKDIALOG_HPP #define NEWTRACKDIALOG_HPP #include class QCheckBox; class QGridLayout; class QLabel; class QLineEdit; class QPushButton; //! Dialog displayed when user wants to create a new track. class NewTrackDialog : public QDialog { Q_OBJECT public: //! Constructor. explicit NewTrackDialog(QWidget * parent = nullptr); //! Get column count. unsigned int cols() const; //! Get row count. unsigned int rows() const; //! Get name. QString name() const; //! Return true if unlocked user track. bool isUserTrack() const; private slots: void validateData(); private: QGridLayout * m_layout; QPushButton * m_okButton; QPushButton * m_cancelButton; QLineEdit * m_colsEdit; QLineEdit * m_rowsEdit; QLineEdit * m_nameEdit; QLabel * m_colsLabel; QLabel * m_rowsLabel; QLabel * m_nameLabel; QLabel * m_userLabel; QCheckBox * m_userCheck; }; #endif // NEWTRACKDIALOG_HPP DustRacing2D-2.0.5/src/editor/object.cpp000066400000000000000000000035011360473665400200130ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "object.hpp" #include Object::Object(QString category, QString role, QSizeF size, QPixmap pixmap) : ObjectBase(category, role) , m_size(size) , m_pixmap(pixmap) { } Object::Object(const Object & other) : QGraphicsItem() , ObjectBase(other.category(), other.role()) , m_size(other.m_size) , m_pixmap(other.m_pixmap) { setLocation(other.location()); setRotation(other.rotation()); setForceStationary(other.forceStationary()); } Object::Object(std::unique_ptr other) : Object(*other) { } QRectF Object::boundingRect() const { return QRectF(-m_size.width() / 2, -m_size.height() / 2, m_size.width(), m_size.height()); } void Object::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { Q_UNUSED(widget) Q_UNUSED(option) painter->save(); painter->drawPixmap(boundingRect().x(), boundingRect().y(), boundingRect().width(), boundingRect().height(), m_pixmap); painter->restore(); } void Object::setLocation(QPointF newLocation) { ObjectBase::setLocation(newLocation); setPos(newLocation); } DustRacing2D-2.0.5/src/editor/object.hpp000066400000000000000000000031351360473665400200230ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef OBJECT_HPP #define OBJECT_HPP #include #include #include "../common/objectbase.hpp" //! Freely placeable object. class Object : public QGraphicsItem, public ObjectBase { public: //! Constructor. Object(QString category, QString role, QSizeF size, QPixmap pixmap); //! Copy constructor. Object(const Object & other); Object(std::unique_ptr other); virtual QRectF boundingRect() const override; virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = nullptr) override; //! Sets the Object and QGraphicsItem locations. virtual void setLocation(QPointF newLocation) override; private: //! Original size in pixels. QSizeF m_size; //! Image of the object. QPixmap m_pixmap; }; using ObjectPtr = std::shared_ptr; #endif // OBJECT_HPP DustRacing2D-2.0.5/src/editor/objectfactory.cpp000066400000000000000000000025031360473665400214040ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "objectfactory.hpp" #include "mainwindow.hpp" #include "object.hpp" #include "objectmodel.hpp" #include "objectmodelloader.hpp" std::unique_ptr ObjectFactory::createObject(QString role) { const auto model = MainWindow::instance()->objectModelLoader().getObjectModelByRole(role); size_t w = model.width; w = w > 0 ? w : static_cast(model.pixmap.width()); size_t h = model.height; h = h > 0 ? h : static_cast(model.pixmap.height()); return std::make_unique( model.category, role, QSizeF(w, h), model.pixmap); } DustRacing2D-2.0.5/src/editor/objectfactory.hpp000066400000000000000000000020511360473665400214070ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef OBJECTFACTORY_HPP #define OBJECTFACTORY_HPP #include #include class Object; //! Creates Objects from given role. namespace ObjectFactory { /*! Create an Objects from given role. */ std::unique_ptr createObject(QString role); } // namespace ObjectFactory #endif // OBJECTFACTORY_HPP DustRacing2D-2.0.5/src/editor/objectmodel.hpp000066400000000000000000000025011360473665400210400ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef OBJECTMODEL_HPP #define OBJECTMODEL_HPP #include #include //! Structure used by ObjectLoader. struct ObjectModel { //! Path to the image representing this object. QPixmap pixmap; //! Category of this object. QString category; //! Role of this object. QString role; //! Width when added to the scene. //! Applies only to certain kind (category) of objects. unsigned int width; //! Height when added to the scene. //! Applies only to certain kind (category) of objects. unsigned int height; }; #endif // OBJECTMODEL_HPP DustRacing2D-2.0.5/src/editor/objectmodelloader.cpp000066400000000000000000000073211360473665400222270ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include #include #include #include #include "../common/config.hpp" #include "mainwindow.hpp" #include "objectmodelloader.hpp" ObjectModelLoader::ObjectModelLoader() { } bool ObjectModelLoader::load(QString path) { QDomDocument doc; QFile file(path); if (!file.open(QIODevice::ReadOnly)) { return false; } if (!doc.setContent(&file)) { file.close(); return false; } file.close(); const auto root = doc.documentElement(); const auto version = root.attribute("version", Config::Editor::EDITOR_VERSION); m_objects.clear(); auto node = root.firstChild(); while (!node.isNull()) { const auto tag = node.toElement(); if (!tag.isNull()) { // Parse an object tag if (tag.nodeName() == "object") { ObjectModel newData; newData.category = tag.attribute("category", "undefined"); newData.role = tag.attribute("role", "undefined"); newData.width = tag.attribute("width", "0").toUInt(); newData.height = tag.attribute("height", "0").toUInt(); auto imagePath = tag.attribute("imagePath", "undefined"); // The corresponding image is loaded // from Config::DATA_PATH/model.imagePath. // Check that it's available and load it. imagePath = QString(Config::General::dataPath) + QDir::separator() + imagePath; if (QFile::exists(imagePath)) { newData.pixmap = QPixmap(imagePath); m_objects << newData; } else { MainWindow::instance()->console("WARNING!!: " + imagePath + " cannot be read."); } } node = node.nextSibling(); } } return true; } ObjectModelLoader::ObjectDataVector ObjectModelLoader::getObjectModelsByCategory(QString category) const { ObjectDataVector result; for (auto && object : m_objects) { if (object.category == category) { result << object; } } return result; } ObjectModel ObjectModelLoader::getObjectModelByRole(QString role) const { for (auto && object : m_objects) { if (object.role == role) { return object; } } return {}; } QString ObjectModelLoader::getCategoryByRole(QString role) const { for (auto && object : m_objects) { if (object.role == role) { return object.category; } } return {}; } ObjectModelLoader::ObjectDataVector ObjectModelLoader::objects() const { return m_objects; } QPixmap ObjectModelLoader::getPixmapByRole(QString role) const { for (auto && object : m_objects) { if (object.role == role) { return object.pixmap; } } return {}; } DustRacing2D-2.0.5/src/editor/objectmodelloader.hpp000066400000000000000000000034111360473665400222300ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef OBJECT_MODEL_LOADER_HPP #define OBJECT_MODEL_LOADER_HPP #include #include "objectmodel.hpp" //! Class that loads and manages object models used to //! build race tracks. class ObjectModelLoader { public: typedef QVector ObjectDataVector; //! Constructor. ObjectModelLoader(); //! Load data from the given file. //! \param filePath The config file to be used. //! \return true If failed succeeded. bool load(QString path); //! Get all object models of the given category. ObjectDataVector getObjectModelsByCategory(QString category) const; //! Get object model of the given role. ObjectModel getObjectModelByRole(QString role) const; //! Get category by role. QString getCategoryByRole(QString role) const; //! Get all objects. ObjectDataVector objects() const; //! Get pixmap by role. QPixmap getPixmapByRole(QString role) const; private: Q_DISABLE_COPY(ObjectModelLoader) ObjectDataVector m_objects; }; #endif // OBJECT_MODEL_LOADER_HPP DustRacing2D-2.0.5/src/editor/rotatedialog.cpp000066400000000000000000000034261360473665400212310ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "rotatedialog.hpp" #include #include #include #include #include #include RotateDialog::RotateDialog(QWidget * parent) : QDialog(parent) , m_layout(new QGridLayout(this)) , m_okButton(new QPushButton(tr("Ok"))) , m_cancelButton(new QPushButton(tr("Cancel"))) , m_angleEdit(new QLineEdit) , m_angleLabel(new QLabel(tr("Angle in degrees:"))) { setWindowTitle(tr("Rotate Object")); QIntValidator * validator = new QIntValidator(this); validator->setRange(-360, 360); m_angleEdit->setValidator(validator); m_angleEdit->setText("90"); m_layout->addWidget(m_angleLabel, 0, 0); m_layout->addWidget(m_angleEdit, 0, 1); m_layout->addWidget(m_okButton, 3, 0); m_layout->addWidget(m_cancelButton, 3, 1); connect(m_okButton, &QPushButton::clicked, this, &RotateDialog::accept); connect(m_cancelButton, &QPushButton::clicked, this, &RotateDialog::reject); } int RotateDialog::angle() const { return m_angleEdit->text().toInt(); } DustRacing2D-2.0.5/src/editor/rotatedialog.hpp000066400000000000000000000022671360473665400212400ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef ROTATEDIALOG_HPP #define ROTATEDIALOG_HPP #include class QGridLayout; class QLabel; class QLineEdit; class QPushButton; class RotateDialog : public QDialog { Q_OBJECT public: explicit RotateDialog(QWidget * parent = 0); int angle() const; private: QGridLayout * m_layout; QPushButton * m_okButton; QPushButton * m_cancelButton; QLineEdit * m_angleEdit; QLabel * m_angleLabel; }; #endif // ROTATEDIALOG_HPP DustRacing2D-2.0.5/src/editor/targetnode.cpp000066400000000000000000000062271360473665400207110ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "targetnode.hpp" #include "tracktile.hpp" #include #include #include #include #include static const int LINE_WIDTH = 15; static const QColor ROUTE_LINE_COLOR(0, 0, 255, 128); static const QColor FIRST_NODE_COLOR(255, 255, 255, 128); static const QColor NODE_COLOR(ROUTE_LINE_COLOR); TargetNode::TargetNode() : m_routeLine(nullptr) { } TargetNode::TargetNode(const TargetNode & other) : QGraphicsItem() , TargetNodeBase() , m_routeLine(nullptr) { setIndex(other.index()); setLocation(other.location()); setSize(other.size()); } void TargetNode::setRouteLine(QGraphicsLineItem * routeLine) { m_routeLine = routeLine; m_routeLine->setPen( QPen(QBrush(ROUTE_LINE_COLOR), LINE_WIDTH, Qt::DashDotDotLine, Qt::RoundCap)); } QGraphicsLineItem * TargetNode::routeLine() const { return m_routeLine; } QRectF TargetNode::boundingRect() const { return QRectF( -size().width() / 2 - LINE_WIDTH, -size().height() / 2 - LINE_WIDTH, size().width() + LINE_WIDTH, size().height() + LINE_WIDTH); } void TargetNode::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { Q_UNUSED(widget); Q_UNUSED(option); painter->save(); if (index() == 0) { painter->setPen(QPen(QBrush(FIRST_NODE_COLOR), LINE_WIDTH)); } else { painter->setPen(QPen(QBrush(NODE_COLOR), LINE_WIDTH)); } // Outline painter->drawRect( boundingRect().x() + LINE_WIDTH, boundingRect().y() + LINE_WIDTH, boundingRect().width() - LINE_WIDTH * 2, boundingRect().height() - LINE_WIDTH * 2); // Circle in the middle painter->drawEllipse( QPointF( boundingRect().x() + boundingRect().width() / 2 + LINE_WIDTH / 2, boundingRect().y() + boundingRect().height() / 2 + LINE_WIDTH / 2), LINE_WIDTH, LINE_WIDTH); painter->restore(); } void TargetNode::setLocation(QPointF newLocation) { TargetNodeBase::setLocation(newLocation); setPos(newLocation); updateRouteLine(); if (auto prevPtr = std::dynamic_pointer_cast(prev())) { prevPtr->updateRouteLine(); } } void TargetNode::updateRouteLine() { if (m_routeLine && next()) { m_routeLine->setLine( location().x(), location().y(), next()->location().x(), next()->location().y()); } } DustRacing2D-2.0.5/src/editor/targetnode.hpp000066400000000000000000000035641360473665400207170ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TARGETNODE_HPP #define TARGETNODE_HPP #include "../common/targetnodebase.hpp" #include class QGraphicsLineItem; //! Freely placeable target node. class TargetNode : public QGraphicsItem, public TargetNodeBase { public: //! Constructor. TargetNode(); //! Copy constructor. TargetNode(const TargetNode & other); virtual QRectF boundingRect() const override; virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0) override; //! Sets the TargetNode and QGraphicsItem locations. virtual void setLocation(QPointF newLocation) override; //! Set a line item that is drawn from a node to the next node. void setRouteLine(QGraphicsLineItem * routeLine); //! Get the route line. //! \returns Valid pointer or nullptr if not set. QGraphicsLineItem * routeLine() const; void updateRouteLine(); private: //! Line that is drawn from a node to the next node //! according to the route vector. QGraphicsLineItem * m_routeLine; }; using TargetNodePtr = std::shared_ptr; #endif // TARGETNODE_HPP DustRacing2D-2.0.5/src/editor/targetnodesizedlg.cpp000066400000000000000000000046221360473665400222700ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "targetnodesizedlg.hpp" #include "tracktile.hpp" #include #include #include #include #include #include TargetNodeSizeDlg::TargetNodeSizeDlg(QSizeF defaultSize, QWidget * parent) : QDialog(parent) , m_layout(new QGridLayout(this)) , m_okButton(new QPushButton(tr("Ok"))) , m_cancelButton(new QPushButton(tr("Cancel"))) , m_widthEdit(new QLineEdit) , m_widthLabel(new QLabel(tr("Width:"))) , m_heightEdit(new QLineEdit) , m_heightLabel(new QLabel(tr("Height:"))) { setWindowTitle(tr("Set target node size")); QIntValidator * widthValidator = new QIntValidator(this); widthValidator->setRange(TrackTile::width() / 2, TrackTile::width() * 4); m_widthEdit->setValidator(widthValidator); m_widthEdit->setText(QString("%1").arg(defaultSize.width())); QIntValidator * heightValidator = new QIntValidator(this); heightValidator->setRange(TrackTile::height() / 2, TrackTile::height() * 4); m_heightEdit->setValidator(widthValidator); m_heightEdit->setText(QString("%1").arg(defaultSize.height())); m_layout->addWidget(m_widthLabel, 0, 0); m_layout->addWidget(m_widthEdit, 0, 1); m_layout->addWidget(m_heightLabel, 1, 0); m_layout->addWidget(m_heightEdit, 1, 1); m_layout->addWidget(m_okButton, 3, 0); m_layout->addWidget(m_cancelButton, 3, 1); connect(m_okButton, &QPushButton::clicked, this, &TargetNodeSizeDlg::accept); connect(m_cancelButton, &QPushButton::clicked, this, &TargetNodeSizeDlg::reject); } QSizeF TargetNodeSizeDlg::targetNodeSize() const { return QSizeF(m_widthEdit->text().toInt(), m_heightEdit->text().toInt()); } DustRacing2D-2.0.5/src/editor/targetnodesizedlg.hpp000066400000000000000000000024521360473665400222740ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TARGETNODESIZEDLG_HPP #define TARGETNODESIZEDLG_HPP #include class QGridLayout; class QLabel; class QLineEdit; class QPushButton; class TargetNodeSizeDlg : public QDialog { Q_OBJECT public: explicit TargetNodeSizeDlg(QSizeF defaultSize, QWidget * parent = 0); QSizeF targetNodeSize() const; private: QGridLayout * m_layout; QPushButton * m_okButton; QPushButton * m_cancelButton; QLineEdit * m_widthEdit; QLabel * m_widthLabel; QLineEdit * m_heightEdit; QLabel * m_heightLabel; }; #endif // TARGETNODESIZEDLG_HPP DustRacing2D-2.0.5/src/editor/tileanimator.cpp000066400000000000000000000031141360473665400212350ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "tileanimator.hpp" #include "tracktile.hpp" #include const int FRAMES = 30; TileAnimator::TileAnimator(TrackTile * tile) : QTimeLine(250) , m_tile(tile) { setFrameRange(0, FRAMES); connect(this, &TileAnimator::frameChanged, this, &TileAnimator::setTileRotation); } bool TileAnimator::rotate90CW() { if (state() == QTimeLine::NotRunning) { m_a0 = m_tile->rotation(); m_a1 = m_tile->rotation() + 90; start(); return true; } return false; } bool TileAnimator::rotate90CCW() { if (state() == QTimeLine::NotRunning) { m_a0 = m_tile->rotation(); m_a1 = m_tile->rotation() - 90; start(); return true; } return false; } void TileAnimator::setTileRotation(int frame) { m_tile->setRotation(m_a0 + frame * (m_a1 - m_a0) / FRAMES); } DustRacing2D-2.0.5/src/editor/tileanimator.hpp000066400000000000000000000021761360473665400212510ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TILEANIMATOR_HPP #define TILEANIMATOR_HPP #include #include class TrackTile; class TileAnimator : public QTimeLine { Q_OBJECT public: explicit TileAnimator(TrackTile * tile); bool rotate90CW(); bool rotate90CCW(); private slots: void setTileRotation(int frame); private: TrackTile * m_tile; int m_a0, m_a1; }; #endif // TILEANIMATOR_HPP DustRacing2D-2.0.5/src/editor/trackdata.cpp000066400000000000000000000132411360473665400205050ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "trackdata.hpp" #include "targetnode.hpp" #include "tracktile.hpp" #include "object.hpp" #include "objectfactory.hpp" #include TrackData::TrackData(QString name, bool isUserTrack, size_t cols, size_t rows) : TrackDataBase(name, isUserTrack) , m_map(cols, rows) { } TrackData::TrackData(const TrackData & other) : TrackDataBase(other) , m_fileName(other.m_fileName) , m_map(other.m_map) { copyObjects(other); copyRoute(other); } void TrackData::copyObjects(const TrackData & other) { m_objects.clear(); for (auto iter = other.m_objects.cbegin(); iter != other.m_objects.cend(); iter++) { const auto object = std::dynamic_pointer_cast(*iter); const auto newObject = std::make_shared(*object); m_objects.add(ObjectBasePtr(newObject)); } } void TrackData::copyRoute(const TrackData & other) { m_route.clear(); for (auto iter = other.m_route.cbegin(); iter != other.m_route.cend(); iter++) { const auto node = std::dynamic_pointer_cast(*iter); const auto newNode = std::make_shared(*node); m_route.push(newNode); } } QString TrackData::fileName() const { return m_fileName; } void TrackData::setFileName(QString newFileName) { m_fileName = newFileName; } Route & TrackData::route() { return m_route; } const Route & TrackData::route() const { return m_route; } MapBase & TrackData::map() { return m_map; } const MapBase & TrackData::map() const { return m_map; } Objects & TrackData::objects() { return m_objects; } const Objects & TrackData::objects() const { return m_objects; } void TrackData::insertColumn(size_t at, MapBase::InsertDirection insertDirection) { at = m_map.insertColumn(at, insertDirection); moveObjectsAfterColumnInsertion(at); moveTargetNodesAfterColumnInsertion(at); } void TrackData::insertRow(size_t at, MapBase::InsertDirection insertDirection) { at = m_map.insertRow(at, insertDirection); moveObjectsAfterRowInsertion(at); moveTargetNodesAfterRowInsertion(at); } std::vector TrackData::deleteColumn(size_t at) { moveObjectsAfterColumnDeletion(at); moveTargetNodesAfterColumnDeletion(at); return m_map.deleteColumn(at); } std::vector TrackData::deleteRow(size_t at) { moveObjectsAfterRowDeletion(at); moveTargetNodesAfterRowDeletion(at); return m_map.deleteRow(at); } void TrackData::moveObjectsAfterColumnInsertion(size_t at) { for (auto && object : m_objects) { if (object->location().x() > TrackTile::width() * at) { object->setLocation(QPointF(object->location().x() + TrackTile::width(), object->location().y())); } } } void TrackData::moveObjectsAfterRowInsertion(size_t at) { for (auto && object : m_objects) { if (object->location().y() > TrackTile::height() * at) { object->setLocation(QPointF(object->location().x(), object->location().y() + TrackTile::height())); } } } void TrackData::moveTargetNodesAfterColumnInsertion(size_t at) { for (auto && targetNode : m_route) { if (targetNode->location().x() > TrackTile::width() * at) { targetNode->setLocation(QPointF(targetNode->location().x() + TrackTile::width(), targetNode->location().y())); } } } void TrackData::moveTargetNodesAfterRowInsertion(size_t at) { for (auto && targetNode : m_route) { if (targetNode->location().y() > TrackTile::height() * at) { targetNode->setLocation(QPointF(targetNode->location().x(), targetNode->location().y() + TrackTile::height())); } } } void TrackData::moveObjectsAfterColumnDeletion(size_t at) { for (auto && object : m_objects) { if (object->location().x() > TrackTile::width() * at) { object->setLocation(QPointF(object->location().x() - TrackTile::width(), object->location().y())); } } } void TrackData::moveObjectsAfterRowDeletion(size_t at) { for (auto && object : m_objects) { if (object->location().y() > TrackTile::height() * at) { object->setLocation(QPointF(object->location().x(), object->location().y() - TrackTile::height())); } } } void TrackData::moveTargetNodesAfterColumnDeletion(size_t at) { for (auto && targetNode : m_route) { if (targetNode->location().x() > TrackTile::width() * at) { targetNode->setLocation(QPointF(targetNode->location().x() - TrackTile::width(), targetNode->location().y())); } } } void TrackData::moveTargetNodesAfterRowDeletion(size_t at) { for (auto && targetNode : m_route) { if (targetNode->location().y() > TrackTile::height() * at) { targetNode->setLocation(QPointF(targetNode->location().x(), targetNode->location().y() - TrackTile::height())); } } } TrackData::~TrackData() { } DustRacing2D-2.0.5/src/editor/trackdata.hpp000066400000000000000000000055221360473665400205150ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TRACKDATA_HPP #define TRACKDATA_HPP #include #include "../common/mapbase.hpp" #include "../common/objects.hpp" #include "../common/route.hpp" #include "../common/trackdatabase.hpp" #include "map.hpp" class ObjectModelLoader; class TrackData : public TrackDataBase { public: //! Constructor. TrackData(QString name, bool isUserTrack, size_t cols, size_t rows); //! Copy constructor TrackData(const TrackData & other); //! Destructor. virtual ~TrackData(); //! Get file name. QString fileName() const; //! Set file name. void setFileName(QString fileName); //! Get map object. MapBase & map(); //! Get map object. const MapBase & map() const; //! Get route object. Route & route(); //! Get route object. const Route & route() const; //! Get objects object. Objects & objects(); //! Get objects object. const Objects & objects() const; //! Insert tile column at given index and move objects. void insertColumn(size_t at, MapBase::InsertDirection insertDirection); //! Insert tile row at given index and move objects. void insertRow(size_t at, MapBase::InsertDirection insertDirection); //! Delete tile column at given index and move objects. std::vector deleteColumn(size_t at); //! Delete tile row at given index and move objects. std::vector deleteRow(size_t at); private: void copyObjects(const TrackData & other); void copyRoute(const TrackData & other); void moveObjectsAfterColumnInsertion(size_t at); void moveObjectsAfterRowInsertion(size_t at); void moveTargetNodesAfterColumnInsertion(size_t at); void moveTargetNodesAfterRowInsertion(size_t at); void moveObjectsAfterColumnDeletion(size_t at); void moveObjectsAfterRowDeletion(size_t at); void moveTargetNodesAfterColumnDeletion(size_t at); void moveTargetNodesAfterRowDeletion(size_t at); QString m_fileName; Map m_map; Objects m_objects; Route m_route; }; typedef std::shared_ptr TrackDataPtr; #endif // TRACKDATA_HPP DustRacing2D-2.0.5/src/editor/trackio.cpp000066400000000000000000000230761360473665400202120ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include #include #include #include #include #include "mainwindow.hpp" #include "object.hpp" #include "objectfactory.hpp" #include "objectmodel.hpp" #include "objectmodelloader.hpp" #include "targetnode.hpp" #include "trackdata.hpp" #include "trackio.hpp" #include "tracktile.hpp" #include "../common/config.hpp" #include "../common/datakeywords.hpp" #include "../common/objectbase.hpp" #include "../common/targetnodebase.hpp" #include #include namespace { void readTile(TrackData & newData, const QDomElement & element) { // Init a new tile. QGraphicsScene will take // the ownership eventually. const auto tile = std::dynamic_pointer_cast(newData.map().getTile( element.attribute(DataKeywords::Tile::i, "0").toUInt(), element.attribute(DataKeywords::Tile::j, "0").toUInt())); assert(tile); tile->setRotation(element.attribute(DataKeywords::Tile::orientation, "0").toInt()); tile->setTileType(element.attribute(DataKeywords::Tile::type, "clear")); tile->setComputerHint( static_cast(element.attribute(DataKeywords::Tile::computerHint, "0").toInt())); tile->setExcludeFromMinimap(element.attribute(DataKeywords::Tile::excludeFromMinimap, "0").toUInt()); } void readObject(TrackData & newData, const QDomElement & element) { // Create a new object. QGraphicsScene will take // the ownership eventually. auto object = std::make_shared(ObjectFactory::createObject(element.attribute(DataKeywords::Object::role, "clear"))); object->setLocation(QPointF( element.attribute(DataKeywords::Object::x, "0").toInt(), element.attribute(DataKeywords::Object::y, "0").toInt())); object->setRotation(element.attribute(DataKeywords::Object::orientation, "0").toInt()); object->setForceStationary(element.attribute(DataKeywords::Object::forceStationary, "0").toUInt()); newData.objects().add(object); } void readTargetNode(std::vector & route, const QDomElement & element) { // Create a new object. QGraphicsScene will take // the ownership eventually. const auto targetNode = std::make_shared(); targetNode->setIndex(element.attribute(DataKeywords::Node::index, "0").toInt()); const int x = element.attribute(DataKeywords::Node::x, "0").toInt(); const int y = element.attribute(DataKeywords::Node::y, "0").toInt(); targetNode->setLocation(QPointF(x, y)); const int w = element.attribute(DataKeywords::Node::width, "0").toInt(); const int h = element.attribute(DataKeywords::Node::height, "0").toInt(); if (w > 0 && h > 0) { targetNode->setSize(QSizeF(w, h)); } route.push_back(targetNode); } void writeTiles(const TrackDataPtr trackData, QDomElement & root, QDomDocument & doc) { for (size_t i = 0; i < trackData->map().cols(); i++) { for (size_t j = 0; j < trackData->map().rows(); j++) { auto && tileElement = doc.createElement(DataKeywords::Track::tile); const auto tile = std::dynamic_pointer_cast(trackData->map().getTile(i, j)); tileElement.setAttribute(DataKeywords::Tile::type, tile->tileType()); tileElement.setAttribute(DataKeywords::Tile::i, static_cast(i)); tileElement.setAttribute(DataKeywords::Tile::j, static_cast(j)); tileElement.setAttribute(DataKeywords::Tile::orientation, tile->rotation()); if (tile->excludeFromMinimap()) { tileElement.setAttribute(DataKeywords::Tile::excludeFromMinimap, true); } if (tile->computerHint() != TrackTile::ComputerHint::None) { tileElement.setAttribute(DataKeywords::Tile::computerHint, static_cast(tile->computerHint())); } root.appendChild(tileElement); } } } void writeObjects(TrackDataPtr trackData, QDomElement & root, QDomDocument & doc) { for (auto objectPtr : trackData->objects()) { auto object = std::dynamic_pointer_cast(objectPtr); assert(object); auto && objectElement = doc.createElement(DataKeywords::Track::object); objectElement.setAttribute(DataKeywords::Object::category, object->category()); objectElement.setAttribute(DataKeywords::Object::role, object->role()); objectElement.setAttribute(DataKeywords::Object::x, static_cast(object->location().x())); objectElement.setAttribute(DataKeywords::Object::y, static_cast(object->location().y())); objectElement.setAttribute(DataKeywords::Object::orientation, static_cast(object->rotation())); if (object->forceStationary()) { objectElement.setAttribute(DataKeywords::Object::forceStationary, static_cast(object->forceStationary())); } root.appendChild(objectElement); } } void writeTargetNodes(TrackDataPtr trackData, QDomElement & root, QDomDocument & doc) { for (auto && targetNode : trackData->route()) { auto && targetNodeElement = doc.createElement(DataKeywords::Track::node); targetNodeElement.setAttribute(DataKeywords::Node::index, targetNode->index()); targetNodeElement.setAttribute(DataKeywords::Node::x, static_cast(targetNode->location().x())); targetNodeElement.setAttribute(DataKeywords::Node::y, static_cast(targetNode->location().y())); targetNodeElement.setAttribute(DataKeywords::Node::width, static_cast(targetNode->size().width())); targetNodeElement.setAttribute(DataKeywords::Node::height, static_cast(targetNode->size().height())); root.appendChild(targetNodeElement); } } } // namespace bool TrackIO::save(TrackDataPtr trackData, QString path) { // Create content QDomDocument doc; doc.appendChild(doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")); auto && root = doc.createElement(DataKeywords::Header::track); root.setAttribute(DataKeywords::Header::version, Config::Editor::EDITOR_VERSION); root.setAttribute(DataKeywords::Header::name, trackData->name()); root.setAttribute(DataKeywords::Header::cols, static_cast(trackData->map().cols())); root.setAttribute(DataKeywords::Header::rows, static_cast(trackData->map().rows())); root.setAttribute(DataKeywords::Header::index, trackData->index()); if (trackData->isUserTrack()) // Don't add the attribute at all, if not set { root.setAttribute(DataKeywords::Header::user, true); } doc.appendChild(root); writeTiles(trackData, root, doc); writeObjects(trackData, root, doc); writeTargetNodes(trackData, root, doc); // Save to file QFile file(path); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); out << doc.toString(); file.close(); return true; } return false; } TrackDataPtr TrackIO::open(QString path) { QDomDocument doc; QFile file(path); if (!file.open(QIODevice::ReadOnly)) { return nullptr; } if (!doc.setContent(&file)) { file.close(); return nullptr; } file.close(); auto && root = doc.documentElement(); const size_t cols = root.attribute(DataKeywords::Header::cols, "0").toUInt(); const size_t rows = root.attribute(DataKeywords::Header::rows, "0").toUInt(); TrackDataPtr newData; if (cols && rows) { const auto name = root.attribute(DataKeywords::Header::name, "undefined"); const bool isUserTrack = root.attribute(DataKeywords::Header::user, "0").toInt(); newData = std::make_shared(name, isUserTrack, cols, rows); newData->setFileName(path); newData->setIndex(root.attribute(DataKeywords::Header::index, "0").toUInt()); // Temporary route vector. std::vector route; auto && node = root.firstChild(); while (!node.isNull()) { auto element = node.toElement(); if (!element.isNull()) { // Read a tile element if (element.nodeName() == DataKeywords::Track::tile) { readTile(*newData, element); } // Read an object element else if (element.nodeName() == DataKeywords::Track::object) { readObject(*newData, element); } // Read a target node element else if (element.nodeName() == DataKeywords::Track::node) { readTargetNode(route, element); } } node = node.nextSibling(); } // Sort and build route from the temporary vector. newData->route().buildFromVector(route); } return newData; } DustRacing2D-2.0.5/src/editor/trackio.hpp000066400000000000000000000022201360473665400202030ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TRACKIO_HPP #define TRACKIO_HPP #include #include #include #include "trackdata.hpp" class TrackIO { public: //! Save given track data. Returns false if failed. bool save(TrackDataPtr trackData, QString path); /*! Load given track data. Returns the new TrackData object, * or nullptr if failed. */ TrackDataPtr open(QString path); }; #endif // TRACKIO_HPP DustRacing2D-2.0.5/src/editor/trackpropertiesdialog.cpp000066400000000000000000000050721360473665400231530ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "trackpropertiesdialog.hpp" #include #include #include #include #include #include #include #include TrackPropertiesDialog::TrackPropertiesDialog(QString name, unsigned int index, bool isUserTrack, QWidget * parent) : QDialog(parent) , m_layout(new QGridLayout(this)) , m_okButton(new QPushButton(tr("Ok"))) , m_cancelButton(new QPushButton(tr("Cancel"))) , m_nameEdit(new QLineEdit) , m_nameLabel(new QLabel(tr("Name:"))) , m_indexEdit(new QLineEdit) , m_indexLabel(new QLabel(tr("Index:"))) , m_isUserTrackCheckBox(new QCheckBox) , m_isUserTrackLabel(new QLabel(tr("User track:"))) { setWindowTitle(tr("Set track properties")); m_nameEdit->setText(name); QIntValidator * indexValidator = new QIntValidator(this); indexValidator->setRange(0, 999); m_indexEdit->setValidator(indexValidator); m_indexEdit->setText(QString("%1").arg(index)); m_isUserTrackCheckBox->setChecked(isUserTrack); m_layout->addWidget(m_nameLabel, 0, 0); m_layout->addWidget(m_nameEdit, 0, 1); m_layout->addWidget(m_indexLabel, 1, 0); m_layout->addWidget(m_indexEdit, 1, 1); m_layout->addWidget(m_isUserTrackLabel, 2, 0); m_layout->addWidget(m_isUserTrackCheckBox, 2, 1); m_layout->addWidget(m_okButton, 3, 0); m_layout->addWidget(m_cancelButton, 3, 1); connect(m_okButton, &QPushButton::clicked, this, &TrackPropertiesDialog::accept); connect(m_cancelButton, &QPushButton::clicked, this, &TrackPropertiesDialog::reject); } unsigned int TrackPropertiesDialog::index() const { return m_indexEdit->text().toInt(); } QString TrackPropertiesDialog::name() const { return m_nameEdit->text(); } bool TrackPropertiesDialog::isUserTrack() const { return m_isUserTrackCheckBox->isChecked(); } DustRacing2D-2.0.5/src/editor/trackpropertiesdialog.hpp000066400000000000000000000031501360473665400231530ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TRACKPROPERTIESDIALOG_HPP #define TRACKPROPERTIESDIALOG_HPP #include class QGridLayout; class QLabel; class QLineEdit; class QCheckBox; class QPushButton; /*! Dialog to set track properties */ class TrackPropertiesDialog : public QDialog { Q_OBJECT public: //! Constructor. TrackPropertiesDialog(QString name, unsigned int index, bool isUserTrack, QWidget * parent = nullptr); //! Get index. unsigned int index() const; //! Get name. QString name() const; //! Get user track property. bool isUserTrack() const; private: QGridLayout * m_layout; QPushButton * m_okButton; QPushButton * m_cancelButton; QLineEdit * m_nameEdit; QLabel * m_nameLabel; QLineEdit * m_indexEdit; QLabel * m_indexLabel; QCheckBox * m_isUserTrackCheckBox; QLabel * m_isUserTrackLabel; }; #endif // TRACKPROPERTIESDIALOG_HPP DustRacing2D-2.0.5/src/editor/tracktile.cpp000066400000000000000000000125131360473665400205320ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2011 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "tracktile.hpp" #include "mainwindow.hpp" #include "tileanimator.hpp" #include "../common/config.hpp" #include #include #include #include #include TrackTile * TrackTile::m_activeTile = nullptr; TrackTile::TrackTile(QPointF location, QPoint matrixLocation, const QString & type) : TrackTileBase(location, matrixLocation, type) , m_size(QSizeF(width(), height())) , m_active(false) , m_animator(new TileAnimator(this)) , m_added(false) { setPos(location); } TrackTile::TrackTile(const TrackTile & other) : QGraphicsItem() , TrackTileBase(other.location(), other.matrixLocation(), other.tileType()) , m_size(other.m_size) , m_active(false) , m_animator(new TileAnimator(this)) , m_added(false) { setPos(other.location()); setRotation(other.rotation()); setComputerHint(other.computerHint()); setExcludeFromMinimap(other.excludeFromMinimap()); } QRectF TrackTile::boundingRect() const { return QRectF(-m_size.width() / 2, -m_size.height() / 2, m_size.width(), m_size.height()); } void TrackTile::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { Q_UNUSED(widget) Q_UNUSED(option) painter->save(); QPen pen; pen.setJoinStyle(Qt::MiterJoin); // Render the tile pixmap if tile is not cleared. if (tileType() != "clear") { painter->drawPixmap(static_cast(boundingRect().x()), static_cast(boundingRect().y()), static_cast(boundingRect().width()), static_cast(boundingRect().height()), m_pixmap); // Mark the tile if it has computer hints set if (computerHint() == TrackTile::ComputerHint::BrakeHard) { painter->fillRect(boundingRect(), QBrush(QColor(255, 0, 0, 128))); } else if (computerHint() == TrackTile::ComputerHint::Brake) { painter->fillRect(boundingRect(), QBrush(QColor(128, 0, 0, 128))); } } else { painter->drawPixmap(static_cast(boundingRect().x()), static_cast(boundingRect().y()), static_cast(boundingRect().width()), static_cast(boundingRect().height()), QPixmap(Config::Editor::CLEAR_ICON_PATH)); pen.setColor(QColor(0, 0, 0)); painter->setPen(pen); painter->drawRect(boundingRect()); } // Render highlight if (m_active) { painter->fillRect(boundingRect(), QBrush(QColor(0, 0, 0, 64))); } painter->restore(); } void TrackTile::setActive(bool active) { m_active = active; if (active && TrackTile::m_activeTile != this) { if (TrackTile::m_activeTile) { TrackTile::m_activeTile->setActive(false); } TrackTile::m_activeTile = this; } update(); } void TrackTile::setActiveTile(TrackTile * tile) { if (tile) { tile->setActive(true); } else { if (activeTile()) { activeTile()->setActive(false); } TrackTile::m_activeTile = nullptr; } } TrackTile * TrackTile::activeTile() { return TrackTile::m_activeTile; } bool TrackTile::rotate90CW() { return m_animator->rotate90CW(); } bool TrackTile::rotate90CCW() { return m_animator->rotate90CCW(); } void TrackTile::setTileType(const QString & type) { TrackTileBase::setTileType(type); update(); } void TrackTile::setComputerHint(ComputerHint hint) { TrackTileBase::setComputerHint(hint); update(); } void TrackTile::setLocation(QPointF location) { TrackTileBase::setLocation(location); setPos(location); update(); } QPixmap TrackTile::pixmap() const { return m_pixmap; } void TrackTile::setPixmap(const QPixmap & pixmap) { m_pixmap = pixmap; update(); } void TrackTile::swap(TrackTile & other) { // Swap tile types const auto sourceType = tileType(); setTileType(other.tileType()); other.setTileType(sourceType); // Swap tile pixmaps const auto sourcePixmap = pixmap(); setPixmap(other.pixmap()); other.setPixmap(sourcePixmap); // Swap tile rotations const auto sourceAngle = rotation(); setRotation(other.rotation()); other.setRotation(sourceAngle); // Swap computer hints const auto sourceHint = computerHint(); setComputerHint(other.computerHint()); other.setComputerHint(sourceHint); } void TrackTile::setAdded(bool state) { m_added = state; } bool TrackTile::added() const { return m_added; } TrackTile::~TrackTile() { delete m_animator; } DustRacing2D-2.0.5/src/editor/tracktile.hpp000066400000000000000000000065651360473665400205510ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef TRACKTILE_HPP #define TRACKTILE_HPP #include #include #include #include "../common/tracktilebase.hpp" class QGraphicsLineItem; class TileAnimator; /*! A race track is built of TrackTiles. The TrackTile class * extends TrackTileBase with features needed to render * track tiles in editor's scene. Note that the track tile instances * do not change. Only their types change when user sets a tile. */ class TrackTile : public QGraphicsItem, public TrackTileBase { public: /*! Constructor. * \param location Location (coordinates) in the track scene. * \param matrixLocation Location in the tile matrix. * \param type Type of the tile. See setType(). */ TrackTile(QPointF location, QPoint matrixLocation, const QString & type = "clear"); /*! Copy constructor. * NOTE!!: This is used when saving undo points so make sure all properties are copied! */ TrackTile(const TrackTile & other); TrackTile & operator=(const TrackTile & other) = delete; //! Destructor virtual ~TrackTile(); virtual QRectF boundingRect() const override; virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0) override; //! Set tile active (a blue collar is drawn) void setActive(bool active); virtual void setTileType(const QString & type) override; virtual void setComputerHint(ComputerHint hint) override; virtual void setLocation(QPointF location) override; /*! Get current active tile. * \returns Valid pointer or nullptr if not set. */ static TrackTile * activeTile(); //! Set the active tile static void setActiveTile(TrackTile * tile); //! Rotate 90 degrees CW bool rotate90CW(); //! Rotate 90 degrees CCW bool rotate90CCW(); //! Get the current pixmap QPixmap pixmap() const; //! Set the current pixmap void setPixmap(const QPixmap & pixmap); //! Swap data with given tile. Used in drag'n'drop. void swap(TrackTile & other); void setAdded(bool state); bool added() const; private: //! Create the menu that is shown when right-clicking on the tile. void createContextMenu(); //! Pointer to the active/selected tile. static TrackTile * m_activeTile; //! Original size of the tile in pixels. QSizeF m_size; //! True if the tile is the seleced tile. bool m_active; //! Animator used when rotating the tile. TileAnimator * m_animator; //! Image of the tile. QPixmap m_pixmap; bool m_added; }; using TrackTilePtr = std::shared_ptr; #endif // TRACKTILE_HPP DustRacing2D-2.0.5/src/editor/translations/000077500000000000000000000000001360473665400205635ustar00rootroot00000000000000DustRacing2D-2.0.5/src/editor/translations/dustrac-editor_cs.ts000066400000000000000000000457151360473665400245650ustar00rootroot00000000000000 AboutDlg About Dust Racing O hře Dust Racing MainWindow Randomly rotate objects Náhodně otočit předměty Loading '%1'.. Nahrává se '%1'.. Choose 'File -> New' or 'File -> Open' to start. Vyberte Soubor -> Nový nebo Soubor -> Otevřít pro spuštění. Save your work to correct location. Uložte svou práci do správného umístění. To make the game find your circuits, save them to %1%2%3%2 Aby hra našla vaše okruhy, uložte je do %1%2%3%2 , %4%2 New file Nový soubor Scale: Měřítko: ERROR!!: Cannot load objects from ' Chyba: Nelze nahrát předměty z ' Scale set to %1% Měřítko nastaveno na %1% &File &Soubor &New... &Nový... &Open... &Otevřít... &Save &Uložit &Save as... Uložit &jako... &Quit U&končit &Edit Úp&ravy Undo Zpět Redo Znovu &Clear all &Vyprázdnit vše Enlarge hor size Zvětšit vodorovnou velikost Enlarge ver size Zvětšit svislou velikost &Set properties.. Nastavit &vlastnosti... &Route &Cesta Clear &route Vyprázdnit c&estu &Set route.. &Nastavit cestu... &Help Nápo&věda &About &O programu About &Qt O &Qt Select Vybrat Erase object Vymazat předmět Clear Odstranit Open a track Otevřít trať Track Files (*.trk) Soubory s tratěmi (*.trk) About Qt O Qt ERROR!!: %1 doesn't exist. Chyba: %1 neexistuje. Track '%1' opened. Trať '%1' otevřena. Failed to open track ' Nepodařilo se otevřít trať Track ' Trať ' saved. uložena. Failed to save track ' Nepodařilo se uložit trať Save a track Uložit trať Failed to save track as ' Nepodařilo se uložit trať jako A new track '%1' created. Columns: %2, Rows: %3. Nová trať %1 vytvořena. Sloupce: %2, řádky: %3. Track properties updated. Index set to '%1'. Index nastaven na '%1'. Set route: begin. Nastavit cestu: začátek. Set route, checkpoints and driving lines. Nastavit cestu, kontrolní body a jízdní dráhy. Setting the route defines checkpoints for the cars so that no shortcuts can be taken. It also defines driving lines for the computer players. Click on the tiles one by one and make a closed loop with the target nodes. You can adjust the nodes afterwads. Start from the first tile after the finish line tile to make the lap detection and timing work correctly. Click on the first node again to finish. Nastavení cesty stanovuje kontrolní body pro vozy, takže není možné si cestu zkrátit. Také určuje jízdní dráhy počítačem řízených hráčů. Klepněte postupně na dlaždice a udělejte zavřenou smyčku s cílovými uzly. Uzly můžete upravit i později. Začněte od první dlaždice za dlaždicí s cílovou čárou, abyste zajistili správné zjištění kola a času. Klepněte znovu na první uzel pro dokončení. Set route Nastavit cestu Invalid track. Route cannot be set. Neplatná trať. Cestu nelze nastavit. Set route: not a valid track. Nastavit cestu: neplatná trať. Set route: route finished. Nastavit cestu: cesta dokončena. NewTrackDialog Ok OK Cancel Zrušit Number of tile columns: Počet sloupců dlaždic: Number of tile rows: Počet řádků dlaždic: Track name: Název tratě: User track: Create a new track Vytvořit novou trať QObject Tiles cleared. Dlaždice vyprázdněny. Route cleared. Cesta vyprázdněna. QWidget Rotate 90 Otočit o 90° CW.. po směru hodinových ručiček. CCW.. proti směru hodinových ručiček. Clear computer hint Odstranit radu počítače Set computer hint 'brake hard'.. Nastavit radu počítače Usilovně brzdit... Set computer hint 'brake'.. Nastavit radu počítače Brzdit... Exclude from minimap Insert row before.. Insert row after.. Delete row.. Insert column before.. Insert column after.. Delete column.. Rotate.. Otočit... Force stationary Set size.. Nastavit velikost... RotateDialog Ok OK Cancel Zrušit Angle in degrees: Úhel ve stupních: Rotate Object Otočit předmět TargetNodeSizeDlg Ok OK Cancel Zrušit Width: Šířka: Height: Výška: Set target node size Nastavit velikost cílového uzlu TrackPropertiesDialog Ok OK Cancel Zrušit Name: Index: Index: User track: Set track properties Nastavit vlastnosti tratě DustRacing2D-2.0.5/src/editor/translations/dustrac-editor_de.ts000066400000000000000000000332631360473665400245430ustar00rootroot00000000000000 AboutDlg About Dust Racing Über Dust Racing MainWindow ' ' Redo Wiederholen Undo Rückgängig &Edit &Bearbeiten &File &Datei &Help &Hilfe &Quit &Beenden &Save &Speichern Clear Leeren A new track '%1' created. Columns: %2, Rows: %3. Eine neue Strecke namens »%1« erstellt. Spalten: %2; Zeilen: %3. Set route: not a valid track. Route setzen: Keine gültige Strecke. Setting the route defines checkpoints for the cars so that no shortcuts can be taken. It also defines driving lines for the computer players. Click on the tiles one by one and make a closed loop with the target nodes. You can adjust the nodes afterwads. Start from the first tile after the finish line tile to make the lap detection and timing work correctly. Click on the first node again to finish. Das Setzen der Route definiert die Kontrollpunkte, damit keine Abkürzungen genommen werden können. Es definiert auch die Fahrtlinien für die Computerspieler. Klicken Sie nacheinander auf die entsprechenden Kacheln und erstellen Sie einen geschlossenen Rundkurs mit den Zielknoten. Sie können auch nachher die Knoten anpassen. Beginnen Sie mit der ersten Kachel hinter der Ziellinienkachel, um die Rundenerkennung und die Zeitmessung korrekt einzurichten. Klicken Sie erneut auf dem ersten Knoten zum Fertigstellen. Track '%1' opened. Stecke »%1« geöffnet. &About &Über &Route &Route Erase object Objekt löschen Index set to '%1'. Index auf »%1« gesetzt. Choose 'File -> New' or 'File -> Open' to start. Wählen Sie »Datei → Neu« oder »Datei → Öffnen«, um anzufangen. Set route, checkpoints and driving lines. Route, Kontrollpunkte und Fahrtlinien setzen. Enlarge ver size Vertikal vergrößern Randomly rotate objects Objekte zufällig rotieren Scale: Anzeigegröße: Select Auswählen Scale set to %1% Anzeigegröße auf %1% gesetzt Open a track Eine Strecke öffnen &Open... &Öffnen … Set route Route setzen Clear &route &Route leeren About &Qt Über &Qt ERROR!!: Cannot load objects from ' FEHLER! Objekte können nicht geladen werden von: ' Save a track Eine Strecke speichern &Save as... Speichern &unter … ' saved. ' gespeichert. Loading '%1'.. Lade: %1 … ERROR!!: %1 doesn't exist. FEHLER! %1 existiert nicht. Save your work to correct location. Speichern Sie Ihre Arbeit an einem gültigem Ort ab. About Qt Über Qt &New... &Neu &Clear all Alles &leeren Track ' Stecke ' &Set route.. Route &setzen … New file Neue Datei Track Files (*.trk) Steckendateien (*.trk) Invalid track. Route cannot be set. Ungültige Strecke. Route kann nicht gesetzt werden. Failed to open track ' Stecke konnte nicht geöffnet werden: ' Failed to save track as ' Strecke konnte nicht gespeichert werden als: ' To make the game find your circuits, save them to %1%2%3%2 Damit das Spiel Ihre Strecken findet, speichern Sie sie ab unter: %1%2%3%2 Failed to save track ' Strecke konnte nicht gespeichert werden: ' Enlarge hor size Horizontal vergrößern &Set properties.. &Eigenschaften setzen … Set route: route finished. Route setzen: Route fertiggestellt. Set route: begin. Route setzen: Angefangen. Track properties updated. Streckeneigenschaften aktualisiert , %4%2 NewTrackDialog Ok OK Cancel Abbrechen Number of tile columns: Anzahl der Kachelspalten: Create a new track Eine neue Strecke erstellen Track name: Streckenname: Number of tile rows: Anzahl der Kachelzeilen: User track: Benutzerstrecke: QObject Tiles cleared. Kacheln geleert. Route cleared. Route geleert. QWidget CW.. im Uhrzeigersinn CCW.. entgegen dem Uhrzeigersinn Set computer hint 'brake hard'.. Computertipp auf »Vollbremsung« setzen Rotate.. Rotieren … Set size.. Größe setzen … Clear computer hint Computertipp entfernen Rotate 90 Rotieren um 90 Set computer hint 'brake'.. Computertipp auf »Bremsen« setzen Insert row.. Zeile einfügen Delete row.. Zeile löschen Insert column.. Spalte einfügen Delete column.. Spalte löschen Exclude from minimap Aus der Minikarte ausschließen Insert row before.. Zeile davor einfügen Insert row after.. Zeile dahinter einfügen Insert column before.. Spalte davor einfügen Insert column after.. Spalte dahinter einfügen Force stationary Stationär machen RotateDialog Ok OK Cancel Abbrechen Angle in degrees: Winkel in Grad: Rotate Object Objekt rotieren TargetNodeSizeDlg Ok OK Cancel Abbrechen Width: Breite: Set target node size Zielknotengröße setzen Height: Höhe: TrackPropertiesDialog Ok OK Set track properties Streckeneigenschaften setzen Cancel Abbrechen Index: Index: Name: User track: Benutzerstrecke: DustRacing2D-2.0.5/src/editor/translations/dustrac-editor_fi.ts000066400000000000000000000457131360473665400245540ustar00rootroot00000000000000 AboutDlg About Dust Racing Tietoa Dust Racingista MainWindow Randomly rotate objects Pyöritä objekteja satunnaisesti Loading '%1'.. Ladataan '%1' Choose 'File -> New' or 'File -> Open' to start. Valitse 'Tiedosto -> Uusi' tai 'Tiedosto -> Avaa' aloittaaksesi. Save your work to correct location. Tallenna työsi oikeaan hakemistoon. To make the game find your circuits, save them to %1%2%3%2 Jotta peli löytäisi ratasi, tallenna ne hakemistoon %1%2%3%2 , %4%2 tai %4%2 New file Uusi tiedosto Scale: Skaala: ERROR!!: Cannot load objects from ' VIRHE!! Ei voida ladata objekteja tiedostosta ' ' ' Scale set to %1% Skaala asetettu arvoon %1% &File &Tiedosto &New... &Uusi... &Open... &Avaa... &Save &Tallenna &Save as... Tallenna &nimellä... &Quit &Poistu &Edit &Muokkaa Undo Peruuta Redo Tee uudelleen &Clear all &Tyhjennä kaikki Enlarge hor size Suurenna vaakasuunnassa Enlarge ver size Suurenna pystysuunnassa &Set properties.. &Aseta radan ominaisuuksia... &Route &Reitti Clear &route Tyhjennä &reitti &Set route.. &Aseta reitti... &Help &Apua &About &Tietoa About &Qt &Tietoa &Qt:sta Select Valitse Erase object Poista objekti Clear Tyhjennä Open a track Avaa rata Track Files (*.trk) Ratatiedostot (*.trk) About Qt Tietoa Qt:sta ERROR!!: %1 doesn't exist. VIRHE!!: %1 ei ole olemassa. Track '%1' opened. Rata '%1' avattu. Failed to open track ' Virhe avattaessa rataa ' Track ' Rata ' ' saved. ' tallennettu. Failed to save track ' Virhe tallennettaessa rataa ' Save a track Tallenna rata Failed to save track as ' Virhe tallennettaessa rataa ' A new track '%1' created. Columns: %2, Rows: %3. Uusi rata '%1' luotu. Sarakkeita: %2, Rivejä: %3. Track properties updated. Radan ominaisuudet päivitetty. Index set to '%1'. Indeksi asetettu arvoon '%1'. Set route: begin. Aseta reitti: alku. Set route, checkpoints and driving lines. Aseta reitti, tarkastuspisteet ja ajolinjat. Setting the route defines checkpoints for the cars so that no shortcuts can be taken. It also defines driving lines for the computer players. Click on the tiles one by one and make a closed loop with the target nodes. You can adjust the nodes afterwads. Start from the first tile after the finish line tile to make the lap detection and timing work correctly. Click on the first node again to finish. Reitin asettaminen määrittää tarkistuspisteet autoille niin, että radalla ei voi oikaista. Se määrittelee myös ajolinjat tietokonepelaajille. Klikkaa laattoja yksi kerrallaan ja tee suljettu silmukka. Asettamiasi solmupisteitä voi muokata jälkikäteen. Aloita siitä laatasta, joka on ennen maaliviivaa, jotta kierrosten tunnistus ja kierrosajat toimisivat oikein. Klikkaa ensimmäistä asettamaasi solmupistettä lopettaaksesi. Set route Aseta reitti Invalid track. Route cannot be set. Epäkelpo rata. Reittiä ei voitu asettaa. Set route: not a valid track. Aseta reitti: rata ei validi. Set route: route finished. Aseta reitti: reitti valmis. NewTrackDialog Ok Ok Cancel Peruuta Number of tile columns: Laattasarakkaiden määrä: Number of tile rows: Laattarivien määrä: Track name: Radan nimi: User track: Oma rata: Create a new track Luo uusi rata QObject Tiles cleared. Laatat tyhjennetty. Route cleared. Reitti tyhjennetty. QWidget Rotate 90 Pyöritä 90 CW.. Myötäpäivään.. CCW.. Vastapäivään.. Clear computer hint Tyhjennä tietokonevihje Set computer hint 'brake hard'.. Aseta tietokonevihje 'jarruta voimakkaasti'.. Set computer hint 'brake'.. Aseta tietokonevihje 'jarruta'.. Exclude from minimap Älä näytä kartassa Insert row before.. Lisää rivi ennen.. Insert row after.. Lisää rivi jälkeen.. Delete row.. Poista rivi.. Insert column before.. Lisää sarake ennen.. Insert column after.. Lisää sarake jälkeen.. Delete column.. Poista sarake.. Rotate.. Pyöritä.. Force stationary Pakota liikkumattomaksi Set size.. Aseta koko.. RotateDialog Ok Ok Cancel Peruuta Angle in degrees: Kulma asteissa: Rotate Object Pyöritä Objektia TargetNodeSizeDlg Ok Ok Cancel Peruuta Width: Leveys: Height: Korkeus: Set target node size Aseta kohdesolmun koko TrackPropertiesDialog Ok Ok Cancel Peruuta Name: Nimi: Index: Indeksi: User track: Oma rata: Set track properties Aseta radan ominaisuudet DustRacing2D-2.0.5/src/editor/translations/dustrac-editor_fr.ts000066400000000000000000000467351360473665400245720ustar00rootroot00000000000000 AboutDlg About Dust Racing À propos de Dust Racing MainWindow Randomly rotate objects Orienter les objets aléatoirement Loading '%1'.. Chargement de "%1"... Choose 'File -> New' or 'File -> Open' to start. Choisissez "Fichier -> Nouveau" ou "Fichier -> Ouvrir" pour commencer. Save your work to correct location. Enregistrez votre travail au bon endroit. To make the game find your circuits, save them to %1%2%3%2 Pour que le jeu détecte vos circuits, enregistrez-les dans %1%2%3%2 , %4%2 New file Nouveau fichier Scale: Échelle : ERROR!!: Cannot load objects from ' ERREUR : Impossible de charger les objets de " ' " Scale set to %1% Échelle définie à %1 %. &File &Fichier &New... &Nouveau... &Open... &Ouvrir... &Save &Enregistrer &Save as... &Enregistrer sous... &Quit &Quitter &Edit &Édition Undo Annuler Redo Refaire &Clear all Tout &effacer Enlarge hor size Augmenter la taille horizontale Enlarge ver size Augmenter la taille verticale &Set properties.. Définir les &propriétés... &Route &Parcours Clear &route &Effacer le parcours &Set route.. &Définir le parcours... &Help &Aide &About &À propos About &Qt À propos de &Qt Select Sélectionner Erase object Effacer l'objet Clear Effacer Open a track Ouvrir un circuit Track Files (*.trk) Fichiers de circuits (*.trk) About Qt À propos de Qt ERROR!!: %1 doesn't exist. ERREUR : %1 n'existe pas. Track '%1' opened. Circuit "%1" ouvert. Failed to open track ' Échec d'ouverture du circuit " Track ' Circuit " ' saved. " enregistré. Failed to save track ' Échec d'enregistrement du circuit " Save a track Enregistrer un circuit Failed to save track as ' Échec d'enregistrement du circuit dans " A new track '%1' created. Columns: %2, Rows: %3. Un nouveau circuit "%1" a été créé. Colonnes : %2, Lignes : %3. Track properties updated. Index set to '%1'. Index défini à "%1". Set route: begin. Définition du parcours : départ. Set route, checkpoints and driving lines. Définir le parcours, les points de contrôle et les trajectoires Setting the route defines checkpoints for the cars so that no shortcuts can be taken. It also defines driving lines for the computer players. Click on the tiles one by one and make a closed loop with the target nodes. You can adjust the nodes afterwads. Start from the first tile after the finish line tile to make the lap detection and timing work correctly. Click on the first node again to finish. Définir le parcours met en place des points de contrôle pour les voitures afin qu'aucun raccourci ne puisse être pris. Il définit aussi les trajectoires de course suivies par les joueurs ordinateurs. Cliquez sur les cases une à une de manière à former une boucle fermée avec les nœuds ciblés. Vous pouvez ajuster les nœuds par la suite. Commencez par la première case après la case de ligne d'arrivée afin que le comptage des tours et le timing fonctionnent correctement. Cliquez à nouveau sur le premier nœud pour fermer la boucle. Set route Définir le parcours Invalid track. Route cannot be set. Circuit invalide. Le parcours ne peut pas être défini. Set route: not a valid track. Définition du parcours : le circuit n'est pas valide. Set route: route finished. Définition du parcours : parcours terminé. NewTrackDialog Ok OK Cancel Annuler Number of tile columns: Nombre de colonnes de cases : Number of tile rows: Nombre de lignes de cases : Track name: Nom du circuit : User track: Circuit utilisateur : Create a new track Créer un nouveau circuit QObject Tiles cleared. Cases supprimées. Route cleared. Parcours supprimé. QWidget Rotate 90 Tourner de 90 CW.. (sens horaire) CCW.. (sens anti-horaire) Clear computer hint Supprimer l'indice pour l'ordinateur Set computer hint 'brake hard'.. Définir l'indice "Freiner fortement" pour l'ordinateur Set computer hint 'brake'.. Définir l'indice "Freiner" pour l'ordinateur Exclude from minimap Insert row before.. Insert row after.. Delete row.. Insert column before.. Insert column after.. Delete column.. Rotate.. Tourner... Force stationary Set size.. Définir la taille... RotateDialog Ok OK Cancel Annuler Angle in degrees: Angle en degrés : Rotate Object Tourner l'objet TargetNodeSizeDlg Ok OK Cancel Annuler Width: Largeur : Height: Hauteur : Set target node size Définir la taille du nœud cible TrackPropertiesDialog Ok OK Cancel Annuler Name: Index: Index : User track: Circuit utilisateur : Set track properties Définir les propriétés du circuit DustRacing2D-2.0.5/src/editor/translations/dustrac-editor_it.ts000066400000000000000000000462511360473665400245700ustar00rootroot00000000000000 AboutDlg About Dust Racing Informazioni su Dust Racing MainWindow Randomly rotate objects Ruota casualmente gli oggetti Loading '%1'.. Loading '%1'.. Choose 'File -> New' or 'File -> Open' to start. Scegli 'File -> Nuovo' o 'File -> Apri' per iniziare. Save your work to correct location. Salva il tuo lavoro nella posizione corretta. To make the game find your circuits, save them to %1%2%3%2 Per far trovare al gioco i tuoi circuiti, salvali in %1%2%3%2 , %4%2 New file Nuovo file Scale: Scala: ERROR!!: Cannot load objects from ' Errore!!: Impossibile caricare gli oggetti da ' ' ' Scale set to %1% Scala impostata a %1% &File &File &New... &Nuovo... &Open... &Apri... &Save &Salva &Save as... &Salva come... &Quit &Esci &Edit &Modifica Undo Annulla Redo Ripeti &Clear all &Cancella tutto Enlarge hor size Ingrandisci orizzontalmente Enlarge ver size Ingrandisci verticalmente &Set properties.. &Imposta proprietà.. &Route &Itinerario Clear &route Cancella &itinerario &Set route.. &Imposta itinerario.. &Help &Aiuto &About &Informazioni About &Qt Informazioni su &Qt Select Seleziona Erase object Cancella oggetto Clear Cancella Open a track Apri un tracciato Track Files (*.trk) Files dei tracciati(*.trk) About Qt Informazioni su Qt ERROR!!: %1 doesn't exist. ERRORE!!: %1 non esiste. Track '%1' opened. Tracciato '%1' aperto. Failed to open track ' Impossibile aprire tracciato ' Track ' Tracciato ' ' saved. ' salvato. Failed to save track ' Impossibile salvare il tracciato ' Save a track Salva un tracciato Failed to save track as ' Impossibile salvare il tracciato come ' A new track '%1' created. Columns: %2, Rows: %3. Nuovo tracciato '%1' creato. Colonne: %2, Righe: %3. Track properties updated. Proprietà del tracciato aggiornate. Index set to '%1'. Indice impostato a '%1'. Set route: begin. Imposta itinerario: inizio. Set route, checkpoints and driving lines. Imposta itinerario, punti di controllo e linee di guida. Setting the route defines checkpoints for the cars so that no shortcuts can be taken. It also defines driving lines for the computer players. Click on the tiles one by one and make a closed loop with the target nodes. You can adjust the nodes afterwads. Start from the first tile after the finish line tile to make the lap detection and timing work correctly. Click on the first node again to finish. Impostando l'itinerario si definiscono i punti di controllo per le auto in modo tale che non si possano prendere scorciatoie. Si definiscono anche i percorsi di guida per i giocatori guidati dal computer. Clicca sulle tessere una per una e crea un anello chiuso con i nodi bersaglio. Puoi adattare i nodi in seguito. Inizia dalla prima tessera successiva a quella del traguardo per far funzionare correttamente la rilevazione del giro e del tempo. Set route Imposta l'itinerario Invalid track. Route cannot be set. Tracciato non valido. L'itinerario non può essere impostato. Set route: not a valid track. Imposta itinerario: tracciato non valido. Set route: route finished. Imposta itinerario: itinerario terminato. NewTrackDialog Ok Ok Cancel Annulla Number of tile columns: Numero delle colonne: Number of tile rows: Numero delle righe: Track name: Nome tracciato: User track: Tracciato utente: Create a new track Crea un nuovo tracciato QObject Tiles cleared. Tessere eliminate. Route cleared. Itinerario eliminato. QWidget Rotate 90 Ruota di 90 CW.. in senso orario.. CCW.. in senso antiorario.. Clear computer hint Cancella suggerimenti al computer Set computer hint 'brake hard'.. Imposta suggerimento al computer 'frena forte'.. Set computer hint 'brake'.. Imposta suggerimento al computer 'frena'.. Exclude from minimap Escludi dalla minimappa Insert row before.. Inserisci una riga sopra.. Insert row after.. Inserisci una riga sotto.. Delete row.. Elimina riga.. Insert column before.. Inserisci una colonna prima.. Insert column after.. Inserisci una colonna dopo.. Delete column.. Elimina colonna.. Rotate.. Ruota.. Force stationary Forza stazionario Set size.. Imposta dimensione.. RotateDialog Ok Ok Cancel Annulla Angle in degrees: Angolo in gradi: Rotate Object Ruota oggetto TargetNodeSizeDlg Ok Ok Cancel Annulla Width: Larghezza: Height: Altezza: Set target node size Imposta dimensione nodo bersaglio TrackPropertiesDialog Ok Ok Cancel Annulla Name: Nome: Index: Indice: User track: Tracciato utente: Set track properties Imposta proprietà del tracciato DustRacing2D-2.0.5/src/editor/translations/dustrac-editor_ru.ts000066400000000000000000000370611360473665400246010ustar00rootroot00000000000000 AboutDlg About Dust Racing О Dust Racing MainWindow ' ' Redo Восстановить Undo Отменить &Edit &Редактировать &File &Файл &Help &Справка &Quit &Выход &Save &Сохранить Clear Очистить A new track '%1' created. Columns: %2, Rows: %3. Новая трасса %1 создана. Колонок: %2; Строк: %3. Set route: not a valid track. Настройки трассы: трасса не правильны. Setting the route defines checkpoints for the cars so that no shortcuts can be taken. It also defines driving lines for the computer players. Click on the tiles one by one and make a closed loop with the target nodes. You can adjust the nodes afterwads. Start from the first tile after the finish line tile to make the lap detection and timing work correctly. Click on the first node again to finish. Определяя направляющую вы устанавливаете контрольные пункты для машин и делите направляющую на маленькие отрезки, которые должны быть пройдены. Также направляющая задает линию движения машин под управлением компьютера. Щелкая на знакоместах(тайлах) один за одним сделайте замкнутую петлю с целевыми узлами. Вы можете отрегулировать узлы позже. Отмечается Старт на стартовом знакоместе и Финиш на финишном для верного подсчета кругов и времени. Щелкните на первом узле снова для того чтобы закончить(замкнуть направляющую линию). Track '%1' opened. Трасса »%1« открыта. &About &Route &Направляющая Erase object Стереть объект Index set to '%1'. Значение индекса установлено в %1. Choose 'File -> New' or 'File -> Open' to start. Для начала работы выбрать в меню: "Файл" > "Новый" или "Файл" > "Открыть". Set route, checkpoints and driving lines. Установите контрольные точки и направляющие линии движения ИИ. Enlarge ver size Увеличить по вертикали Randomly rotate objects Случайно поворачивать объекты Scale: Масштаб: Select Выбрать Scale set to %1% Установлен масштаб в %1% процентов Open a track Открыть трассу &Open... &Открыть … Set route Установть направляющую Clear &route Очистить &направляющую About &Qt О &Qt ERROR!!: Cannot load objects from ' Ошибка! Не получилось загрузить объекты из: ' Save a track Сохранить трассу &Save as... Сохранить &как … ' saved. ' сохранено. Loading '%1'.. Загрузка: %1 … ERROR!!: %1 doesn't exist. Ошибка! %1 не найдено. Save your work to correct location. Сохраняйте ваши наработки в корректное место. About Qt О Qt &New... &Новый &Clear all Очистить &всё Track ' Трасса ' &Set route.. Установить &трассу … New file Новый файл Track Files (*.trk) Файлы трасс (*.trk) Invalid track. Route cannot be set. Некоректная трасса. Направляющая не может быть привязана. Failed to open track ' Не удалось открыть трассу: ' Failed to save track as ' Не удалось сохранить трассу как: ' To make the game find your circuits, save them to %1%2%3%2 Для того чтобы игра могла загрузить ваши трассы, сохраняйте их сюда: %1%2%3%2 Failed to save track ' Не удалось сохранить трассу: ' Enlarge hor size Увеличить по горизонтали &Set properties.. &Установить свойства … Set route: route finished. Установить свойство направляющей: Конец. Set route: begin. Установить свойство направляющей: Начало. Track properties updated. Свойства трассы обновлены NewTrackDialog Ok OK Cancel Отмена Number of tile columns: Количество колонок: Create a new track Создать новую трассу Track name: Имя трассы: Number of tile rows: Количество строк: User track: Пользовательская трасса: QObject Tiles cleared. Знакоместа(тайлы) очищены. Route cleared. Трасса очищена. QWidget CW.. по часовой стрелке.. CCW.. против часовой стрелки.. Set computer hint 'brake hard'.. Установить подсказку для ИИ "Тормозить в пол".. Rotate.. Повернуть.. Set size.. Установить размер.. Clear computer hint Снять подсказку для ИИ Rotate 90 Повернуть на 90 Set computer hint 'brake'.. Установить подсказку для ИИ "Притормозить".. Insert row.. Вставить строку.. Delete row.. Удалить строку.. Insert column.. Вставить колонку.. Delete column.. Удалить колонку.. Exclude from minimap Исключить из мини карты Insert row before.. Вставить строку перед.. Insert row after.. Вставить строку после.. Insert column before.. Вставить колонку перед.. Insert column after.. Вставить колонку после.. Force stationary Сделать неподвижными RotateDialog Ok OK Cancel Отмена Angle in degrees: Угол в градусах: Rotate Object Повернуть объект TargetNodeSizeDlg Ok OK Cancel Отмена Width: Ширина: Set target node size Установить размер целевого узла Height: Высота: TrackPropertiesDialog Ok OK Set track properties Установить свойства трассы Cancel Отмена Index: Индекс: Name: Имя: User track: Трасса добавленна пользователем: DustRacing2D-2.0.5/src/editor/undostack.cpp000066400000000000000000000037001360473665400205410ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2017 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "undostack.hpp" UndoStack::UndoStack(unsigned int maxHistorySize) : m_maxHistorySize(maxHistorySize) { } void UndoStack::pushUndoPoint(TrackDataPtr trackData) { auto copyData = new TrackData(*trackData.get()); m_undoStack.push_back(TrackDataPtr(copyData)); if (m_undoStack.size() > m_maxHistorySize) { m_undoStack.pop_front(); } } void UndoStack::pushRedoPoint(TrackDataPtr trackData) { auto copyData = new TrackData(*trackData.get()); m_redoStack.push_back(TrackDataPtr(copyData)); if (m_redoStack.size() > m_maxHistorySize) { m_redoStack.pop_front(); } } void UndoStack::clear() { m_undoStack.clear(); m_redoStack.clear(); } bool UndoStack::isUndoable() const { return m_undoStack.size() > 0; } TrackDataPtr UndoStack::undo() { if (isUndoable()) { auto head = m_undoStack.back(); m_undoStack.pop_back(); return head; } return TrackDataPtr(); } bool UndoStack::isRedoable() const { return m_redoStack.size() > 0; } TrackDataPtr UndoStack::redo() { if (isRedoable()) { auto head = m_redoStack.back(); m_redoStack.pop_back(); return head; } return TrackDataPtr(); } DustRacing2D-2.0.5/src/editor/undostack.hpp000066400000000000000000000024641360473665400205540ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2017 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef UNDOSTACK_HPP #define UNDOSTACK_HPP #include "trackdata.hpp" #include class UndoStack { public: UndoStack(unsigned int maxHistorySize = 100); void pushUndoPoint(TrackDataPtr trackData); void pushRedoPoint(TrackDataPtr trackData); void clear(); bool isUndoable() const; TrackDataPtr undo(); bool isRedoable() const; TrackDataPtr redo(); private: using TrackDataVector = std::list; TrackDataVector m_undoStack; TrackDataVector m_redoStack; unsigned int m_maxHistorySize; }; #endif // UNDOSTACK_HPP DustRacing2D-2.0.5/src/game/000077500000000000000000000000001360473665400154655ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/CMakeLists.txt000066400000000000000000000113761360473665400202350ustar00rootroot00000000000000# Sub build: MiniCore engine add_subdirectory(MiniCore) # Sub build: Menu Toolkit From Hell add_subdirectory(MTFH) # Sub build: Sound Toolkit From Hell add_subdirectory(STFH) # Engine include paths include_directories("${CMAKE_CURRENT_SOURCE_DIR}/MiniCore/src/Asset") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/MiniCore/src/Core") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/MiniCore/src/Graphics") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/MiniCore/src/Particles") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/MiniCore/src/Physics") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/MiniCore/src/Text") # Menu toolkit and menu include paths include_directories("${CMAKE_CURRENT_SOURCE_DIR}/MTFH") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/menu") # Sound toolkit include paths include_directories("${CMAKE_CURRENT_SOURCE_DIR}/STFH") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/audio") # Translation files in src/game/translations (without .ts) set(TS dustrac-game_fi dustrac-game_it dustrac-game_cs dustrac-game_fr dustrac-game_de dustrac-game_ru) set(TS_FILES) set(QM_FILES) foreach(TS_FILE ${TS}) list(APPEND TS_FILES ${CMAKE_SOURCE_DIR}/src/game/translations/${TS_FILE}.ts) list(APPEND QM_FILES ${CMAKE_BINARY_DIR}/data/translations/${TS_FILE}.qm) endforeach() set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/data/translations) # Set headers that don't have a corresponding cpp file set(HDR layers.hpp shaders.h shaders30.h ../common/userexception.hpp ) # Set sources set(SRC ai.cpp application.cpp bridge.cpp car.cpp carfactory.cpp carparticleeffectmanager.cpp carphysicscomponent.cpp carsoundeffectmanager.cpp carstatusview.cpp checkeredflag.cpp crashoverlay.cpp difficultyprofile.cpp eventhandler.cpp fadeanimation.cpp fontfactory.cpp game.cpp gearbox.cpp graphicsfactory.cpp inputhandler.cpp intro.cpp main.cpp map.cpp messageoverlay.cpp minimap.cpp particlefactory.cpp pit.cpp offtrackdetector.cpp overlaybase.cpp race.cpp renderer.cpp scene.cpp settings.cpp startlights.cpp startlightsoverlay.cpp statemachine.cpp timing.cpp timingoverlay.cpp tire.cpp track.cpp trackdata.cpp trackloader.cpp trackobject.cpp trackobjectfactory.cpp tracktile.cpp tree.cpp ../common/config.hpp ../common/datakeywords.hpp ../common/objectbase.cpp ../common/objects.cpp ../common/route.cpp ../common/targetnodebase.cpp ../common/trackdatabase.cpp ../common/tracktilebase.cpp ../common/mapbase.cpp audio/audioworker.cpp audio/audiosource.cpp audio/openaldata.cpp audio/openaldevice.cpp audio/openalsource.cpp audio/openaloggdata.cpp audio/openalwavdata.cpp menu/confirmationmenu.cpp menu/credits.cpp menu/difficultymenu.cpp menu/help.cpp menu/keyconfigmenu.cpp menu/lapcountmenu.cpp menu/mainmenu.cpp menu/resolutionmenu.cpp menu/settingsmenu.cpp menu/surfacemenu.cpp menu/textmenuitemview.cpp menu/trackselectionmenu.cpp menu/vsyncmenu.cpp ) set(RCS ${CMAKE_SOURCE_DIR}/data/icons/icons.qrc) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) qt5_add_resources(RC_SRC ${RCS}) qt5_add_translation(QM ${TS_FILES}) # Copy desktop file if(ReleaseBuild AND UNIX) set(DesktopFileSourcePath) if(USC) set(DesktopFileSourcePath ${CMAKE_SOURCE_DIR}/src/dustrac-game.desktop.opt.in) else() set(DesktopFileSourcePath ${CMAKE_SOURCE_DIR}/src/dustrac-game.desktop.in) endif() add_custom_target(desktop-file-game ALL COMMAND cmake -E copy ${DesktopFileSourcePath} ${CMAKE_BINARY_DIR}/dustrac-game.desktop DEPENDS ${GAME_BINARY_NAME}) endif() # Resource compilation for MinGW if(MINGW) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/windowsrc.o COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_SOURCE_DIR} -i${CMAKE_SOURCE_DIR}/data/icons/WindowsGame.rc -o ${CMAKE_CURRENT_BINARY_DIR}/windowsrc.o) set(SRC ${SRC} ${CMAKE_CURRENT_BINARY_DIR}/windowsrc.o) endif() # The main game executable set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) add_executable(${GAME_BINARY_NAME} WIN32 ${HDR} ${SRC} ${MOC_SRC} ${RC_SRC} ${QM}) set(COMMON_LIBS MiniCore MTFH STFH ${OPENAL_LIBRARY} ${VORBISFILE_LIBRARIES} ${VORBISFILE_LIB} # Valid only with MSVC ${VORBIS_LIB} # Valid only with MSVC ${OGG_LIB}) # Valid only with MSVC target_link_libraries(${GAME_BINARY_NAME} ${COMMON_LIBS} Qt5::OpenGL Qt5::Xml ${DUSTRAC_OPENGL_LIBS} SimpleLogger) set_property(TARGET ${GAME_BINARY_NAME} PROPERTY CXX_STANDARD 14) add_subdirectory(unittests) DustRacing2D-2.0.5/src/game/MTFH/000077500000000000000000000000001360473665400162235ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MTFH/CMakeLists.txt000066400000000000000000000004261360473665400207650ustar00rootroot00000000000000project(MTFH) include_directories("${CMAKE_CURRENT_SOURCE_DIR}") set(MTFHSRC animationcurve.cpp menu.cpp menuitem.cpp menuitemaction.cpp menumanager.cpp menuitemview.cpp) add_library(MTFH ${MTFHSRC}) set_property(TARGET MTFH PROPERTY CXX_STANDARD 11) DustRacing2D-2.0.5/src/game/MTFH/Menu000066400000000000000000000000251360473665400170470ustar00rootroot00000000000000#include "menu.hpp" DustRacing2D-2.0.5/src/game/MTFH/MenuItem000066400000000000000000000000311360473665400176630ustar00rootroot00000000000000#include "menuitem.hpp" DustRacing2D-2.0.5/src/game/MTFH/MenuItemAction000066400000000000000000000000371360473665400210270ustar00rootroot00000000000000#include "menuitemaction.hpp" DustRacing2D-2.0.5/src/game/MTFH/MenuItemView000066400000000000000000000000341360473665400205210ustar00rootroot00000000000000#include "menuitemview.hpp" DustRacing2D-2.0.5/src/game/MTFH/MenuManager000066400000000000000000000000341360473665400203420ustar00rootroot00000000000000#include "menumanager.hpp" DustRacing2D-2.0.5/src/game/MTFH/README.md000066400000000000000000000004431360473665400175030ustar00rootroot00000000000000MTFH (Menu Toolkit From Hell) is a graphics agnostic model toolkit designed for simple game menus. The user implements needed views for the menu items. The toolkit is written in C++ and doesn't depend on anything else but STL. It's quite painful to use :) -- Jussi Lind DustRacing2D-2.0.5/src/game/MTFH/animationcurve.cpp000066400000000000000000000025161360473665400217570ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2017 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "animationcurve.hpp" #include #include namespace MTFH { AnimationCurve::AnimationCurve(int steps, int exp) : m_values(steps, 1) { assert(steps > 2); assert(exp >= 1); float index = 0; for (float & value : m_values) { value = std::pow(index / (steps - 1), exp); index++; } } void AnimationCurve::step() { if (m_index + 1 < static_cast(m_values.size())) { m_index++; } } void AnimationCurve::reset() { m_index = 0; } float AnimationCurve::value() const { return m_values.at(m_index); } } // namespace MTFH DustRacing2D-2.0.5/src/game/MTFH/animationcurve.hpp000066400000000000000000000021351360473665400217610ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2017 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef ANIMATIONCURVE_HPP #define ANIMATIONCURVE_HPP #include namespace MTFH { class AnimationCurve { public: AnimationCurve(int steps, int exp = 2); virtual void step(); virtual void reset(); virtual float value() const; private: std::vector m_values; int m_index = 0; }; } // namespace MTFH #endif // ANIMATIONCURVE_HPP DustRacing2D-2.0.5/src/game/MTFH/menu.cpp000066400000000000000000000302711360473665400176760ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "menu.hpp" #include "menumanager.hpp" #include #include #include namespace MTFH { Menu::Menu(std::string id, int width, int height, Menu::Style style) : m_id(id) , m_width(width) , m_height(height) , m_x(0) , m_y(0) , m_targetX(0) , m_targetY(0) , m_currentIndex(-1) , m_selectedIndex(-1) , m_style(style) , m_isDone(false) , m_wrapAround(true) , m_animationCurve(15, 3) { } std::string Menu::id() const { return m_id; } void Menu::addItem(MenuItemPtr menuItem) { m_items.push_back(menuItem); m_currentIndex = m_items.size() - 1; m_selectedIndex = m_currentIndex; menuItem->setMenu(this); menuItem->setIndex(m_items.size() - 1); updateFocus(); } void Menu::reverseItems() { std::reverse(m_items.begin(), m_items.end()); m_currentIndex = (m_items.size() - 1) - m_currentIndex; m_selectedIndex = m_currentIndex; for (size_t i = 0; i < m_items.size(); i++) { m_items.at(i)->setIndex(i); } } void Menu::addMouseItem(Menu::MouseItemType type, MenuItemPtr menuItem) { MouseItem mouseItem; mouseItem.item = menuItem; mouseItem.type = type; m_mouseItems.push_back(mouseItem); } MenuItemPtr Menu::currentItem() const { if (m_items.size()) { return m_items.at(m_currentIndex); } return nullptr; } MenuItemPtr Menu::selectedItem() const { if (m_items.size()) { return m_items.at(m_selectedIndex); } return nullptr; } MenuItemPtr Menu::item(unsigned int index) const { if (index < m_items.size()) { return m_items.at(index); } return nullptr; } unsigned int Menu::itemCount() const { return m_items.size(); } void Menu::render() { renderItems(); renderMouseItems(); } void Menu::renderItems() { if (!m_items.size()) { return; } if (m_style == Menu::Style::VerticalList) { // Calculate total height int totalHeight = 0; for (auto item : m_items) { totalHeight += item->height(); } // Render centered items int startY = y() + m_height / 2 - totalHeight / 2 + totalHeight / m_items.size() / 2; for (auto item : m_items) { item->setPos(x() + m_width / 2, startY); item->render(); startY += item->height(); } } else if (m_style == Menu::Style::HorizontalList) { // Calculate total width int totalWidth = 0; for (auto item : m_items) { totalWidth += item->width(); } // Render centered items int startX = x() + m_width / 2 - totalWidth / 2 + totalWidth / m_items.size() / 2; for (auto item : m_items) { item->setPos(startX, y() + m_height / 2); item->render(); startX += item->width(); } } else if (m_style == Menu::Style::ShowOne) { auto item = m_items.at(m_currentIndex); item->setPos(x() + m_width / 2, y() + m_height / 2); item->render(); } else if (m_style == Menu::Style::ShowMany) { for (auto index : m_itemsToShow) { if (index >= 0 && index < static_cast(m_items.size())) { m_items.at(index)->render(); } } } } bool Menu::isNextAllowed() const { return m_wrapAround || m_currentIndex + 1 < static_cast(m_items.size()); } bool Menu::isPrevAllowed() const { return m_wrapAround || m_currentIndex > 0; } void Menu::renderMouseItems() { for (MouseItem item : m_mouseItems) { switch (item.type) { case Menu::MouseItemType::Quit: item.item->setPos(x() + m_width - item.item->width(), y() + m_height - item.item->height()); item.item->render(); break; case Menu::MouseItemType::Prev: if (isPrevAllowed()) { item.item->setPos(x() + item.item->width(), y() + m_height / 2); item.item->render(); } break; case Menu::MouseItemType::Next: if (isNextAllowed()) { item.item->setPos(x() + m_width - item.item->width(), y() + m_height / 2); item.item->render(); } break; } } } void Menu::incrementIndex(int increment) { if (m_wrapAround) { setCurrentIndexWrapAround(m_currentIndex + increment); } else { setCurrentIndex(m_currentIndex + increment); } updateFocus(); } void Menu::up() { incrementIndex(1); } void Menu::down() { incrementIndex(-1); } void Menu::left() { incrementIndex(-1); } void Menu::right() { incrementIndex(1); } void Menu::selectCurrentItem() { if (m_items.size()) { for (auto item : m_items) { item->setSelected(false); } m_items.at(m_currentIndex)->setSelected(true); m_selectedIndex = m_currentIndex; } } bool Menu::checkIfHit(MenuItemPtr item, int x, int y) { const int x1 = item->x() - item->width() / 2; const int x2 = item->x() + item->width() / 2; const int y1 = item->y() - item->height() / 2; const int y2 = item->y() + item->height() / 2; if (x >= x1 && x <= x2 && y >= y1 && y <= y2) { return true; } return false; } bool Menu::handleMousePressOnMouseItem(int x, int y) { for (MouseItem mouseItem : m_mouseItems) { auto item = mouseItem.item; switch (mouseItem.type) { case MouseItemType::Quit: if (checkIfHit(item, x, y)) { item->setFocused(true); return true; } break; case MouseItemType::Prev: if (isPrevAllowed() && checkIfHit(item, x, y)) { item->setFocused(true); return true; } break; case MouseItemType::Next: if (isNextAllowed() && checkIfHit(item, x, y)) { item->setFocused(true); return true; } break; default: break; } } return false; } bool Menu::handleMousePressOnItem(int x, int y) { for (MouseItem mouseItem : m_mouseItems) { auto item = mouseItem.item; if (checkIfHit(item, x, y)) { item->setFocused(true); return true; } } if (m_style != Menu::Style::ShowOne) { for (unsigned int i = 0; i < m_items.size(); i++) { auto item = m_items.at(i); if (checkIfHit(item, x, y)) { setCurrentIndex(i); return true; } } } return false; } bool Menu::handleMousePress(int x, int y, int screenWidth, int screenHeight) { x = x * width() / screenWidth; y = y * height() / screenHeight; if (handleMousePressOnMouseItem(x, y) || handleMousePressOnItem(x, y)) { return true; } return false; } bool Menu::handleMouseReleaseOnMouseItem(int x, int y) { for (MouseItem mouseItem : m_mouseItems) { mouseItem.item->setFocused(false); } for (MouseItem mouseItem : m_mouseItems) { auto item = mouseItem.item; if (checkIfHit(item, x, y)) { switch (mouseItem.type) { case Menu::MouseItemType::Quit: exit(); return true; case Menu::MouseItemType::Prev: if (isPrevAllowed()) { left(); return true; } break; case Menu::MouseItemType::Next: if (isNextAllowed()) { right(); return true; } break; } } } return false; } bool Menu::handleMouseReleaseOnItem(int x, int y) { if (m_style == Menu::Style::ShowOne) { auto item = currentItem(); if (checkIfHit(item, x, y)) { selectCurrentItem(); return true; } } else { for (unsigned int i = 0; i < m_items.size(); i++) { auto item = m_items.at(i); if (checkIfHit(item, x, y)) { if (static_cast(i) == m_currentIndex) { selectCurrentItem(); } return true; } } } return false; } bool Menu::handleMouseRelease(int x, int y, int screenWidth, int screenHeight) { x = x * width() / screenWidth; y = y * height() / screenHeight; if (handleMouseReleaseOnMouseItem(x, y) || handleMouseReleaseOnItem(x, y)) { return true; } return false; } void Menu::updateFocus() { if (m_items.size()) { for (auto item : m_items) { item->setFocused(false); } m_items.at(m_currentIndex)->setFocused(true); } } int Menu::width() const { return m_width; } int Menu::height() const { return m_height; } void Menu::setPos(float x, float y) { m_x = x; m_y = y; m_targetX = x; m_targetY = y; } void Menu::setPos(float x, float y, float targetX, float targetY) { m_x = x; m_y = y; m_targetX = targetX; m_targetY = targetY; } float Menu::x() const { return m_x; } float Menu::y() const { return m_y; } float Menu::targetY() const { return m_targetY; } float Menu::targetX() const { return m_targetX; } int Menu::currentIndex() const { return m_currentIndex; } void Menu::setCurrentIndex(int index) { const int numItems = m_items.size(); if (!numItems) { m_currentIndex = -1; } else { m_currentIndex = index; m_currentIndex = m_currentIndex < 0 ? 0 : m_currentIndex; m_currentIndex = m_currentIndex >= numItems ? numItems - 1 : m_currentIndex; updateFocus(); } } void Menu::setCurrentIndexWrapAround(int index) { const int numItems = m_items.size(); if (!numItems) { m_currentIndex = -1; } else { m_currentIndex = index; m_currentIndex = m_currentIndex < 0 ? numItems - 1 : m_currentIndex; m_currentIndex = m_currentIndex >= numItems ? 0 : m_currentIndex; updateFocus(); } } void Menu::setItemsToShow(const std::vector & itemsToShow) { m_itemsToShow = itemsToShow; } bool Menu::isDone() const { return m_isDone; } void Menu::setIsDone(bool done) { m_isDone = done; } void Menu::enter() { m_isDone = false; m_animationCurve.reset(); updateFocus(); } void Menu::pushEnter() { m_isDone = false; m_animationCurve.reset(); updateFocus(); } void Menu::pushExit() { m_animationCurve.reset(); } void Menu::popEnter() { m_isDone = false; m_animationCurve.reset(); updateFocus(); } void Menu::popExit() { m_animationCurve.reset(); } void Menu::setWrapAround(bool wrapAround) { m_wrapAround = wrapAround; } void Menu::exit() { MenuManager::instance().popMenu(); } void Menu::stepTime(int msecs) { for (auto item : m_items) { item->stepTime(msecs); } positionAnimation(msecs); } void Menu::positionAnimation(int) { m_animationCurve.step(); m_x = m_x + (m_targetX - m_x) * m_animationCurve.value(); m_y = m_y + (m_targetY - m_y) * m_animationCurve.value(); } Menu::~Menu() { } } // namespace MTFH DustRacing2D-2.0.5/src/game/MTFH/menu.hpp000066400000000000000000000125621360473665400177060ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MENU_HPP #define MENU_HPP #include #include #include #include "animationcurve.hpp" #include "menuitem.hpp" #include "menumanager.hpp" namespace MTFH { class MenuItem; class Menu { public: //! Default styles enum class Style { VerticalList, HorizontalList, ShowOne, // Show only one item at a time ShowMany }; enum class MouseItemType { Quit, Prev, Next }; //! Constructor. Menu(std::string id, int width, int height, Style style = Style::VerticalList); //! Destructor. virtual ~Menu(); std::string id() const; //! Renders the menu items. See also MenuItemView. virtual void render(); //! Selection up. virtual void up(); //! Selection down. virtual void down(); //! Current item left. virtual void left(); //! Current item right. virtual void right(); //! Select the current item. virtual void selectCurrentItem(); //! Steps time for animations etc. Re-implement in the menu items. virtual void stepTime(int msecs); virtual void positionAnimation(int msecs); /*! Handle mouse press at given screen coordinates. * \return true if on a valid item. */ virtual bool handleMousePress(int x, int y, int screenWidth, int screenHeight); /*! Handle mouse release at given screen coordinates. * \return true if on a valid item. */ virtual bool handleMouseRelease(int x, int y, int screenWidth, int screenHeight); //! \return current item or nullptr if no items added. MenuItemPtr currentItem() const; /*! \return selected item or nullptr if no item added. * Pressing enter on an item selects it. */ MenuItemPtr selectedItem() const; //! \return current item at given index or nullptr. MenuItemPtr item(unsigned int index) const; //! \return number of currently added items. unsigned int itemCount() const; //! Add item to the menu. virtual void addItem(MenuItemPtr menuItem); //! Reverse the item vector. virtual void reverseItems(); //! Add mouse control item. virtual void addMouseItem(MouseItemType type, MenuItemPtr menuItem); //! Use this if the current menu stack needs to be //! completely quit, for example when the execution //! should move from the menu to the actual game. void setIsDone(bool done); //! \returns true if done. bool isDone() const; //! Returns the width of the menu. int width() const; //! Returns the height of the menu. int height() const; void setPos(float x, float y); void setPos(float x, float y, float targetX, float targetY); float x() const; float y() const; //! Animation target X float targetX() const; //! Animation target Y float targetY() const; //! Return the current index. int currentIndex() const; //! Set default wrap behavior. void setWrapAround(bool wrapAround); //! Set current index. Clamp if out-of-range. void setCurrentIndex(int index); //! Set current index. Wrap around if out-of-range. void setCurrentIndexWrapAround(int index); //! \see Style::ShowMany void setItemsToShow(const std::vector & itemsToShow); //! Exits and pops the menu stack. The menu can call this also by itself. virtual void exit(); protected: //! Called when the menu is entered. Call parent implementation if overridden. virtual void enter(); virtual void pushEnter(); virtual void pushExit(); virtual void popEnter(); virtual void popExit(); private: struct MouseItem { MenuItemPtr item; MouseItemType type; }; void incrementIndex(int increment); bool isNextAllowed() const; bool isPrevAllowed() const; bool checkIfHit(MenuItemPtr item, int x, int y); bool doHandleMousePressOnMouseItem(MenuItemPtr item, int x, int y); bool handleMousePressOnItem(int x, int y); bool handleMousePressOnMouseItem(int x, int y); bool handleMouseReleaseOnItem(int x, int y); bool handleMouseReleaseOnMouseItem(int x, int y); void renderItems(); void renderMouseItems(); void updateFocus(); std::vector m_items; std::vector m_mouseItems; std::vector m_itemsToShow; std::string m_id; int m_width; int m_height; float m_x; float m_y; float m_targetX; float m_targetY; int m_currentIndex; int m_selectedIndex; Style m_style; bool m_isDone; bool m_wrapAround; AnimationCurve m_animationCurve; friend class MenuManager; }; } // namespace MTFH #endif // MENU_HPP DustRacing2D-2.0.5/src/game/MTFH/menuitem.cpp000066400000000000000000000110221360473665400205460ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "menuitem.hpp" #include "menu.hpp" #include "menuitemaction.hpp" #include "menumanager.hpp" namespace MTFH { MenuItem::MenuItem(float width, float height, std::wstring text, bool selectable) : m_menu(nullptr) , m_text(text) , m_menuOpenActionMenuId("") , m_action(nullptr) , m_actionFunction(nullptr) , m_view(nullptr) , m_focused(false) , m_selected(false) , m_selectable(selectable) , m_width(width) , m_height(height) , m_x(0) , m_y(0) , m_targetX(0) , m_targetY(0) , m_lMargin(1) , m_rMargin(1) , m_tMargin(1) , m_bMargin(1) , m_index(-1) , m_animationCurve(30, 3) { } float MenuItem::width() const { return m_width + m_lMargin + m_rMargin; } float MenuItem::height() const { return m_height + m_tMargin + m_bMargin; } void MenuItem::setIndex(int index) { m_index = index; } int MenuItem::index() const { return m_index; } void MenuItem::setPos(float x, float y) { m_x = x; m_y = y; m_targetX = x; m_targetY = y; } void MenuItem::setPos(float x, float y, float targetX, float targetY) { m_x = x; m_y = y; m_targetX = targetX; m_targetY = targetY; } float MenuItem::x() const { return m_x; } float MenuItem::y() const { return m_y; } void MenuItem::resetAnimationCurve(int steps, int exp) { m_animationCurve = AnimationCurve(steps, exp); m_animationCurve.reset(); } void MenuItem::setView(MenuItemViewPtr view) { m_view = view; } MenuItemViewPtr MenuItem::view() { return m_view; } void MenuItem::setAction(MenuItemActionPtr action) { m_action = action; } void MenuItem::setAction(ActionFunction actionFunction) { m_actionFunction = actionFunction; } void MenuItem::setMenuOpenAction(const std::string & menuId) { m_menuOpenActionMenuId = menuId; } MenuItemActionPtr MenuItem::action() const { return m_action; } void MenuItem::onLeft() { } void MenuItem::onRight() { } void MenuItem::onUp() { } void MenuItem::onDown() { } void MenuItem::setCurrent() { if (m_menu) { m_menu->setCurrentIndex(index()); } } void MenuItem::setSelected(bool flag) { if (flag) { if (m_action) { m_action->fire(); } if (m_actionFunction) { m_actionFunction(); } if (!m_menuOpenActionMenuId.empty()) { MenuManager::instance().pushMenu(m_menuOpenActionMenuId); } } m_selected = flag; } void MenuItem::setFocused(bool focused) { m_focused = focused; } void MenuItem::setContentsMargins(float left, float right, float top, float bottom) { m_lMargin = left; m_rMargin = right; m_tMargin = top; m_bMargin = bottom; } void MenuItem::getContentsMargins(float & left, float & right, float & top, float & bottom) const { left = m_lMargin; right = m_rMargin; top = m_tMargin; bottom = m_bMargin; } bool MenuItem::focused() const { return m_focused; } float MenuItem::targetY() const { return m_targetY; } Menu * MenuItem::menu() const { return m_menu; } void MenuItem::setMenu(Menu * menu) { m_menu = menu; } float MenuItem::targetX() const { return m_targetX; } bool MenuItem::selected() const { return m_selected && m_selectable; } bool MenuItem::selectable() const { return m_selectable; } void MenuItem::render() { if (m_view) { m_view->render(m_x, m_y); } } const std::wstring & MenuItem::text() const { return m_text; } void MenuItem::stepTime(int msecs) { if (m_view) { m_view->stepTime(msecs); } positionAnimation(msecs); } void MenuItem::positionAnimation(int) { m_animationCurve.step(); m_x = m_x + (m_targetX - m_x) * m_animationCurve.value(); m_y = m_y + (m_targetY - m_y) * m_animationCurve.value(); } MenuItem::~MenuItem() { } } // namespace MTFH DustRacing2D-2.0.5/src/game/MTFH/menuitem.hpp000066400000000000000000000062331360473665400205630ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MENUITEM_HPP #define MENUITEM_HPP #include #include #include #include "animationcurve.hpp" #include "menuitemaction.hpp" #include "menuitemview.hpp" namespace MTFH { class Menu; class MenuItemAction; //! Base class for items used in menus. class MenuItem { public: MenuItem(float width, float height, std::wstring text = L"", bool selectable = false); virtual ~MenuItem(); void setMenu(Menu * menu); Menu * menu() const; void setIndex(int index); int index() const; float width() const; float height() const; void setPos(float x, float y); void setPos(float x, float y, float targetX, float targetY); float x() const; float y() const; void resetAnimationCurve(int steps, int exp); const std::wstring & text() const; void setView(MenuItemViewPtr view); MenuItemViewPtr view(); void setAction(MenuItemActionPtr action); typedef std::function ActionFunction; void setAction(ActionFunction actionFunction); void setMenuOpenAction(const std::string & menuId); MenuItemActionPtr action() const; virtual void render(); virtual void onLeft(); virtual void onRight(); virtual void onUp(); virtual void onDown(); virtual void setCurrent(); virtual void setSelected(bool flag); virtual void setFocused(bool focused); virtual void stepTime(int msecs); virtual void positionAnimation(int msecs); void setContentsMargins(float left, float right, float top, float bottom); void getContentsMargins(float & left, float & right, float & top, float & bottom) const; bool selected() const; bool selectable() const; bool focused() const; //! Animation target X float targetX() const; //! Animation target Y float targetY() const; private: Menu * m_menu; std::wstring m_text; std::string m_menuOpenActionMenuId; MenuItemActionPtr m_action; ActionFunction m_actionFunction; MenuItemViewPtr m_view; bool m_focused; bool m_selected; bool m_selectable; float m_width; float m_height; float m_x; float m_y; float m_targetX; float m_targetY; float m_lMargin; float m_rMargin; float m_tMargin; float m_bMargin; int m_index; AnimationCurve m_animationCurve; }; typedef std::shared_ptr MenuItemPtr; } // namespace MTFH #endif // MENUITEM_HPP DustRacing2D-2.0.5/src/game/MTFH/menuitemaction.cpp000066400000000000000000000015721360473665400217550ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "menuitemaction.hpp" namespace MTFH { MenuItemAction::MenuItemAction() { } MenuItemAction::~MenuItemAction() { } } // namespace MTFH DustRacing2D-2.0.5/src/game/MTFH/menuitemaction.hpp000066400000000000000000000023451360473665400217610ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MENUITEMACTION_HPP #define MENUITEMACTION_HPP #include namespace MTFH { //! Base class for menu item actions triggered when //! the item gets selected. class MenuItemAction { public: //! Constructor. MenuItemAction(); //! Called on select. virtual void fire() { // Do nothing by default. } //! Destructor. virtual ~MenuItemAction(); }; typedef std::shared_ptr MenuItemActionPtr; } // namespace MTFH #endif // MENUITEMACTION_HPP DustRacing2D-2.0.5/src/game/MTFH/menuitemview.cpp000066400000000000000000000020211360473665400214400ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "menuitemview.hpp" #include "menuitem.hpp" namespace MTFH { MenuItemView::MenuItemView(MenuItem & owner) : m_owner(owner) { } MenuItem & MenuItemView::owner() const { return m_owner; } void MenuItemView::stepTime(int) { } MenuItemView::~MenuItemView() { } } // namespace MTFH DustRacing2D-2.0.5/src/game/MTFH/menuitemview.hpp000066400000000000000000000025351360473665400214570ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MENUITEMVIEW_HPP #define MENUITEMVIEW_HPP #include namespace MTFH { class MenuItem; //! Base class for menu item views. class MenuItemView { public: //! Constructor. MenuItemView(MenuItem & owner); //! Destructor. virtual ~MenuItemView(); //! Render the view. virtual void render(float x, float y) = 0; //! \return the owner item. MenuItem & owner() const; //! Re-imp for animations etc. virtual void stepTime(int msecs); private: MenuItem & m_owner; }; typedef std::shared_ptr MenuItemViewPtr; } // namespace MTFH #endif // MENUITEMVIEW_HPP DustRacing2D-2.0.5/src/game/MTFH/menumanager.cpp000066400000000000000000000106061360473665400212310ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2012 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #include "menumanager.hpp" #include "menu.hpp" #include namespace MTFH { MenuManager * MenuManager::m_instance = nullptr; MenuManager::MenuManager() { assert(!m_instance); m_instance = this; } MenuPtr MenuManager::activeMenu() const { if (m_menuStack.size()) { return m_menuStack.back(); } return nullptr; } MenuPtr MenuManager::getMenuById(std::string menuId) { assert(m_idToMenuMap[menuId]); return m_idToMenuMap[menuId]; } void MenuManager::addMenu(MenuPtr newMenu) { m_idToMenuMap[newMenu->id()] = newMenu; } void MenuManager::enterMenu(MenuPtr newMenu) { if (m_menuStack.size()) { m_prevMenu = m_menuStack.back(); } m_menuStack.clear(); m_menuStack.push_back(newMenu); newMenu->enter(); } void MenuManager::enterMenu(std::string menuId) { assert(m_idToMenuMap[menuId]); enterMenu(m_idToMenuMap[menuId]); } void MenuManager::pushMenu(MenuPtr newMenu) { if (!m_menuStack.size() || m_menuStack.back() != newMenu) { if (m_menuStack.size()) { m_prevMenu = m_menuStack.back(); m_prevMenu->pushExit(); } m_menuStack.push_back(newMenu); newMenu->pushEnter(); } } void MenuManager::pushMenu(std::string menuId) { assert(m_idToMenuMap[menuId]); pushMenu(m_idToMenuMap[menuId]); } void MenuManager::popMenu() { if (m_menuStack.size()) { m_prevMenu = m_menuStack.back(); m_prevMenu->popExit(); m_menuStack.pop_back(); if (m_menuStack.size()) { m_menuStack.back()->popEnter(); } } } void MenuManager::popToMenu(std::string menuId) { if (m_menuStack.size()) { m_prevMenu = m_menuStack.back(); m_prevMenu->popExit(); m_menuStack.clear(); } assert(m_idToMenuMap[menuId]); m_menuStack.push_back(m_idToMenuMap[menuId]); m_idToMenuMap[menuId]->popEnter(); } void MenuManager::enterCurrentMenu() { if (m_menuStack.size()) { m_menuStack.back()->enter(); } } void MenuManager::exit() { m_menuStack.clear(); } MenuManager & MenuManager::instance() { assert(m_instance); return *m_instance; } void MenuManager::render() { if (m_prevMenu) { m_prevMenu->render(); } if (m_menuStack.size()) { m_menuStack.back()->render(); } } void MenuManager::up() { if (m_menuStack.size()) { m_menuStack.back()->up(); } } void MenuManager::down() { if (m_menuStack.size()) { m_menuStack.back()->down(); } } void MenuManager::left() { if (m_menuStack.size()) { m_menuStack.back()->left(); } } void MenuManager::right() { if (m_menuStack.size()) { m_menuStack.back()->right(); } } bool MenuManager::mousePress(int x, int y, int screenWidth, int screenHeight) { if (m_menuStack.size()) { return m_menuStack.back()->handleMousePress(x, y, screenWidth, screenHeight); } return false; } bool MenuManager::mouseRelease(int x, int y, int screenWidth, int screenHeight) { if (m_menuStack.size()) { return m_menuStack.back()->handleMouseRelease(x, y, screenWidth, screenHeight); } return false; } void MenuManager::selectCurrentItem() { if (m_menuStack.size()) { m_menuStack.back()->selectCurrentItem(); } } bool MenuManager::isDone() const { if (!m_menuStack.size()) { return true; } else { return m_menuStack.back()->isDone(); } } void MenuManager::stepTime(int msecs) { for (auto && menuIter : m_idToMenuMap) { menuIter.second->stepTime(msecs); } } } // namespace MTFH DustRacing2D-2.0.5/src/game/MTFH/menumanager.hpp000066400000000000000000000056101360473665400212350ustar00rootroot00000000000000// This file is part of Dust Racing 2D. // Copyright (C) 2015 Jussi Lind // // Dust Racing 2D 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. // Dust Racing 2D 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 Dust Racing 2D. If not, see . #ifndef MENUMANAGER_HPP #define MENUMANAGER_HPP #include #include #include #include namespace MTFH { class Menu; using MenuPtr = std::shared_ptr; //! The singleton MenuManager manages menus. class MenuManager { public: //! Constructor. MenuManager(); //! Returns the active menu or nullptr. MenuPtr activeMenu() const; //! Add the given menu. void addMenu(MenuPtr newMenu); //! Returns matching menu or explode. MenuPtr getMenuById(std::string menuId); //! Enter the given menu & clear the menu stack. void enterMenu(MenuPtr newMenu); //! Enter the given menu & clear the menu stack. void enterMenu(std::string menuId); //! Enter the given menu & push to stack. void pushMenu(MenuPtr newMenu); //! Enter the given menu & push to stack. void pushMenu(std::string menuId); //! Force exit on current menu and enter the previous menu. void popMenu(); //! Force exit on current menu and enter the given menu. void popToMenu(std::string menuId); //! Force enter on current menu. void enterCurrentMenu(); //! Force exit on all menus. void exit(); //! Render the menu. void render(); //! Selection up. void up(); //! Selection down. void down(); //! Current item left. void left(); //! Current item right. void right(); //! Select the current item. void selectCurrentItem(); //! Give a time tick to the whole menu tree. void stepTime(int msecs); /*! Handle mouse press at given screen coordinates. * \return true if on a valid item. */ bool mousePress(int x, int y, int screenWidth, int screenHeight); /*! Handle mouse release at given screen coordinates. * \return true if on a valid item. */ bool mouseRelease(int x, int y, int screenWidth, int screenHeight); //! \returns true when done. bool isDone() const; static MenuManager & instance(); private: std::map m_idToMenuMap; std::vector m_menuStack; MenuPtr m_prevMenu; static MenuManager * m_instance; }; } // namespace MTFH #endif // MENUMANAGER_HPP DustRacing2D-2.0.5/src/game/MiniCore/000077500000000000000000000000001360473665400171725ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/.gitignore000066400000000000000000000000771360473665400211660ustar00rootroot00000000000000cmake_*cmake moc_* *_automoc* *.a *CTest* CMakeFiles Makefile DustRacing2D-2.0.5/src/game/MiniCore/CMakeLists.txt000066400000000000000000000030371360473665400217350ustar00rootroot00000000000000project(MiniCore) cmake_minimum_required(VERSION 2.8.12) cmake_policy(VERSION 2.8.12) if(POLICY CMP0005) cmake_policy(SET CMP0005 NEW) endif() if(POLICY CMP0020) cmake_policy(SET CMP0020 NEW) endif() if(POLICY CMP0043) cmake_policy(SET CMP0043 NEW) endif() if(POLICY CMP0054) cmake_policy(SET CMP0054 NEW) endif() option(GLES "Build for OpenGL ES 2.0" OFF) option(NO_GLEW "Don't use GLEW to resolve OpenGL extensions if enabled." ON) option(QOpenGLFunctions "Use QOpenGLFunctions to resolve OpenGL extensions if enabled." ON) if(GLES) add_definitions(-D__MC_GLES__) message(STATUS "Compiling for OpenGL ES 2.0") else() message(STATUS "Compiling for OpenGL 2.1") endif() if(NO_GLEW) add_definitions(-D__MC_NO_GLEW__) endif() if(QOpenGLFunctions) message(STATUS "Using QOpenGLFunctions") add_definitions(-D__MC_QOPENGLFUNCTIONS__) add_definitions(-D__MC_NO_GLEW__) endif() add_definitions(-DGLEW_STATIC) add_definitions(-DGLEW_NO_GLU) add_definitions(-DVERSION="${VERSION}") set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(QT_MIN_VER 5.2.1) find_package(Qt5Core ${QT_MIN_VER} REQUIRED) find_package(Qt5OpenGL ${QT_MIN_VER} REQUIRED) find_package(Qt5Xml ${QT_MIN_VER} REQUIRED) find_package(Qt5Widgets ${QT_MIN_VER} REQUIRED) # Find OpenGL find_package(OpenGL REQUIRED) if(${CMAKE_VERSION} VERSION_LESS "3.11.0") set(MINICORE_OPENGL_LIBS ${OPENGL_gl_LIBRARY}) else() set(MINICORE_OPENGL_LIBS OpenGL::GL) endif() # Enable CMake's unit test framework enable_testing() add_subdirectory(src) DustRacing2D-2.0.5/src/game/MiniCore/configure000077500000000000000000000001361360473665400211010ustar00rootroot00000000000000#!/bin/sh rm -f CMakeCache.txt cmake . $@ && echo "Configuring compeleted. Now run \"make\"." DustRacing2D-2.0.5/src/game/MiniCore/src/000077500000000000000000000000001360473665400177615ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/000077500000000000000000000000001360473665400210405ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/MCAssetManager000066400000000000000000000000351360473665400235530ustar00rootroot00000000000000#include "mcassetmanager.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/MCMeshManager000066400000000000000000000000351360473665400233700ustar00rootroot00000000000000#include "mcmeshmanager.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/MCMeshObjectData000066400000000000000000000000371360473665400240200ustar00rootroot00000000000000#include "mcmeshobjectdata.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/MCSurfaceManager000066400000000000000000000000371360473665400240660ustar00rootroot00000000000000#include "mcsurfacemanager.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/MCSurfaceMetaData000066400000000000000000000000411360473665400241670ustar00rootroot00000000000000#include "mcsurfacemetadata.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcassetmanager.cc000066400000000000000000000056761360473665400243570ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcassetmanager.hh" #include "mclogger.hh" #include MCAssetManager * MCAssetManager::m_instance = nullptr; MCAssetManager::MCAssetManager( const std::string & baseDataPath, const std::string & surfaceConfigPath, const std::string & fontConfigPath, const std::string & meshConfigPath) : m_surfaceManager(new MCSurfaceManager) , m_textureFontManager(new MCTextureFontManager(*m_surfaceManager)) , m_meshManager(new MCMeshManager) , m_baseDataPath(baseDataPath) , m_surfaceConfigPath(surfaceConfigPath) , m_fontConfigPath(fontConfigPath) , m_meshConfigPath(meshConfigPath) { assert(!MCAssetManager::m_instance); MCAssetManager::m_instance = this; } MCAssetManager & MCAssetManager::instance() { assert(MCAssetManager::m_instance); return *MCAssetManager::m_instance; } MCSurfaceManager & MCAssetManager::surfaceManager() { assert(instance().m_surfaceManager); return *instance().m_surfaceManager; } MCTextureFontManager & MCAssetManager::textureFontManager() { assert(instance().m_textureFontManager); return *instance().m_textureFontManager; } MCMeshManager & MCAssetManager::meshManager() { assert(instance().m_meshManager); return *instance().m_meshManager; } void MCAssetManager::load() { loadSurfaces(); loadFonts(); loadMeshes(); } void MCAssetManager::loadSurfaces() { if (m_surfaceConfigPath != "") { MCLogger().info() << "Loading surface config from '" << m_surfaceConfigPath << "'.."; m_surfaceManager->load(m_surfaceConfigPath, m_baseDataPath); } } void MCAssetManager::loadFonts() { if (m_fontConfigPath != "") { MCLogger().info() << "Loading font config from '" << m_fontConfigPath << "'.."; m_textureFontManager->load(m_fontConfigPath); } } void MCAssetManager::loadMeshes() { if (m_meshConfigPath != "") { MCLogger().info() << "Loading mesh config from '" << m_meshConfigPath << "'.."; m_meshManager->load(m_meshConfigPath, m_baseDataPath); } } MCAssetManager::~MCAssetManager() { delete m_surfaceManager; delete m_textureFontManager; delete m_meshManager; } DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcassetmanager.hh000066400000000000000000000041621360473665400243560ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCASSETMANAGER_HH #define MCASSETMANAGER_HH #include #include "mcmeshmanager.hh" #include "mcsurfacemanager.hh" #include "mctexturefontmanager.hh" /*! Singleton class that handles loading of assets and instantiates * all sub-managers (MCSurfaceManager, MCTextureFontManager, MCMeshManager) */ class MCAssetManager { public: //! Constructor. explicit MCAssetManager( const std::string & baseDataPath = "", const std::string & surfaceConfigPath = "", const std::string & fontConfigPath = "", const std::string & meshConfigPath = ""); //! \return The singleton instance. static MCAssetManager & instance(); static MCSurfaceManager & surfaceManager(); static MCTextureFontManager & textureFontManager(); static MCMeshManager & meshManager(); //! Loads all assets. void load(); //! Destructor. ~MCAssetManager(); private: void loadSurfaces(); void loadFonts(); void loadMeshes(); static MCAssetManager * m_instance; MCSurfaceManager * m_surfaceManager; MCTextureFontManager * m_textureFontManager; MCMeshManager * m_meshManager; std::string m_baseDataPath; std::string m_surfaceConfigPath; std::string m_fontConfigPath; std::string m_meshConfigPath; }; #endif // MCASSETMANAGER_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshconfigloader.cc000066400000000000000000000077411360473665400252110ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include #include #include #include #include "mclogger.hh" #include "mcmeshconfigloader.hh" #include bool MCMeshConfigLoader::load(const std::string & filePath) { QDomDocument doc; QFile file(filePath.c_str()); if (!file.open(QIODevice::ReadOnly)) { return false; } if (!doc.setContent(&file)) { file.close(); return false; } file.close(); const auto && root = doc.documentElement(); if (root.nodeName() == "meshes") { const std::string baseModelPath = root.attribute("baseModelPath", "./").toStdString(); auto && node = root.firstChild(); while (!node.isNull() && node.nodeName() == "mesh") { const auto newData = std::make_shared(); const auto && element = node.toElement(); if (!element.isNull()) { parseAttributes(element, newData, baseModelPath); parseChildNodes(node, newData); } m_meshes.push_back(newData); node = node.nextSibling(); } } return true; } void MCMeshConfigLoader::parseAttributes(const QDomElement & element, MCMeshDataPtr newData, const std::string & baseModelPath) { const std::string model = element.attribute("model", "").toStdString(); newData->handle = element.attribute("handle", "").toStdString(); newData->texture1 = element.attribute("texture1", "").toStdString(); newData->texture2 = element.attribute("texture2", "").toStdString(); if (!model.empty()) { newData->modelPath = baseModelPath + QDir::separator().toLatin1() + model; } } void MCMeshConfigLoader::parseChildNodes(const QDomNode & node, MCMeshDataPtr newData) { auto && childNode = node.firstChild(); while (!childNode.isNull()) { if (childNode.nodeName() == "color") { const auto && element = childNode.toElement(); if (!element.isNull()) { newData->color.setR(element.attribute("r", "1").toFloat()); newData->color.setG(element.attribute("g", "1").toFloat()); newData->color.setB(element.attribute("b", "1").toFloat()); newData->color.setA(element.attribute("a", "1").toFloat()); } } else if (childNode.nodeName() == "scale") { const auto && element = childNode.toElement(); if (!element.isNull()) { newData->scale.first.setI(element.attribute("x", "1").toFloat()); newData->scale.first.setJ(element.attribute("y", "1").toFloat()); newData->scale.first.setK(element.attribute("z", "1").toFloat()); newData->scale.second = true; } } else { throw std::runtime_error("Unknown element '" + childNode.nodeName().toStdString() + "'"); } childNode = childNode.nextSibling(); } } size_t MCMeshConfigLoader::meshCount() const { return m_meshes.size(); } MCMeshDataPtr MCMeshConfigLoader::mesh(size_t index) const { return m_meshes.at(index); } DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshconfigloader.hh000066400000000000000000000030731360473665400252150ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCMESHCONFIGLOADER_HH #define MCMESHCONFIGLOADER_HH #include "mcmeshmetadata.hh" #include #include class QDomElement; class QDomNode; //! Loads the mesh config. class MCMeshConfigLoader { public: //! Load all meshes found in filePath. //! \return true if succeeded. bool load(const std::string & filePath); //! Get mesh count. size_t meshCount() const; //! Get mesh data of given index. MCMeshDataPtr mesh(size_t index) const; private: void parseAttributes(const QDomElement & element, MCMeshDataPtr newData, const std::string & baseModelPath); void parseChildNodes(const QDomNode & node, MCMeshDataPtr newData); std::vector m_meshes; }; #endif // MCMESHCONFIGLOADER_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshloader.cc000066400000000000000000000107731360473665400240220ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcmeshloader.hh" #include #include #include #include MCMeshLoader::MCMeshLoader() { m_keyToFunctionMap["v"] = std::bind(&MCMeshLoader::parseV, this, std::placeholders::_1); m_keyToFunctionMap["vt"] = std::bind(&MCMeshLoader::parseVT, this, std::placeholders::_1); m_keyToFunctionMap["vn"] = std::bind(&MCMeshLoader::parseVN, this, std::placeholders::_1); m_keyToFunctionMap["f"] = std::bind(&MCMeshLoader::parseF, this, std::placeholders::_1); } bool MCMeshLoader::load(QString filePath) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return false; } QTextStream in(&file); in.setCodec("UTF-8"); return readStream(in); } bool MCMeshLoader::readStream(QTextStream & stream) { m_v.clear(); m_vn.clear(); m_vt.clear(); m_faces.clear(); QString line = stream.readLine(); while (!line.isNull()) { processLine(line); line = stream.readLine(); } return true; } void MCMeshLoader::processLine(QString line) { line.remove(QRegExp("^\\s+")); if (!line.startsWith('#') && !line.startsWith('s') && !line.startsWith('o') && !line.startsWith('m') && // mtllib !line.startsWith('u')) // usemtl { const QString key = line.split(QRegExp("\\s+")).at(0); auto iter = m_keyToFunctionMap.find(key); if (iter != m_keyToFunctionMap.end()) { iter->second(line); } } } void MCMeshLoader::parseV(QString line) { const QStringList atoms = line.split(QRegExp("\\s+")); V vertex = { atoms.at(1).toFloat(), atoms.at(2).toFloat(), atoms.at(3).toFloat() }; m_v.push_back(vertex); } void MCMeshLoader::parseVN(QString line) { const QStringList atoms = line.split(QRegExp("\\s+")); VN normal = { atoms.at(1).toFloat(), atoms.at(2).toFloat(), atoms.at(3).toFloat() }; m_vn.push_back(normal); } void MCMeshLoader::parseVT(QString line) { const QStringList atoms = line.split(QRegExp("\\s+")); VT tcoord = { atoms.at(1).toFloat(), atoms.at(2).toFloat() }; m_vt.push_back(tcoord); } void MCMeshLoader::parseF(QString line) { MCMesh::Face face; QStringList vertices = line.split(QRegExp("\\s+")); vertices.removeFirst(); for (QString vertex : vertices) { const QStringList indices = vertex.split('/'); assert(indices.size() == 3); // Location MCMesh::Face::Vertex faceVertex; const unsigned int vIndex = indices.at(0).toInt() - 1; assert(vIndex < m_v.size()); faceVertex.x = m_v.at(vIndex).x; faceVertex.y = m_v.at(vIndex).y; faceVertex.z = m_v.at(vIndex).z; // Texture coordinate if (m_vt.size()) { const unsigned int vtIndex = indices.at(1).toInt() - 1; assert(vtIndex < m_vt.size()); faceVertex.u = m_vt.at(vtIndex).u; faceVertex.v = m_vt.at(vtIndex).v; } // Normal if (m_vn.size()) { const unsigned int vnIndex = indices.at(2).toInt() - 1; assert(vnIndex < m_vn.size()); faceVertex.i = m_vn.at(vnIndex).x; faceVertex.j = m_vn.at(vnIndex).y; faceVertex.k = m_vn.at(vnIndex).z; face.vertices.push_back(faceVertex); } } m_faces.push_back(face); } const MCMesh::FaceVector & MCMeshLoader::faces() const { return m_faces; } const std::vector & MCMeshLoader::vertices() const { return m_v; } const std::vector & MCMeshLoader::normals() const { return m_vn; } const std::vector & MCMeshLoader::textureCoords() const { return m_vt; } DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshloader.hh000066400000000000000000000036511360473665400240310ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCMESHLOADER_HPP #define MCMESHLOADER_HPP #include "mcmesh.hh" #include #include #include #include //! A loader for .obj-formatted 3D model files. class MCMeshLoader { public: struct V { float x, y, z; }; struct VN { float x, y, z; }; struct VT { float u, v; }; //! Constructor. MCMeshLoader(); //! Load the given .obj-file. bool load(QString filePath); const MCMesh::FaceVector & faces() const; bool readStream(QTextStream & stream); const std::vector & vertices() const; const std::vector & normals() const; const std::vector & textureCoords() const; protected: void processLine(QString line); void parseV(QString line); void parseVN(QString line); void parseVT(QString line); void parseF(QString line); private: std::map> m_keyToFunctionMap; std::vector m_v; std::vector m_vn; std::vector m_vt; MCMesh::FaceVector m_faces; }; #endif // MCMESHLOADER_HPP DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshmanager.cc000066400000000000000000000062771360473665400241720ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcmeshmanager.hh" #include "mcassetmanager.hh" #include "mcglmaterial.hh" #include "mcmesh.hh" #include "mcmeshconfigloader.hh" #include "mcmeshloader.hh" #include "mcsurface.hh" #include #include #include #include MCMeshManager::MCMeshManager() { } MCMeshPtr MCMeshManager::createMesh(const MCMeshMetaData & data, const MCMesh::FaceVector & faces) { // Create material const auto material = std::make_shared(); material->setTexture( data.texture1 != "" ? MCAssetManager::surfaceManager().surface(data.texture1)->material()->texture(0) : 0, 0); material->setTexture( data.texture2 != "" ? MCAssetManager::surfaceManager().surface(data.texture2)->material()->texture(0) : 0, 1); // Create a new MCMesh object const auto mesh = std::make_shared(data.handle, faces, material); // Maybe better place for this could be in the material? mesh->setColor(data.color); if (data.scale.second) { mesh->setScale(data.scale.first); } m_meshMap[data.handle] = mesh; return mesh; } void MCMeshManager::load(const std::string & configFilePath, const std::string & baseDataPath) { MCMeshConfigLoader configLoader; MCMeshLoader modelLoader; if (configLoader.load(configFilePath)) { for (size_t i = 0; i < configLoader.meshCount(); i++) { auto && metaData = configLoader.mesh(i); QString modelPath = QString(baseDataPath.c_str()) + QDir::separator().toLatin1() + metaData->modelPath.c_str(); modelPath.replace("./", ""); modelPath.replace("//", "/"); if (modelLoader.load(modelPath)) { createMesh(*metaData, modelLoader.faces()); } else { throw std::runtime_error("Loading mesh '" + modelPath.toStdString() + "' failed!"); } } } else { throw std::runtime_error("Parsing '" + configFilePath + "' failed!"); } } MCMeshPtr MCMeshManager::mesh(const std::string & handle) const { // Try to find existing mesh for the handle if (m_meshMap.count(handle) == 0) { throw std::runtime_error("Cannot find mesh object for handle '" + handle + "'"); } // Yes: return handle for the mesh return m_meshMap.find(handle)->second; } DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshmanager.hh000066400000000000000000000062661360473665400242020ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCMESHMANAGER_HH #define MCMESHMANAGER_HH #include #include #include #include "mcmacros.hh" #include "mcmesh.hh" #include "mcmeshmetadata.hh" /*! Mesh manager base class. Can be used via MCAssetManager. * * It loads model data (only .obj supported) listed in a special mapping * file and bulds MCMesh objects. Doesn't support .mtl materials. Currently the * texture is specified by MCSurface handle in the XML config. Originally the * intention was to support 2D surface objects only. But things changed.. * * MCMesh objects can be accessed via handles specified in the XML-based mapping file. * * Surfaces need to be loaded first, if textures for the meshes are defined. * * Example mapping file: * * * * * * * * * * * * */ class MCMeshManager { public: //! Constructor. MCMeshManager(); //! Destructor virtual ~MCMeshManager() { } /*! Loads mesh config from strBasePath using the given mapping file strFile. * \param configFilePath Path to the XML-based input file. * \param baseDataPath The absolute search path for an mesh is * baseDataPath + baseModelPath + fileName. baseModelPath and the fileName are * defined in the input file. */ virtual void load(const std::string & configFilePath, const std::string & baseDataPath); /*! Returns a mesh object associated with given strId. * MCMeshManager will keep the ownership. * \param handle Handle defined in the mesh config file. * \return Reference to the corresponding MCMesh. * \throws std::runtime_error on failure. */ MCMeshPtr mesh(const std::string & handle) const; //! Create a mesh from given meta data and face vector. MCMeshPtr createMesh(const MCMeshMetaData & data, const MCMesh::FaceVector & faces); private: typedef std::unordered_map MeshHash; MeshHash m_meshMap; DISABLE_COPY(MCMeshManager); DISABLE_ASSI(MCMeshManager); DISABLE_MOVE(MCMeshManager); }; #endif // MCMESHMANAGER_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshmetadata.hh000066400000000000000000000030551360473665400243410ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2013 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCMESHMETADATA_HH #define MCMESHMETADATA_HH #include #include #include #include #include /*! Mesh metadata structure returned by MCMeshConfigLoader. * MCMeshManager can create MCMesh objects based on this data. */ struct MCMeshMetaData { //! Handle of the mesh. std::string handle; //! .obj-file path. std::string modelPath; //! Texture/surface handle (see MCSurfaceManager). std::string texture1; //! Texture/surface handle (see MCSurfaceManager). std::string texture2; //! Color MCGLColor color; //! Scale std::pair scale; }; using MCMeshDataPtr = std::shared_ptr; #endif // MCMESHMETADATA_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshobjectdata.cc000066400000000000000000000022201360473665400246400ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2011 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcmeshobjectdata.hh" MCMeshObjectData::MCMeshObjectData(const std::string & typeId) : MCSurfaceObjectData(typeId) { } void MCMeshObjectData::setMeshId(const std::string & id) { m_meshId = id; } const std::string & MCMeshObjectData::meshId() const { return m_meshId; } MCMeshObjectData::~MCMeshObjectData() { } DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcmeshobjectdata.hh000066400000000000000000000027271360473665400246660ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2011 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCMESHOBJECTDATA_HH #define MCMESHOBJECTDATA_HH #include "mcsurfaceobjectdata.hh" //! Mesh object description that can be given to MCObjectFactory. class MCMeshObjectData : public MCSurfaceObjectData { public: //! Constructor. explicit MCMeshObjectData(const std::string & typeId); //! Destructor. virtual ~MCMeshObjectData(); //! Set the id of the already created MCMesh. void setMeshId(const std::string & id); //! Return the mesh id. const std::string & meshId() const; private: DISABLE_COPY(MCMeshObjectData); DISABLE_ASSI(MCMeshObjectData); std::string m_meshId; }; #endif // MCMESHOBJECTDATA_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcsurfaceconfigloader.cc000066400000000000000000000240301360473665400256730ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include #include #include #include #include "mclogger.hh" #include "mcsurfaceconfigloader.hh" #include "mcsurfacemetadata.hh" #include #include MCSurfaceConfigLoader::MCSurfaceConfigLoader() : m_surfaces() { m_blendFuncMap["one"] = GL_ONE; m_blendFuncMap["zero"] = GL_ZERO; m_blendFuncMap["srcColor"] = GL_SRC_COLOR; m_blendFuncMap["oneMinusSrcColor"] = GL_ONE_MINUS_SRC_COLOR; m_blendFuncMap["srcAlpha"] = GL_SRC_ALPHA; m_blendFuncMap["oneMinusSrcAlpha"] = GL_ONE_MINUS_SRC_ALPHA; m_blendFuncMap["dstColor"] = GL_DST_COLOR; m_blendFuncMap["oneMinusDstColor"] = GL_ONE_MINUS_DST_COLOR; } void MCSurfaceConfigLoader::parseAttributes(const QDomElement & element, SurfaceDataPtr newData, const std::string & baseImagePath) { if (element.hasAttribute("image")) { const std::string image = element.attribute("image", "").toStdString(); newData->imagePath = baseImagePath + QDir::separator().toLatin1() + image; } else { throw std::runtime_error("Attribute 'image' is required for a surface!"); } if (element.hasAttribute("handle")) { newData->handle = element.attribute("handle", "").toStdString(); } else { throw std::runtime_error("Attribute 'handle' is required for a surface!"); } newData->handle2 = element.attribute("handle2", "").toStdString(); newData->handle3 = element.attribute("handle3", "").toStdString(); newData->xAxisMirror = element.attribute("xAxisMirror", "0").toInt(); newData->yAxisMirror = element.attribute("yAxisMirror", "0").toInt(); if (element.hasAttribute("z")) // Shorthand z { const float z = element.attribute("z", "0").toFloat(); newData->z0 = z; newData->z1 = z; newData->z2 = z; newData->z3 = z; } else if ( element.hasAttribute("z0") || element.hasAttribute("z1") || element.hasAttribute("z2") || element.hasAttribute("z3")) { newData->z0 = element.attribute("z0", "0").toFloat(); newData->z1 = element.attribute("z1", "0").toFloat(); newData->z2 = element.attribute("z2", "0").toFloat(); newData->z3 = element.attribute("z3", "0").toFloat(); } if (element.hasAttribute("w")) { const unsigned int width = element.attribute("w", "0").toUInt(); newData->width = std::pair(width, width > 0); } if (element.hasAttribute("h")) { const unsigned int height = element.attribute("h", "0").toUInt(); newData->height = std::pair(height, height > 0); } if (element.hasAttribute("specularCoeff")) { const float specularCoeff = element.attribute("specularCoeff", "1").toFloat(); newData->specularCoeff = std::pair(specularCoeff, specularCoeff > 1.0f); } } void MCSurfaceConfigLoader::parseChildNodes(const QDomNode & node, SurfaceDataPtr newData) { // Read child nodes of surface node. auto && childNode = node.firstChild(); while (!childNode.isNull()) { if (childNode.nodeName() == "color") { const auto && element = childNode.toElement(); if (!element.isNull()) { newData->color.setR(element.attribute("r", "1").toFloat()); newData->color.setG(element.attribute("g", "1").toFloat()); newData->color.setB(element.attribute("b", "1").toFloat()); newData->color.setA(element.attribute("a", "1").toFloat()); } } else if (childNode.nodeName() == "colorKey") { const auto && element = childNode.toElement(); if (!element.isNull()) { newData->colorKey.m_r = element.attribute("r", "0").toUInt(); newData->colorKey.m_g = element.attribute("g", "0").toUInt(); newData->colorKey.m_b = element.attribute("b", "0").toUInt(); newData->colorKeySet = true; } } else if (childNode.nodeName() == "alphaBlend") { const auto && element = childNode.toElement(); if (!element.isNull()) { newData->alphaBlend.first.m_src = alphaBlendStringToEnum( element.attribute("src", "srcAlpha").toStdString()); newData->alphaBlend.first.m_dst = alphaBlendStringToEnum( element.attribute( "dst", "srcAlphaMinusOne") .toStdString()); newData->alphaBlend.second = true; } } else if (childNode.nodeName() == "alphaClamp") { const auto && element = childNode.toElement(); if (!element.isNull()) { newData->alphaClamp.first = element.attribute("val", "0.5").toFloat(); newData->alphaClamp.second = true; } } else if (childNode.nodeName() == "filter") { const auto && element = childNode.toElement(); if (!element.isNull()) { const std::string min = element.attribute("min", "").toStdString(); const std::string mag = element.attribute("mag", "").toStdString(); if (min == "linear") { newData->minFilter = std::pair(GL_LINEAR, true); } else if (min == "nearest") { newData->minFilter = std::pair(GL_NEAREST, true); } else { throw std::runtime_error("Unknown min filter '" + min + "'"); } if (mag == "linear") { newData->magFilter = std::pair(GL_LINEAR, true); } else if (mag == "nearest") { newData->magFilter = std::pair(GL_NEAREST, true); } else { throw std::runtime_error("Unknown mag filter '" + mag + "'"); } } } else if (childNode.nodeName() == "wrap") { const auto && element = childNode.toElement(); if (!element.isNull()) { const std::string s = element.attribute("s", "").toStdString(); const std::string t = element.attribute("t", "").toStdString(); // Windows build hack #ifndef GL_CLAMP_TO_EDGE #define GL_CLAMP_TO_EDGE 0x812F #endif if (s == "clamp") { newData->wrapS = std::pair(GL_CLAMP_TO_EDGE, true); } else if (s == "repeat") { newData->wrapS = std::pair(GL_REPEAT, true); } else { throw std::runtime_error("Unknown s wrap '" + s + "'"); } if (t == "clamp") { newData->wrapT = std::pair(GL_CLAMP_TO_EDGE, true); } else if (t == "repeat") { newData->wrapT = std::pair(GL_REPEAT, true); } else { throw std::runtime_error("Unknown t wrap '" + t + "'"); } } } else { throw std::runtime_error("Unknown element '" + childNode.nodeName().toStdString() + "'"); } childNode = childNode.nextSibling(); } } bool MCSurfaceConfigLoader::load(const std::string & path) { QDomDocument doc; QFile file(path.c_str()); if (!file.open(QIODevice::ReadOnly)) { return false; } if (!doc.setContent(&file)) { file.close(); return false; } file.close(); const auto && root = doc.documentElement(); if (root.nodeName() == "surfaces") { const std::string baseImagePath = root.attribute("baseImagePath", "./").toStdString(); auto && node = root.firstChild(); while (!node.isNull() && node.nodeName() == "surface") { auto newData = std::make_shared(); auto element = node.toElement(); if (!element.isNull()) { parseAttributes(element, newData, baseImagePath); parseChildNodes(node, newData); } m_surfaces.push_back(newData); node = node.nextSibling(); } } return true; } GLenum MCSurfaceConfigLoader::alphaBlendStringToEnum(const std::string & function) const { try { return m_blendFuncMap.at(function); } catch (...) { throw std::runtime_error("Unknown alpha blend function '" + function + "'"); } return GL_SRC_ALPHA; } size_t MCSurfaceConfigLoader::surfaceCount() const { return m_surfaces.size(); } const MCSurfaceMetaData & MCSurfaceConfigLoader::surface(size_t index) const { assert(index < m_surfaces.size()); assert(m_surfaces.at(index)); return *m_surfaces.at(index); } DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcsurfaceconfigloader.hh000066400000000000000000000037631360473665400257170ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCSURFACECONFIGLOADER_HH #define MCSURFACECONFIGLOADER_HH #include #include #include #include #include // For GLenum. struct MCSurfaceMetaData; class QDomElement; class QDomNode; //! Loads the surface config. class MCSurfaceConfigLoader { public: //! Constructor. MCSurfaceConfigLoader(); //! Load all surfaces found in filePath. //! \return true if succeeded. bool load(const std::string & filePath); //! Get surface count. size_t surfaceCount() const; //! Get surface data of given index. const MCSurfaceMetaData & surface(size_t index) const; private: //! Convert alpha blend function string to enum. GLenum alphaBlendStringToEnum(const std::string & function) const; typedef std::shared_ptr SurfaceDataPtr; void parseAttributes(const QDomElement & element, SurfaceDataPtr newData, const std::string & baseImagePath); void parseChildNodes(const QDomNode & node, SurfaceDataPtr newData); std::vector m_surfaces; typedef std::map BlendFuncMap; BlendFuncMap m_blendFuncMap; }; #endif // MCSURFACECONFIGLOADER_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcsurfacemanager.cc000066400000000000000000000374051360473665400246630ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2010 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcsurfacemanager.hh" #include "mclogger.hh" #include "mcsurface.hh" #include "mcsurfaceconfigloader.hh" #include #include #include #include #include #include #include #include #include inline bool colorMatch(int val1, int val2, int threshold) { return (val1 >= val2 - threshold) && (val1 <= val2 + threshold); } // This function is taken from Qt in order to drop dependency to QGLWidget::convertToGLFormat(). static inline QRgb qt_gl_convertToGLFormatHelper(QRgb src_pixel, GLenum texture_format) { #ifdef __MC_GLES__ (void)texture_format; if (false) { #else if (texture_format == GL_BGRA) { #endif if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { return ((src_pixel << 24) & 0xff000000) | ((src_pixel >> 24) & 0x000000ff) | ((src_pixel << 8) & 0x00ff0000) | ((src_pixel >> 8) & 0x0000ff00); } else { return src_pixel; } } else { // GL_RGBA if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { return (src_pixel << 8) | ((src_pixel >> 24) & 0xff); } else { return ((src_pixel << 16) & 0xff0000) | ((src_pixel >> 16) & 0xff) | (src_pixel & 0xff00ff00); } } } // This function is taken from Qt in order to drop dependency to QGLWidget::convertToGLFormat(). static void convertToGLFormatHelper(QImage & dst, const QImage & img, GLenum texture_format) { Q_ASSERT(dst.depth() == 32); Q_ASSERT(img.depth() == 32); if (dst.size() != img.size()) { int target_width = dst.width(); int target_height = dst.height(); qreal sx = target_width / qreal(img.width()); qreal sy = target_height / qreal(img.height()); quint32 * dest = (quint32 *)dst.scanLine(0); // NB! avoid detach here uchar * srcPixels = (uchar *)img.scanLine(img.height() - 1); int sbpl = img.bytesPerLine(); int dbpl = dst.bytesPerLine(); int ix = int(0x00010000 / sx); int iy = int(0x00010000 / sy); quint32 basex = int(0.5 * ix); quint32 srcy = int(0.5 * iy); // scale, swizzle and mirror in one loop while (target_height--) { const uint * src = (const quint32 *)(srcPixels - (srcy >> 16) * sbpl); int srcx = basex; for (int x = 0; x < target_width; ++x) { dest[x] = qt_gl_convertToGLFormatHelper(src[srcx >> 16], texture_format); srcx += ix; } dest = (quint32 *)(((uchar *)dest) + dbpl); srcy += iy; } } else { const int width = img.width(); const int height = img.height(); const uint * p = (const uint *)img.scanLine(img.height() - 1); uint * q = (uint *)dst.scanLine(0); #ifdef __MC_GLES__ if (false) { #else if (texture_format == GL_BGRA) { #endif if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { // mirror + swizzle for (int i = 0; i < height; ++i) { const uint * end = p + width; while (p < end) { *q = ((*p << 24) & 0xff000000) | ((*p >> 24) & 0x000000ff) | ((*p << 8) & 0x00ff0000) | ((*p >> 8) & 0x0000ff00); p++; q++; } p -= 2 * width; } } else { const uint bytesPerLine = img.bytesPerLine(); for (int i = 0; i < height; ++i) { memcpy(q, p, bytesPerLine); q += width; p -= width; } } } else { if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { for (int i = 0; i < height; ++i) { const uint * end = p + width; while (p < end) { *q = (*p << 8) | ((*p >> 24) & 0xff); p++; q++; } p -= 2 * width; } } else { for (int i = 0; i < height; ++i) { const uint * end = p + width; while (p < end) { *q = ((*p << 16) & 0xff0000) | ((*p >> 16) & 0xff) | (*p & 0xff00ff00); p++; q++; } p -= 2 * width; } } } } } MCSurfaceManager::MCSurfaceManager() { } MCGLColor getAverageColor(QImage image) { std::map colorCounts; const int scale = 8; for (int i = 0; i < image.width(); i++) { for (int j = 0; j < image.height(); j++) { if (((image.pixel(i, j) & 0xff000000) >> 24) > 128) { const int r = ((image.pixel(i, j) & 0x00ff0000) >> 16) / scale; const int g = ((image.pixel(i, j) & 0x0000ff00) >> 8) / scale; const int b = ((image.pixel(i, j) & 0x000000ff)) / scale; colorCounts[(r << 16) + (g << 8) + b]++; } } } int bestColor = 0; int bestCount = 0; for (auto && color : colorCounts) { if (color.second > bestCount) { bestCount = color.second; bestColor = color.first; } } return MCGLColor( static_cast(((bestColor & 0xff0000) >> 16) * scale) / 256, static_cast(((bestColor & 0x00ff00) >> 8) * scale) / 256, static_cast((bestColor & 0x0000ff) * scale) / 256); } std::shared_ptr MCSurfaceManager::createSurfaceFromImage(const MCSurfaceMetaData & data, QImage image) { if (data.handle.size() == 0) { throw std::runtime_error("Cannot create surface with an empty handle!"); } image = image.scaled(image.width() / data.sizeDivider, image.height() / data.sizeDivider); // Store original width of the image int origH = data.height.second ? data.height.first : image.height(); int origW = data.width.second ? data.width.first : image.width(); // Create material. Possible secondary textures are taken from surfaces // that are initialized before this surface. MCGLMaterialPtr material(new MCGLMaterial); material->setTexture(create2DTextureFromImage(data, image), 0); material->setTexture(data.handle2.length() ? surface(data.handle2)->material()->texture(0) : 0, 1); material->setTexture(data.handle3.length() ? surface(data.handle3)->material()->texture(0) : 0, 2); if (data.specularCoeff.second) { material->setSpecularCoeff(data.specularCoeff.first); } // Create a new MCSurface object const auto surface = std::make_shared(data.handle, material, origW, origH, data.z0, data.z1, data.z2, data.z3); // Maybe better place for this could be in the material? surface->setColor(data.color); surface->setAverageColor(getAverageColor(image)); createSurfaceCommon(surface, data); return surface; } void MCSurfaceManager::createSurfaceCommon(std::shared_ptr surface, const MCSurfaceMetaData & data) { // Enable alpha blend, if set surface->material()->setAlphaBlend(data.alphaBlend.second, data.alphaBlend.first.m_src, data.alphaBlend.first.m_dst); // Store MCSurface to map m_surfaceMap[data.handle] = surface; } #ifdef __MC_GLES__ static bool isPowerOfTwo(unsigned int x) { return (x != 0) && !(x & (x - 1)); } static unsigned int getNearestPowerOfTwo(unsigned int x) { const std::vector powers = { 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 }; for (auto power : powers) { if (power > x) { return power; } } return powers.back(); } static QImage forceToNearestPowerOfTwoImage(const MCSurfaceMetaData & data, const QImage & image) { unsigned int width = image.width(); unsigned int height = image.height(); if (isPowerOfTwo(width) && isPowerOfTwo(height)) { return image; } if (!isPowerOfTwo(width)) { MCLogger().warning() << "Width of surface '" + data.handle + "' not power of two: " << width; width = getNearestPowerOfTwo(width); MCLogger().warning() << " new value: " << width; } if (!isPowerOfTwo(height)) { MCLogger().warning() << "Height of surface '" + data.handle + "' not power of two: " << height; height = getNearestPowerOfTwo(height); MCLogger().warning() << " new value: " << height; } return image.scaled(width, height); } #endif GLuint MCSurfaceManager::create2DTextureFromImage(const MCSurfaceMetaData & data, const QImage & image) { #ifdef __MC_GLES__ QImage textureImage = forceToNearestPowerOfTwoImage(data, image); #else QImage textureImage = image; #endif // Take the maximum supported texture size into account GLint maxTextureSize; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); if (textureImage.width() > maxTextureSize && textureImage.height() > maxTextureSize) { textureImage = textureImage.scaled(maxTextureSize, maxTextureSize); } else if (textureImage.width() > maxTextureSize) { textureImage = textureImage.scaled(maxTextureSize, textureImage.height()); } else if (textureImage.height() > maxTextureSize) { textureImage = textureImage.scaled(textureImage.width(), maxTextureSize); } // Flip if set active if (data.xAxisMirror || data.yAxisMirror) { textureImage = textureImage.mirrored(data.xAxisMirror, data.yAxisMirror); } // Ensure alpha channel textureImage = textureImage.convertToFormat(QImage::Format_ARGB32); // Apply alpha clamp if it was set (clear alpha) if (data.alphaClamp.second) { applyAlphaClamp(textureImage, static_cast(255.0f * data.alphaClamp.first)); } // Apply colorkey if it was set (set or clear alpha) if (data.colorKeySet) { applyColorKey(textureImage, data.colorKey.m_r, data.colorKey.m_g, data.colorKey.m_b); } QImage glFormattedImage(textureImage.width(), textureImage.height(), textureImage.format()); convertToGLFormatHelper(glFormattedImage, textureImage, GL_RGBA); // Let OpenGL generate a texture handle GLuint textureHandle; glGenTextures(1, &textureHandle); // Bind the texture object glBindTexture(GL_TEXTURE_2D, textureHandle); // Set min filter. if (data.minFilter.second) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, data.minFilter.first); } else { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } // Set mag filter. if (data.magFilter.second) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, data.magFilter.first); } else { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } if (data.wrapS.second) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, data.wrapS.first); } else { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); } if (data.wrapT.second) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, data.wrapT.first); } else { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } // Edit image data using the information textureImage gives us glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, glFormattedImage.width(), glFormattedImage.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, glFormattedImage.bits()); return textureHandle; } void MCSurfaceManager::applyColorKey(QImage & textureImage, unsigned int r, unsigned int g, unsigned int b) const { for (int i = 0; i < textureImage.width(); i++) { for (int j = 0; j < textureImage.height(); j++) { if (colorMatch(textureImage.pixel(i, j) & 0x000000ff, b, 2) && colorMatch((textureImage.pixel(i, j) & 0x0000ff00) >> 8, g, 2) && colorMatch((textureImage.pixel(i, j) & 0x00ff0000) >> 16, r, 2)) { textureImage.setPixel(i, j, 0x00000000); } else { textureImage.setPixel(i, j, textureImage.pixel(i, j) | 0xff000000); } } } } void MCSurfaceManager::applyAlphaClamp(QImage & textureImage, unsigned int a) const { for (int i = 0; i < textureImage.width(); i++) { for (int j = 0; j < textureImage.height(); j++) { if (((textureImage.pixel(i, j) >> 24) & 0x000000ff) < a) { textureImage.setPixel(i, j, 0x00000000); } } } } MCSurfaceManager::~MCSurfaceManager() { // Delete OpenGL textures and Textures for (auto && iter : m_surfaceMap) { if (iter.second) { const auto surface = iter.second; for (size_t i = 0; i < MCGLMaterial::MAX_TEXTURES; i++) { GLuint dummyHandle1 = surface->material()->texture(i); glDeleteTextures(1, &dummyHandle1); } } } } void MCSurfaceManager::load(const std::string & configFilePath, const std::string & baseDataPath) { MCSurfaceConfigLoader loader; // Parse the texture config file if (loader.load(configFilePath)) { for (size_t i = 0; i < loader.surfaceCount(); i++) { const auto metaData = loader.surface(i); // Load the image and create a 2D texture. Due to possible Android asset URLs, // an explicit QFile-based loading is used instead of directly using QImage::loadFromFile(). QString path = QString(baseDataPath.c_str()) + QDir::separator() + metaData.imagePath.c_str(); path.replace("./", ""); path.replace("//", "/"); QFile imageFile(path); if (!imageFile.open(QIODevice::ReadOnly)) { throw std::runtime_error("Cannot read file '" + path.toStdString() + "'"); } QImage textureImage; textureImage.loadFromData(imageFile.readAll()); createSurfaceFromImage(metaData, textureImage); } } else { // Throw an exception throw std::runtime_error("Parsing '" + configFilePath + "' failed!"); } } std::shared_ptr MCSurfaceManager::surface(const std::string & id) const { // Try to find existing texture for the surface if (!m_surfaceMap.count(id)) { throw std::runtime_error("Cannot find texture object for handle '" + id + "'"); } // Yes: return handle for the texture return m_surfaceMap.find(id)->second; } DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcsurfacemanager.hh000066400000000000000000000112201360473665400246600ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2010 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCSURFACEMANAGER_HH #define MCSURFACEMANAGER_HH #include #include #include #include "mcmacros.hh" #include "mcsurfacemetadata.hh" class QImage; class MCSurface; /*! Surface (texture) manager base class. Can be used via MCAssetManager. * * It loads texture images (all formats supported by QImage) listed in a special mapping * file and stores the OpenGL textures with original image dimensions using an * internal texture wrapper class (MCSurface) designed for 2D-games. * * Textures are converted into GL_RGBA-format using the specified colorkey to mask out pixels * intended to be invisible. Dimensions are forced to the nearest power of 2. * * Texture surfaces will also be flipped about X-axis if desired. * * MCSurface objects can be accessed via handles specified in the XML-based mapping file * and are loaded with MCSurfaceManager::load(). * * Example mapping file: * * * * * * * * * * * * * * *
* * * * * * Another option is to use MCSurfaceManager::createSurfaceFromImage() directly. * */ class MCSurfaceManager { public: //! Consturctor MCSurfaceManager(); //! Destructor virtual ~MCSurfaceManager(); /*! Loads texture config from strBasePath using the given mapping file. * \param configFilePath Path to the XML-based input file. * \param baseDataPath The absolute search path for an image is * baseDataPath + baseImagePath + fileName. baseImagePath and the fileName are * defined in the input file. */ virtual void load(const std::string & configFilePath, const std::string & baseDataPath); /*! Returns a surface object associated with given strId. * Corresponding OpenGL texture handle can be obtained * by calling handle() of the resulting MCSurface. * \param handle Handle defined in the textures XML file. * \return Reference to the corresponding MCSurface. * \throws std::runtime_error on failure. */ std::shared_ptr surface(const std::string & handle) const; /*! Creates an MCSurface containing an OpenGL texture from a QImage + texture meta data. * MCSurfaceManager keeps the ownership. */ std::shared_ptr createSurfaceFromImage(const MCSurfaceMetaData & data, QImage image); private: //! Apply alpha clamp (set alpha values off based on the given limit). void applyAlphaClamp(QImage & textureImage, unsigned int a) const; //! Apply given color key (set alpha values on / off based on the given color). void applyColorKey(QImage & textureImage, unsigned int r, unsigned int g, unsigned int b) const; //! Helper to create the actual OpenGL texture. GLuint create2DTextureFromImage(const MCSurfaceMetaData & data, const QImage & image); //! Helper to set surface meta data. void createSurfaceCommon(std::shared_ptr surface, const MCSurfaceMetaData & data); //! Map for resulting surface objects typedef std::unordered_map> SurfaceHash; SurfaceHash m_surfaceMap; DISABLE_COPY(MCSurfaceManager); DISABLE_ASSI(MCSurfaceManager); }; #endif // MCSURFACEMANAGER_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcsurfacemetadata.hh000066400000000000000000000057511360473665400250420ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2009 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCSURFACEMETADATA_HH #define MCSURFACEMETADATA_HH #include "mcvector2d.hh" #include #include // For GLenum #include #include /*! Surface metadata structure returned by MCSurfaceConfigLoader. * MCSurfaceManager can create MCSurface objects based on this data. */ struct MCSurfaceMetaData { //! Handle of the surface std::string handle; //! Image path std::string imagePath; //! Handle for the second texture if multitexturing is wanted. std::string handle2; //! Handle for the third texture if multitexturing is wanted. std::string handle3; //! Height std::pair height; //! Width std::pair width; //! Color MCGLColor color; //! Possible colorkey setting struct ColorKey { //! red, green, blue unsigned int m_r, m_g, m_b; }; //! Colorkey, if set ColorKey colorKey; //! True, if colorkey was set bool colorKeySet = false; //! Possible alphaBlend setting struct AlphaBlend { //! Src blend function GLenum m_src; //! Dest blend function GLenum m_dst; }; //! Alpha blend settings, if set std::pair alphaBlend; /*! Pixels below this value are discarded, if set. * This is currently a pre-process step so texture filters * might affect this. */ std::pair alphaClamp; //! True if X-Axis mirroring is wanted bool xAxisMirror = false; //! True if Y-Axis mirroring is wanted bool yAxisMirror = false; //! Min filter value std::pair minFilter; //! Mag filter value std::pair magFilter; //! Texture wrap s value std::pair wrapS; //! Texture wrap t value std::pair wrapT; //! Specular coeff std::pair specularCoeff; //! Z-coordinate of vertex[0]. float z0 = 0.0f; //! Z-coordinate of vertex[1]. float z1 = 0.0f; //! Z-coordinate of vertex[2]. float z2 = 0.0f; //! Z-coordinate of vertex[3]. float z3 = 0.0f; int sizeDivider = 1; }; #endif // MCSURFACEMETADATA_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcsurfaceobjectdata.cc000066400000000000000000000026471360473665400253510ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2011 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcsurfaceobjectdata.hh" MCSurfaceObjectData::MCSurfaceObjectData(const std::string & typeId) : MCObjectData(typeId) , m_surfaceId(typeId) , m_defaultCircleShape(false) { } void MCSurfaceObjectData::setSurfaceId(const std::string & id) { m_surfaceId = id; } const std::string & MCSurfaceObjectData::surfaceId() const { return m_surfaceId; } void MCSurfaceObjectData::setDefaultCircleShape(bool state) { m_defaultCircleShape = state; } bool MCSurfaceObjectData::defaultCircleShape() const { return m_defaultCircleShape; } MCSurfaceObjectData::~MCSurfaceObjectData() = default; DustRacing2D-2.0.5/src/game/MiniCore/src/Asset/mcsurfaceobjectdata.hh000066400000000000000000000034371360473665400253610ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2011 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCSURFACEOBJECTDATA_HH #define MCSURFACEOBJECTDATA_HH #include "mcobjectdata.hh" #include class MCSurfaceObjectDataImpl; //! Surface object description that can be given to MCObjectFactory. class MCSurfaceObjectData : public MCObjectData { public: //! Constructor. explicit MCSurfaceObjectData(const std::string & typeId); //! Destructor. virtual ~MCSurfaceObjectData(); //! Set the id of the already created MCSurface. void setSurfaceId(const std::string & id); //! Return the surface id. const std::string & surfaceId() const; //! Sets the shape to be a circle according to the surface dimensions. void setDefaultCircleShape(bool state); //! Returns true if default circle shape is wanted. bool defaultCircleShape() const; private: DISABLE_COPY(MCSurfaceObjectData); DISABLE_ASSI(MCSurfaceObjectData); std::string m_surfaceId; bool m_defaultCircleShape; }; #endif // MCSURFACEOBJECTDATA_HH DustRacing2D-2.0.5/src/game/MiniCore/src/CMakeLists.txt000066400000000000000000000051121360473665400225200ustar00rootroot00000000000000include_directories("${CMAKE_CURRENT_SOURCE_DIR}/Asset") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/Core") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/Graphics") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/Physics") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/Text") set(MiniCoreSRC Asset/mcassetmanager.cc Asset/mcmeshconfigloader.cc Asset/mcmeshloader.cc Asset/mcmeshmanager.cc Asset/mcmeshobjectdata.cc Asset/mcsurfaceobjectdata.cc Asset/mcsurfaceconfigloader.cc Asset/mcsurfacemanager.cc Core/mcbbox.hh Core/mcbbox3d.hh Core/mcevent.cc Core/mclogger.cc Core/mcmathutil.cc Core/mcmacros.hh Core/mcobbox.hh Core/mcobject.cc Core/mcobjectcomponent.cc Core/mcobjectdata.cc Core/mcobjectfactory.cc Core/mcrandom.cc Core/mctimerevent.cc Core/mctrigonom.cc Core/mctyperegistry.cc Core/mcvectoranimation.cc Core/mcvector2d.hh Core/mcvector3d.hh Core/mcworld.cc Graphics/mccamera.cc Graphics/mcglambientlight.cc Graphics/mcgldiffuselight.cc Graphics/mcglmaterial.cc Graphics/mcglobjectbase.cc Graphics/mcglscene.cc Graphics/mcglshaderprogram.cc Graphics/mcmesh.cc Graphics/mcmeshview.cc Graphics/mcobjectrendererbase.cc Graphics/mcparticle.cc Graphics/mcparticlerendererbase.cc Graphics/mcrenderlayer.cc Graphics/mcshaders.hh Graphics/mcshaders30.hh Graphics/mcshadersGLES.hh Graphics/mcshapeview.cc Graphics/mcsurfaceparticle.cc Graphics/mcsurfaceobjectrenderer.cc Graphics/mcsurfaceobjectrendererlegacy.cc Graphics/mcsurfaceparticlerenderer.cc Graphics/mcsurfaceparticlerendererlegacy.cc Graphics/mcsurface.cc Graphics/mcsurfaceview.cc Graphics/mcworldrenderer.cc Physics/mccircleshape.cc Physics/mccollisiondetector.cc Physics/mccollisionevent.cc Physics/mccontact.cc Physics/mcdragforcegenerator.cc Physics/mcforcegenerator.cc Physics/mcforceregistry.cc Physics/mcfrictiongenerator.cc Physics/mcgravitygenerator.cc Physics/mcimpulsegenerator.cc Physics/mcobjectgrid.cc Physics/mcoutofboundariesevent.cc Physics/mcphysicscomponent.cc Physics/mcrectshape.cc Physics/mcseparationevent.cc Physics/mcshape.cc Physics/mcspringforcegenerator.cc Physics/mcspringforcegenerator2dfast.cc Text/mctexturefont.cc Text/mctexturefontconfigloader.cc Text/mctexturefontdata.cc Text/mctexturefontmanager.cc Text/mctextureglyph.cc Text/mctexturetext.cc ) if(NOT QOpenGLFunctions) set(MiniCoreSRC ${MiniCoreSRC} Graphics/contrib/glew/glew.c) endif() set(MiniCoreTargetName MiniCore) add_library(${MiniCoreTargetName} ${MiniCoreSRC}) target_link_libraries(${MiniCoreTargetName} Qt5::Core Qt5::OpenGL Qt5::Xml ${MINICORE_OPENGL_LIBS}) set_property(TARGET ${MiniCoreTargetName} PROPERTY CXX_STANDARD 14) add_subdirectory(UnitTests) DustRacing2D-2.0.5/src/game/MiniCore/src/Core/000077500000000000000000000000001360473665400206515ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCBBox000066400000000000000000000000251360473665400216430ustar00rootroot00000000000000#include "mcbbox.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCBBox3d000066400000000000000000000000271360473665400220740ustar00rootroot00000000000000#include "mcbbox3d.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCEvent000066400000000000000000000000261360473665400220730ustar00rootroot00000000000000#include "mcevent.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCLogger000066400000000000000000000000271360473665400222320ustar00rootroot00000000000000#include "mclogger.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCMacros000066400000000000000000000000271360473665400222370ustar00rootroot00000000000000#include "mcmacros.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCMathUtil000066400000000000000000000000311360473665400225350ustar00rootroot00000000000000#include "mcmathutil.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCOBBox000066400000000000000000000000261360473665400217630ustar00rootroot00000000000000#include "mcobbox.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCObject000066400000000000000000000000271360473665400222210ustar00rootroot00000000000000#include "mcobject.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCObjectFactory000066400000000000000000000000361360473665400235510ustar00rootroot00000000000000#include "mcobjectfactory.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCRandom000066400000000000000000000000271360473665400222330ustar00rootroot00000000000000#include "mcrandom.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCRecycler000066400000000000000000000000311360473665400225560ustar00rootroot00000000000000#include "mcrecycler.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCShapeView000066400000000000000000000000321360473665400227020ustar00rootroot00000000000000#include "mcshapeview.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCTimerEvent000066400000000000000000000000331360473665400230720ustar00rootroot00000000000000#include "mctimerevent.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCTrigonom000066400000000000000000000000311360473665400226040ustar00rootroot00000000000000#include "mctrigonom.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCVector2d000066400000000000000000000000311360473665400224760ustar00rootroot00000000000000#include "mcvector2d.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCVector3d000066400000000000000000000000311360473665400224770ustar00rootroot00000000000000#include "mcvector3d.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCVectorAnimation000066400000000000000000000000401360473665400241100ustar00rootroot00000000000000#include "mcvectoranimation.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/MCWorld000066400000000000000000000000261360473665400221010ustar00rootroot00000000000000#include "mcworld.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcbbox.hh000066400000000000000000000132121360473665400224430ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2009 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCBBOX_HH #define MCBBOX_HH #include "mcvector2d.hh" #include "mcvector3d.hh" #include //! Bounding box structure in 2d template class MCBBox { public: //! Constructor MCBBox() : m_x1(0) , m_y1(0) , m_x2(0) , m_y2(0) { } //! Constructor MCBBox(const MCVector2d & v1_, T width_, T height_) : m_x1(v1_.i()) , m_y1(v1_.j()) , m_x2(m_x1 + width_) , m_y2(m_y1 + height_) { } //! Constructor MCBBox(T x1_, T y1_, T x2_, T y2_) : m_x1(x1_) , m_y1(y1_) , m_x2(x2_) , m_y2(y2_) { } //! Copy constructor template MCBBox(const MCBBox & r) : m_x1(r.x1()) , m_y1(r.y1()) , m_x2(r.x2()) , m_y2(r.y2()) { } //! Move constructor template MCBBox(const MCBBox && r) : m_x1(r.x1()) , m_y1(r.y1()) , m_x2(r.x2()) , m_y2(r.y2()) { } //! Get the leftmost x inline T x1() const { return m_x1; } //! Get the lower y inline T y1() const { return m_y1; } //! Get the rightmost x inline T x2() const { return m_x2; } //! Get the higher y inline T y2() const { return m_y2; } //! Get the leftmost vertex const MCVector2d v1() const { return MCVector2d(m_x1, m_y1); } //! Get the rightmost vertex const MCVector2d v2() const { return MCVector2d(m_x2, m_y2); } //! Get width inline T width() const { return m_x2 - m_x1; } //! Get height inline T height() const { return m_y2 - m_y1; } //! Set the leftmost x void setX1(T v) { m_x1 = v; } //! Set the lower y void setY1(T v) { m_y1 = v; } //! Set the rightmost x void setX2(T v) { m_x2 = v; } //! Set the higher y void setY2(T v) { m_y2 = v; } //! Assignment operator template MCBBox & operator=(const MCBBox & r) { if (reinterpret_cast(const_cast *>(&r)) != reinterpret_cast(this)) { m_x1 = r.x1(); m_x2 = r.x2(); m_y1 = r.y1(); m_y2 = r.y2(); } return *this; } //! Move assignment operator template MCBBox & operator=(const MCBBox && r) { m_x1 = r.x1(); m_x2 = r.x2(); m_y1 = r.y1(); m_y2 = r.y2(); return *this; } //! Return the MCBBox the union of two boxes static MCBBox unionBBox(const MCBBox & l, const MCBBox & r) { return MCBBox(std::min(l.m_x1, r.m_x1), std::min(l.m_y1, r.m_y1), std::max(l.m_x2, r.m_x2), std::max(l.m_y2, r.m_y2)); } //! Test if MCBBox intersects another one template bool intersects(const MCBBox & r) const { if (r.x1() >= m_x2) { return false; } if (r.x2() <= m_x1) { return false; } if (r.y1() >= m_y2) { return false; } if (r.y2() <= m_y1) { return false; } return true; } //! Test if MCBBox contains another one template bool contains(const MCBBox & r) const { return r.x1() >= m_x1 && r.x2() <= m_x2 && r.y1() >= m_y1 && r.y2() <= m_y2; } //! Test if MCBBox contains given point template bool contains(const MCVector2d & r) const { return r.i() >= m_x1 && r.i() <= m_x2 && r.j() >= m_y1 && r.j() <= m_y2; } //! Test if MCBBox contains given point template bool contains(const MCVector3d & r) const { return r.i() >= m_x1 && r.i() <= m_x2 && r.j() >= m_y1 && r.j() <= m_y2; } //! Translate. template void translate(const MCVector2d & r) { m_x1 += r.i(); m_y1 += r.j(); m_x2 += r.i(); m_y2 += r.j(); } //! Translate. template void translate(const MCVector3d & r) { m_x1 += r.i(); m_y1 += r.j(); m_x2 += r.i(); m_y2 += r.j(); } //! Get translated. template MCBBox translated(const MCVector2d & r) const { return MCBBox(m_x1 + r.i(), m_y1 + r.j(), m_x2 + r.i(), m_y2 + r.j()); } //! Get translated. template MCBBox translated(const MCVector3d & r) const { return MCBBox(m_x1 + r.i(), m_y1 + r.j(), m_x2 + r.i(), m_y2 + r.j()); } private: //! Vertex coordinates T m_x1, m_y1, m_x2, m_y2; }; typedef MCBBox MCBBoxF; #endif // MCBBOX_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcbbox3d.hh000066400000000000000000000121121360473665400226700ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCBBOX3D_HH #define MCBBOX3D_HH #include "mcbbox.hh" #include "mcvector3d.hh" //! Bounding box structure in 3d template class MCBBox3d { public: //! Constructor MCBBox3d() : m_x1(0) , m_y1(0) , m_z1(0) , m_x2(0) , m_y2(0) , m_z2(0) { } //! Constructor MCBBox3d(T x1, T y1, T z1, T x2, T y2, T z2) : m_x1(x1) , m_y1(y1) , m_z1(z1) , m_x2(x2) , m_y2(y2) , m_z2(z2) { } //! Copy constructor template MCBBox3d(const MCBBox3d & r) : m_x1(r.x1()) , m_y1(r.y1()) , m_z1(r.z1()) , m_x2(r.x2()) , m_y2(r.y2()) , m_z2(r.z2()) { } //! Move constructor template MCBBox3d(const MCBBox3d && r) : m_x1(r.x1()) , m_y1(r.y1()) , m_z1(r.z1()) , m_x2(r.x2()) , m_y2(r.y2()) , m_z2(r.z2()) { } //! Get the leftmost x inline T x1() const { return m_x1; } //! Get the lower y inline T y1() const { return m_y1; } //! Get the rightmost x inline T x2() const { return m_x2; } //! Get the higher y inline T y2() const { return m_y2; } //! Get the lower z inline T z1() const { return m_z1; } //! Get the higher z inline T z2() const { return m_z2; } //! Get width inline T width() const { return m_x2 - m_x1; } //! Get height inline T height() const { return m_y2 - m_y1; } //! Set the leftmost x void setX1(T v) { m_x1 = v; } //! Set the lower y void setY1(T v) { m_y1 = v; } //! Set the rightmost x void setX2(T v) { m_x2 = v; } //! Set the higher y void setY2(T v) { m_y2 = v; } //! Set the lower z void setZ1(T v) { m_z1 = v; } //! Set the higher z void setZ2(T v) { m_z2 = v; } //! Assignment operator template MCBBox3d & operator=(const MCBBox3d & r) { if (reinterpret_cast(const_cast *>(&r)) != reinterpret_cast(this)) { m_x1 = r.x1(); m_x2 = r.x2(); m_y1 = r.y1(); m_y2 = r.y2(); m_z1 = r.z1(); m_z2 = r.z2(); } return *this; } //! Move assignment operator template MCBBox3d & operator=(const MCBBox3d && r) { m_x1 = r.x1(); m_x2 = r.x2(); m_y1 = r.y1(); m_y2 = r.y2(); m_z1 = r.z1(); m_z2 = r.z2(); return *this; } //! Test if MCBBox3d intersects another one template bool intersects(const MCBBox3d & r) const { if (r.x1() >= m_x2) { return false; } if (r.x2() <= m_x1) { return false; } if (r.y1() >= m_y2) { return false; } if (r.y2() <= m_y1) { return false; } if (r.z1() >= m_z2) { return false; } if (r.z2() <= m_z1) { return false; } return true; } //! Test if MCBBox3d contains another one template bool contains(const MCBBox3d & r) const { return r.x1() >= m_x1 && r.x2() <= m_x2 && r.y1() >= m_y1 && r.y2() <= m_y2 && r.z1() >= m_z1 && r.z2() <= m_z2; } //! Test if MCBBox3d contains given point template bool contains(const MCVector3d & r) const { return r.i() >= m_x1 && r.i() <= m_x2 && r.j() >= m_y1 && r.j() <= m_y2 && r.k() >= m_z1 && r.k() <= m_z2; } //! Translate. template void translate(const MCVector3d & r) { m_x1 += r.i(); m_y1 += r.j(); m_z1 += r.k(); m_x2 += r.i(); m_y2 += r.j(); m_z2 += r.k(); } MCBBox toBBox() const { return MCBBox(m_x1, m_y1, m_x2, m_y2); } private: //! Vertex coordinates T m_x1, m_y1, m_z1, m_x2, m_y2, m_z2; }; typedef MCBBox3d MCBBox3dF; #endif // MCBBOX3D_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mccast.hh000066400000000000000000000022151360473665400224440ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2009 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCCAST_HH #define MCCAST_HH #define TO_CHAR(x) (static_cast(x)) #define TO_UCHAR(x) (static_cast(x)) #define TO_INT(x) (static_cast(x)) #define TO_UINT(x) (static_cast(x)) #define TO_FLOAT(x) (static_cast(x)) #define TO_DOUBLE(x) (static_cast(x)) #endif // MCCAST_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcevent.cc000066400000000000000000000023151360473665400226220ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2010 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcevent.hh" #include "mcobject.hh" unsigned int MCEvent::m_typeCount = 0; MCEvent::MCEvent() : m_accepted(false) { } unsigned int MCEvent::registerType() { return ++MCEvent::m_typeCount; } void MCEvent::accept() { m_accepted = true; } void MCEvent::ignore() { m_accepted = false; } bool MCEvent::accepted() const { return m_accepted; } MCEvent::~MCEvent() { } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcevent.hh000066400000000000000000000030751360473665400226400ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2010 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCEVENT_HH #define MCEVENT_HH #include "mcmacros.hh" class MCObject; //! Base class for MiniCore events class MCEvent { public: //! Constructor MCEvent(); //! Destructor virtual ~MCEvent(); /*! Register a new event type * \return The new unique type ID */ static unsigned int registerType(); //! Return class-wide type id virtual unsigned int instanceTypeId() const = 0; //! Accept the event. void accept(); //! Ignore the event. This is the default state. void ignore(); //! Return true, if event was accepted. bool accepted() const; private: DISABLE_COPY(MCEvent); DISABLE_ASSI(MCEvent); static unsigned int m_typeCount; bool m_accepted; }; #endif // MCEVENT_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mclogger.cc000066400000000000000000000057021360473665400227630ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2012 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #define _CRT_SECURE_NO_WARNINGS #include "mclogger.hh" #include #ifdef Q_OS_ANDROID #include #else #include #endif bool MCLogger::m_echoMode = false; bool MCLogger::m_dateTime = true; FILE * MCLogger::m_file = nullptr; MCLogger::MCLogger() { } bool MCLogger::init(const char * fileName, bool append) { MCLogger::m_file = nullptr; if (fileName) { if (append) { MCLogger::m_file = fopen(fileName, "a+"); } else { MCLogger::m_file = fopen(fileName, "w+"); } if (!m_file) { #ifdef Q_OS_ANDROID qDebug() << "ERROR!!: Couldn't open '" << fileName << "' for write."; #else fprintf(stderr, "ERROR!!: Couldn't open '%s' for write.\n", fileName); #endif return false; } } return true; } void MCLogger::enableEchoMode(bool enable) { MCLogger::m_echoMode = enable; } void MCLogger::enableDateTimePrefix(bool enable) { MCLogger::m_dateTime = enable; } void MCLogger::prefixDateTime() { if (MCLogger::m_dateTime) { time_t rawTime; time(&rawTime); std::string timeStr(ctime(&rawTime)); timeStr.erase(timeStr.length() - 1); m_oss << "[" << timeStr << "] "; } } std::ostringstream & MCLogger::info() { MCLogger::prefixDateTime(); m_oss << "I: "; return m_oss; } std::ostringstream & MCLogger::warning() { MCLogger::prefixDateTime(); m_oss << "W: "; return m_oss; } std::ostringstream & MCLogger::error() { MCLogger::prefixDateTime(); m_oss << "E: "; return m_oss; } std::ostringstream & MCLogger::fatal() { MCLogger::prefixDateTime(); m_oss << "F: "; return m_oss; } MCLogger::~MCLogger() { if (MCLogger::m_file) { fprintf(MCLogger::m_file, "%s", m_oss.str().c_str()); fprintf(MCLogger::m_file, "\n"); fflush(MCLogger::m_file); } if (MCLogger::m_echoMode) { #ifdef Q_OS_ANDROID qDebug() << m_oss.str().c_str(); #else fprintf(stdout, "%s", m_oss.str().c_str()); fprintf(stdout, "\n"); fflush(stdout); #endif } } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mclogger.hh000066400000000000000000000046511360473665400227770ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2012 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCLOGGER_HH #define MCLOGGER_HH #include "mcmacros.hh" #include #include /*! A logging class. A MCLogger instance flushes on destruction. * * Example initialization: * * MCLogger::init("myLog.txt"); * MCLogger::enableEchoMode(true); * * Example logging: * * MCLogger().info() << "Initialization finished."; * MCLogger().error() << "Foo happened!"; */ class MCLogger { public: //! Constructor. MCLogger(); //! Destructor. ~MCLogger(); /*! Initialize the logger. * \param fileName Log to fileName. Can be nullptr. * \param append The existing log will be appended if true. * \return false if file couldn't be opened. */ static bool init(const char * fileName, bool append = false); //! Enable/disable echo mode. //! \param enable Echo everything if true. Default is false. static void enableEchoMode(bool enable); //! Enable/disable date and time prefix. //! \param enable Prefix with date and time if true. Default is true. static void enableDateTimePrefix(bool enable); //! Get stream to the info log message. std::ostringstream & info(); //! Get stream to the warning log message. std::ostringstream & warning(); //! Get stream to the error log message. std::ostringstream & error(); //! Get stream to the fatal log message. std::ostringstream & fatal(); private: DISABLE_COPY(MCLogger); DISABLE_ASSI(MCLogger); void prefixDateTime(); static bool m_echoMode; static bool m_dateTime; static FILE * m_file; std::ostringstream m_oss; }; #endif // MCLOGGER_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcmacros.hh000066400000000000000000000022721360473665400230010ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCMACROS_HH #define MCMACROS_HH //! Disable copy constructor #define DISABLE_COPY(className) className(const className & r) = delete //! Disable assignment #define DISABLE_ASSI(className) className & operator=(const className & r) = delete //! Disable move #define DISABLE_MOVE(className) className & operator=(const className && r) = delete #endif // MCMACROS_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcmathutil.cc000066400000000000000000000045411360473665400233330ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcmathutil.hh" #include "mctrigonom.hh" float MCMathUtil::rotatedX(float x0, float y0, float angle) { return MCTrigonom::cos(angle) * x0 - MCTrigonom::sin(angle) * y0; } float MCMathUtil::rotatedY(float x0, float y0, float angle) { return MCTrigonom::sin(angle) * x0 + MCTrigonom::cos(angle) * y0; } void MCMathUtil::rotateVector( const MCVector2dF & v0, MCVector2dF & v1, float angle) { const float sin = MCTrigonom::sin(angle); const float cos = MCTrigonom::cos(angle); v1.setI(cos * v0.i() - sin * v0.j()); v1.setJ(sin * v0.i() + cos * v0.j()); } MCVector2dF MCMathUtil::rotatedVector(const MCVector2dF & v0, float angle) { const float sin = MCTrigonom::sin(angle); const float cos = MCTrigonom::cos(angle); return MCVector2dF(cos * v0.i() - sin * v0.j(), sin * v0.i() + cos * v0.j()); } float MCMathUtil::distanceFromVector(const MCVector2dF & p, const MCVector2dF & v) { return abs(p.dot(MCVector2dF(-v.j(), v.i()).normalized())); } bool MCMathUtil::crosses(const MCSegmentF & a, const MCSegmentF & b) { const MCVector2dF a0a1(a.vertex1 - a.vertex0); const MCVector2dF a0b0(b.vertex0 - a.vertex0); const MCVector2dF a0b1(b.vertex1 - a.vertex0); if (sign(a0a1 % a0b0) != sign(a0a1 % a0b1)) { const MCVector2dF b0b1(b.vertex1 - b.vertex0); const MCVector2dF b0a0(a.vertex0 - b.vertex0); const MCVector2dF b0a1(a.vertex1 - b.vertex0); if (sign(b0b1 % b0a0) != sign(b0b1 % b0a1)) { return true; } } return false; } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcmathutil.hh000066400000000000000000000062121360473665400233420ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCMATHUTIL_HH #define MCMATHUTIL_HH #include using std::numeric_limits; #include using std::abs; using std::sqrt; #include using std::max; #include "mcsegment.hh" #include "mcvector2d.hh" //! Miscellaneous math utilities. class MCMathUtil { public: enum class Sign { Negative, Positive, Zero }; //! \returns the absolute of x. template inline static T abs(T x); //! \returns true if x == y. Can be used with integers / floats. template inline static bool equals(T x, T y); //! \returns the sign of x. template inline static MCMathUtil::Sign sign(T x); //! \returns true if the given segments cross. static bool crosses(const MCSegmentF & a, const MCSegmentF & b); /*! \returns the minimum distance between a point and a vector. * Uses a fast approximation. * \param p Point to be tested * \param v Vector that defines the line */ static float distanceFromVector(const MCVector2dF & p, const MCVector2dF & v); //! Return X-coordinate of the given point rotated by given angle. static float rotatedX(float x0, float y0, float angle); //! Return Y-coordinate of the given point rotated by given angle. static float rotatedY(float x0, float y0, float angle); //! Rotate given vector v0 by given angle and store result to v1. static void rotateVector(const MCVector2dF & v0, MCVector2dF & v1, float angle); //! Rotate given vector v0 by given angle. static MCVector2dF rotatedVector(const MCVector2dF & v0, float angle); }; template bool MCMathUtil::equals(T x, T y) { if (numeric_limits::is_exact) { return x == y; } else { const T m = max(abs(x), abs(y)); if (m > 0) { return abs(x - y) / m <= numeric_limits::epsilon(); } else { return true; } } } template MCMathUtil::Sign MCMathUtil::sign(T x) { if (x < 0) { return MCMathUtil::Sign::Negative; } else if (x > 0) { return MCMathUtil::Sign::Positive; } else { return MCMathUtil::Sign::Zero; } } template T MCMathUtil::abs(T x) { return x < 0 ? -x : x; } #endif // MCMATHUTIL_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobbox.hh000066400000000000000000000210261360473665400226240ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2010 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCOBBOX_HH #define MCOBBOX_HH #include "mcbbox.hh" #include "mcmathutil.hh" #include "mctrigonom.hh" #include "mcvector2d.hh" #include #include /*! \class MCOBBox * \brief Oriented bounding-box template * * Vertices are defined clock-wise: * * v1--v2 * | | * v0--v3 */ template class MCOBBox { public: //! Constructor. MCOBBox(); /*! Constructor * \param hx Local half width of the bbox * \param hy Local half height of the bbox * \param loc Location of the center */ MCOBBox(T hx, T hy, const MCVector2d & loc); //! Copy constructor. MCOBBox(const MCOBBox & other); //! Move constructor. MCOBBox(const MCOBBox && other); //! Assignment operator. MCOBBox & operator=(const MCOBBox & other); //! Move assignment operator. MCOBBox & operator=(const MCOBBox && other); //! Return current angle inline float angle() const { return m_a; } //! Return current location inline const MCVector2d & location() const { return m_p; } //! Return current half width inline T hx() const { return m_hx; } //! Return current half height inline T hy() const { return m_hy; } //! Return given vertex inline MCVector2d vertex(unsigned int index) const { return m_v[index & 0x3] + m_p; } //! Return bbox of the MCOBBox inline MCBBox bbox() const; /*! Return true if given point is inside the MCOBBox * \param p The point to be tested */ bool contains(MCVector2d p) const; /*! Return true if intersects with given MCOBBox * \param r The MCOBBox to be tested */ template bool intersects(const MCOBBox & r) const; /*! Return true if intersects with given BBox * \param r The BBox to be tested */ template bool intersects(const MCBBox & r) const; /*! Rotate * \param a Rotation angle in degrees (0..360) */ void rotate(float a); /*! Translate * \param p The new location */ void translate(const MCVector2d & p); //! Scale void scale(T s); private: //! Initial half X-axis T m_hx; //! Initial half Y-axis T m_hy; //! Location MCVector2d m_p; //! Rotation angle float m_a; //! Vertex vectors std::array, 4> m_v; }; typedef MCOBBox MCOBBoxF; template MCOBBox::MCOBBox() : m_hx(0) , m_hy(0) , m_p(0, 0) , m_a(0) { } template MCOBBox::MCOBBox(T newHx, T newHy, const MCVector2d & loc) : m_hx(newHx) , m_hy(newHy) , m_p(loc) , m_a(0) , m_v({ MCVector2d(-m_hx, -m_hy), MCVector2d(-m_hx, m_hy), MCVector2d(m_hx, m_hy), MCVector2d(m_hx, -m_hy) }) { } template MCOBBox::MCOBBox(const MCOBBox & other) : m_hx(other.m_hx) , m_hy(other.m_hy) , m_p(other.m_p) , m_a(other.m_a) , m_v({ other.m_v[0], other.m_v[1], other.m_v[2], other.m_v[3] }) { } template MCOBBox::MCOBBox(const MCOBBox && other) : m_hx(other.m_hx) , m_hy(other.m_hy) , m_p(other.m_p) , m_a(other.m_a) { std::swap(m_v, other.m_v); } template MCOBBox & MCOBBox::operator=(const MCOBBox & other) { if (this != &other) { m_hx = other.m_hx; m_hy = other.m_hy; m_p = other.m_p; m_a = other.m_a; m_v = other.m_v; } return *this; } template MCOBBox & MCOBBox::operator=(const MCOBBox && other) { m_hx = other.m_hx; m_hy = other.m_hy; m_p = other.m_p; m_a = other.m_a; m_v = other.m_v; return *this; } template bool MCOBBox::contains(MCVector2d p) const { // Translate the test point p -= m_p; // Calculate edge vectors const MCVector2d e0 = m_v[1] - m_v[0]; const MCVector2d e1 = m_v[2] - m_v[1]; const MCVector2d e2 = m_v[3] - m_v[2]; const MCVector2d e3 = m_v[0] - m_v[3]; // Do the test by using cross products. const MCMathUtil::Sign ref = MCMathUtil::sign(e0 % (m_v[1] - p)); const MCMathUtil::Sign e1v2 = MCMathUtil::sign(e1 % (m_v[2] - p)); const MCMathUtil::Sign e2v3 = MCMathUtil::sign(e2 % (m_v[3] - p)); const MCMathUtil::Sign e3v0 = MCMathUtil::sign(e3 % (m_v[0] - p)); // Test if the test point is inside the obbox if (e1v2 == ref && e2v3 == ref && e3v0 == ref) { return true; } // Test if the test point only touches if (e1v2 == MCMathUtil::Sign::Zero && e2v3 == ref && e3v0 == ref) { return true; } // Test if the test point only touches if (e1v2 == ref && e2v3 == MCMathUtil::Sign::Zero && e3v0 == ref) { return true; } // Test if the test point only touches if (e1v2 == ref && e2v3 == ref && e3v0 == MCMathUtil::Sign::Zero) { return true; } // Test if the test point only touches if (ref == MCMathUtil::Sign::Zero && e1v2 == e2v3 && e1v2 == e3v0) { return true; } return false; } template void MCOBBox::rotate(float a) { if (a != m_a) { // Store the new angle m_a = a; // Update vertex vectors. Note that the original // vertex vectors must be used as the source. MCMathUtil::rotateVector(MCVector2d(-m_hx, -m_hy), m_v[0], m_a); MCMathUtil::rotateVector(MCVector2d(-m_hx, m_hy), m_v[1], m_a); // Mirror the other two vertices m_v[2].setI(-m_v[0].i()); m_v[2].setJ(-m_v[0].j()); m_v[3].setI(-m_v[1].i()); m_v[3].setJ(-m_v[1].j()); } } template void MCOBBox::translate(const MCVector2d & p) { m_p = p; } template template bool MCOBBox::intersects(const MCOBBox & r) const { // Test if r includes at least one vertice if (r.contains(m_p + m_v[0]) || r.contains(m_p + m_v[1]) || r.contains(m_p + m_v[2]) || r.contains(m_p + m_v[3])) { // Yes: intersection return true; } // Test if this includes at least one of r's vertices else if ( contains(r.m_p + r.m_v[0]) || contains(r.m_p + r.m_v[1]) || contains(r.m_p + r.m_v[2]) || contains(r.m_p + r.m_v[3])) { // Yes: intersection return true; } // Didn't intersect return false; } template template bool MCOBBox::intersects(const MCBBox & r) const { // Test if r includes at least one vertice if (r.contains(m_p + m_v[0]) || r.contains(m_p + m_v[1]) || r.contains(m_p + m_v[2]) || r.contains(m_p + m_v[3])) { // Yes: intersection return true; } // Test if this includes at least one of r's vertices else if ( contains(MCVector2d(r.x1, r.y1)) || contains(MCVector2d(r.x1, r.y2)) || contains(MCVector2d(r.x2, r.y1)) || contains(MCVector2d(r.x2, r.y2))) { // Yes: intersection return true; } // Didn't intersect return false; } template MCBBox MCOBBox::bbox() const { const MCVector2d v0p = m_v[0] + m_p; const MCVector2d v1p = m_v[1] + m_p; const MCVector2d v2p = m_v[2] + m_p; const MCVector2d v3p = m_v[3] + m_p; return MCBBox( std::min(std::min(v0p.i(), v1p.i()), std::min(v2p.i(), v3p.i())), std::min(std::min(v0p.j(), v1p.j()), std::min(v2p.j(), v3p.j())), std::max(std::max(v0p.i(), v1p.i()), std::max(v2p.i(), v3p.i())), std::max(std::max(v0p.j(), v1p.j()), std::max(v2p.j(), v3p.j()))); } template void MCOBBox::scale(T s) { m_hx *= s; m_hy *= s; m_v[0] *= s; m_v[1] *= s; m_v[2] *= s; m_v[3] *= s; } #endif // MCOBBOX_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobject.cc000066400000000000000000000604551360473665400227600ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcobject.hh" #include "mccamera.hh" #include "mccircleshape.hh" #include "mccollisionevent.hh" #include "mcevent.hh" #include "mcoutofboundariesevent.hh" #include "mcphysicscomponent.hh" #include "mcrectshape.hh" #include "mcseparationevent.hh" #include "mcshapeview.hh" #include "mcsurface.hh" #include "mcsurfaceview.hh" #include "mctimerevent.hh" #include "mctrigonom.hh" #include "mcworld.hh" #include "mcworldrenderer.hh" #include #include #include #include #include class MCObject::Impl { public: enum class StatusBit { BypassCollisions = 1, Particle = 2, PhysicsObject = 3, Removing = 4, Renderable = 5, TriggerObject = 6 }; Impl(MCObject & parent, const std::string & typeName) : m_typeId(Impl::m_typeRegistry.registerType(typeName)) , m_typeName(typeName) , m_this(parent) , m_parent(&parent) , m_physicsComponent(std::make_unique()) { setStatus(StatusBit::Renderable, true); setStatus(StatusBit::PhysicsObject, true); m_physicsComponent->setObject(m_this); } Impl(MCObject & parent, MCShapePtr shape, const std::string & typeName) : Impl(parent, typeName) { setShape(shape); } Impl(MCObject & parent, MCSurfacePtr surface, const std::string & typeName) : Impl(parent, typeName) { // Create an MCRectShape using surface with an MCSurfaceView setShape( std::make_shared( std::make_shared(surface->handle(), surface), surface->width(), surface->height())); } void addToWorld() { MCWorld::instance().addObject(m_this); for (auto child : m_children) { MCWorld::instance().addObject(*child); } } void addToWorld(float x, float y, float z) { MCWorld::instance().addObject(m_this); for (auto child : m_children) { MCWorld::instance().addObject(*child); } translate(MCVector3dF(x, y, z)); } void removeFromWorld() { if (MCWorld::hasInstance()) { MCWorld::instance().removeObject(m_this); for (auto child : m_children) { MCWorld::instance().removeObjectNow(*child); } } } void removeFromWorldNow() { if (MCWorld::hasInstance()) { MCWorld::instance().removeObjectNow(m_this); for (auto child : m_children) { MCWorld::instance().removeObjectNow(*child); } } } void checkBoundaries() { // Use shape bbox if shape is defined. if (m_shape) { checkXBoundariesAndSendEvent(m_shape->bbox().x1(), m_shape->bbox().x2()); checkYBoundariesAndSendEvent(m_shape->bbox().y1(), m_shape->bbox().y2()); } else { // By default use the center point as the test point. checkXBoundariesAndSendEvent(m_location.i() - m_center.i(), m_location.i() - m_center.i()); checkYBoundariesAndSendEvent(m_location.j() - m_center.j(), m_location.j() - m_center.j()); } checkZBoundariesAndSendEvent(); } static size_t getTypeIdForName(const std::string & typeName) { return Impl::m_typeRegistry.getTypeIdForName(typeName); } const std::string & typeName() const { return m_typeName; } void addChildObject(MCObjectPtr object, const MCVector3dF & relativeLocation, float relativeAngle) { assert(object.get() != &m_this); assert(object->m_impl->m_parent != m_parent); m_children.push_back(object); object->m_impl->setParent(m_this); object->m_impl->m_relativeLocation = relativeLocation; object->m_impl->m_relativeAngle = relativeAngle; } const MCObject::Children & children() const { return m_children; } void removeChildObject(MCObject & child) { if (child.m_impl->m_parent == &m_this) { child.m_impl->m_parent = &child; for (auto iter = m_children.begin(); iter != m_children.end(); iter++) { if ((*iter).get() == &child) { m_children.erase(iter); break; } } } } void removeChildObject(MCObjectPtr child) { if (child->m_impl->m_parent == &m_this) { child->m_impl->m_parent = child.get(); for (auto iter = m_children.begin(); iter != m_children.end(); iter++) { if ((*iter) == child) { m_children.erase(iter); break; } } } } void addContact(MCContact & contact) { m_contacts[&contact.object()].push_back(&contact); } const MCObject::ContactHash & contacts() const { return m_contacts; } void setCollisionLayer(int layer) { m_collisionLayer = layer; for (auto child : m_children) { child->setCollisionLayer(layer); } } int collisionLayer() const { return m_collisionLayer; } void setIndex(int newIndex) { m_index = newIndex; } int index() const { return m_index; } void setPhysicsComponent(std::unique_ptr physicsComponent) { m_physicsComponent = std::move(physicsComponent); m_physicsComponent->setObject(m_this); } MCPhysicsComponent & physicsComponent() { assert(m_physicsComponent); return *m_physicsComponent; } static void subscribeTimerEvent(MCObject & object) { if (object.m_impl->m_timerEventObjectsIndex == -1) { m_timerEventObjects.push_back(&object); object.m_impl->m_timerEventObjectsIndex = static_cast(m_timerEventObjects.size()) - 1; } } static void unsubscribeTimerEvent(MCObject & object) { if (object.m_impl->m_timerEventObjectsIndex > -1) { m_timerEventObjects.back()->m_impl->m_timerEventObjectsIndex = object.m_impl->m_timerEventObjectsIndex; m_timerEventObjects.at(static_cast(object.m_impl->m_timerEventObjectsIndex)) = m_timerEventObjects.back(); m_timerEventObjects.pop_back(); object.m_impl->m_timerEventObjectsIndex = -1; } } void render(MCCamera * p) { if (m_shape) { m_shape->render(p); } } void renderShadow(MCCamera * p) { if (m_shape) { m_shape->renderShadow(p); } } void setShape(MCShapePtr shape) { m_shape = shape; if (m_shape) { m_shape->setParent(m_this); rotateShape(m_angle); } } MCShapePtr shape() const { return m_shape; } const MCVector3dF & location() const { return m_location; } const MCVector3dF & relativeLocation() const { return m_relativeLocation; } void setInitialLocation(const MCVector3dF & location) { m_initialLocation = location; } const MCVector3dF & initialLocation() const { return m_initialLocation; } void setInitialAngle(int angle) { m_initialAngle = angle; } int initialAngle() const { return m_initialAngle; } void translateRelative(const MCVector3dF & newLocation) { m_relativeLocation = newLocation; } void translate(const MCVector3dF & newLocation) { if (!m_shape) { m_location = newLocation; updateChildTransforms(); } else { const bool wasInWorld = !removing() && MCWorld::instance().objectGrid().remove(m_this); // Calculate velocity if this object is a child object and is thus moved // by the parent. This way we'll automatically get linear velocity + // possible orbital velocity. // TODO: do we need to take the time step into account here? if (m_parent != &m_this && m_parent->physicsComponent().isIntegrating() && !m_parent->physicsComponent().isStationary()) { m_physicsComponent->setVelocity(newLocation - m_location); } m_location = newLocation; m_shape->translate(m_location - MCVector3dF(m_center)); updateChildTransforms(); if (wasInWorld) { MCWorld::instance().objectGrid().insert(m_this); } } } void deleteContacts() { for (auto && contact : m_contacts) { for (size_t j = 0; j < contact.second.size(); j++) { contact.second[j]->free(); } } m_contacts.clear(); } void deleteContacts(MCObject & object) { const auto iter(m_contacts.find(&object)); if (iter != m_contacts.end()) { for (size_t j = 0; j < iter->second.size(); j++) { iter->second[j]->free(); } iter->second.clear(); } } void displace(const MCVector3dF & displacement) { translate(m_location + displacement); } float angle() const { return m_angle; } void rotate(float newAngle, bool updateChildTransforms) { doRotate(newAngle); m_angle = newAngle; if (updateChildTransforms) { this->updateChildTransforms(); } } void rotateRelative(float newAngle) { m_relativeAngle = newAngle; } void setShadowOffset(const MCVector2dF & p) { assert(m_shape); m_shape->setShadowOffset(p); } void setCenter(MCVector2dF center) { m_initialCenter = center; updateCenter(); rotateShape(m_angle); } static void sendTimerEvent(MCTimerEvent & event) { for (auto && obj : m_timerEventObjects) { MCObject::sendEvent(*obj, event); } } size_t typeId() const { return m_typeId; } size_t typeId(const std::string & typeName) { return MCObject::getTypeIdForName(typeName); } void setIsPhysicsObject(bool flag) { setStatus(StatusBit::PhysicsObject, flag); } bool isPhysicsObject() const { return testStatus(StatusBit::PhysicsObject); } void setIsTriggerObject(bool flag) { setStatus(StatusBit::TriggerObject, flag); } bool isTriggerObject() const { return testStatus(StatusBit::TriggerObject); } void setBypassCollisions(bool flag) { setStatus(StatusBit::BypassCollisions, flag); } bool bypassCollisions() const { return testStatus(StatusBit::BypassCollisions); } void setIsRenderable(bool flag) { setStatus(StatusBit::Renderable, flag); } bool isRenderable() const { return testStatus(StatusBit::Renderable); } void setIsParticle(bool flag) { setStatus(StatusBit::Particle, flag); } bool isParticle() const { return testStatus(StatusBit::Particle); } void cacheIndexRange(size_t i0, size_t i1, size_t j0, size_t j1) { m_i0 = i0; m_i1 = i1; m_j0 = j0; m_j1 = j1; } void restoreIndexRange(size_t * i0, size_t * i1, size_t * j0, size_t * j1) { *i0 = m_i0; *i1 = m_i1; *j0 = m_j0; *j1 = m_j1; } void setRemoving(bool flag) { setStatus(StatusBit::Removing, flag); } bool removing() const { return testStatus(StatusBit::Removing); } MCObject & parent() const { return *m_parent; } ~Impl() { removeFromWorldNow(); deleteContacts(); } private: float calculateLinearBalance(const MCVector3dF & force, const MCVector3dF & pos) { float linearBalance = 1.0f; if (shape()) { const float r = shape()->radius(); if (r > 0) { linearBalance = 1.0f - MCMathUtil::distanceFromVector(MCVector2dF(pos - location()), MCVector2dF(force)) / r; linearBalance = linearBalance < 0 ? 0 : linearBalance; linearBalance = linearBalance > 1 ? 1 : linearBalance; } } return linearBalance; } void checkXBoundariesAndSendEvent(float minX, float maxX) { const MCWorld & world = MCWorld::instance(); if (minX < world.minX()) { MCOutOfBoundariesEvent e(MCOutOfBoundariesEvent::West, m_this); m_this.outOfBoundariesEvent(e); } else if (maxX > world.maxX()) { MCOutOfBoundariesEvent e(MCOutOfBoundariesEvent::East, m_this); m_this.outOfBoundariesEvent(e); } } void checkYBoundariesAndSendEvent(float minY, float maxY) { const MCWorld & world = MCWorld::instance(); if (minY < world.minY()) { MCOutOfBoundariesEvent e(MCOutOfBoundariesEvent::South, m_this); m_this.outOfBoundariesEvent(e); } else if (maxY > world.maxY()) { MCOutOfBoundariesEvent e(MCOutOfBoundariesEvent::North, m_this); m_this.outOfBoundariesEvent(e); } } void checkZBoundariesAndSendEvent() { const MCWorld & world = MCWorld::instance(); if (m_location.k() < world.minZ()) { m_physicsComponent->resetZ(); translate( MCVector3dF(m_location.i(), m_location.j(), world.minZ())); MCOutOfBoundariesEvent e(MCOutOfBoundariesEvent::Bottom, m_this); m_this.outOfBoundariesEvent(e); } else if (m_location.k() > world.maxZ()) { m_physicsComponent->resetZ(); translate( MCVector3dF(m_location.i(), m_location.j(), world.maxZ())); MCOutOfBoundariesEvent e(MCOutOfBoundariesEvent::Top, m_this); m_this.outOfBoundariesEvent(e); } } void doRotate(float newAngle) { updateCenter(); rotateShape(newAngle); } void rotateShape(float angle) { if (m_shape && std::fabs(m_shape->angle() - angle) > std::numeric_limits::epsilon()) { if (m_shape->type() == MCShape::Type::Circle && m_centerIsZero) { m_shape->rotate(angle); } else { const bool wasInWorld = MCWorld::instance().objectGrid().remove(m_this); m_shape->rotate(angle); m_shape->translate(m_location - MCVector3dF(m_center)); if (wasInWorld) { MCWorld::instance().objectGrid().insert(m_this); } } } } void setParent(MCObject & parent) { m_parent = &parent; } void updateChildTransforms() { for (auto child : m_children) { const float newAngle = m_angle + child->m_impl->m_relativeAngle; child->rotate(newAngle); child->translate(m_location - MCVector3dF(m_center) + MCVector3dF(MCMathUtil::rotatedVector(child->m_impl->m_relativeLocation, m_angle), child->m_impl->m_relativeLocation.k())); } } void updateCenter() { m_center = MCMathUtil::rotatedVector(m_initialCenter, m_angle); m_centerIsZero = m_center.isZero(); } void setStatus(StatusBit bit, bool flag) { m_status.set(static_cast(bit), flag); } bool testStatus(StatusBit bit) const { return m_status.test(static_cast(bit)); } static MCTypeRegistry m_typeRegistry; size_t m_typeId; std::string m_typeName; float m_angle = 0; // Degrees float m_relativeAngle = 0; // Degrees int m_collisionLayer = 0; int m_index = -1; size_t m_i0 = 0; size_t m_i1 = 0; size_t m_j0 = 0; size_t m_j1 = 0; MCVector3dF m_initialLocation; int m_initialAngle = 0; MCVector3dF m_location; MCVector3dF m_relativeLocation; MCVector2dF m_initialCenter; MCVector2dF m_center; bool m_centerIsZero = false; MCShapePtr m_shape; typedef std::vector TimerEventObjectsList; static TimerEventObjectsList m_timerEventObjects; MCObject::ContactHash m_contacts; int m_timerEventObjectsIndex = -1; std::bitset<8> m_status; Children m_children; MCObject & m_this; MCObject * m_parent = nullptr; std::unique_ptr m_physicsComponent; }; MCTypeRegistry MCObject::Impl::m_typeRegistry; MCObject::Impl::TimerEventObjectsList MCObject::Impl::m_timerEventObjects; MCObject::MCObject(const std::string & typeName) : m_impl(std::make_unique(*this, typeName)) { } MCObject::MCObject(MCShapePtr shape, const std::string & typeName) : m_impl(std::make_unique(*this, shape, typeName)) { } MCObject::MCObject(MCSurfacePtr surface, const std::string & typeName) : m_impl(std::make_unique(*this, surface, typeName)) { } size_t MCObject::getTypeIdForName(const std::string & typeName) { return Impl::getTypeIdForName(typeName); } const std::string & MCObject::typeName() const { return m_impl->typeName(); } void MCObject::addChildObject(MCObjectPtr object, const MCVector3dF & relativeLocation, float relativeAngle) { m_impl->addChildObject(object, relativeLocation, relativeAngle); } void MCObject::removeChildObject(MCObject & child) { m_impl->removeChildObject(child); } void MCObject::removeChildObject(MCObjectPtr child) { m_impl->removeChildObject(child); } const MCObject::Children & MCObject::children() const { return m_impl->children(); } MCObject & MCObject::parent() const { return m_impl->parent(); } void MCObject::onStepTime(int) { } void MCObject::checkBoundaries() { m_impl->checkBoundaries(); } size_t MCObject::typeId() const { return m_impl->typeId(); } size_t MCObject::typeId(const std::string & typeName) { return Impl::getTypeIdForName(typeName); } bool MCObject::event(MCEvent & event) { if (event.instanceTypeId() == MCCollisionEvent::typeId()) { collisionEvent(static_cast(event)); return true; } else if (event.instanceTypeId() == MCSeparationEvent::typeId()) { separationEvent(static_cast(event)); return true; } else if (event.instanceTypeId() == MCOutOfBoundariesEvent::typeId()) { outOfBoundariesEvent(static_cast(event)); return true; } return false; } void MCObject::collisionEvent(MCCollisionEvent & event) { event.accept(); } void MCObject::separationEvent(MCSeparationEvent & event) { event.accept(); } void MCObject::outOfBoundariesEvent(MCOutOfBoundariesEvent & event) { event.accept(); } void MCObject::sendEvent(MCObject & object, MCEvent & event) { object.event(event); } void MCObject::subscribeTimerEvent(MCObject & object) { Impl::subscribeTimerEvent(object); } void MCObject::unsubscribeTimerEvent(MCObject & object) { Impl::unsubscribeTimerEvent(object); } void MCObject::sendTimerEvent(MCTimerEvent & event) { Impl::sendTimerEvent(event); } void MCObject::addToWorld() { m_impl->addToWorld(); } void MCObject::addToWorld(float x, float y, float z) { m_impl->addToWorld(x, y, z); } void MCObject::removeFromWorld() { m_impl->removeFromWorld(); } void MCObject::removeFromWorldNow() { m_impl->removeFromWorldNow(); } void MCObject::render(MCCamera * p) { m_impl->render(p); } void MCObject::renderShadow(MCCamera * p) { m_impl->renderShadow(p); } void MCObject::setIsPhysicsObject(bool flag) { m_impl->setIsPhysicsObject(flag); } bool MCObject::isPhysicsObject() const { return m_impl->isPhysicsObject(); } void MCObject::setIsTriggerObject(bool flag) { m_impl->setIsTriggerObject(flag); } bool MCObject::isTriggerObject() const { return m_impl->isTriggerObject(); } void MCObject::setBypassCollisions(bool flag) { m_impl->setBypassCollisions(flag); } bool MCObject::bypassCollisions() const { return m_impl->bypassCollisions(); } void MCObject::setIsRenderable(bool flag) { m_impl->setIsRenderable(flag); } bool MCObject::isRenderable() const { return m_impl->isRenderable(); } void MCObject::setIsParticle(bool flag) { m_impl->setIsParticle(flag); } bool MCObject::isParticle() const { return m_impl->isParticle(); } void MCObject::translateRelative(const MCVector3dF & newLocation) { m_impl->translateRelative(newLocation); } void MCObject::translate(const MCVector3dF & newLocation) { m_impl->translate(newLocation); } void MCObject::displace(const MCVector3dF & displacement) { m_impl->displace(displacement); } const MCVector3dF & MCObject::location() const { return m_impl->location(); } const MCVector3dF & MCObject::relativeLocation() const { return m_impl->relativeLocation(); } void MCObject::setShadowOffset(const MCVector2dF & p) { m_impl->setShadowOffset(p); } void MCObject::setCenter(MCVector2dF center) { m_impl->setCenter(center); } void MCObject::rotate(float newAngle, bool updateChildTransforms) { m_impl->rotate(newAngle, updateChildTransforms); } void MCObject::rotateRelative(float newAngle) { m_impl->rotateRelative(newAngle); } float MCObject::angle() const { return m_impl->angle(); } MCVector2dF MCObject::direction() const { return MCVector2dF(MCTrigonom::cos(angle()), MCTrigonom::sin(angle())); } void MCObject::setShape(MCShapePtr shape) { m_impl->setShape(shape); } MCShapePtr MCObject::shape() const { return m_impl->shape(); } void MCObject::setCollisionLayer(int layer) { m_impl->setCollisionLayer(layer); } int MCObject::collisionLayer() const { return m_impl->collisionLayer(); } void MCObject::cacheIndexRange(size_t i0, size_t i1, size_t j0, size_t j1) { m_impl->cacheIndexRange(i0, i1, j0, j1); } void MCObject::restoreIndexRange(size_t * i0, size_t * i1, size_t * j0, size_t * j1) { m_impl->restoreIndexRange(i0, i1, j0, j1); } void MCObject::setIndex(int index) { m_impl->setIndex(index); } void MCObject::setRemoving(bool flag) { m_impl->setRemoving(flag); } bool MCObject::removing() const { return m_impl->removing(); } int MCObject::index() const { return m_impl->index(); } void MCObject::addContact(MCContact & contact) { m_impl->addContact(contact); } const MCObject::ContactHash & MCObject::contacts() const { return m_impl->contacts(); } void MCObject::deleteContacts() { m_impl->deleteContacts(); } void MCObject::deleteContacts(MCObject & object) { m_impl->deleteContacts(object); } void MCObject::setInitialLocation(const MCVector3dF & location) { m_impl->setInitialLocation(location); } const MCVector3dF & MCObject::initialLocation() const { return m_impl->initialLocation(); } void MCObject::setInitialAngle(int angle) { m_impl->setInitialAngle(angle); } int MCObject::initialAngle() const { return m_impl->initialAngle(); } void MCObject::setPhysicsComponent(std::unique_ptr physicsComponent) { m_impl->setPhysicsComponent(std::move(physicsComponent)); } MCPhysicsComponent & MCObject::physicsComponent() { return m_impl->physicsComponent(); } MCObject::~MCObject() = default; DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobject.hh000066400000000000000000000270011360473665400227600ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCOBJECT_HH #define MCOBJECT_HH #include "mcbbox.hh" #include "mccontact.hh" #include "mcmacros.hh" #include "mcobjectgrid.hh" #include "mcshape.hh" #include "mcsurface.hh" #include "mctyperegistry.hh" #include "mcvector3d.hh" #include "mcworld.hh" #include #include class MCShapeView; class MCEvent; class MCCollisionEvent; class MCSeparationEvent; class MCSurface; class MCOutOfBoundariesEvent; class MCPhysicsComponent; class MCTimerEvent; class MCCamera; typedef std::shared_ptr MCObjectPtr; /*! \class MCObject. * \brief MCObject is the base for all MiniCore objects. * * MCObject encapsulates the physics and view properties of an object. */ class MCObject { public: //! Hash container for contacts. Prefer map here for iteration performance. typedef std::map> ContactHash; /*! Constructor. * \param typeId Type name string e.g. "CAR". All identical objects should have the same typeName. */ explicit MCObject(const std::string & typeName); /*! Constructor. * Construct MCObject using the given shape. * \param shape Pointer to the shape to be used. * \param typeId Type name string e.g. "CAR". All identical objects should have the same typeName. */ MCObject(MCShapePtr shape, const std::string & typeName); /*! Constructor. * Construct MCObject implicitly using MCRectShape with MCSurfaceView for the given MCSurface. * Handle of the surface will be used also as the surface view handle. * \param surface Pointer to the (shared) surface to be used. * MCObject won't take the ownership, because the same surface * can be used to draw multiple objects and is managed by MCSurfaceManager. * \param typeName Type name string e.g. "CAR". All identical objects should have the same typeName. */ MCObject(std::shared_ptr surface, const std::string & typeName); //! Return integer id corresponding to the given object name. static size_t getTypeIdForName(const std::string & typeName); /*! Destructor. It's the callers responsibility to first remove * the object from MCWorld before deleting the object. */ virtual ~MCObject(); /*! Return unique class-wide id that can be used to * efficiently test the type of a derived classes * against each others without need for dynamic_cast. * The filtered collision detection system uses this * to match given types of objects. */ virtual size_t typeId() const; /*! Return typeId for the given typeName string from * MCObject's hash table. Each object registers * its type in its constructor. This is automatic for * derived classes, they only need to pass the desired * typeId string to MCObject's constructor. * Returns 0 if type is not registered. */ static size_t typeId(const std::string & typeName); //! Return the type name given to constructor. const std::string & typeName() const; /*! Send event to given object. * \param object Destination object. * \param event Event to be sent. */ static void sendEvent(MCObject & object, MCEvent & event); //! Subscribe the given object to timer events. static void subscribeTimerEvent(MCObject & object); //! Subscribe the given object from timer events. static void unsubscribeTimerEvent(MCObject & object); /*! Send the given timer event to all objects that * have subscribed to timer events. */ static void sendTimerEvent(MCTimerEvent & event); /*! Render the object. * \param p Camera window to be used. */ virtual void render(MCCamera * p = nullptr); /*! Render the object shadow. * \param p Camera window to be used. */ virtual void renderShadow(MCCamera * p = nullptr); /*! \brief Sets whether the object should be rendered automatically. * True is the default. */ void setIsRenderable(bool flag); //! \brief Return whether the object should be automatically rendered. bool isRenderable() const; /*! \brief Add object to the World. * Convenience method to add object to the MCWorld instance. * Composite objects may override this and add all their sub-objects. */ virtual void addToWorld(); //! \brief Combined addToWorld() and translate. virtual void addToWorld(float x, float y, float z = 0); /*! \brief Remove object from the World. * Convenience method to remove object from the MCWorld instance. * Composite objects may re-implement this and remove all their sub-objects. */ virtual void removeFromWorld(); /*! \brief Remove object from the World immediately. * Convenience method to remove object from the MCWorld instance. * Composite objects may re-implement this and remove all their sub-objects. */ virtual void removeFromWorldNow(); /*! \brief Sets whether the physics of the object should be updated. * True is the default. */ void setIsPhysicsObject(bool flag); //! Return whether the object is a physics object. bool isPhysicsObject() const; /*! Override the default physics component. */ void setPhysicsComponent(std::unique_ptr physicsComponent); /*! \brief The physics component of the object. * All physics functionality is accessed via this component. */ MCPhysicsComponent & physicsComponent(); /*! \brief Sets whether the object behaves as a trigger object. * Trigger object produces collision events even though it's not a * physics object. False is the default. */ void setIsTriggerObject(bool flag); //! Return whether the object is a trigger object. bool isTriggerObject() const; /*! \brief Sets whether the collision detection for this object is totally bypassed. * False is the default. */ void setBypassCollisions(bool flag); //! Return whether collisions are bypassed. bool bypassCollisions() const; //! Set the object as a particle. void setIsParticle(bool flag); //! Return true if the object is a particle. bool isParticle() const; /*! Set location * \param newLocation The new location. */ void translate(const MCVector3dF & newLocation); /*! Set location relative to parent. * \param newLocation The new location. */ void translateRelative(const MCVector3dF & newLocation); /*! Displace object * \param displacement Translates object to location() + displacement. */ void displace(const MCVector3dF & displacement); /*! Set offset for the fake shadow. * \param p The new offset. Applies only if a shape has been set. */ void setShadowOffset(const MCVector2dF & p); //! Return location const MCVector3dF & location() const; //! Return parent-relative location const MCVector3dF & relativeLocation() const; /*! Set rotation ("yaw") angle about Z-axis. * \param newAngle The new angle in degrees [0..360]. */ void rotate(float newAngle, bool updateChildTransforms = true); //! Set object's center in local coordinates i.e. (0, 0) is the default original center. void setCenter(MCVector2dF center); //! Get rotation angle. float angle() const; //! Get direction vector. MCVector2dF direction() const; //! Set shape. void setShape(MCShapePtr shape); //! Get shape. MCShapePtr shape() const; /*! \brief Step internal time. * This is called AFTER every update step. Note that you might need to prevent * the object from sleeping via MCPhysicsComponent if these events are required for * an object that remains still. * \param step Time step in msecs */ virtual void onStepTime(int step); /*! Set collision layer. Only objects on the same layer can collide. * -1 will collide with all layers. The default is 0. * \param layer The new layer. */ void setCollisionLayer(int layer); //! Return the collision layer. int collisionLayer() const; //! Add a collision contact. void addContact(MCContact & contact); //! Get collision contact hash. const ContactHash & contacts() const; //! Delete current contacts. void deleteContacts(); //! Delete all contacts with the given object. void deleteContacts(MCObject & object); //! Return index in MCWorld's object vector. Returns -1 if not in the world. int index() const; //! Set initial location. This won't result in any translations. void setInitialLocation(const MCVector3dF & location); //! Get initial location. const MCVector3dF & initialLocation() const; //! Set initial angle. This won't result in any transformations. void setInitialAngle(int angle); //! Get initial angle. int initialAngle() const; //! Add child object. Used on composite objects. void addChildObject( MCObjectPtr object, const MCVector3dF & relativeLocation = MCVector3dF(), float relativeAngle = 0); //! Remove child object. void removeChildObject(MCObject & object); //! Remove child object. void removeChildObject(MCObjectPtr object); typedef std::vector Children; const Children & children() const; //! \return parent or self MCObject & parent() const; /*! Set parent relative rotation ("yaw") angle about Z-axis. * \param newAngle The new angle in degrees [0..360]. */ void rotateRelative(float newAngle); void checkBoundaries(); protected: /*! Event handler. * \param pEvent Event to be handled. * \return true if event was handled. */ virtual bool event(MCEvent & event); /*! Event handler for MCCollisionEvent. Override this to * filter out collisions with certain objects. * All collisions are accepted by default. * \param event Event to be handled. */ virtual void collisionEvent(MCCollisionEvent & event); /*! Event handler for MCSeparationEvent. Override this to * filter out collision separations with certain objects. * \param event Event to be handled. */ virtual void separationEvent(MCSeparationEvent & event); /*! Event handler for MCOutOfBoundariesEvent. * \param event Event to be handled. */ virtual void outOfBoundariesEvent(MCOutOfBoundariesEvent & event); private: void cacheIndexRange(size_t i0, size_t i1, size_t j0, size_t j1); void restoreIndexRange(size_t * i0, size_t * i1, size_t * j0, size_t * j1); void setIndex(int index); void setRemoving(bool flag); bool removing() const; class Impl; std::unique_ptr m_impl; DISABLE_COPY(MCObject); DISABLE_ASSI(MCObject); DISABLE_MOVE(MCObject); friend class MCObjectGrid; friend class MCObjectGridImpl; friend class MCWorld; friend class MCCollisionDetector; }; #endif // MCOBJECT_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobjectcomponent.cc000066400000000000000000000022731360473665400246750ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcobjectcomponent.hh" MCObjectComponent::MCObjectComponent() : m_object(nullptr) { } void MCObjectComponent::setObject(MCObject & object) { m_object = &object; } MCObject & MCObjectComponent::object() const { return *m_object; } void MCObjectComponent::stepTime(int) { } void MCObjectComponent::reset() { } MCObjectComponent::~MCObjectComponent() { } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobjectcomponent.hh000066400000000000000000000026021360473665400247030ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCOBJECTCOMPONENT_HH #define MCOBJECTCOMPONENT_HH #include "mcmacros.hh" #include "mcobject.hh" /** Base class for object components. * For example, \see MCPhysicsComponent. */ class MCObjectComponent { public: MCObjectComponent(); void setObject(MCObject & object); virtual ~MCObjectComponent(); virtual void stepTime(int step); virtual void reset(); protected: MCObject & object() const; private: DISABLE_ASSI(MCObjectComponent); DISABLE_COPY(MCObjectComponent); MCObject * m_object; }; #endif // MCOBJECTCOMPONENT_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobjectdata.cc000066400000000000000000000052651360473665400236100ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2011 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcobjectdata.hh" MCObjectData::MCObjectData(const std::string & typeId) : m_typeId(typeId) , m_mass(0.0) , m_shape(MCObjectData::Default) , m_shapeRadius(0.0) , m_shapeWidth(0.0) , m_shapeHeight(0.0) , m_restitution(0.5) , m_xyFriction(0.0) , m_stationary(false) , m_angle(0) { } std::string MCObjectData::typeId() const { return m_typeId; } void MCObjectData::setMass(float newMass) { m_mass = newMass; } float MCObjectData::mass() const { return m_mass; } void MCObjectData::setShapeRadius(float radius) { m_shape = MCObjectData::Circle; m_shapeRadius = radius; } float MCObjectData::shapeRadius() const { return m_shapeRadius; } void MCObjectData::setShapeWidth(float width) { m_shape = MCObjectData::Rect; m_shapeWidth = width; } float MCObjectData::shapeWidth() const { return m_shapeWidth; } void MCObjectData::setShapeHeight(float height) { m_shape = MCObjectData::Rect; m_shapeHeight = height; } float MCObjectData::shapeHeight() const { return m_shapeHeight; } MCObjectData::Shape MCObjectData::shape() const { return m_shape; } void MCObjectData::setRestitution(float restitution) { m_restitution = restitution; } float MCObjectData::restitution() const { return m_restitution; } void MCObjectData::setXYFriction(float friction) { m_xyFriction = friction; } float MCObjectData::xyFriction() const { return m_xyFriction; } void MCObjectData::setIsStationary(bool stationary) { m_stationary = stationary; } bool MCObjectData::stationary() const { return m_stationary; } void MCObjectData::setInitialLocation(MCVector3dF location) { m_location = location; } MCVector3dF MCObjectData::initialLocation() const { return m_location; } void MCObjectData::setInitialAngle(int angle) { m_angle = angle; } int MCObjectData::initialAngle() const { return m_angle; } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobjectdata.hh000066400000000000000000000061511360473665400236150ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCOBJECTDATA_HH #define MCOBJECTDATA_HH #include "mcmacros.hh" #include #include class MCObjectDataImpl; //! Base class for object data classes. MCObjectData is used by the //! MCObjectFactory in order to create objects using desired //! configurations. class MCObjectData { public: /*! Possible shape types: * Rect = MCRectShape. * Circle = MCCircleShape. */ enum Shape { Default, Rect, Circle }; //! Constructor. explicit MCObjectData(const std::string & typeId); //! Destructor. virtual ~MCObjectData() {}; //! Get type id. std::string typeId() const; //! Set mass. void setMass(float mass); //! Get mass. float mass() const; //! Set shape radius (implicitly selects circle shape). void setShapeRadius(float radius); //! Get shape radius. float shapeRadius() const; //! Set shape width (implicitly selects rect shape). void setShapeWidth(float width); //! Return shape width. float shapeWidth() const; //! Set shape height (implicitly selects rect shape). void setShapeHeight(float height); //! Return shape height. float shapeHeight() const; //! Return shape type. Shape shape() const; //! Set restitution. void setRestitution(float restitution); //! Get restitution. float restitution() const; //! Set global friction. void setXYFriction(float friction); //! Get global friction. float xyFriction() const; //! Set stationary. void setIsStationary(bool stationary); //! Return true if stationary. bool stationary() const; //! Set the initial location. void setInitialLocation(MCVector3dF location); //! Get the initial location. MCVector3dF initialLocation() const; //! Set the initial angle. void setInitialAngle(int angle); //! Get the initial angle. int initialAngle() const; private: DISABLE_COPY(MCObjectData); DISABLE_ASSI(MCObjectData); std::string m_typeId; float m_mass; MCObjectData::Shape m_shape; float m_shapeRadius; float m_shapeWidth; float m_shapeHeight; float m_restitution; float m_xyFriction; bool m_stationary; MCVector3dF m_location; int m_angle; }; #endif // MCOBJECTDATA_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobjectfactory.cc000066400000000000000000000124461360473665400243450ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2011 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcobjectfactory.hh" #include "mcassetmanager.hh" #include "mccircleshape.hh" #include "mcmeshview.hh" #include "mcphysicscomponent.hh" #include "mcrectshape.hh" #include "mcsurface.hh" #include "mcsurfacemanager.hh" #include "mcsurfaceview.hh" #include #include #include MCObjectFactory::MCObjectFactory(MCAssetManager & assetManager) : m_assetManager(assetManager) { } MCObjectPtr MCObjectFactory::build(const MCSurfaceObjectData & data) { const auto surface = m_assetManager.surfaceManager().surface(data.surfaceId()); MCObjectPtr object; switch (data.shape()) { // Default shape, use surface dimensions case MCObjectData::Default: { // Circle shape according to surface dimensions if (data.defaultCircleShape()) { object = std::make_shared(data.typeId()); object->setShape(std::make_shared( std::make_shared(data.typeId(), surface), std::max(surface->width(), surface->height()) / 2)); } // Rect shape according to surface dimensions (default) else { object = std::make_shared(surface, data.typeId()); } break; } // Explicit circle shape case MCObjectData::Circle: { object = std::make_shared(data.typeId()); object->setShape(std::make_shared( std::make_shared(data.typeId(), surface), data.shapeRadius())); break; } // Explicit rect shape case MCObjectData::Rect: { object = std::make_shared(data.typeId()); object->setShape(std::make_shared( std::make_shared(data.typeId(), surface), data.shapeWidth(), data.shapeHeight())); break; } } assert(object); setCommonProperties(*object, data); return MCObjectPtr(object); } MCObjectPtr MCObjectFactory::build(const MCMeshObjectData & data) { const auto object = std::make_shared(data.typeId()); const auto mesh = m_assetManager.meshManager().mesh(data.meshId()); switch (data.shape()) { // Default shape, use surface dimensions case MCObjectData::Default: // Circle shape according to surface dimensions if (data.defaultCircleShape()) { object->setShape(std::make_shared(std::make_shared(data.typeId(), mesh), std::max(mesh->width(), mesh->height()) / 2)); } // Rect shape according to mesh dimensions (default) else { object->setShape(std::make_shared(std::make_shared(data.typeId(), mesh), mesh->width(), mesh->height())); } break; // Explicit circle shape case MCObjectData::Circle: object->setShape(std::make_shared(std::make_shared(data.typeId(), mesh), data.shapeRadius())); break; // Explicit rect shape case MCObjectData::Rect: object->setShape(std::make_shared(std::make_shared(data.typeId(), mesh), data.shapeWidth(), data.shapeHeight())); break; } setCommonProperties(*object, data); return object; } MCObjectPtr MCObjectFactory::build(const MCObjectData & data, MCShapeViewPtr view) { MCObjectPtr object; switch (data.shape()) { // Default shape, use surface dimensions case MCObjectData::Default: // Auto shape not supported. return nullptr; // Explicit circle shape case MCObjectData::Circle: { object = std::make_shared(data.typeId()); object->setShape(std::make_shared(view, data.shapeRadius())); break; } // Explicit rect shape case MCObjectData::Rect: { object = std::make_shared(data.typeId()); object->setShape(std::make_shared(view, data.shapeWidth(), data.shapeHeight())); break; } } setCommonProperties(*object, data); return object; } void MCObjectFactory::setCommonProperties(MCObject & object, const MCObjectData & data) const { object.physicsComponent().setMass(data.mass(), data.stationary()); object.physicsComponent().setXYFriction(data.xyFriction()); object.physicsComponent().setRestitution(data.restitution()); object.setInitialLocation(data.initialLocation()); object.setInitialAngle(data.initialAngle()); } MCObjectFactory::~MCObjectFactory() { } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcobjectfactory.hh000066400000000000000000000035141360473665400243530ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2011 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCOBJECTFACTORY_HH #define MCOBJECTFACTORY_HH #include "mcmeshobjectdata.hh" #include "mcobject.hh" #include "mcshapeview.hh" #include "mcsurfaceobjectdata.hh" #include #include class MCAssetManager; //! MCObjectFactory is a factory class that can be used when loading objects from file. class MCObjectFactory { public: //! Constructor. MCObjectFactory(MCAssetManager & assetManager); //! Destructor virtual ~MCObjectFactory(); /*! Build an object with a surface view. */ MCObjectPtr build(const MCSurfaceObjectData & data); /*! Build an object with a mesh view. */ MCObjectPtr build(const MCMeshObjectData & data); /*! Build an object with a custom view. */ MCObjectPtr build(const MCObjectData & data, MCShapeViewPtr view); private: DISABLE_COPY(MCObjectFactory); DISABLE_ASSI(MCObjectFactory); void setCommonProperties(MCObject & object, const MCObjectData & data) const; MCAssetManager & m_assetManager; }; #endif // MCOBJECTFACTORY_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcrandom.cc000066400000000000000000000046641360473665400227720ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcrandom.hh" #include "mccast.hh" #include #include #include #include namespace { const unsigned int LUT_SIZE = 1024; const unsigned int MOD_MASK = 0x3ff; } // namespace //! Implementation class for MCRandom class MCRandomImpl { public: MCRandomImpl(); inline float getValue(); private: void buildLUT(); mutable unsigned int m_valPtr; std::vector m_data; int m_seed; bool m_isBuilt; friend class MCRandom; }; std::unique_ptr const MCRandom::m_impl(new MCRandomImpl); MCRandomImpl::MCRandomImpl() : m_valPtr(0) , m_data(LUT_SIZE, 0) , m_seed(0) , m_isBuilt(false) { } void MCRandomImpl::buildLUT() { std::mt19937 engine(m_seed); std::uniform_real_distribution dist(0, 1); for (unsigned int i = 0; i < LUT_SIZE; i++) { m_data[i] = dist(engine); } m_isBuilt = true; } float MCRandomImpl::getValue() { if (!MCRandomImpl::m_isBuilt) { MCRandomImpl::buildLUT(); } return MCRandomImpl::m_data[++m_valPtr & MOD_MASK]; } float MCRandom::getValue() { return MCRandom::m_impl->getValue(); } void MCRandom::setSeed(int seed) { MCRandom::m_impl->m_seed = seed; } MCVector2dF MCRandom::randomVector2d() { return MCVector2dF(getValue() - .5f, getValue() - .5f).normalized(); } MCVector3dF MCRandom::randomVector3d() { return MCVector3dF(getValue() - .5f, getValue() - .5f, getValue() - .5f).normalized(); } MCVector3dF MCRandom::randomVector3dPositiveZ() { return MCVector3dF(getValue() - .5f, getValue() - .5f, std::fabs(getValue() - .5f)).normalized(); } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcrandom.hh000066400000000000000000000033201360473665400227700ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCRANDOM_HH #define MCRANDOM_HH #include "mcmacros.hh" #include "mcvector2d.hh" #include "mcvector3d.hh" #include class MCRandomImpl; //! MCRandom number LUT. class MCRandom { public: //! Get next random value [0.0..1.0] in the table static float getValue(); //! Return a random 2d vector static MCVector2dF randomVector2d(); //! Return a random 3d vector static MCVector3dF randomVector3d(); //! Return a random 3d vector with a positive Z only static MCVector3dF randomVector3dPositiveZ(); //! Set random seed (before getValue() is called the first time). static void setSeed(int seed); private: //! Constructor disabled MCRandom(); //! Disable copy constructor DISABLE_COPY(MCRandom); //! Disable assignment DISABLE_ASSI(MCRandom); static std::unique_ptr const m_impl; }; #endif // MCRANDOM_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcrecycler.hh000066400000000000000000000056351360473665400233330ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCRECYCLER_HH #define MCRECYCLER_HH #include #include /*! \class MCRecycler * \brief Generic object recycler. * * This class can be used to store and recycle objects. It acts as a * cache. Objects to be stored must have a default constructor. * "Freed" Objects are moved to a free-list for fast creation later. * All created Objects are automatically deleted in the destructor of MCRecycler. */ template class MCRecycler { public: //! Constructor. MCRecycler(); //! Destructor. ~MCRecycler(); /*! Return a new object of type T. If the free-list is empty * then the default constructor is used. The newly created object is * automatically deleted when Recycler gets of out scope. */ T * newObject(); /*! \brief Move given object to the free list. * MCRecycler takes the ownership. */ void freeObject(T * p); //! Move all active Objs to the free list void freeObjects(); private: unsigned int deleteFreeObjects(); unsigned int deleteObjects(); typedef std::vector ObjectPool; ObjectPool m_objs; typedef std::stack FreeObjectPool; FreeObjectPool m_freeObjs; }; template MCRecycler::MCRecycler() { } template T * MCRecycler::newObject() { T * p = nullptr; if (m_freeObjs.size()) { p = m_freeObjs.top(); m_freeObjs.pop(); } else { p = new T; m_objs.push_back(p); } return p; } template unsigned int MCRecycler::deleteObjects() { unsigned int count = 0; for (auto iter = m_objs.begin(); iter != m_objs.end(); iter++) { delete *iter; count++; } m_objs.clear(); return count; } template void MCRecycler::freeObject(T * p) { m_freeObjs.push(p); } template void MCRecycler::freeObjects() { for (auto iter = m_objs.begin(); iter != m_objs.end(); iter++) { m_freeObjs.push(*iter); } } template MCRecycler::~MCRecycler() { deleteObjects(); } #endif // MCRECYCLER_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mctimerevent.cc000066400000000000000000000030171360473665400236630ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2012 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mctimerevent.hh" unsigned int MCTimerEvent::m_typeId = MCEvent::registerType(); class MCTimerEventImpl { MCTimerEventImpl(unsigned int frequency); unsigned int frequency; friend class MCTimerEvent; }; MCTimerEventImpl::MCTimerEventImpl(unsigned int frequency) : frequency(frequency) { } MCTimerEvent::MCTimerEvent(unsigned int frequency) : m_pImpl(new MCTimerEventImpl(frequency)) { } unsigned int MCTimerEvent::typeId() { return MCTimerEvent::m_typeId; } unsigned int MCTimerEvent::instanceTypeId() const { return MCTimerEvent::m_typeId; } unsigned int MCTimerEvent::frequency() const { return m_pImpl->frequency; } MCTimerEvent::~MCTimerEvent() { delete m_pImpl; } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mctimerevent.hh000066400000000000000000000031731360473665400237000ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2012 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCTIMEREVENT_HH #define MCTIMEREVENT_HH #include "mcevent.hh" class MCTimerEventImpl; /*! Event that is send to all MCObject's that have subscribed to the event by calling MCWorld::subscribeTimerEvent(MCObject &). */ class MCTimerEvent : public MCEvent { public: /*! Constructor. * \param frequency The frequency of the timer. */ explicit MCTimerEvent(unsigned int frequency); //! Destructor. ~MCTimerEvent(); //! Return the frequency. unsigned int frequency() const; //! Return the typeId. static unsigned int typeId(); //! \reimp virtual unsigned int instanceTypeId() const; private: DISABLE_COPY(MCTimerEvent); DISABLE_ASSI(MCTimerEvent); static unsigned int m_typeId; MCTimerEventImpl * const m_pImpl; }; #endif // MCTIMEREVENT_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mctrigonom.cc000066400000000000000000000043511360473665400233410ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2009 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mctrigonom.hh" #include "mccast.hh" #include #include namespace { const size_t LUT_SIZE = 7200; const float SCALE = 10; const float PI = 3.1415926536f; } // namespace //! Implementation class for MCTrigonom class MCTrigonomImpl { public: MCTrigonomImpl(); private: std::array m_sin; std::array m_cos; friend class MCTrigonom; }; std::unique_ptr const MCTrigonom::m_pImpl(new MCTrigonomImpl); MCTrigonomImpl::MCTrigonomImpl() { for (size_t i = 0; i < LUT_SIZE; i++) { MCTrigonomImpl::m_sin.at(i) = std::sin(MCTrigonom::degToRad(static_cast(i / SCALE - LUT_SIZE / 2))); MCTrigonomImpl::m_cos.at(i) = std::cos(MCTrigonom::degToRad(static_cast(i / SCALE - LUT_SIZE / 2))); } } float MCTrigonom::degToRad(float angle) { return angle * PI / 180.0f; } float MCTrigonom::radToDeg(float angle) { return angle * 180.0f / PI; } float MCTrigonom::sin(float angle) { const size_t index = static_cast(angle * SCALE) + LUT_SIZE / 2; if (index < LUT_SIZE) { return m_pImpl->m_sin[index]; } return std::sin(degToRad(angle)); } float MCTrigonom::cos(float angle) { const size_t index = static_cast(angle * SCALE) + LUT_SIZE / 2; if (index < LUT_SIZE) { return m_pImpl->m_cos[index]; } return std::cos(degToRad(angle)); } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mctrigonom.hh000066400000000000000000000032051360473665400233500ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2009 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCTRIGONOM_HH #define MCTRIGONOM_HH #include "mcmacros.hh" #include "mcvector2d.hh" #include class MCTrigonomImpl; /*! * \class MCTrigonom * * MCTrigonom implements fast trigonometry routines using cached values from * lookup tables. * * Cannot be instantiated. */ class MCTrigonom { public: //! Convert degree to radians static float degToRad(float angle); //! Convert radian to degrees static float radToDeg(float angle); //! Get sine of given angle (0..360) static float sin(float angle); //! Get cosine of given angle (0..360) static float cos(float angle); private: //! Disabled constructor. MCTrigonom(); DISABLE_COPY(MCTrigonom); DISABLE_ASSI(MCTrigonom); static std::unique_ptr const m_pImpl; }; #endif // MCTRIGONOM_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mctyperegistry.cc000066400000000000000000000025671360473665400242640ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mctyperegistry.hh" MCTypeRegistry::MCTypeRegistry() : m_typeIdCount(1) { } unsigned int MCTypeRegistry::registerType(const std::string & typeName) { auto i(m_typeHash.find(typeName)); if (i == m_typeHash.end()) { m_typeIdCount++; m_typeHash[typeName] = m_typeIdCount; return m_typeIdCount; } else { return i->second; } } unsigned int MCTypeRegistry::getTypeIdForName(const std::string & typeName) { auto i(m_typeHash.find(typeName)); return i == m_typeHash.end() ? 0 : i->second; } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mctyperegistry.hh000066400000000000000000000025771360473665400242770ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCTYPEREGISTRY_HH #define MCTYPEREGISTRY_HH #include #include class MCTypeRegistry { public: MCTypeRegistry(); //! \brief Register a new type and get a unique type id. unsigned int registerType(const std::string & typeName); //! Return integer id corresponding to the given object name. unsigned int getTypeIdForName(const std::string & typeName); private: typedef std::unordered_map TypeHash; TypeHash m_typeHash; unsigned int m_typeIdCount; }; #endif // MCTYPEREGISTRY_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcvector2d.hh000066400000000000000000000257431360473665400232550ustar00rootroot00000000000000// MCVector2d -- A generalized 2d-vector class // Copyright (C) 2009 Jussi Lind // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 3 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General // Public License along with this library; if not, write to the // Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, // Boston, MA 02110-1301 USA // #ifndef MCVECTOR2D_HH #define MCVECTOR2D_HH #include #include #include /*! 2-dimensional vector template. Template parameter represents * the data type of the components. * * Examples: * * MCVector2d a(1, 1); * MCVector2d b(-1, 2); * MCVector2d z = a + b; * * // Cross product * cout << a % b << endl; * * // Dot product * cout << a.dot(b) << endl; * */ template class MCVector2d { public: //! Constructor MCVector2d(); //! Constructor MCVector2d(T i, T j); //! Copy constructor template MCVector2d(const MCVector2d & r); //! Move constructor template MCVector2d(const MCVector2d && r); //! Destructor inline ~MCVector2d() { } //! Assignment template MCVector2d & operator=(const MCVector2d & r); //! Move assignment template MCVector2d & operator=(const MCVector2d && r); //! Cross product. Returns the resulting component. template T operator%(const MCVector2d & r) const; //! Dot product template T dot(const MCVector2d & r) const; //! Component product template MCVector2d comp(const MCVector2d & r) const; //! Component product + store template MCVector2d & compStore(const MCVector2d & r); //! Multiplication template MCVector2d operator*(S n) const; //! Vector multiplication template MCVector2d operator*(const MCVector2d & r) const; //! Division template MCVector2d operator/(S n) const; //! Vector division template MCVector2d operator/(const MCVector2d & r) const; //! Vector sum template MCVector2d operator+(const MCVector2d & r) const; //! Vector subtraction template MCVector2d operator-(const MCVector2d & r) const; //! *= template MCVector2d & operator*=(S n); //! *= template MCVector2d & operator*=(const MCVector2d & r); //! /= template MCVector2d & operator/=(S n); //! /= template MCVector2d & operator/=(const MCVector2d & r); //! += template MCVector2d & operator+=(const MCVector2d & r); //! -= template MCVector2d & operator-=(const MCVector2d & r); //! Get length inline T length() const; //! Get length using a fast approximation. inline T lengthFast() const; //! Get length squared. inline T lengthSquared() const; //! Normalize void normalize(); //! Normalize, inaccurate void normalizeFast(); //! Return a normalized vector inline MCVector2d normalized() const; //! Return a normalized vector. Inaccurate. inline MCVector2d normalizedFast() const; //! Invert void invert(); //! Return an inverted vector inline MCVector2d inverted() const; //! Set the vector to zero vector. void setZero(); //! Return true if a zero vector. bool isZero() const; //! Clamp to given length. void clamp(T maxLength); //! Clamp to given length. Inaccurate. void clampFast(T maxLength); //! \returns vector a projected on vector b. static MCVector2d projection(const MCVector2d & a, const MCVector2d & b); //! Set components void set(T newI, T newJ = 0); //! Set i-component void setI(T newI); //! Set j-component void setJ(T newJ); //! Get i-component inline T i() const; //! Get j-component inline T j() const; //! Write to stream friend std::ostream & operator<<(std::ostream & out, const MCVector2d & v) { out << "[ " << v.m_i << ", " << v.m_j << " ]"; return out; } private: //! Components T m_i, m_j; }; using MCVector2dF = MCVector2d; using MCVector2dFR = const MCVector2dF &; template MCVector2d::MCVector2d() : m_i(0) , m_j(0) { } template MCVector2d::MCVector2d(T newI, T newJ) : m_i(newI) , m_j(newJ) { } template template MCVector2d::MCVector2d(const MCVector2d & r) : m_i(r.i()) , m_j(r.j()) { } template template MCVector2d::MCVector2d(const MCVector2d && r) : m_i(r.i()) , m_j(r.j()) { } template template MCVector2d & MCVector2d::operator=(const MCVector2d & r) { if (reinterpret_cast(&r) != reinterpret_cast(this)) { m_i = r.i(); m_j = r.j(); } return *this; } template template MCVector2d & MCVector2d::operator=(const MCVector2d && r) { m_i = r.i(); m_j = r.j(); return *this; } template template T MCVector2d::operator%(const MCVector2d & r) const { return m_i * r.j() - m_j * r.i(); } template template T MCVector2d::dot(const MCVector2d & r) const { return m_i * r.i() + m_j * r.j(); } template template MCVector2d MCVector2d::comp(const MCVector2d & r) const { return MCVector2d(m_i * r.i(), m_j * r.j()); } template template MCVector2d & MCVector2d::compStore(const MCVector2d & r) { m_i = m_i * r.i(); m_j = m_j * r.j(); return *this; } template template MCVector2d MCVector2d::operator*(S n) const { return MCVector2d(m_i * n, m_j * n); } template template MCVector2d MCVector2d::operator*(const MCVector2d & r) const { return MCVector2d(m_i * r.i(), m_j * r.j()); } template template MCVector2d & MCVector2d::operator*=(S n) { m_i *= n; m_j *= n; return *this; } template template MCVector2d & MCVector2d::operator*=(const MCVector2d & r) { m_i *= r.i(); m_j *= r.j(); return *this; } template template MCVector2d MCVector2d::operator/(S n) const { return MCVector2d(m_i / n, m_j / n); } template template MCVector2d MCVector2d::operator/(const MCVector2d & r) const { return MCVector2d(m_i / r.i(), m_j / r.j()); } template template MCVector2d & MCVector2d::operator/=(S n) { m_i /= n; m_j /= n; return *this; } template template MCVector2d & MCVector2d::operator/=(const MCVector2d & r) { m_i /= r.i(); m_j /= r.j(); return *this; } template template MCVector2d MCVector2d::operator+(const MCVector2d & r) const { return MCVector2d(m_i + r.i(), m_j + r.j()); } template template MCVector2d & MCVector2d::operator+=(const MCVector2d & r) { m_i += r.i(); m_j += r.j(); return *this; } template template MCVector2d MCVector2d::operator-(const MCVector2d & r) const { return MCVector2d(m_i - r.i(), m_j - r.j()); } template template MCVector2d & MCVector2d::operator-=(const MCVector2d & r) { m_i -= r.i(); m_j -= r.j(); return *this; } template T MCVector2d::length() const { return std::sqrt(m_i * m_i + m_j * m_j); } template T MCVector2d::lengthFast() const { const T a = std::abs(m_i); const T b = std::abs(m_j); const T m = std::min(a, b); return a + b - m / 2; } template T MCVector2d::lengthSquared() const { return m_i * m_i + m_j * m_j; } template void MCVector2d::normalize() { if (!isZero()) { const T l(length()); m_i /= l; m_j /= l; } } template void MCVector2d::normalizeFast() { if (!isZero()) { const T l(lengthFast()); m_i /= l; m_j /= l; } } template MCVector2d MCVector2d::normalized() const { if (!isZero()) { const T l(length()); return MCVector2d(m_i / l, m_j / l); } return MCVector2d(); } template MCVector2d MCVector2d::normalizedFast() const { if (!isZero()) { const T l(lengthFast()); return MCVector2d(m_i / l, m_j / l); } return MCVector2d(); } template void MCVector2d::invert() { m_i = -m_i; m_j = -m_j; } template MCVector2d MCVector2d::inverted() const { return MCVector2d(-m_i, -m_j); } template MCVector2d MCVector2d::projection(const MCVector2d & a, const MCVector2d & b) { return b * a.dot(b) / b.lengthSquared(); } template void MCVector2d::set(T newI, T newJ) { m_i = newI; m_j = newJ; } template void MCVector2d::setI(T newI) { m_i = newI; } template void MCVector2d::setJ(T newJ) { m_j = newJ; } template T MCVector2d::i() const { return m_i; } template T MCVector2d::j() const { return m_j; } template void MCVector2d::setZero() { m_i = 0; m_j = 0; } template bool MCVector2d::isZero() const { if (std::numeric_limits::is_exact) { return m_i == 0 && m_j == 0; } else { return std::abs(m_i) <= std::numeric_limits::epsilon() && std::abs(m_j) <= std::numeric_limits::epsilon(); } } template void MCVector2d::clamp(T maxLength) { const T l = length(); if (l > maxLength) { m_i *= maxLength; m_i /= l; m_j *= maxLength; m_j /= l; } } template void MCVector2d::clampFast(T maxLength) { const T l = lengthFast(); if (l > maxLength) { m_i *= maxLength; m_i /= l; m_j *= maxLength; m_j /= l; } } // Unary negation template MCVector2d operator-(const MCVector2d & r) { return MCVector2d(-r.i(), -r.j()); } #endif // MCVECTOR2D_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcvector3d.hh000066400000000000000000000305541360473665400232520ustar00rootroot00000000000000// MCVector3d -- A generalized 3d-vector class // Copyright (C) 2009 Jussi Lind // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 3 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General // Public License along with this library; if not, write to the // Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, // Boston, MA 02110-1301 USA // #ifndef MCVECTOR3D_HH #define MCVECTOR3D_HH #include "mcvector2d.hh" #include #include #include /*! 3-dimensional vector template. Template parameter represents * the data type of the components. * * Examples: * * MCVector3d a(1, 1, 1); * MCVector3d b(-1, 2, 0); * MCVector3d z = a + b; * * // Cross product * cout << a % b << endl; * * // Dot product * cout << a.dot(b) << endl; * */ template class MCVector3d { public: //! Constructor MCVector3d(); //! Constructor MCVector3d(T i, T j); //! Constructor MCVector3d(T i, T j, T k); //! Constructor template MCVector3d(const MCVector2d & r, U k = 0); //! Copy constructor template MCVector3d(const MCVector3d & r); //! Move constructor template MCVector3d(const MCVector3d && r); //! Destructor inline ~MCVector3d() { } //! Type conversion to MCVector2d template operator MCVector2d() const; //! Assignment template MCVector3d & operator=(const MCVector3d & r); //! Move assignment template MCVector3d & operator=(const MCVector3d && r); //! Cross product. Returns the resulting vector. template MCVector3d operator%(const MCVector3d & r) const; //! Dot product template T dot(const MCVector3d & r) const; //! Component product template MCVector3d comp(const MCVector3d & r) const; //! Component product + store template MCVector3d & compStore(const MCVector3d & r); //! Multiplication template MCVector3d operator*(S n) const; MCVector3d operator*(const MCVector3d & n) const; //! Division template MCVector3d operator/(S n) const; MCVector3d operator/(const MCVector3d & n) const; //! Vector sum template MCVector3d operator+(const MCVector3d & r) const; //! Vector subtraction template MCVector3d operator-(const MCVector3d & r) const; //! *= template MCVector3d & operator*=(S n); MCVector3d & operator*=(const MCVector3d & n); //! /= template MCVector3d & operator/=(S n); MCVector3d & operator/=(const MCVector3d & n); //! += template MCVector3d & operator+=(const MCVector3d & r); //! -= template MCVector3d & operator-=(const MCVector3d & r); //! Get length. inline T length() const; //! Get length using a fast approximation. inline T lengthFast() const; //! Get length squared. inline T lengthSquared() const; //! Normalize void normalize(); //! Return normalized vector inline MCVector3d normalized() const; //! Normalize void normalizeFast(); //! Return normalized vector inline MCVector3d normalizedFast() const; //! Invert vector void invert(); //! Return inverted vector inline MCVector3d inverted() const; //! Set the vector to zero vector void setZero(); //! Return true if a zero vector bool isZero() const; //! Clamp to given length. void clamp(T maxLength); //! Clamp to given length. Inaccurate. void clampFast(T maxLength); //! \returns vector a projected on vector b. static MCVector3d projection(const MCVector3d & a, const MCVector3d & b); //! Set components void set(T i, T j = 0, T k = 0); //! Set i-component void setI(T newI); //! Set j-component void setJ(T newJ); //! Set k-component void setK(T newK); //! Get i-component inline T i() const; //! Get j-component inline T j() const; //! Get k-component inline T k() const; //! Write to stream friend std::ostream & operator<<(std::ostream & out, const MCVector3d & v) { out << "[ " << v.i() << ", " << v.j() << ", " << v.k() << " ]"; return out; } private: //! Components T m_i, m_j, m_k, padding; }; using MCVector3dF = MCVector3d; using MCVector3dFR = const MCVector3dF &; template MCVector3d::MCVector3d() : m_i(0) , m_j(0) , m_k(0) { } template MCVector3d::MCVector3d(T newI, T newJ) : m_i(newI) , m_j(newJ) , m_k(0) { } template MCVector3d::MCVector3d(T newI, T newJ, T newK) : m_i(newI) , m_j(newJ) , m_k(newK) { } template template MCVector3d::MCVector3d(const MCVector3d & r) : m_i(r.i()) , m_j(r.j()) , m_k(r.k()) { } template template MCVector3d::MCVector3d(const MCVector3d && r) : m_i(r.i()) , m_j(r.j()) , m_k(r.k()) { } template template MCVector3d::MCVector3d(const MCVector2d & r, U k) : m_i(r.i()) , m_j(r.j()) , m_k(k) { } template template MCVector3d::operator MCVector2d() const { return MCVector2d(m_i, m_j); } template template MCVector3d & MCVector3d::operator=(const MCVector3d & r) { if (reinterpret_cast(&r) != reinterpret_cast(this)) { m_i = r.i(); m_j = r.j(); m_k = r.k(); } return *this; } template template MCVector3d & MCVector3d::operator=(const MCVector3d && r) { m_i = r.i(); m_j = r.j(); m_k = r.k(); return *this; } template template MCVector3d MCVector3d::operator%(const MCVector3d & r) const { T _i = m_j * r.k() - r.j() * m_k; T _j = m_i * r.k() - r.i() * m_k; T _k = m_i * r.j() - r.i() * m_j; return MCVector3d(_i, -_j, _k); } template template T MCVector3d::dot(const MCVector3d & r) const { return m_i * r.i() + m_j * r.j() + m_k * r.k(); } template template MCVector3d MCVector3d::comp(const MCVector3d & r) const { return MCVector3d(m_i * r.i(), m_j * r.j(), m_k * r.k()); } template template MCVector3d & MCVector3d::compStore(const MCVector3d & r) { m_i = m_i * r.i(); m_j = m_j * r.j(); m_k = m_k * r.k(); return *this; } template template MCVector3d MCVector3d::operator*(S n) const { return MCVector3d(m_i * n, m_j * n, m_k * n); } template MCVector3d MCVector3d::operator*(const MCVector3d & n) const { return MCVector3d(m_i * n.m_i, m_j * n.m_j, m_k * n.m_k); } template template MCVector3d & MCVector3d::operator*=(S n) { m_i *= n; m_j *= n; m_k *= n; return *this; } template MCVector3d & MCVector3d::operator*=(const MCVector3d & n) { m_i *= n.m_i; m_j *= n.m_j; m_k *= n.m_k; return *this; } template template MCVector3d MCVector3d::operator/(S n) const { return MCVector3d(m_i / n, m_j / n, m_k / n); } template MCVector3d MCVector3d::operator/(const MCVector3d & n) const { return MCVector3d(m_i / n.m_i, m_j / n.m_j, m_k / n.m_k); } template template MCVector3d & MCVector3d::operator/=(S n) { m_i /= n; m_j /= n; m_k /= n; return *this; } template MCVector3d & MCVector3d::operator/=(const MCVector3d & n) { m_i /= n.m_i; m_j /= n.m_j; m_k /= n.m_k; return *this; } template template MCVector3d MCVector3d::operator+(const MCVector3d & r) const { return MCVector3d(m_i + r.i(), m_j + r.j(), m_k + r.k()); } template template MCVector3d & MCVector3d::operator+=(const MCVector3d & r) { m_i += r.i(); m_j += r.j(); m_k += r.k(); return *this; } template template MCVector3d MCVector3d::operator-(const MCVector3d & r) const { return MCVector3d(m_i - r.i(), m_j - r.j(), m_k - r.k()); } template template MCVector3d & MCVector3d::operator-=(const MCVector3d & r) { m_i -= r.i(); m_j -= r.j(); m_k -= r.k(); return *this; } template T MCVector3d::length() const { return std::sqrt(m_i * m_i + m_j * m_j + m_k * m_k); } template T MCVector3d::lengthFast() const { const MCVector2d ij(m_i, m_j); const T l = ij.lengthFast(); const MCVector2d lk(l, m_k); return lk.lengthFast(); } template T MCVector3d::lengthSquared() const { return m_i * m_i + m_j * m_j + m_k * m_k; } template void MCVector3d::normalize() { if (!isZero()) { const T l(length()); m_i /= l; m_j /= l; m_k /= l; } } template void MCVector3d::normalizeFast() { if (!isZero()) { const T l(lengthFast()); m_i /= l; m_j /= l; m_k /= l; } } template MCVector3d MCVector3d::normalized() const { if (!isZero()) { const T l(length()); return MCVector3d(m_i / l, m_j / l, m_k / l); } return MCVector3d(); } template MCVector3d MCVector3d::normalizedFast() const { if (!isZero()) { const T l(lengthFast()); return MCVector3d(m_i / l, m_j / l, m_k / l); } return MCVector3d(); } template void MCVector3d::invert() { m_i = -m_i; m_j = -m_j; m_k = -m_k; } template MCVector3d MCVector3d::inverted() const { return MCVector3d(-m_i, -m_j, -m_k); } template MCVector3d MCVector3d::projection(const MCVector3d & a, const MCVector3d & b) { return b * a.dot(b) / b.lengthSquared(); } template void MCVector3d::set(T newI, T newJ, T newK) { m_i = newI; m_j = newJ; m_k = newK; } template void MCVector3d::setI(T newI) { m_i = newI; } template void MCVector3d::setJ(T newJ) { m_j = newJ; } template void MCVector3d::setK(T newK) { m_k = newK; } template T MCVector3d::i() const { return m_i; } template T MCVector3d::j() const { return m_j; } template T MCVector3d::k() const { return m_k; } template void MCVector3d::setZero() { m_i = 0; m_j = 0; m_k = 0; } template bool MCVector3d::isZero() const { if (std::numeric_limits::is_exact) { return m_i == 0 && m_j == 0 && m_k == 0; } else { return std::abs(m_i) <= std::numeric_limits::epsilon() && std::abs(m_j) <= std::numeric_limits::epsilon() && std::abs(m_k) <= std::numeric_limits::epsilon(); } } template void MCVector3d::clamp(T maxLength) { const T l = length(); if (l > maxLength) { m_i *= maxLength; m_i /= l; m_j *= maxLength; m_j /= l; m_k *= maxLength; m_k /= l; } } template void MCVector3d::clampFast(T maxLength) { const T l = lengthFast(); if (l > maxLength) { m_i *= maxLength; m_i /= l; m_j *= maxLength; m_j /= l; m_k *= maxLength; m_k /= l; } } // Unary negation template MCVector3d operator-(const MCVector3d & r) { return MCVector3d(-r.i(), -r.j(), -r.k()); } #endif // MCVECTOR3D_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcvectoranimation.cc000066400000000000000000000033311360473665400247020ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcvectoranimation.hh" #include MCVectorAnimation::MCVectorAnimation() : m_vect(nullptr) , m_steps(0) , m_step(0) , m_preDelay(0) , m_postDelay(0) { } void MCVectorAnimation::init(MCVector3dF & vect, const MCVector3dF & start, const MCVector3dF & end, size_t steps, size_t preDelay, size_t postDelay) { m_delta = (end - start) / steps; m_vect = &vect; m_steps = steps; m_step = 0; *m_vect = start; m_preDelay = preDelay; m_postDelay = postDelay; } bool MCVectorAnimation::update() { assert(m_vect); if (m_preDelay) { m_preDelay--; return false; } else if (++m_step < m_steps) { *m_vect += m_delta; return false; } else if (m_postDelay) { m_postDelay--; return false; } return true; } MCVectorAnimation::~MCVectorAnimation() = default; DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcvectoranimation.hh000066400000000000000000000034021360473665400247130ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2015 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCVECTORANIMATION_HH #define MCVECTORANIMATION_HH #include "mcmacros.hh" #include "mcvector3d.hh" class MCVectorAnimationImpl; /*! * \class MCVectorAnimation * * MCVectorAnimation implements a simple class to animate * an MCVector3d. * */ class MCVectorAnimation { public: //! Constructor. MCVectorAnimation(); //! Destructor. virtual ~MCVectorAnimation(); //! Initialize the animation. void init( MCVector3dF & vect, MCVector3dFR start, MCVector3dFR & end, size_t steps, size_t preDelay = 0, size_t postDelay = 0); //! Update the animation. Returns true when done. bool update(); private: DISABLE_COPY(MCVectorAnimation); DISABLE_ASSI(MCVectorAnimation); MCVector3dF * m_vect; MCVector3dF m_start; MCVector3dF m_end; MCVector3dF m_delta; size_t m_steps; size_t m_step; size_t m_preDelay; size_t m_postDelay; }; #endif // MCVECTORANIMATION_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcworld.cc000066400000000000000000000310641360473665400226330ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2010 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #include "mcworld.hh" #include "mcbbox.hh" #include "mccamera.hh" #include "mccollisiondetector.hh" #include "mcforcegenerator.hh" #include "mcforceregistry.hh" #include "mcfrictiongenerator.hh" #include "mcimpulsegenerator.hh" #include "mcmathutil.hh" #include "mcobject.hh" #include "mcobjectgrid.hh" #include "mcparticle.hh" #include "mcphysicscomponent.hh" #include "mcrectshape.hh" #include "mcshape.hh" #include "mcshapeview.hh" #include "mctrigonom.hh" #include "mcworldrenderer.hh" #include #include MCWorld * MCWorld::m_instance = nullptr; float MCWorld::m_metersPerUnit = 1.0; float MCWorld::m_metersPerUnitSquared = 1.0; namespace { const int REMOVED_INDEX = -1; } MCWorld::MCWorld() : m_renderer(new MCWorldRenderer) , m_forceRegistry(new MCForceRegistry) , m_collisionDetector(new MCCollisionDetector) , m_impulseGenerator(new MCImpulseGenerator) , m_minX(0) , m_maxX(0) , m_minY(0) , m_maxY(0) , m_minZ(0) , m_maxZ(0) , m_numCollisions(0) , m_resolverLoopCount(5) , m_resolverStep(1.0f / m_resolverLoopCount) , m_gravity(MCVector3dF(0, 0, -9.81f)) { if (!MCWorld::m_instance) { MCWorld::m_instance = this; } else { std::cerr << "ERROR!!: Only one MCWorld can exist!" << std::endl; exit(EXIT_FAILURE); } // Default dimensions. Creates also MCObjectGrid. setDimensions(0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0); } MCWorld::~MCWorld() { clear(); delete m_renderer; delete m_forceRegistry; delete m_collisionDetector; delete m_impulseGenerator; MCWorld::m_instance = nullptr; } void MCWorld::integrate(int step) { // Integrate and update all registered objects m_forceRegistry->update(); for (auto && object : m_objects) { if (object->isPhysicsObject() && !object->physicsComponent().isStationary()) { object->physicsComponent().stepTime(step); } object->onStepTime(step); } } void MCWorld::generateImpulses() { m_impulseGenerator->generateImpulsesFromDeepestContacts(m_objects); } void MCWorld::resolvePositions(float accuracy) { m_impulseGenerator->resolvePositions(m_objects, accuracy); } void MCWorld::prepareRendering(MCCamera * camera) { m_renderer->buildBatches(camera); } void MCWorld::render(MCCamera * camera, MCRenderGroup renderGroup) { m_renderer->render(camera, renderGroup); } bool MCWorld::hasInstance() { return MCWorld::m_instance; } MCWorld & MCWorld::instance() { if (!MCWorld::m_instance) { std::cerr << "ERROR!!: MCWorld instance not created!" << std::endl; exit(EXIT_FAILURE); } return *MCWorld::m_instance; } void MCWorld::clear() { // This does the same as removeObject(), but the removal // process here is simpler as all data structures will be // cleared and all objects will be removed at once. for (auto && object : m_objects) { object->deleteContacts(); object->physicsComponent().reset(); object->setIndex(REMOVED_INDEX); if (object->isParticle()) { static_cast(object)->die(); } } m_renderer->clear(); m_objectGrid->removeAll(); m_objects.clear(); m_removeObjs.clear(); m_collisionDetector->clear(); } void MCWorld::setDimensions( float minX, float maxX, float minY, float maxY, float minZ, float maxZ, float metersPerUnit, bool addAreaWalls, size_t gridSize) { assert(maxX - minX > 0); assert(maxY - minY > 0); assert(maxZ - minZ > 0); MCWorld::setMetersPerUnit(metersPerUnit); // Set dimensions m_minX = minX; m_maxX = maxX; m_minY = minY; m_maxY = maxY; m_minZ = minZ; m_maxZ = maxZ; // Init objectGrid const float leafWidth = (maxX - minX) / gridSize; const float leafHeight = (maxY - minY) / gridSize; m_objectGrid = std::make_unique(m_minX, m_minY, m_maxX, m_maxY, leafWidth, leafHeight); if (addAreaWalls) { // Create "wall" objects const float w = m_maxX - m_minX; const float h = m_maxY - m_minY; if (m_leftWallObject) { removeObjectNow(*m_leftWallObject); } const float wallRestitution = 0.25f; m_leftWallObject = std::make_unique("__WORLD_LEFT_WALL"); m_leftWallObject->setShape(std::make_shared(nullptr, w, h)); m_leftWallObject->physicsComponent().setMass(0, true); m_leftWallObject->physicsComponent().setRestitution(wallRestitution); m_leftWallObject->addToWorld(); m_leftWallObject->translate(MCVector3dF(-w / 2, h / 2, 0)); if (m_rightWallObject) { removeObjectNow(*m_rightWallObject); } m_rightWallObject = std::make_unique("__WORLD_RIGHT_WALL"); m_rightWallObject->setShape(std::make_shared(nullptr, w, h)); m_rightWallObject->physicsComponent().setMass(0, true); m_rightWallObject->physicsComponent().setRestitution(wallRestitution); m_rightWallObject->addToWorld(); m_rightWallObject->translate(MCVector3dF(w + w / 2, h / 2, 0)); if (m_topWallObject) { removeObjectNow(*m_topWallObject); } m_topWallObject = std::make_unique("__WORLD_TOP_WALL"); m_topWallObject->setShape(std::make_shared(nullptr, w, h)); m_topWallObject->physicsComponent().setMass(0, true); m_topWallObject->physicsComponent().setRestitution(wallRestitution); m_topWallObject->addToWorld(); m_topWallObject->translate(MCVector3dF(w / 2, h + h / 2, 0)); if (m_bottomWallObject) { removeObjectNow(*m_bottomWallObject); } m_bottomWallObject = std::make_unique("__WORLD_BOTTOM_WALL"); m_bottomWallObject->setShape(std::make_shared(nullptr, w, h)); m_bottomWallObject->physicsComponent().setMass(0, true); m_bottomWallObject->physicsComponent().setRestitution(wallRestitution); m_bottomWallObject->addToWorld(); m_bottomWallObject->translate(MCVector3dF(w / 2, -h / 2, 0)); } else { if (m_leftWallObject) { removeObjectNow(*m_leftWallObject); m_leftWallObject.reset(); } if (m_rightWallObject) { removeObjectNow(*m_rightWallObject); m_rightWallObject.reset(); } if (m_topWallObject) { removeObjectNow(*m_topWallObject); m_topWallObject.reset(); } if (m_bottomWallObject) { removeObjectNow(*m_bottomWallObject); m_bottomWallObject.reset(); } } } float MCWorld::minX() const { return m_minX; } float MCWorld::maxX() const { return m_maxX; } float MCWorld::minY() const { return m_minY; } float MCWorld::maxY() const { return m_maxY; } float MCWorld::minZ() const { return m_minZ; } float MCWorld::maxZ() const { return m_maxZ; } size_t MCWorld::objectCount() const { return m_objects.size(); } void MCWorld::addObject(MCObject & object) { if (!object.removing()) { if (object.index() == REMOVED_INDEX) { m_renderer->addObject(object); // Add to object vector (O(1)) m_objects.push_back(&object); object.setIndex(static_cast(m_objects.size()) - 1); m_objectGrid->insert(object); // Add xy friction const float FrictionThreshold = 0.001f; if (object.physicsComponent().xyFriction() > FrictionThreshold) { m_forceRegistry->addForceGenerator( std::make_shared( object.physicsComponent().xyFriction(), object.physicsComponent().xyFriction()), object); } } } else { object.setRemoving(false); } } void MCWorld::removeObject(MCObject & object) { if (object.index() > REMOVED_INDEX || object.physicsComponent().isSleeping()) { object.setRemoving(true); m_removeObjs.push_back(&object); } } void MCWorld::removeObjectNow(MCObject & object) { if (object.index() > REMOVED_INDEX || object.physicsComponent().isSleeping()) { object.setRemoving(true); for (auto && obj : m_objects) { if (obj != &object && obj->isPhysicsObject()) { obj->deleteContacts(object); } } doRemoveObject(object); } } void MCWorld::doRemoveObject(MCObject & object) { // Reset motion object.physicsComponent().reset(); m_renderer->removeObject(object); // Remove from object vector (O(1)) removeObjectFromIntegration(object); // Remove from ObjectTree if (object.isPhysicsObject() && !object.bypassCollisions()) { m_objectGrid->remove(object); m_collisionDetector->remove(object); } object.setRemoving(false); } void MCWorld::removeObjectFromIntegration(MCObject & object) { // Remove from object vector (O(1)) if (object.index() > REMOVED_INDEX && object.index() < static_cast(m_objects.size())) { m_objects[static_cast(object.index())] = m_objects.back(); m_objects[static_cast(object.index())]->setIndex(object.index()); m_objects.pop_back(); object.setIndex(REMOVED_INDEX); } } void MCWorld::restoreObjectToIntegration(MCObject & object) { if (object.index() == REMOVED_INDEX) { // Add to object vector (O(1)) m_objects.push_back(&object); object.setIndex(static_cast(m_objects.size()) - 1); } } void MCWorld::processRemovedObjects() { for (auto && obj : m_removeObjs) { if (obj->removing()) { doRemoveObject(*obj); } } m_removeObjs.clear(); } void MCWorld::processCollisions() { // Check collisions for all registered objects m_numCollisions = m_collisionDetector->detectCollisions(*m_objectGrid); if (m_numCollisions) { generateImpulses(); // Process contacts and generate impulses for (size_t i = 0; i < m_resolverLoopCount && m_numCollisions > 0; i++) { m_numCollisions = m_collisionDetector->iterateCurrentCollisions(); resolvePositions(m_resolverStep); } } } MCForceRegistry & MCWorld::forceRegistry() const { assert(m_forceRegistry); return *m_forceRegistry; } void MCWorld::stepTime(int step) { // Integrate physics integrate(step); // Process collisions and generate impulses processCollisions(); // Remove objects that are marked to be removed processRemovedObjects(); } const MCWorld::ObjectVector & MCWorld::objects() const { return m_objects; } MCObjectGrid & MCWorld::objectGrid() const { assert(m_objectGrid); return *m_objectGrid; } MCWorldRenderer & MCWorld::renderer() const { assert(m_renderer); return *m_renderer; } void MCWorld::setGravity(const MCVector3dF & gravity) { m_gravity = gravity; } const MCVector3dF & MCWorld::gravity() const { return m_gravity; } void MCWorld::setMetersPerUnit(float value) { MCWorld::m_metersPerUnit = value; MCWorld::m_metersPerUnitSquared = value * value; } float MCWorld::metersPerUnit() { assert(MCWorld::m_instance); return MCWorld::m_metersPerUnit; } void MCWorld::toMeters(float & units) { units *= MCWorld::m_metersPerUnit; } void MCWorld::toMeters(MCVector2dF & units) { units *= MCWorld::m_metersPerUnit; } void MCWorld::toMeters(MCVector3dF & units) { units *= MCWorld::m_metersPerUnit; } void MCWorld::setResolverLoopCount(size_t resolverLoopCount) { m_resolverLoopCount = resolverLoopCount; m_resolverStep = 1.0f / resolverLoopCount; } DustRacing2D-2.0.5/src/game/MiniCore/src/Core/mcworld.hh000066400000000000000000000155641360473665400226540ustar00rootroot00000000000000// This file belongs to the "MiniCore" game engine. // Copyright (C) 2010 Jussi Lind // // 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 2 // 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, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, // MA 02110-1301, USA. // #ifndef MCWORLD_HH #define MCWORLD_HH #include "mcmacros.hh" #include "mcrendergroup.hh" #include "mcvector2d.hh" #include "mcvector3d.hh" #include #include class MCCamera; class MCCollisionDetector; class MCContact; class MCForceRegistry; class MCImpulseGenerator; class MCObject; class MCObjectGrid; class MCWorldRenderer; /*! \class World base class. * \brief World class holds every MCObject in the scene. * * MCWorld class holds every MCObject-derived object in the scene. * It applies the physics integration and collision detections for * the objects. * * MCWorld has always positive Z-axis pointing "up" and objects * move on the XY-plane. Direction of the gravity can be freely set. * * MCWorld uses MCWorldRenderer to render the scene. */ class MCWorld { public: typedef std::vector ObjectVector; //! Constructor. MCWorld(); //! Destructor. virtual ~MCWorld(); //! Return the one-and-only MCWorld instance. static MCWorld & instance(); static bool hasInstance(); //! Remove all objects. void clear(); /*! Set dimensions of the world box in units. * * \param metersPerUnit You could have, for example, a game object that is a * MCSurface of 10x20 units, but want it to behave like an real-world object * of 1x2 meters, so the metersPerUnits would be 0.1 in that case. * * \param gridSize ver and hor size of the object grid. This affects the collision * detection performance. */ void setDimensions( float minX, float maxX, float minY, float maxY, float minZ, float maxZ, float metersPerUnit = 1.0f, bool addAreaWalls = true, size_t gridSize = 128); /*! Set gravity vector used by default friction generators (on XY-plane). * The default is [0, 0, -9.81]. Set the gravity (acceleration) for objects * independently when needed. */ void setGravity(const MCVector3dF & gravity); const MCVector3dF & gravity() const; //! Set how many meters equal one unit in the scene. static void setMetersPerUnit(float value); //! Get how many meters equal one unit in the scene. static float metersPerUnit(); //! Convert scene units to meters. static void toMeters(float & units); //! Convert scene units to meters. static void toMeters(MCVector2dF & units); //! Convert scene units to meters. static void toMeters(MCVector3dF & units); /*! Add object to the world. Object's current location is used. * \param object Object to be added. */ void addObject(MCObject & object); /*! Schedules the object to be removed from the world. This method * should be used when removing objects in the middle of a run. * Object is not removed immediately so possibly on-going physics * and collision calculations are not messed up. Do not delete the object. * \param object Object to be removed. */ void removeObject(MCObject & object); /*! Removes object from the world immediately. This can be used if the object * gets deleted. Slow. * \param object Object to be removed. */ void removeObjectNow(MCObject & object); //! Stop integrating the given object. void removeObjectFromIntegration(MCObject & object); //! Restart integrating the given object. void restoreObjectToIntegration(MCObject & object); //! \return Force registry. Use this to add force generators to objects. MCForceRegistry & forceRegistry() const; /*! \brief Step world time * This causes the integration of physics and executes collision detections. * \param step Time step to be updated in msecs. */ void stepTime(int step); /*! \brief Call this (once) before calling render() or renderShadows(). * \param camera The camera window to be used. If nullptr, then * no any translations or clipping done. */ virtual void prepareRendering(MCCamera * camera); /*! \brief Render given component. * \param camera Camera box, can be nullptr. */ virtual void render(MCCamera * camera, MCRenderGroup renderGroup); //! \return Reference to the objectGrid. MCObjectGrid & objectGrid() const; //! \return The world renderer. MCWorldRenderer & renderer() const; //! Get minimum X float minX() const; //! Get maximum X float maxX() const; //! Get minimum Y float minY() const; //! Get maximum Y float maxY() const; //! Get minimum Z float minZ() const; //! Get maximum Z float maxZ() const; /*! \brief Set collision resolver loop count. * Lower loop count results in faster collision calculations, but lower accuracy. */ void setResolverLoopCount(size_t resolverLoopCount = 5); //! \return size of the current integration vector size_t objectCount() const; //! Get registered objects const ObjectVector & objects() const; private: DISABLE_COPY(MCWorld); DISABLE_ASSI(MCWorld); DISABLE_MOVE(MCWorld); void integrate(int step); void processRemovedObjects(); void processCollisions(); void doRemoveObject(MCObject & object); void generateImpulses(); void resolvePositions(float accuracy); MCContact * getDeepestInterpenetration(const std::vector & contacts); static MCWorld * m_instance; MCWorldRenderer * m_renderer; MCForceRegistry * m_forceRegistry; MCCollisionDetector * m_collisionDetector; MCImpulseGenerator * m_impulseGenerator; std::unique_ptr m_objectGrid; static float m_metersPerUnit; static float m_metersPerUnitSquared; float m_minX, m_maxX, m_minY, m_maxY, m_minZ, m_maxZ; MCWorld::ObjectVector m_objects; MCWorld::ObjectVector m_removeObjs; std::unique_ptr m_leftWallObject; std::unique_ptr m_rightWallObject; std::unique_ptr m_topWallObject; std::unique_ptr m_bottomWallObject; size_t m_numCollisions; size_t m_resolverLoopCount; float m_resolverStep; MCVector3dF m_gravity; }; #endif // MCWORLD_HH DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/000077500000000000000000000000001360473665400215215ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCCamera000066400000000000000000000000271360473665400230530ustar00rootroot00000000000000#include "mccamera.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLAmbientLight000066400000000000000000000000411360473665400244510ustar00rootroot00000000000000#include "mcglambientlight.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLColor000066400000000000000000000000301360473665400231560ustar00rootroot00000000000000#include "mcglcolor.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLDiffuseLight000066400000000000000000000000401360473665400244560ustar00rootroot00000000000000#include "mcgldiffuselight.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLEW000066400000000000000000000005761360473665400224320ustar00rootroot00000000000000// This is just wrapper header for glew. #ifndef __MC_NO_GLEW__ #include "contrib/glew/glew.h" #else #ifndef __MC_GLES__ #ifdef _MSC_VER #include #include #include #else #define GL_GLEXT_PROTOTYPES #include #include #endif #else #include #endif #endif DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLM000066400000000000000000000002211360473665400222760ustar00rootroot00000000000000// This is just wrapper header for glm #include "contrib/glm/ogl-math/glm/glm.hpp" #include "contrib/glm/ogl-math/glm/gtc/matrix_transform.hpp" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLMaterial000066400000000000000000000000341360473665400236420ustar00rootroot00000000000000#include "mcglmaterial.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLScene000066400000000000000000000000301360473665400231350ustar00rootroot00000000000000#include "mcglscene.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLShaderProgram000066400000000000000000000000401360473665400246370ustar00rootroot00000000000000#include "mcglshaderprogram.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCGLVertex000066400000000000000000000000321360473665400233570ustar00rootroot00000000000000#include "mcglvertex.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCMesh000066400000000000000000000000251360473665400225550ustar00rootroot00000000000000#include "mcmesh.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCMeshView000066400000000000000000000000311360473665400234050ustar00rootroot00000000000000#include "mcmeshview.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCParticle000066400000000000000000000000311360473665400234210ustar00rootroot00000000000000#include "mcparticle.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCParticleRendererBase000066400000000000000000000000461360473665400257110ustar00rootroot00000000000000#include "mcparticlerendererbase.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCRenderGroup000066400000000000000000000000341360473665400241150ustar00rootroot00000000000000#include "mcrendergroup.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCSurface000066400000000000000000000000301360473665400232450ustar00rootroot00000000000000#include "mcsurface.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCSurfaceParticle000066400000000000000000000000401360473665400247320ustar00rootroot00000000000000#include "mcsurfaceparticle.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCSurfaceParticleRenderer000066400000000000000000000000511360473665400264230ustar00rootroot00000000000000#include "mcsurfaceparticlerenderer.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCSurfaceParticleRendererLegacy000066400000000000000000000000571360473665400275560ustar00rootroot00000000000000#include "mcsurfaceparticlerendererlegacy.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCSurfaceView000066400000000000000000000000341360473665400241040ustar00rootroot00000000000000#include "mcsurfaceview.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/MCWorldRenderer000066400000000000000000000000371360473665400244420ustar00rootroot00000000000000#include "mcworldrenderer.hh" DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/000077500000000000000000000000001360473665400231615ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glew/000077500000000000000000000000001360473665400241175ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glew/glew.c000066400000000000000000032037551360473665400252400ustar00rootroot00000000000000/* ** The OpenGL Extension Wrangler Library ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** ** * Redistributions of source code must retain the above copyright notice, ** this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright notice, ** this list of conditions and the following disclaimer in the documentation ** and/or other materials provided with the distribution. ** * The name of the author may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF ** THE POSSIBILITY OF SUCH DAMAGE. */ #include "glew.h" #if defined(_WIN32) # include "wglew.h" #elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) # include "glxew.h" #endif /* * Define glewGetContext and related helper macros. */ #ifdef GLEW_MX # define glewGetContext() ctx # ifdef _WIN32 # define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx # define GLEW_CONTEXT_ARG_VAR_INIT ctx # define wglewGetContext() ctx # define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx # define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx # else /* _WIN32 */ # define GLEW_CONTEXT_ARG_DEF_INIT void # define GLEW_CONTEXT_ARG_VAR_INIT # define glxewGetContext() ctx # define GLXEW_CONTEXT_ARG_DEF_INIT void # define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx # endif /* _WIN32 */ # define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx #else /* GLEW_MX */ # define GLEW_CONTEXT_ARG_DEF_INIT void # define GLEW_CONTEXT_ARG_VAR_INIT # define GLEW_CONTEXT_ARG_DEF_LIST void # define WGLEW_CONTEXT_ARG_DEF_INIT void # define WGLEW_CONTEXT_ARG_DEF_LIST void # define GLXEW_CONTEXT_ARG_DEF_INIT void # define GLXEW_CONTEXT_ARG_DEF_LIST void #endif /* GLEW_MX */ #if defined(__sgi) || defined (__sun) || defined(GLEW_APPLE_GLX) #include #include #include void* dlGetProcAddress (const GLubyte* name) { static void* h = NULL; static void* gpa; if (h == NULL) { if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; gpa = dlsym(h, "glXGetProcAddress"); } if (gpa != NULL) return ((void*(*)(const GLubyte*))gpa)(name); else return dlsym(h, (const char*)name); } #endif /* __sgi || __sun || GLEW_APPLE_GLX */ #if defined(__APPLE__) #include #include #include #ifdef MAC_OS_X_VERSION_10_3 #include void* NSGLGetProcAddress (const GLubyte *name) { static void* image = NULL; void* addr; if (NULL == image) { #ifdef GLEW_REGAL image = dlopen("libRegal.dylib", RTLD_LAZY); #else image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY); #endif } if( !image ) return NULL; addr = dlsym(image, (const char*)name); if( addr ) return addr; #ifdef GLEW_APPLE_GLX return dlGetProcAddress( name ); // try next for glx symbols #else return NULL; #endif } #else #include void* NSGLGetProcAddress (const GLubyte *name) { static const struct mach_header* image = NULL; NSSymbol symbol; char* symbolName; if (NULL == image) { #ifdef GLEW_REGAL image = NSAddImage("libRegal.dylib", NSADDIMAGE_OPTION_RETURN_ON_ERROR); #else image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); #endif } /* prepend a '_' for the Unix C symbol mangling convention */ symbolName = malloc(strlen((const char*)name) + 2); strcpy(symbolName+1, (const char*)name); symbolName[0] = '_'; symbol = NULL; /* if (NSIsSymbolNameDefined(symbolName)) symbol = NSLookupAndBindSymbol(symbolName); */ symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; free(symbolName); if( symbol ) return NSAddressOfSymbol(symbol); #ifdef GLEW_APPLE_GLX return dlGetProcAddress( name ); // try next for glx symbols #else return NULL; #endif } #endif /* MAC_OS_X_VERSION_10_3 */ #endif /* __APPLE__ */ /* * Define glewGetProcAddress. */ #if defined(_WIN32) # define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) #elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) # define glewGetProcAddress(name) NSGLGetProcAddress(name) #elif defined(__sgi) || defined(__sun) # define glewGetProcAddress(name) dlGetProcAddress(name) #elif defined(__ANDROID__) # define glewGetProcAddress(name) NULL /* TODO */ #else /* __linux */ # define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) #endif /* * Define GLboolean const cast. */ #define CONST_CAST(x) (*(GLboolean*)&x) /* * GLEW, just like OpenGL or GLU, does not rely on the standard C library. * These functions implement the functionality required in this file. */ static GLuint _glewStrLen (const GLubyte* s) { GLuint i=0; if (s == NULL) return 0; while (s[i] != '\0') i++; return i; } static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) { GLuint i=0; if (s == NULL) return 0; while (s[i] != '\0' && s[i] != c) i++; return (s[i] == '\0' || s[i] == c) ? i : 0; } static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) { GLuint i=0; if(a == NULL || b == NULL) return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; return i == n ? GL_TRUE : GL_FALSE; } static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) { while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) { (*a)++; (*na)--; } if(*na >= nb) { GLuint i=0; while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; if(i == nb) { *a = *a + nb; *na = *na - nb; return GL_TRUE; } } return GL_FALSE; } static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) { if(*na >= nb) { GLuint i=0; while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; if(i == nb) { *a = *a + nb; *na = *na - nb; return GL_TRUE; } } return GL_FALSE; } static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) { if(*na >= nb) { GLuint i=0; while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) { *a = *a + nb; *na = *na - nb; return GL_TRUE; } } return GL_FALSE; } /* * Search for name in the extensions string. Use of strstr() * is not sufficient because extension names can be prefixes of * other extension names. Could use strtok() but the constant * string returned by glGetString might be in read-only memory. */ static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) { const GLubyte* p; GLuint len = _glewStrLen((const GLubyte*)name); p = start; while (p < end) { GLuint n = _glewStrCLen(p, ' '); if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; p += n+1; } return GL_FALSE; } #if !defined(_WIN32) || !defined(GLEW_MX) PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D = NULL; PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements = NULL; PFNGLTEXIMAGE3DPROC __glewTexImage3D = NULL; PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D = NULL; PFNGLACTIVETEXTUREPROC __glewActiveTexture = NULL; PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture = NULL; PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D = NULL; PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D = NULL; PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D = NULL; PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage = NULL; PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd = NULL; PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf = NULL; PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd = NULL; PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf = NULL; PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d = NULL; PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv = NULL; PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f = NULL; PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv = NULL; PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i = NULL; PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv = NULL; PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s = NULL; PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv = NULL; PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d = NULL; PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv = NULL; PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f = NULL; PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv = NULL; PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i = NULL; PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv = NULL; PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s = NULL; PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv = NULL; PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d = NULL; PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv = NULL; PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f = NULL; PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv = NULL; PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i = NULL; PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv = NULL; PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s = NULL; PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv = NULL; PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d = NULL; PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv = NULL; PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f = NULL; PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv = NULL; PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i = NULL; PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv = NULL; PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s = NULL; PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv = NULL; PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage = NULL; PFNGLBLENDCOLORPROC __glewBlendColor = NULL; PFNGLBLENDEQUATIONPROC __glewBlendEquation = NULL; PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate = NULL; PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer = NULL; PFNGLFOGCOORDDPROC __glewFogCoordd = NULL; PFNGLFOGCOORDDVPROC __glewFogCoorddv = NULL; PFNGLFOGCOORDFPROC __glewFogCoordf = NULL; PFNGLFOGCOORDFVPROC __glewFogCoordfv = NULL; PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays = NULL; PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements = NULL; PFNGLPOINTPARAMETERFPROC __glewPointParameterf = NULL; PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv = NULL; PFNGLPOINTPARAMETERIPROC __glewPointParameteri = NULL; PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv = NULL; PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b = NULL; PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv = NULL; PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d = NULL; PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv = NULL; PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f = NULL; PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv = NULL; PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i = NULL; PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv = NULL; PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s = NULL; PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv = NULL; PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub = NULL; PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv = NULL; PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui = NULL; PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv = NULL; PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us = NULL; PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv = NULL; PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer = NULL; PFNGLWINDOWPOS2DPROC __glewWindowPos2d = NULL; PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv = NULL; PFNGLWINDOWPOS2FPROC __glewWindowPos2f = NULL; PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv = NULL; PFNGLWINDOWPOS2IPROC __glewWindowPos2i = NULL; PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv = NULL; PFNGLWINDOWPOS2SPROC __glewWindowPos2s = NULL; PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv = NULL; PFNGLWINDOWPOS3DPROC __glewWindowPos3d = NULL; PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv = NULL; PFNGLWINDOWPOS3FPROC __glewWindowPos3f = NULL; PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv = NULL; PFNGLWINDOWPOS3IPROC __glewWindowPos3i = NULL; PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv = NULL; PFNGLWINDOWPOS3SPROC __glewWindowPos3s = NULL; PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv = NULL; PFNGLBEGINQUERYPROC __glewBeginQuery = NULL; PFNGLBINDBUFFERPROC __glewBindBuffer = NULL; PFNGLBUFFERDATAPROC __glewBufferData = NULL; PFNGLBUFFERSUBDATAPROC __glewBufferSubData = NULL; PFNGLDELETEBUFFERSPROC __glewDeleteBuffers = NULL; PFNGLDELETEQUERIESPROC __glewDeleteQueries = NULL; PFNGLENDQUERYPROC __glewEndQuery = NULL; PFNGLGENBUFFERSPROC __glewGenBuffers = NULL; PFNGLGENQUERIESPROC __glewGenQueries = NULL; PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv = NULL; PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv = NULL; PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData = NULL; PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv = NULL; PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv = NULL; PFNGLGETQUERYIVPROC __glewGetQueryiv = NULL; PFNGLISBUFFERPROC __glewIsBuffer = NULL; PFNGLISQUERYPROC __glewIsQuery = NULL; PFNGLMAPBUFFERPROC __glewMapBuffer = NULL; PFNGLUNMAPBUFFERPROC __glewUnmapBuffer = NULL; PFNGLATTACHSHADERPROC __glewAttachShader = NULL; PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation = NULL; PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate = NULL; PFNGLCOMPILESHADERPROC __glewCompileShader = NULL; PFNGLCREATEPROGRAMPROC __glewCreateProgram = NULL; PFNGLCREATESHADERPROC __glewCreateShader = NULL; PFNGLDELETEPROGRAMPROC __glewDeleteProgram = NULL; PFNGLDELETESHADERPROC __glewDeleteShader = NULL; PFNGLDETACHSHADERPROC __glewDetachShader = NULL; PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray = NULL; PFNGLDRAWBUFFERSPROC __glewDrawBuffers = NULL; PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray = NULL; PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib = NULL; PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform = NULL; PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders = NULL; PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation = NULL; PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog = NULL; PFNGLGETPROGRAMIVPROC __glewGetProgramiv = NULL; PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog = NULL; PFNGLGETSHADERSOURCEPROC __glewGetShaderSource = NULL; PFNGLGETSHADERIVPROC __glewGetShaderiv = NULL; PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation = NULL; PFNGLGETUNIFORMFVPROC __glewGetUniformfv = NULL; PFNGLGETUNIFORMIVPROC __glewGetUniformiv = NULL; PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv = NULL; PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv = NULL; PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv = NULL; PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv = NULL; PFNGLISPROGRAMPROC __glewIsProgram = NULL; PFNGLISSHADERPROC __glewIsShader = NULL; PFNGLLINKPROGRAMPROC __glewLinkProgram = NULL; PFNGLSHADERSOURCEPROC __glewShaderSource = NULL; PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate = NULL; PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate = NULL; PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate = NULL; PFNGLUNIFORM1FPROC __glewUniform1f = NULL; PFNGLUNIFORM1FVPROC __glewUniform1fv = NULL; PFNGLUNIFORM1IPROC __glewUniform1i = NULL; PFNGLUNIFORM1IVPROC __glewUniform1iv = NULL; PFNGLUNIFORM2FPROC __glewUniform2f = NULL; PFNGLUNIFORM2FVPROC __glewUniform2fv = NULL; PFNGLUNIFORM2IPROC __glewUniform2i = NULL; PFNGLUNIFORM2IVPROC __glewUniform2iv = NULL; PFNGLUNIFORM3FPROC __glewUniform3f = NULL; PFNGLUNIFORM3FVPROC __glewUniform3fv = NULL; PFNGLUNIFORM3IPROC __glewUniform3i = NULL; PFNGLUNIFORM3IVPROC __glewUniform3iv = NULL; PFNGLUNIFORM4FPROC __glewUniform4f = NULL; PFNGLUNIFORM4FVPROC __glewUniform4fv = NULL; PFNGLUNIFORM4IPROC __glewUniform4i = NULL; PFNGLUNIFORM4IVPROC __glewUniform4iv = NULL; PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv = NULL; PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv = NULL; PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv = NULL; PFNGLUSEPROGRAMPROC __glewUseProgram = NULL; PFNGLVALIDATEPROGRAMPROC __glewValidateProgram = NULL; PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d = NULL; PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv = NULL; PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f = NULL; PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv = NULL; PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s = NULL; PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv = NULL; PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d = NULL; PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv = NULL; PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f = NULL; PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv = NULL; PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s = NULL; PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv = NULL; PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d = NULL; PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv = NULL; PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f = NULL; PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv = NULL; PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s = NULL; PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv = NULL; PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv = NULL; PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv = NULL; PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv = NULL; PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub = NULL; PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv = NULL; PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv = NULL; PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv = NULL; PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv = NULL; PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d = NULL; PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv = NULL; PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f = NULL; PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv = NULL; PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv = NULL; PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s = NULL; PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv = NULL; PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv = NULL; PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv = NULL; PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv = NULL; PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer = NULL; PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv = NULL; PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv = NULL; PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv = NULL; PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv = NULL; PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv = NULL; PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv = NULL; PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender = NULL; PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback = NULL; PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation = NULL; PFNGLCLAMPCOLORPROC __glewClampColor = NULL; PFNGLCLEARBUFFERFIPROC __glewClearBufferfi = NULL; PFNGLCLEARBUFFERFVPROC __glewClearBufferfv = NULL; PFNGLCLEARBUFFERIVPROC __glewClearBufferiv = NULL; PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv = NULL; PFNGLCOLORMASKIPROC __glewColorMaski = NULL; PFNGLDISABLEIPROC __glewDisablei = NULL; PFNGLENABLEIPROC __glewEnablei = NULL; PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender = NULL; PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback = NULL; PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v = NULL; PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation = NULL; PFNGLGETSTRINGIPROC __glewGetStringi = NULL; PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv = NULL; PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv = NULL; PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying = NULL; PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv = NULL; PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv = NULL; PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv = NULL; PFNGLISENABLEDIPROC __glewIsEnabledi = NULL; PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv = NULL; PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv = NULL; PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings = NULL; PFNGLUNIFORM1UIPROC __glewUniform1ui = NULL; PFNGLUNIFORM1UIVPROC __glewUniform1uiv = NULL; PFNGLUNIFORM2UIPROC __glewUniform2ui = NULL; PFNGLUNIFORM2UIVPROC __glewUniform2uiv = NULL; PFNGLUNIFORM3UIPROC __glewUniform3ui = NULL; PFNGLUNIFORM3UIVPROC __glewUniform3uiv = NULL; PFNGLUNIFORM4UIPROC __glewUniform4ui = NULL; PFNGLUNIFORM4UIVPROC __glewUniform4uiv = NULL; PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i = NULL; PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv = NULL; PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui = NULL; PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv = NULL; PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i = NULL; PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv = NULL; PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui = NULL; PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv = NULL; PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i = NULL; PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv = NULL; PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui = NULL; PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv = NULL; PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv = NULL; PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i = NULL; PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv = NULL; PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv = NULL; PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv = NULL; PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui = NULL; PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv = NULL; PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv = NULL; PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer = NULL; PFNGLDRAWARRAYSINSTANCEDPROC __glewDrawArraysInstanced = NULL; PFNGLDRAWELEMENTSINSTANCEDPROC __glewDrawElementsInstanced = NULL; PFNGLPRIMITIVERESTARTINDEXPROC __glewPrimitiveRestartIndex = NULL; PFNGLTEXBUFFERPROC __glewTexBuffer = NULL; PFNGLFRAMEBUFFERTEXTUREPROC __glewFramebufferTexture = NULL; PFNGLGETBUFFERPARAMETERI64VPROC __glewGetBufferParameteri64v = NULL; PFNGLGETINTEGER64I_VPROC __glewGetInteger64i_v = NULL; PFNGLVERTEXATTRIBDIVISORPROC __glewVertexAttribDivisor = NULL; PFNGLBLENDEQUATIONSEPARATEIPROC __glewBlendEquationSeparatei = NULL; PFNGLBLENDEQUATIONIPROC __glewBlendEquationi = NULL; PFNGLBLENDFUNCSEPARATEIPROC __glewBlendFuncSeparatei = NULL; PFNGLBLENDFUNCIPROC __glewBlendFunci = NULL; PFNGLMINSAMPLESHADINGPROC __glewMinSampleShading = NULL; PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX = NULL; PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD = NULL; PFNGLDEBUGMESSAGEENABLEAMDPROC __glewDebugMessageEnableAMD = NULL; PFNGLDEBUGMESSAGEINSERTAMDPROC __glewDebugMessageInsertAMD = NULL; PFNGLGETDEBUGMESSAGELOGAMDPROC __glewGetDebugMessageLogAMD = NULL; PFNGLBLENDEQUATIONINDEXEDAMDPROC __glewBlendEquationIndexedAMD = NULL; PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD = NULL; PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD = NULL; PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD = NULL; PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD = NULL; PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD = NULL; PFNGLDELETENAMESAMDPROC __glewDeleteNamesAMD = NULL; PFNGLGENNAMESAMDPROC __glewGenNamesAMD = NULL; PFNGLISNAMEAMDPROC __glewIsNameAMD = NULL; PFNGLBEGINPERFMONITORAMDPROC __glewBeginPerfMonitorAMD = NULL; PFNGLDELETEPERFMONITORSAMDPROC __glewDeletePerfMonitorsAMD = NULL; PFNGLENDPERFMONITORAMDPROC __glewEndPerfMonitorAMD = NULL; PFNGLGENPERFMONITORSAMDPROC __glewGenPerfMonitorsAMD = NULL; PFNGLGETPERFMONITORCOUNTERDATAAMDPROC __glewGetPerfMonitorCounterDataAMD = NULL; PFNGLGETPERFMONITORCOUNTERINFOAMDPROC __glewGetPerfMonitorCounterInfoAMD = NULL; PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC __glewGetPerfMonitorCounterStringAMD = NULL; PFNGLGETPERFMONITORCOUNTERSAMDPROC __glewGetPerfMonitorCountersAMD = NULL; PFNGLGETPERFMONITORGROUPSTRINGAMDPROC __glewGetPerfMonitorGroupStringAMD = NULL; PFNGLGETPERFMONITORGROUPSAMDPROC __glewGetPerfMonitorGroupsAMD = NULL; PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD = NULL; PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD = NULL; PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD = NULL; PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD = NULL; PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD = NULL; PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE = NULL; PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE = NULL; PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE = NULL; PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE = NULL; PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE = NULL; PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE = NULL; PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE = NULL; PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE = NULL; PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE = NULL; PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE = NULL; PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE = NULL; PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE = NULL; PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE = NULL; PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE = NULL; PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE = NULL; PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE = NULL; PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE = NULL; PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE = NULL; PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE = NULL; PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE = NULL; PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE = NULL; PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE = NULL; PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE = NULL; PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE = NULL; PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE = NULL; PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE = NULL; PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE = NULL; PFNGLDISABLEVERTEXATTRIBAPPLEPROC __glewDisableVertexAttribAPPLE = NULL; PFNGLENABLEVERTEXATTRIBAPPLEPROC __glewEnableVertexAttribAPPLE = NULL; PFNGLISVERTEXATTRIBENABLEDAPPLEPROC __glewIsVertexAttribEnabledAPPLE = NULL; PFNGLMAPVERTEXATTRIB1DAPPLEPROC __glewMapVertexAttrib1dAPPLE = NULL; PFNGLMAPVERTEXATTRIB1FAPPLEPROC __glewMapVertexAttrib1fAPPLE = NULL; PFNGLMAPVERTEXATTRIB2DAPPLEPROC __glewMapVertexAttrib2dAPPLE = NULL; PFNGLMAPVERTEXATTRIB2FAPPLEPROC __glewMapVertexAttrib2fAPPLE = NULL; PFNGLCLEARDEPTHFPROC __glewClearDepthf = NULL; PFNGLDEPTHRANGEFPROC __glewDepthRangef = NULL; PFNGLGETSHADERPRECISIONFORMATPROC __glewGetShaderPrecisionFormat = NULL; PFNGLRELEASESHADERCOMPILERPROC __glewReleaseShaderCompiler = NULL; PFNGLSHADERBINARYPROC __glewShaderBinary = NULL; PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance = NULL; PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance = NULL; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance = NULL; PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed = NULL; PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex = NULL; PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB = NULL; PFNGLCLEARBUFFERDATAPROC __glewClearBufferData = NULL; PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData = NULL; PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT = NULL; PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT = NULL; PFNGLCLAMPCOLORARBPROC __glewClampColorARB = NULL; PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute = NULL; PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect = NULL; PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData = NULL; PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData = NULL; PFNGLDEBUGMESSAGECALLBACKARBPROC __glewDebugMessageCallbackARB = NULL; PFNGLDEBUGMESSAGECONTROLARBPROC __glewDebugMessageControlARB = NULL; PFNGLDEBUGMESSAGEINSERTARBPROC __glewDebugMessageInsertARB = NULL; PFNGLGETDEBUGMESSAGELOGARBPROC __glewGetDebugMessageLogARB = NULL; PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB = NULL; PFNGLBLENDEQUATIONSEPARATEIARBPROC __glewBlendEquationSeparateiARB = NULL; PFNGLBLENDEQUATIONIARBPROC __glewBlendEquationiARB = NULL; PFNGLBLENDFUNCSEPARATEIARBPROC __glewBlendFuncSeparateiARB = NULL; PFNGLBLENDFUNCIARBPROC __glewBlendFunciARB = NULL; PFNGLDRAWELEMENTSBASEVERTEXPROC __glewDrawElementsBaseVertex = NULL; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC __glewDrawElementsInstancedBaseVertex = NULL; PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC __glewDrawRangeElementsBaseVertex = NULL; PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC __glewMultiDrawElementsBaseVertex = NULL; PFNGLDRAWARRAYSINDIRECTPROC __glewDrawArraysIndirect = NULL; PFNGLDRAWELEMENTSINDIRECTPROC __glewDrawElementsIndirect = NULL; PFNGLFRAMEBUFFERPARAMETERIPROC __glewFramebufferParameteri = NULL; PFNGLGETFRAMEBUFFERPARAMETERIVPROC __glewGetFramebufferParameteriv = NULL; PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC __glewGetNamedFramebufferParameterivEXT = NULL; PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC __glewNamedFramebufferParameteriEXT = NULL; PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer = NULL; PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer = NULL; PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer = NULL; PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus = NULL; PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers = NULL; PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers = NULL; PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer = NULL; PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D = NULL; PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D = NULL; PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D = NULL; PFNGLFRAMEBUFFERTEXTURELAYERPROC __glewFramebufferTextureLayer = NULL; PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers = NULL; PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers = NULL; PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv = NULL; PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv = NULL; PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer = NULL; PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer = NULL; PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample = NULL; PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB = NULL; PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB = NULL; PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB = NULL; PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB = NULL; PFNGLGETPROGRAMBINARYPROC __glewGetProgramBinary = NULL; PFNGLPROGRAMBINARYPROC __glewProgramBinary = NULL; PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri = NULL; PFNGLGETUNIFORMDVPROC __glewGetUniformdv = NULL; PFNGLUNIFORM1DPROC __glewUniform1d = NULL; PFNGLUNIFORM1DVPROC __glewUniform1dv = NULL; PFNGLUNIFORM2DPROC __glewUniform2d = NULL; PFNGLUNIFORM2DVPROC __glewUniform2dv = NULL; PFNGLUNIFORM3DPROC __glewUniform3d = NULL; PFNGLUNIFORM3DVPROC __glewUniform3dv = NULL; PFNGLUNIFORM4DPROC __glewUniform4d = NULL; PFNGLUNIFORM4DVPROC __glewUniform4dv = NULL; PFNGLUNIFORMMATRIX2DVPROC __glewUniformMatrix2dv = NULL; PFNGLUNIFORMMATRIX2X3DVPROC __glewUniformMatrix2x3dv = NULL; PFNGLUNIFORMMATRIX2X4DVPROC __glewUniformMatrix2x4dv = NULL; PFNGLUNIFORMMATRIX3DVPROC __glewUniformMatrix3dv = NULL; PFNGLUNIFORMMATRIX3X2DVPROC __glewUniformMatrix3x2dv = NULL; PFNGLUNIFORMMATRIX3X4DVPROC __glewUniformMatrix3x4dv = NULL; PFNGLUNIFORMMATRIX4DVPROC __glewUniformMatrix4dv = NULL; PFNGLUNIFORMMATRIX4X2DVPROC __glewUniformMatrix4x2dv = NULL; PFNGLUNIFORMMATRIX4X3DVPROC __glewUniformMatrix4x3dv = NULL; PFNGLCOLORSUBTABLEPROC __glewColorSubTable = NULL; PFNGLCOLORTABLEPROC __glewColorTable = NULL; PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv = NULL; PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv = NULL; PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D = NULL; PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D = NULL; PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf = NULL; PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv = NULL; PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri = NULL; PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv = NULL; PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable = NULL; PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable = NULL; PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D = NULL; PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D = NULL; PFNGLGETCOLORTABLEPROC __glewGetColorTable = NULL; PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv = NULL; PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv = NULL; PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter = NULL; PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv = NULL; PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv = NULL; PFNGLGETHISTOGRAMPROC __glewGetHistogram = NULL; PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv = NULL; PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv = NULL; PFNGLGETMINMAXPROC __glewGetMinmax = NULL; PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv = NULL; PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv = NULL; PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter = NULL; PFNGLHISTOGRAMPROC __glewHistogram = NULL; PFNGLMINMAXPROC __glewMinmax = NULL; PFNGLRESETHISTOGRAMPROC __glewResetHistogram = NULL; PFNGLRESETMINMAXPROC __glewResetMinmax = NULL; PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D = NULL; PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB = NULL; PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB = NULL; PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB = NULL; PFNGLGETINTERNALFORMATIVPROC __glewGetInternalformativ = NULL; PFNGLGETINTERNALFORMATI64VPROC __glewGetInternalformati64v = NULL; PFNGLINVALIDATEBUFFERDATAPROC __glewInvalidateBufferData = NULL; PFNGLINVALIDATEBUFFERSUBDATAPROC __glewInvalidateBufferSubData = NULL; PFNGLINVALIDATEFRAMEBUFFERPROC __glewInvalidateFramebuffer = NULL; PFNGLINVALIDATESUBFRAMEBUFFERPROC __glewInvalidateSubFramebuffer = NULL; PFNGLINVALIDATETEXIMAGEPROC __glewInvalidateTexImage = NULL; PFNGLINVALIDATETEXSUBIMAGEPROC __glewInvalidateTexSubImage = NULL; PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange = NULL; PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange = NULL; PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB = NULL; PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB = NULL; PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB = NULL; PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB = NULL; PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB = NULL; PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect = NULL; PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect = NULL; PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB = NULL; PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB = NULL; PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB = NULL; PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB = NULL; PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB = NULL; PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB = NULL; PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB = NULL; PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB = NULL; PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB = NULL; PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB = NULL; PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB = NULL; PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB = NULL; PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB = NULL; PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB = NULL; PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB = NULL; PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB = NULL; PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB = NULL; PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB = NULL; PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB = NULL; PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB = NULL; PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB = NULL; PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB = NULL; PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB = NULL; PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB = NULL; PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB = NULL; PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB = NULL; PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB = NULL; PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB = NULL; PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB = NULL; PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB = NULL; PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB = NULL; PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB = NULL; PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB = NULL; PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB = NULL; PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB = NULL; PFNGLBEGINQUERYARBPROC __glewBeginQueryARB = NULL; PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB = NULL; PFNGLENDQUERYARBPROC __glewEndQueryARB = NULL; PFNGLGENQUERIESARBPROC __glewGenQueriesARB = NULL; PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB = NULL; PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB = NULL; PFNGLGETQUERYIVARBPROC __glewGetQueryivARB = NULL; PFNGLISQUERYARBPROC __glewIsQueryARB = NULL; PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB = NULL; PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB = NULL; PFNGLGETPROGRAMINTERFACEIVPROC __glewGetProgramInterfaceiv = NULL; PFNGLGETPROGRAMRESOURCEINDEXPROC __glewGetProgramResourceIndex = NULL; PFNGLGETPROGRAMRESOURCELOCATIONPROC __glewGetProgramResourceLocation = NULL; PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC __glewGetProgramResourceLocationIndex = NULL; PFNGLGETPROGRAMRESOURCENAMEPROC __glewGetProgramResourceName = NULL; PFNGLGETPROGRAMRESOURCEIVPROC __glewGetProgramResourceiv = NULL; PFNGLPROVOKINGVERTEXPROC __glewProvokingVertex = NULL; PFNGLGETGRAPHICSRESETSTATUSARBPROC __glewGetGraphicsResetStatusARB = NULL; PFNGLGETNCOLORTABLEARBPROC __glewGetnColorTableARB = NULL; PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC __glewGetnCompressedTexImageARB = NULL; PFNGLGETNCONVOLUTIONFILTERARBPROC __glewGetnConvolutionFilterARB = NULL; PFNGLGETNHISTOGRAMARBPROC __glewGetnHistogramARB = NULL; PFNGLGETNMAPDVARBPROC __glewGetnMapdvARB = NULL; PFNGLGETNMAPFVARBPROC __glewGetnMapfvARB = NULL; PFNGLGETNMAPIVARBPROC __glewGetnMapivARB = NULL; PFNGLGETNMINMAXARBPROC __glewGetnMinmaxARB = NULL; PFNGLGETNPIXELMAPFVARBPROC __glewGetnPixelMapfvARB = NULL; PFNGLGETNPIXELMAPUIVARBPROC __glewGetnPixelMapuivARB = NULL; PFNGLGETNPIXELMAPUSVARBPROC __glewGetnPixelMapusvARB = NULL; PFNGLGETNPOLYGONSTIPPLEARBPROC __glewGetnPolygonStippleARB = NULL; PFNGLGETNSEPARABLEFILTERARBPROC __glewGetnSeparableFilterARB = NULL; PFNGLGETNTEXIMAGEARBPROC __glewGetnTexImageARB = NULL; PFNGLGETNUNIFORMDVARBPROC __glewGetnUniformdvARB = NULL; PFNGLGETNUNIFORMFVARBPROC __glewGetnUniformfvARB = NULL; PFNGLGETNUNIFORMIVARBPROC __glewGetnUniformivARB = NULL; PFNGLGETNUNIFORMUIVARBPROC __glewGetnUniformuivARB = NULL; PFNGLREADNPIXELSARBPROC __glewReadnPixelsARB = NULL; PFNGLMINSAMPLESHADINGARBPROC __glewMinSampleShadingARB = NULL; PFNGLBINDSAMPLERPROC __glewBindSampler = NULL; PFNGLDELETESAMPLERSPROC __glewDeleteSamplers = NULL; PFNGLGENSAMPLERSPROC __glewGenSamplers = NULL; PFNGLGETSAMPLERPARAMETERIIVPROC __glewGetSamplerParameterIiv = NULL; PFNGLGETSAMPLERPARAMETERIUIVPROC __glewGetSamplerParameterIuiv = NULL; PFNGLGETSAMPLERPARAMETERFVPROC __glewGetSamplerParameterfv = NULL; PFNGLGETSAMPLERPARAMETERIVPROC __glewGetSamplerParameteriv = NULL; PFNGLISSAMPLERPROC __glewIsSampler = NULL; PFNGLSAMPLERPARAMETERIIVPROC __glewSamplerParameterIiv = NULL; PFNGLSAMPLERPARAMETERIUIVPROC __glewSamplerParameterIuiv = NULL; PFNGLSAMPLERPARAMETERFPROC __glewSamplerParameterf = NULL; PFNGLSAMPLERPARAMETERFVPROC __glewSamplerParameterfv = NULL; PFNGLSAMPLERPARAMETERIPROC __glewSamplerParameteri = NULL; PFNGLSAMPLERPARAMETERIVPROC __glewSamplerParameteriv = NULL; PFNGLACTIVESHADERPROGRAMPROC __glewActiveShaderProgram = NULL; PFNGLBINDPROGRAMPIPELINEPROC __glewBindProgramPipeline = NULL; PFNGLCREATESHADERPROGRAMVPROC __glewCreateShaderProgramv = NULL; PFNGLDELETEPROGRAMPIPELINESPROC __glewDeleteProgramPipelines = NULL; PFNGLGENPROGRAMPIPELINESPROC __glewGenProgramPipelines = NULL; PFNGLGETPROGRAMPIPELINEINFOLOGPROC __glewGetProgramPipelineInfoLog = NULL; PFNGLGETPROGRAMPIPELINEIVPROC __glewGetProgramPipelineiv = NULL; PFNGLISPROGRAMPIPELINEPROC __glewIsProgramPipeline = NULL; PFNGLPROGRAMUNIFORM1DPROC __glewProgramUniform1d = NULL; PFNGLPROGRAMUNIFORM1DVPROC __glewProgramUniform1dv = NULL; PFNGLPROGRAMUNIFORM1FPROC __glewProgramUniform1f = NULL; PFNGLPROGRAMUNIFORM1FVPROC __glewProgramUniform1fv = NULL; PFNGLPROGRAMUNIFORM1IPROC __glewProgramUniform1i = NULL; PFNGLPROGRAMUNIFORM1IVPROC __glewProgramUniform1iv = NULL; PFNGLPROGRAMUNIFORM1UIPROC __glewProgramUniform1ui = NULL; PFNGLPROGRAMUNIFORM1UIVPROC __glewProgramUniform1uiv = NULL; PFNGLPROGRAMUNIFORM2DPROC __glewProgramUniform2d = NULL; PFNGLPROGRAMUNIFORM2DVPROC __glewProgramUniform2dv = NULL; PFNGLPROGRAMUNIFORM2FPROC __glewProgramUniform2f = NULL; PFNGLPROGRAMUNIFORM2FVPROC __glewProgramUniform2fv = NULL; PFNGLPROGRAMUNIFORM2IPROC __glewProgramUniform2i = NULL; PFNGLPROGRAMUNIFORM2IVPROC __glewProgramUniform2iv = NULL; PFNGLPROGRAMUNIFORM2UIPROC __glewProgramUniform2ui = NULL; PFNGLPROGRAMUNIFORM2UIVPROC __glewProgramUniform2uiv = NULL; PFNGLPROGRAMUNIFORM3DPROC __glewProgramUniform3d = NULL; PFNGLPROGRAMUNIFORM3DVPROC __glewProgramUniform3dv = NULL; PFNGLPROGRAMUNIFORM3FPROC __glewProgramUniform3f = NULL; PFNGLPROGRAMUNIFORM3FVPROC __glewProgramUniform3fv = NULL; PFNGLPROGRAMUNIFORM3IPROC __glewProgramUniform3i = NULL; PFNGLPROGRAMUNIFORM3IVPROC __glewProgramUniform3iv = NULL; PFNGLPROGRAMUNIFORM3UIPROC __glewProgramUniform3ui = NULL; PFNGLPROGRAMUNIFORM3UIVPROC __glewProgramUniform3uiv = NULL; PFNGLPROGRAMUNIFORM4DPROC __glewProgramUniform4d = NULL; PFNGLPROGRAMUNIFORM4DVPROC __glewProgramUniform4dv = NULL; PFNGLPROGRAMUNIFORM4FPROC __glewProgramUniform4f = NULL; PFNGLPROGRAMUNIFORM4FVPROC __glewProgramUniform4fv = NULL; PFNGLPROGRAMUNIFORM4IPROC __glewProgramUniform4i = NULL; PFNGLPROGRAMUNIFORM4IVPROC __glewProgramUniform4iv = NULL; PFNGLPROGRAMUNIFORM4UIPROC __glewProgramUniform4ui = NULL; PFNGLPROGRAMUNIFORM4UIVPROC __glewProgramUniform4uiv = NULL; PFNGLPROGRAMUNIFORMMATRIX2DVPROC __glewProgramUniformMatrix2dv = NULL; PFNGLPROGRAMUNIFORMMATRIX2FVPROC __glewProgramUniformMatrix2fv = NULL; PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC __glewProgramUniformMatrix2x3dv = NULL; PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC __glewProgramUniformMatrix2x3fv = NULL; PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC __glewProgramUniformMatrix2x4dv = NULL; PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC __glewProgramUniformMatrix2x4fv = NULL; PFNGLPROGRAMUNIFORMMATRIX3DVPROC __glewProgramUniformMatrix3dv = NULL; PFNGLPROGRAMUNIFORMMATRIX3FVPROC __glewProgramUniformMatrix3fv = NULL; PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC __glewProgramUniformMatrix3x2dv = NULL; PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC __glewProgramUniformMatrix3x2fv = NULL; PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC __glewProgramUniformMatrix3x4dv = NULL; PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC __glewProgramUniformMatrix3x4fv = NULL; PFNGLPROGRAMUNIFORMMATRIX4DVPROC __glewProgramUniformMatrix4dv = NULL; PFNGLPROGRAMUNIFORMMATRIX4FVPROC __glewProgramUniformMatrix4fv = NULL; PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC __glewProgramUniformMatrix4x2dv = NULL; PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC __glewProgramUniformMatrix4x2fv = NULL; PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC __glewProgramUniformMatrix4x3dv = NULL; PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC __glewProgramUniformMatrix4x3fv = NULL; PFNGLUSEPROGRAMSTAGESPROC __glewUseProgramStages = NULL; PFNGLVALIDATEPROGRAMPIPELINEPROC __glewValidateProgramPipeline = NULL; PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC __glewGetActiveAtomicCounterBufferiv = NULL; PFNGLBINDIMAGETEXTUREPROC __glewBindImageTexture = NULL; PFNGLMEMORYBARRIERPROC __glewMemoryBarrier = NULL; PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB = NULL; PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB = NULL; PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB = NULL; PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB = NULL; PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB = NULL; PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB = NULL; PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB = NULL; PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB = NULL; PFNGLGETHANDLEARBPROC __glewGetHandleARB = NULL; PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB = NULL; PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB = NULL; PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB = NULL; PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB = NULL; PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB = NULL; PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB = NULL; PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB = NULL; PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB = NULL; PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB = NULL; PFNGLUNIFORM1FARBPROC __glewUniform1fARB = NULL; PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB = NULL; PFNGLUNIFORM1IARBPROC __glewUniform1iARB = NULL; PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB = NULL; PFNGLUNIFORM2FARBPROC __glewUniform2fARB = NULL; PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB = NULL; PFNGLUNIFORM2IARBPROC __glewUniform2iARB = NULL; PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB = NULL; PFNGLUNIFORM3FARBPROC __glewUniform3fARB = NULL; PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB = NULL; PFNGLUNIFORM3IARBPROC __glewUniform3iARB = NULL; PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB = NULL; PFNGLUNIFORM4FARBPROC __glewUniform4fARB = NULL; PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB = NULL; PFNGLUNIFORM4IARBPROC __glewUniform4iARB = NULL; PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB = NULL; PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB = NULL; PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB = NULL; PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB = NULL; PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB = NULL; PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB = NULL; PFNGLSHADERSTORAGEBLOCKBINDINGPROC __glewShaderStorageBlockBinding = NULL; PFNGLGETACTIVESUBROUTINENAMEPROC __glewGetActiveSubroutineName = NULL; PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC __glewGetActiveSubroutineUniformName = NULL; PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC __glewGetActiveSubroutineUniformiv = NULL; PFNGLGETPROGRAMSTAGEIVPROC __glewGetProgramStageiv = NULL; PFNGLGETSUBROUTINEINDEXPROC __glewGetSubroutineIndex = NULL; PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC __glewGetSubroutineUniformLocation = NULL; PFNGLGETUNIFORMSUBROUTINEUIVPROC __glewGetUniformSubroutineuiv = NULL; PFNGLUNIFORMSUBROUTINESUIVPROC __glewUniformSubroutinesuiv = NULL; PFNGLCOMPILESHADERINCLUDEARBPROC __glewCompileShaderIncludeARB = NULL; PFNGLDELETENAMEDSTRINGARBPROC __glewDeleteNamedStringARB = NULL; PFNGLGETNAMEDSTRINGARBPROC __glewGetNamedStringARB = NULL; PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB = NULL; PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB = NULL; PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB = NULL; PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync = NULL; PFNGLDELETESYNCPROC __glewDeleteSync = NULL; PFNGLFENCESYNCPROC __glewFenceSync = NULL; PFNGLGETINTEGER64VPROC __glewGetInteger64v = NULL; PFNGLGETSYNCIVPROC __glewGetSynciv = NULL; PFNGLISSYNCPROC __glewIsSync = NULL; PFNGLWAITSYNCPROC __glewWaitSync = NULL; PFNGLPATCHPARAMETERFVPROC __glewPatchParameterfv = NULL; PFNGLPATCHPARAMETERIPROC __glewPatchParameteri = NULL; PFNGLTEXBUFFERARBPROC __glewTexBufferARB = NULL; PFNGLTEXBUFFERRANGEPROC __glewTexBufferRange = NULL; PFNGLTEXTUREBUFFERRANGEEXTPROC __glewTextureBufferRangeEXT = NULL; PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB = NULL; PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB = NULL; PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB = NULL; PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB = NULL; PFNGLGETMULTISAMPLEFVPROC __glewGetMultisamplefv = NULL; PFNGLSAMPLEMASKIPROC __glewSampleMaski = NULL; PFNGLTEXIMAGE2DMULTISAMPLEPROC __glewTexImage2DMultisample = NULL; PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample = NULL; PFNGLTEXSTORAGE1DPROC __glewTexStorage1D = NULL; PFNGLTEXSTORAGE2DPROC __glewTexStorage2D = NULL; PFNGLTEXSTORAGE3DPROC __glewTexStorage3D = NULL; PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT = NULL; PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT = NULL; PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT = NULL; PFNGLTEXSTORAGE2DMULTISAMPLEPROC __glewTexStorage2DMultisample = NULL; PFNGLTEXSTORAGE3DMULTISAMPLEPROC __glewTexStorage3DMultisample = NULL; PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC __glewTextureStorage2DMultisampleEXT = NULL; PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC __glewTextureStorage3DMultisampleEXT = NULL; PFNGLTEXTUREVIEWPROC __glewTextureView = NULL; PFNGLGETQUERYOBJECTI64VPROC __glewGetQueryObjecti64v = NULL; PFNGLGETQUERYOBJECTUI64VPROC __glewGetQueryObjectui64v = NULL; PFNGLQUERYCOUNTERPROC __glewQueryCounter = NULL; PFNGLBINDTRANSFORMFEEDBACKPROC __glewBindTransformFeedback = NULL; PFNGLDELETETRANSFORMFEEDBACKSPROC __glewDeleteTransformFeedbacks = NULL; PFNGLDRAWTRANSFORMFEEDBACKPROC __glewDrawTransformFeedback = NULL; PFNGLGENTRANSFORMFEEDBACKSPROC __glewGenTransformFeedbacks = NULL; PFNGLISTRANSFORMFEEDBACKPROC __glewIsTransformFeedback = NULL; PFNGLPAUSETRANSFORMFEEDBACKPROC __glewPauseTransformFeedback = NULL; PFNGLRESUMETRANSFORMFEEDBACKPROC __glewResumeTransformFeedback = NULL; PFNGLBEGINQUERYINDEXEDPROC __glewBeginQueryIndexed = NULL; PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC __glewDrawTransformFeedbackStream = NULL; PFNGLENDQUERYINDEXEDPROC __glewEndQueryIndexed = NULL; PFNGLGETQUERYINDEXEDIVPROC __glewGetQueryIndexediv = NULL; PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC __glewDrawTransformFeedbackInstanced = NULL; PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC __glewDrawTransformFeedbackStreamInstanced = NULL; PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB = NULL; PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB = NULL; PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB = NULL; PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB = NULL; PFNGLBINDBUFFERBASEPROC __glewBindBufferBase = NULL; PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange = NULL; PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC __glewGetActiveUniformBlockName = NULL; PFNGLGETACTIVEUNIFORMBLOCKIVPROC __glewGetActiveUniformBlockiv = NULL; PFNGLGETACTIVEUNIFORMNAMEPROC __glewGetActiveUniformName = NULL; PFNGLGETACTIVEUNIFORMSIVPROC __glewGetActiveUniformsiv = NULL; PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v = NULL; PFNGLGETUNIFORMBLOCKINDEXPROC __glewGetUniformBlockIndex = NULL; PFNGLGETUNIFORMINDICESPROC __glewGetUniformIndices = NULL; PFNGLUNIFORMBLOCKBINDINGPROC __glewUniformBlockBinding = NULL; PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray = NULL; PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays = NULL; PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays = NULL; PFNGLISVERTEXARRAYPROC __glewIsVertexArray = NULL; PFNGLGETVERTEXATTRIBLDVPROC __glewGetVertexAttribLdv = NULL; PFNGLVERTEXATTRIBL1DPROC __glewVertexAttribL1d = NULL; PFNGLVERTEXATTRIBL1DVPROC __glewVertexAttribL1dv = NULL; PFNGLVERTEXATTRIBL2DPROC __glewVertexAttribL2d = NULL; PFNGLVERTEXATTRIBL2DVPROC __glewVertexAttribL2dv = NULL; PFNGLVERTEXATTRIBL3DPROC __glewVertexAttribL3d = NULL; PFNGLVERTEXATTRIBL3DVPROC __glewVertexAttribL3dv = NULL; PFNGLVERTEXATTRIBL4DPROC __glewVertexAttribL4d = NULL; PFNGLVERTEXATTRIBL4DVPROC __glewVertexAttribL4dv = NULL; PFNGLVERTEXATTRIBLPOINTERPROC __glewVertexAttribLPointer = NULL; PFNGLBINDVERTEXBUFFERPROC __glewBindVertexBuffer = NULL; PFNGLVERTEXATTRIBBINDINGPROC __glewVertexAttribBinding = NULL; PFNGLVERTEXATTRIBFORMATPROC __glewVertexAttribFormat = NULL; PFNGLVERTEXATTRIBIFORMATPROC __glewVertexAttribIFormat = NULL; PFNGLVERTEXATTRIBLFORMATPROC __glewVertexAttribLFormat = NULL; PFNGLVERTEXBINDINGDIVISORPROC __glewVertexBindingDivisor = NULL; PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB = NULL; PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB = NULL; PFNGLWEIGHTBVARBPROC __glewWeightbvARB = NULL; PFNGLWEIGHTDVARBPROC __glewWeightdvARB = NULL; PFNGLWEIGHTFVARBPROC __glewWeightfvARB = NULL; PFNGLWEIGHTIVARBPROC __glewWeightivARB = NULL; PFNGLWEIGHTSVARBPROC __glewWeightsvARB = NULL; PFNGLWEIGHTUBVARBPROC __glewWeightubvARB = NULL; PFNGLWEIGHTUIVARBPROC __glewWeightuivARB = NULL; PFNGLWEIGHTUSVARBPROC __glewWeightusvARB = NULL; PFNGLBINDBUFFERARBPROC __glewBindBufferARB = NULL; PFNGLBUFFERDATAARBPROC __glewBufferDataARB = NULL; PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB = NULL; PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB = NULL; PFNGLGENBUFFERSARBPROC __glewGenBuffersARB = NULL; PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB = NULL; PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB = NULL; PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB = NULL; PFNGLISBUFFERARBPROC __glewIsBufferARB = NULL; PFNGLMAPBUFFERARBPROC __glewMapBufferARB = NULL; PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB = NULL; PFNGLBINDPROGRAMARBPROC __glewBindProgramARB = NULL; PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB = NULL; PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB = NULL; PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB = NULL; PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB = NULL; PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB = NULL; PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB = NULL; PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB = NULL; PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB = NULL; PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB = NULL; PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB = NULL; PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB = NULL; PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB = NULL; PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB = NULL; PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB = NULL; PFNGLISPROGRAMARBPROC __glewIsProgramARB = NULL; PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB = NULL; PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB = NULL; PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB = NULL; PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB = NULL; PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB = NULL; PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB = NULL; PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB = NULL; PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB = NULL; PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB = NULL; PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB = NULL; PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB = NULL; PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB = NULL; PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB = NULL; PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB = NULL; PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB = NULL; PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB = NULL; PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB = NULL; PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB = NULL; PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB = NULL; PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB = NULL; PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB = NULL; PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB = NULL; PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB = NULL; PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB = NULL; PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB = NULL; PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB = NULL; PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB = NULL; PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB = NULL; PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB = NULL; PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB = NULL; PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB = NULL; PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB = NULL; PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB = NULL; PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB = NULL; PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB = NULL; PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB = NULL; PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB = NULL; PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB = NULL; PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB = NULL; PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB = NULL; PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB = NULL; PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB = NULL; PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB = NULL; PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB = NULL; PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB = NULL; PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB = NULL; PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB = NULL; PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB = NULL; PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB = NULL; PFNGLCOLORP3UIPROC __glewColorP3ui = NULL; PFNGLCOLORP3UIVPROC __glewColorP3uiv = NULL; PFNGLCOLORP4UIPROC __glewColorP4ui = NULL; PFNGLCOLORP4UIVPROC __glewColorP4uiv = NULL; PFNGLMULTITEXCOORDP1UIPROC __glewMultiTexCoordP1ui = NULL; PFNGLMULTITEXCOORDP1UIVPROC __glewMultiTexCoordP1uiv = NULL; PFNGLMULTITEXCOORDP2UIPROC __glewMultiTexCoordP2ui = NULL; PFNGLMULTITEXCOORDP2UIVPROC __glewMultiTexCoordP2uiv = NULL; PFNGLMULTITEXCOORDP3UIPROC __glewMultiTexCoordP3ui = NULL; PFNGLMULTITEXCOORDP3UIVPROC __glewMultiTexCoordP3uiv = NULL; PFNGLMULTITEXCOORDP4UIPROC __glewMultiTexCoordP4ui = NULL; PFNGLMULTITEXCOORDP4UIVPROC __glewMultiTexCoordP4uiv = NULL; PFNGLNORMALP3UIPROC __glewNormalP3ui = NULL; PFNGLNORMALP3UIVPROC __glewNormalP3uiv = NULL; PFNGLSECONDARYCOLORP3UIPROC __glewSecondaryColorP3ui = NULL; PFNGLSECONDARYCOLORP3UIVPROC __glewSecondaryColorP3uiv = NULL; PFNGLTEXCOORDP1UIPROC __glewTexCoordP1ui = NULL; PFNGLTEXCOORDP1UIVPROC __glewTexCoordP1uiv = NULL; PFNGLTEXCOORDP2UIPROC __glewTexCoordP2ui = NULL; PFNGLTEXCOORDP2UIVPROC __glewTexCoordP2uiv = NULL; PFNGLTEXCOORDP3UIPROC __glewTexCoordP3ui = NULL; PFNGLTEXCOORDP3UIVPROC __glewTexCoordP3uiv = NULL; PFNGLTEXCOORDP4UIPROC __glewTexCoordP4ui = NULL; PFNGLTEXCOORDP4UIVPROC __glewTexCoordP4uiv = NULL; PFNGLVERTEXATTRIBP1UIPROC __glewVertexAttribP1ui = NULL; PFNGLVERTEXATTRIBP1UIVPROC __glewVertexAttribP1uiv = NULL; PFNGLVERTEXATTRIBP2UIPROC __glewVertexAttribP2ui = NULL; PFNGLVERTEXATTRIBP2UIVPROC __glewVertexAttribP2uiv = NULL; PFNGLVERTEXATTRIBP3UIPROC __glewVertexAttribP3ui = NULL; PFNGLVERTEXATTRIBP3UIVPROC __glewVertexAttribP3uiv = NULL; PFNGLVERTEXATTRIBP4UIPROC __glewVertexAttribP4ui = NULL; PFNGLVERTEXATTRIBP4UIVPROC __glewVertexAttribP4uiv = NULL; PFNGLVERTEXP2UIPROC __glewVertexP2ui = NULL; PFNGLVERTEXP2UIVPROC __glewVertexP2uiv = NULL; PFNGLVERTEXP3UIPROC __glewVertexP3ui = NULL; PFNGLVERTEXP3UIVPROC __glewVertexP3uiv = NULL; PFNGLVERTEXP4UIPROC __glewVertexP4ui = NULL; PFNGLVERTEXP4UIVPROC __glewVertexP4uiv = NULL; PFNGLDEPTHRANGEARRAYVPROC __glewDepthRangeArrayv = NULL; PFNGLDEPTHRANGEINDEXEDPROC __glewDepthRangeIndexed = NULL; PFNGLGETDOUBLEI_VPROC __glewGetDoublei_v = NULL; PFNGLGETFLOATI_VPROC __glewGetFloati_v = NULL; PFNGLSCISSORARRAYVPROC __glewScissorArrayv = NULL; PFNGLSCISSORINDEXEDPROC __glewScissorIndexed = NULL; PFNGLSCISSORINDEXEDVPROC __glewScissorIndexedv = NULL; PFNGLVIEWPORTARRAYVPROC __glewViewportArrayv = NULL; PFNGLVIEWPORTINDEXEDFPROC __glewViewportIndexedf = NULL; PFNGLVIEWPORTINDEXEDFVPROC __glewViewportIndexedfv = NULL; PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB = NULL; PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB = NULL; PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB = NULL; PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB = NULL; PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB = NULL; PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB = NULL; PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB = NULL; PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB = NULL; PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB = NULL; PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB = NULL; PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB = NULL; PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB = NULL; PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB = NULL; PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB = NULL; PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB = NULL; PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB = NULL; PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI = NULL; PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI = NULL; PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI = NULL; PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI = NULL; PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI = NULL; PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI = NULL; PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI = NULL; PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI = NULL; PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI = NULL; PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI = NULL; PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI = NULL; PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI = NULL; PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI = NULL; PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI = NULL; PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI = NULL; PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI = NULL; PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI = NULL; PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI = NULL; PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI = NULL; PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI = NULL; PFNGLSAMPLEMAPATIPROC __glewSampleMapATI = NULL; PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI = NULL; PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI = NULL; PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI = NULL; PFNGLPNTRIANGLESFATIPROC __glewPNTrianglesfATI = NULL; PFNGLPNTRIANGLESIATIPROC __glewPNTrianglesiATI = NULL; PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI = NULL; PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI = NULL; PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI = NULL; PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI = NULL; PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI = NULL; PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI = NULL; PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI = NULL; PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI = NULL; PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI = NULL; PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI = NULL; PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI = NULL; PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI = NULL; PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI = NULL; PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI = NULL; PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI = NULL; PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI = NULL; PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI = NULL; PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI = NULL; PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI = NULL; PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI = NULL; PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI = NULL; PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI = NULL; PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI = NULL; PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI = NULL; PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI = NULL; PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI = NULL; PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI = NULL; PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI = NULL; PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI = NULL; PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI = NULL; PFNGLVERTEXSTREAM1DATIPROC __glewVertexStream1dATI = NULL; PFNGLVERTEXSTREAM1DVATIPROC __glewVertexStream1dvATI = NULL; PFNGLVERTEXSTREAM1FATIPROC __glewVertexStream1fATI = NULL; PFNGLVERTEXSTREAM1FVATIPROC __glewVertexStream1fvATI = NULL; PFNGLVERTEXSTREAM1IATIPROC __glewVertexStream1iATI = NULL; PFNGLVERTEXSTREAM1IVATIPROC __glewVertexStream1ivATI = NULL; PFNGLVERTEXSTREAM1SATIPROC __glewVertexStream1sATI = NULL; PFNGLVERTEXSTREAM1SVATIPROC __glewVertexStream1svATI = NULL; PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI = NULL; PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI = NULL; PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI = NULL; PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI = NULL; PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI = NULL; PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI = NULL; PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI = NULL; PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI = NULL; PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI = NULL; PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI = NULL; PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI = NULL; PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI = NULL; PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI = NULL; PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI = NULL; PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI = NULL; PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI = NULL; PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI = NULL; PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI = NULL; PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI = NULL; PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI = NULL; PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI = NULL; PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI = NULL; PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI = NULL; PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI = NULL; PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT = NULL; PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT = NULL; PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT = NULL; PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT = NULL; PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT = NULL; PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT = NULL; PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT = NULL; PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT = NULL; PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT = NULL; PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT = NULL; PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT = NULL; PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT = NULL; PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT = NULL; PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT = NULL; PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT = NULL; PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT = NULL; PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT = NULL; PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT = NULL; PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT = NULL; PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT = NULL; PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT = NULL; PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT = NULL; PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT = NULL; PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT = NULL; PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT = NULL; PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT = NULL; PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT = NULL; PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT = NULL; PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT = NULL; PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT = NULL; PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT = NULL; PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT = NULL; PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT = NULL; PFNGLINSERTEVENTMARKEREXTPROC __glewInsertEventMarkerEXT = NULL; PFNGLPOPGROUPMARKEREXTPROC __glewPopGroupMarkerEXT = NULL; PFNGLPUSHGROUPMARKEREXTPROC __glewPushGroupMarkerEXT = NULL; PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT = NULL; PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT = NULL; PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT = NULL; PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT = NULL; PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT = NULL; PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT = NULL; PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT = NULL; PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT = NULL; PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT = NULL; PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT = NULL; PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT = NULL; PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT = NULL; PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT = NULL; PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT = NULL; PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT = NULL; PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT = NULL; PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT = NULL; PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT = NULL; PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT = NULL; PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT = NULL; PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT = NULL; PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT = NULL; PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT = NULL; PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT = NULL; PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT = NULL; PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT = NULL; PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT = NULL; PFNGLDISABLECLIENTSTATEIEXTPROC __glewDisableClientStateiEXT = NULL; PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC __glewDisableVertexArrayAttribEXT = NULL; PFNGLDISABLEVERTEXARRAYEXTPROC __glewDisableVertexArrayEXT = NULL; PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT = NULL; PFNGLENABLECLIENTSTATEIEXTPROC __glewEnableClientStateiEXT = NULL; PFNGLENABLEVERTEXARRAYATTRIBEXTPROC __glewEnableVertexArrayAttribEXT = NULL; PFNGLENABLEVERTEXARRAYEXTPROC __glewEnableVertexArrayEXT = NULL; PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC __glewFlushMappedNamedBufferRangeEXT = NULL; PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT = NULL; PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT = NULL; PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT = NULL; PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT = NULL; PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT = NULL; PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT = NULL; PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT = NULL; PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT = NULL; PFNGLGETDOUBLEI_VEXTPROC __glewGetDoublei_vEXT = NULL; PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT = NULL; PFNGLGETFLOATI_VEXTPROC __glewGetFloati_vEXT = NULL; PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT = NULL; PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT = NULL; PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT = NULL; PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT = NULL; PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT = NULL; PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT = NULL; PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT = NULL; PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT = NULL; PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT = NULL; PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT = NULL; PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT = NULL; PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT = NULL; PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT = NULL; PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT = NULL; PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT = NULL; PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT = NULL; PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT = NULL; PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT = NULL; PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT = NULL; PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT = NULL; PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT = NULL; PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT = NULL; PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT = NULL; PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT = NULL; PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT = NULL; PFNGLGETPOINTERI_VEXTPROC __glewGetPointeri_vEXT = NULL; PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT = NULL; PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT = NULL; PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT = NULL; PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT = NULL; PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT = NULL; PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT = NULL; PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT = NULL; PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC __glewGetVertexArrayIntegeri_vEXT = NULL; PFNGLGETVERTEXARRAYINTEGERVEXTPROC __glewGetVertexArrayIntegervEXT = NULL; PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC __glewGetVertexArrayPointeri_vEXT = NULL; PFNGLGETVERTEXARRAYPOINTERVEXTPROC __glewGetVertexArrayPointervEXT = NULL; PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT = NULL; PFNGLMAPNAMEDBUFFERRANGEEXTPROC __glewMapNamedBufferRangeEXT = NULL; PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT = NULL; PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT = NULL; PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT = NULL; PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT = NULL; PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT = NULL; PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT = NULL; PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT = NULL; PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT = NULL; PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT = NULL; PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT = NULL; PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT = NULL; PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT = NULL; PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT = NULL; PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT = NULL; PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT = NULL; PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT = NULL; PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT = NULL; PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT = NULL; PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT = NULL; PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT = NULL; PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT = NULL; PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT = NULL; PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT = NULL; PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT = NULL; PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT = NULL; PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT = NULL; PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT = NULL; PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT = NULL; PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT = NULL; PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT = NULL; PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT = NULL; PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT = NULL; PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT = NULL; PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT = NULL; PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT = NULL; PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT = NULL; PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT = NULL; PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT = NULL; PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT = NULL; PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT = NULL; PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT = NULL; PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT = NULL; PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT = NULL; PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT = NULL; PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT = NULL; PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT = NULL; PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC __glewNamedCopyBufferSubDataEXT = NULL; PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT = NULL; PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT = NULL; PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT = NULL; PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT = NULL; PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT = NULL; PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT = NULL; PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT = NULL; PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT = NULL; PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT = NULL; PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT = NULL; PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT = NULL; PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT = NULL; PFNGLPROGRAMUNIFORM1DEXTPROC __glewProgramUniform1dEXT = NULL; PFNGLPROGRAMUNIFORM1DVEXTPROC __glewProgramUniform1dvEXT = NULL; PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT = NULL; PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT = NULL; PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT = NULL; PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT = NULL; PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT = NULL; PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT = NULL; PFNGLPROGRAMUNIFORM2DEXTPROC __glewProgramUniform2dEXT = NULL; PFNGLPROGRAMUNIFORM2DVEXTPROC __glewProgramUniform2dvEXT = NULL; PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT = NULL; PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT = NULL; PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT = NULL; PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT = NULL; PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT = NULL; PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT = NULL; PFNGLPROGRAMUNIFORM3DEXTPROC __glewProgramUniform3dEXT = NULL; PFNGLPROGRAMUNIFORM3DVEXTPROC __glewProgramUniform3dvEXT = NULL; PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT = NULL; PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT = NULL; PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT = NULL; PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT = NULL; PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT = NULL; PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT = NULL; PFNGLPROGRAMUNIFORM4DEXTPROC __glewProgramUniform4dEXT = NULL; PFNGLPROGRAMUNIFORM4DVEXTPROC __glewProgramUniform4dvEXT = NULL; PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT = NULL; PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT = NULL; PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT = NULL; PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT = NULL; PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT = NULL; PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC __glewProgramUniformMatrix2dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC __glewProgramUniformMatrix2x3dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC __glewProgramUniformMatrix2x4dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC __glewProgramUniformMatrix3dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC __glewProgramUniformMatrix3x2dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC __glewProgramUniformMatrix3x4dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC __glewProgramUniformMatrix4dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC __glewProgramUniformMatrix4x2dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC __glewProgramUniformMatrix4x3dvEXT = NULL; PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT = NULL; PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT = NULL; PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT = NULL; PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT = NULL; PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT = NULL; PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT = NULL; PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT = NULL; PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT = NULL; PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT = NULL; PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT = NULL; PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT = NULL; PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT = NULL; PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT = NULL; PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT = NULL; PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT = NULL; PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT = NULL; PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT = NULL; PFNGLVERTEXARRAYCOLOROFFSETEXTPROC __glewVertexArrayColorOffsetEXT = NULL; PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC __glewVertexArrayEdgeFlagOffsetEXT = NULL; PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC __glewVertexArrayFogCoordOffsetEXT = NULL; PFNGLVERTEXARRAYINDEXOFFSETEXTPROC __glewVertexArrayIndexOffsetEXT = NULL; PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC __glewVertexArrayMultiTexCoordOffsetEXT = NULL; PFNGLVERTEXARRAYNORMALOFFSETEXTPROC __glewVertexArrayNormalOffsetEXT = NULL; PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC __glewVertexArraySecondaryColorOffsetEXT = NULL; PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC __glewVertexArrayTexCoordOffsetEXT = NULL; PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVertexAttribIOffsetEXT = NULL; PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT = NULL; PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT = NULL; PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT = NULL; PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT = NULL; PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT = NULL; PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT = NULL; PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT = NULL; PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT = NULL; PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT = NULL; PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT = NULL; PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT = NULL; PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT = NULL; PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT = NULL; PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT = NULL; PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT = NULL; PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT = NULL; PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT = NULL; PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT = NULL; PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT = NULL; PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT = NULL; PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT = NULL; PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT = NULL; PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT = NULL; PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT = NULL; PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT = NULL; PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT = NULL; PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT = NULL; PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT = NULL; PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT = NULL; PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT = NULL; PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT = NULL; PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT = NULL; PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT = NULL; PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT = NULL; PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT = NULL; PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT = NULL; PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT = NULL; PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT = NULL; PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT = NULL; PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT = NULL; PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT = NULL; PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT = NULL; PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT = NULL; PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT = NULL; PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT = NULL; PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT = NULL; PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT = NULL; PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT = NULL; PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT = NULL; PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT = NULL; PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT = NULL; PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT = NULL; PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT = NULL; PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT = NULL; PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT = NULL; PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT = NULL; PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT = NULL; PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT = NULL; PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT = NULL; PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT = NULL; PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT = NULL; PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT = NULL; PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT = NULL; PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT = NULL; PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT = NULL; PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT = NULL; PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT = NULL; PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT = NULL; PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT = NULL; PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT = NULL; PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT = NULL; PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT = NULL; PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT = NULL; PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT = NULL; PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT = NULL; PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT = NULL; PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT = NULL; PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT = NULL; PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT = NULL; PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT = NULL; PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT = NULL; PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT = NULL; PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT = NULL; PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT = NULL; PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT = NULL; PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT = NULL; PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT = NULL; PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT = NULL; PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT = NULL; PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT = NULL; PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT = NULL; PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT = NULL; PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT = NULL; PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT = NULL; PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT = NULL; PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT = NULL; PFNGLHISTOGRAMEXTPROC __glewHistogramEXT = NULL; PFNGLMINMAXEXTPROC __glewMinmaxEXT = NULL; PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT = NULL; PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT = NULL; PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT = NULL; PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT = NULL; PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT = NULL; PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT = NULL; PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT = NULL; PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT = NULL; PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT = NULL; PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT = NULL; PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT = NULL; PFNGLCOLORTABLEEXTPROC __glewColorTableEXT = NULL; PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT = NULL; PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT = NULL; PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT = NULL; PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT = NULL; PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT = NULL; PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT = NULL; PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT = NULL; PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT = NULL; PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT = NULL; PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT = NULL; PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT = NULL; PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT = NULL; PFNGLPROVOKINGVERTEXEXTPROC __glewProvokingVertexEXT = NULL; PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT = NULL; PFNGLENDSCENEEXTPROC __glewEndSceneEXT = NULL; PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT = NULL; PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT = NULL; PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT = NULL; PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT = NULL; PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT = NULL; PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT = NULL; PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT = NULL; PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT = NULL; PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT = NULL; PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT = NULL; PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT = NULL; PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT = NULL; PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT = NULL; PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT = NULL; PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT = NULL; PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT = NULL; PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT = NULL; PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT = NULL; PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT = NULL; PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT = NULL; PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT = NULL; PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT = NULL; PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT = NULL; PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT = NULL; PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT = NULL; PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT = NULL; PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT = NULL; PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT = NULL; PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT = NULL; PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT = NULL; PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT = NULL; PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT = NULL; PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT = NULL; PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT = NULL; PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT = NULL; PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT = NULL; PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT = NULL; PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT = NULL; PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT = NULL; PFNGLISTEXTUREEXTPROC __glewIsTextureEXT = NULL; PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT = NULL; PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT = NULL; PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT = NULL; PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT = NULL; PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT = NULL; PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT = NULL; PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT = NULL; PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT = NULL; PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT = NULL; PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT = NULL; PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT = NULL; PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT = NULL; PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT = NULL; PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT = NULL; PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT = NULL; PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT = NULL; PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT = NULL; PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT = NULL; PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT = NULL; PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT = NULL; PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT = NULL; PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT = NULL; PFNGLVERTEXATTRIBL1DVEXTPROC __glewVertexAttribL1dvEXT = NULL; PFNGLVERTEXATTRIBL2DEXTPROC __glewVertexAttribL2dEXT = NULL; PFNGLVERTEXATTRIBL2DVEXTPROC __glewVertexAttribL2dvEXT = NULL; PFNGLVERTEXATTRIBL3DEXTPROC __glewVertexAttribL3dEXT = NULL; PFNGLVERTEXATTRIBL3DVEXTPROC __glewVertexAttribL3dvEXT = NULL; PFNGLVERTEXATTRIBL4DEXTPROC __glewVertexAttribL4dEXT = NULL; PFNGLVERTEXATTRIBL4DVEXTPROC __glewVertexAttribL4dvEXT = NULL; PFNGLVERTEXATTRIBLPOINTEREXTPROC __glewVertexAttribLPointerEXT = NULL; PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT = NULL; PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT = NULL; PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT = NULL; PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT = NULL; PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT = NULL; PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT = NULL; PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT = NULL; PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT = NULL; PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT = NULL; PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT = NULL; PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT = NULL; PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT = NULL; PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT = NULL; PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT = NULL; PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT = NULL; PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT = NULL; PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT = NULL; PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT = NULL; PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT = NULL; PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT = NULL; PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT = NULL; PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT = NULL; PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT = NULL; PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT = NULL; PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT = NULL; PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT = NULL; PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT = NULL; PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT = NULL; PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT = NULL; PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT = NULL; PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT = NULL; PFNGLSWIZZLEEXTPROC __glewSwizzleEXT = NULL; PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT = NULL; PFNGLVARIANTBVEXTPROC __glewVariantbvEXT = NULL; PFNGLVARIANTDVEXTPROC __glewVariantdvEXT = NULL; PFNGLVARIANTFVEXTPROC __glewVariantfvEXT = NULL; PFNGLVARIANTIVEXTPROC __glewVariantivEXT = NULL; PFNGLVARIANTSVEXTPROC __glewVariantsvEXT = NULL; PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT = NULL; PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT = NULL; PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT = NULL; PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT = NULL; PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT = NULL; PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT = NULL; PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT = NULL; PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT = NULL; PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY = NULL; PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY = NULL; PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP = NULL; PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP = NULL; PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP = NULL; PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP = NULL; PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP = NULL; PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP = NULL; PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM = NULL; PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM = NULL; PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM = NULL; PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM = NULL; PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM = NULL; PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM = NULL; PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM = NULL; PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM = NULL; PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM = NULL; PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM = NULL; PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL = NULL; PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL = NULL; PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL = NULL; PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL = NULL; PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL = NULL; PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL = NULL; PFNGLDEBUGMESSAGECALLBACKPROC __glewDebugMessageCallback = NULL; PFNGLDEBUGMESSAGECONTROLPROC __glewDebugMessageControl = NULL; PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert = NULL; PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog = NULL; PFNGLGETOBJECTLABELPROC __glewGetObjectLabel = NULL; PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel = NULL; PFNGLGETPOINTERVPROC __glewGetPointerv = NULL; PFNGLOBJECTLABELPROC __glewObjectLabel = NULL; PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel = NULL; PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup = NULL; PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled = NULL; PFNGLDELETEBUFFERREGIONPROC __glewDeleteBufferRegion = NULL; PFNGLDRAWBUFFERREGIONPROC __glewDrawBufferRegion = NULL; PFNGLNEWBUFFERREGIONPROC __glewNewBufferRegion = NULL; PFNGLREADBUFFERREGIONPROC __glewReadBufferRegion = NULL; PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA = NULL; PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA = NULL; PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA = NULL; PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA = NULL; PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA = NULL; PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA = NULL; PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA = NULL; PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA = NULL; PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA = NULL; PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA = NULL; PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA = NULL; PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA = NULL; PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA = NULL; PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA = NULL; PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA = NULL; PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA = NULL; PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA = NULL; PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA = NULL; PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA = NULL; PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA = NULL; PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA = NULL; PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA = NULL; PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA = NULL; PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA = NULL; PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA = NULL; PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV = NULL; PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV = NULL; PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV = NULL; PFNGLISIMAGEHANDLERESIDENTNVPROC __glewIsImageHandleResidentNV = NULL; PFNGLISTEXTUREHANDLERESIDENTNVPROC __glewIsTextureHandleResidentNV = NULL; PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC __glewMakeImageHandleNonResidentNV = NULL; PFNGLMAKEIMAGEHANDLERESIDENTNVPROC __glewMakeImageHandleResidentNV = NULL; PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC __glewMakeTextureHandleNonResidentNV = NULL; PFNGLMAKETEXTUREHANDLERESIDENTNVPROC __glewMakeTextureHandleResidentNV = NULL; PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC __glewProgramUniformHandleui64NV = NULL; PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleui64vNV = NULL; PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV = NULL; PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV = NULL; PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV = NULL; PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV = NULL; PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV = NULL; PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV = NULL; PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV = NULL; PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV = NULL; PFNGLEVALMAPSNVPROC __glewEvalMapsNV = NULL; PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV = NULL; PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV = NULL; PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV = NULL; PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV = NULL; PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV = NULL; PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV = NULL; PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV = NULL; PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV = NULL; PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV = NULL; PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV = NULL; PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV = NULL; PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV = NULL; PFNGLFINISHFENCENVPROC __glewFinishFenceNV = NULL; PFNGLGENFENCESNVPROC __glewGenFencesNV = NULL; PFNGLGETFENCEIVNVPROC __glewGetFenceivNV = NULL; PFNGLISFENCENVPROC __glewIsFenceNV = NULL; PFNGLSETFENCENVPROC __glewSetFenceNV = NULL; PFNGLTESTFENCENVPROC __glewTestFenceNV = NULL; PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV = NULL; PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV = NULL; PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV = NULL; PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV = NULL; PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV = NULL; PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV = NULL; PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV = NULL; PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV = NULL; PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV = NULL; PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV = NULL; PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV = NULL; PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV = NULL; PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV = NULL; PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV = NULL; PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV = NULL; PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV = NULL; PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV = NULL; PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV = NULL; PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV = NULL; PFNGLGETUNIFORMI64VNVPROC __glewGetUniformi64vNV = NULL; PFNGLGETUNIFORMUI64VNVPROC __glewGetUniformui64vNV = NULL; PFNGLPROGRAMUNIFORM1I64NVPROC __glewProgramUniform1i64NV = NULL; PFNGLPROGRAMUNIFORM1I64VNVPROC __glewProgramUniform1i64vNV = NULL; PFNGLPROGRAMUNIFORM1UI64NVPROC __glewProgramUniform1ui64NV = NULL; PFNGLPROGRAMUNIFORM1UI64VNVPROC __glewProgramUniform1ui64vNV = NULL; PFNGLPROGRAMUNIFORM2I64NVPROC __glewProgramUniform2i64NV = NULL; PFNGLPROGRAMUNIFORM2I64VNVPROC __glewProgramUniform2i64vNV = NULL; PFNGLPROGRAMUNIFORM2UI64NVPROC __glewProgramUniform2ui64NV = NULL; PFNGLPROGRAMUNIFORM2UI64VNVPROC __glewProgramUniform2ui64vNV = NULL; PFNGLPROGRAMUNIFORM3I64NVPROC __glewProgramUniform3i64NV = NULL; PFNGLPROGRAMUNIFORM3I64VNVPROC __glewProgramUniform3i64vNV = NULL; PFNGLPROGRAMUNIFORM3UI64NVPROC __glewProgramUniform3ui64NV = NULL; PFNGLPROGRAMUNIFORM3UI64VNVPROC __glewProgramUniform3ui64vNV = NULL; PFNGLPROGRAMUNIFORM4I64NVPROC __glewProgramUniform4i64NV = NULL; PFNGLPROGRAMUNIFORM4I64VNVPROC __glewProgramUniform4i64vNV = NULL; PFNGLPROGRAMUNIFORM4UI64NVPROC __glewProgramUniform4ui64NV = NULL; PFNGLPROGRAMUNIFORM4UI64VNVPROC __glewProgramUniform4ui64vNV = NULL; PFNGLUNIFORM1I64NVPROC __glewUniform1i64NV = NULL; PFNGLUNIFORM1I64VNVPROC __glewUniform1i64vNV = NULL; PFNGLUNIFORM1UI64NVPROC __glewUniform1ui64NV = NULL; PFNGLUNIFORM1UI64VNVPROC __glewUniform1ui64vNV = NULL; PFNGLUNIFORM2I64NVPROC __glewUniform2i64NV = NULL; PFNGLUNIFORM2I64VNVPROC __glewUniform2i64vNV = NULL; PFNGLUNIFORM2UI64NVPROC __glewUniform2ui64NV = NULL; PFNGLUNIFORM2UI64VNVPROC __glewUniform2ui64vNV = NULL; PFNGLUNIFORM3I64NVPROC __glewUniform3i64NV = NULL; PFNGLUNIFORM3I64VNVPROC __glewUniform3i64vNV = NULL; PFNGLUNIFORM3UI64NVPROC __glewUniform3ui64NV = NULL; PFNGLUNIFORM3UI64VNVPROC __glewUniform3ui64vNV = NULL; PFNGLUNIFORM4I64NVPROC __glewUniform4i64NV = NULL; PFNGLUNIFORM4I64VNVPROC __glewUniform4i64vNV = NULL; PFNGLUNIFORM4UI64NVPROC __glewUniform4ui64NV = NULL; PFNGLUNIFORM4UI64VNVPROC __glewUniform4ui64vNV = NULL; PFNGLCOLOR3HNVPROC __glewColor3hNV = NULL; PFNGLCOLOR3HVNVPROC __glewColor3hvNV = NULL; PFNGLCOLOR4HNVPROC __glewColor4hNV = NULL; PFNGLCOLOR4HVNVPROC __glewColor4hvNV = NULL; PFNGLFOGCOORDHNVPROC __glewFogCoordhNV = NULL; PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV = NULL; PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV = NULL; PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV = NULL; PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV = NULL; PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV = NULL; PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV = NULL; PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV = NULL; PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV = NULL; PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV = NULL; PFNGLNORMAL3HNVPROC __glewNormal3hNV = NULL; PFNGLNORMAL3HVNVPROC __glewNormal3hvNV = NULL; PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV = NULL; PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV = NULL; PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV = NULL; PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV = NULL; PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV = NULL; PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV = NULL; PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV = NULL; PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV = NULL; PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV = NULL; PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV = NULL; PFNGLVERTEX2HNVPROC __glewVertex2hNV = NULL; PFNGLVERTEX2HVNVPROC __glewVertex2hvNV = NULL; PFNGLVERTEX3HNVPROC __glewVertex3hNV = NULL; PFNGLVERTEX3HVNVPROC __glewVertex3hvNV = NULL; PFNGLVERTEX4HNVPROC __glewVertex4hNV = NULL; PFNGLVERTEX4HVNVPROC __glewVertex4hvNV = NULL; PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV = NULL; PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV = NULL; PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV = NULL; PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV = NULL; PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV = NULL; PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV = NULL; PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV = NULL; PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV = NULL; PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV = NULL; PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV = NULL; PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV = NULL; PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV = NULL; PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV = NULL; PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV = NULL; PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV = NULL; PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV = NULL; PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV = NULL; PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV = NULL; PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV = NULL; PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV = NULL; PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV = NULL; PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV = NULL; PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV = NULL; PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV = NULL; PFNGLCOPYPATHNVPROC __glewCopyPathNV = NULL; PFNGLCOVERFILLPATHINSTANCEDNVPROC __glewCoverFillPathInstancedNV = NULL; PFNGLCOVERFILLPATHNVPROC __glewCoverFillPathNV = NULL; PFNGLCOVERSTROKEPATHINSTANCEDNVPROC __glewCoverStrokePathInstancedNV = NULL; PFNGLCOVERSTROKEPATHNVPROC __glewCoverStrokePathNV = NULL; PFNGLDELETEPATHSNVPROC __glewDeletePathsNV = NULL; PFNGLGENPATHSNVPROC __glewGenPathsNV = NULL; PFNGLGETPATHCOLORGENFVNVPROC __glewGetPathColorGenfvNV = NULL; PFNGLGETPATHCOLORGENIVNVPROC __glewGetPathColorGenivNV = NULL; PFNGLGETPATHCOMMANDSNVPROC __glewGetPathCommandsNV = NULL; PFNGLGETPATHCOORDSNVPROC __glewGetPathCoordsNV = NULL; PFNGLGETPATHDASHARRAYNVPROC __glewGetPathDashArrayNV = NULL; PFNGLGETPATHLENGTHNVPROC __glewGetPathLengthNV = NULL; PFNGLGETPATHMETRICRANGENVPROC __glewGetPathMetricRangeNV = NULL; PFNGLGETPATHMETRICSNVPROC __glewGetPathMetricsNV = NULL; PFNGLGETPATHPARAMETERFVNVPROC __glewGetPathParameterfvNV = NULL; PFNGLGETPATHPARAMETERIVNVPROC __glewGetPathParameterivNV = NULL; PFNGLGETPATHSPACINGNVPROC __glewGetPathSpacingNV = NULL; PFNGLGETPATHTEXGENFVNVPROC __glewGetPathTexGenfvNV = NULL; PFNGLGETPATHTEXGENIVNVPROC __glewGetPathTexGenivNV = NULL; PFNGLINTERPOLATEPATHSNVPROC __glewInterpolatePathsNV = NULL; PFNGLISPATHNVPROC __glewIsPathNV = NULL; PFNGLISPOINTINFILLPATHNVPROC __glewIsPointInFillPathNV = NULL; PFNGLISPOINTINSTROKEPATHNVPROC __glewIsPointInStrokePathNV = NULL; PFNGLPATHCOLORGENNVPROC __glewPathColorGenNV = NULL; PFNGLPATHCOMMANDSNVPROC __glewPathCommandsNV = NULL; PFNGLPATHCOORDSNVPROC __glewPathCoordsNV = NULL; PFNGLPATHCOVERDEPTHFUNCNVPROC __glewPathCoverDepthFuncNV = NULL; PFNGLPATHDASHARRAYNVPROC __glewPathDashArrayNV = NULL; PFNGLPATHFOGGENNVPROC __glewPathFogGenNV = NULL; PFNGLPATHGLYPHRANGENVPROC __glewPathGlyphRangeNV = NULL; PFNGLPATHGLYPHSNVPROC __glewPathGlyphsNV = NULL; PFNGLPATHPARAMETERFNVPROC __glewPathParameterfNV = NULL; PFNGLPATHPARAMETERFVNVPROC __glewPathParameterfvNV = NULL; PFNGLPATHPARAMETERINVPROC __glewPathParameteriNV = NULL; PFNGLPATHPARAMETERIVNVPROC __glewPathParameterivNV = NULL; PFNGLPATHSTENCILDEPTHOFFSETNVPROC __glewPathStencilDepthOffsetNV = NULL; PFNGLPATHSTENCILFUNCNVPROC __glewPathStencilFuncNV = NULL; PFNGLPATHSTRINGNVPROC __glewPathStringNV = NULL; PFNGLPATHSUBCOMMANDSNVPROC __glewPathSubCommandsNV = NULL; PFNGLPATHSUBCOORDSNVPROC __glewPathSubCoordsNV = NULL; PFNGLPATHTEXGENNVPROC __glewPathTexGenNV = NULL; PFNGLPOINTALONGPATHNVPROC __glewPointAlongPathNV = NULL; PFNGLSTENCILFILLPATHINSTANCEDNVPROC __glewStencilFillPathInstancedNV = NULL; PFNGLSTENCILFILLPATHNVPROC __glewStencilFillPathNV = NULL; PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC __glewStencilStrokePathInstancedNV = NULL; PFNGLSTENCILSTROKEPATHNVPROC __glewStencilStrokePathNV = NULL; PFNGLTRANSFORMPATHNVPROC __glewTransformPathNV = NULL; PFNGLWEIGHTPATHSNVPROC __glewWeightPathsNV = NULL; PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV = NULL; PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV = NULL; PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV = NULL; PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV = NULL; PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV = NULL; PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV = NULL; PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV = NULL; PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV = NULL; PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV = NULL; PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV = NULL; PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV = NULL; PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV = NULL; PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV = NULL; PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV = NULL; PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV = NULL; PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV = NULL; PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV = NULL; PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV = NULL; PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV = NULL; PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV = NULL; PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV = NULL; PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV = NULL; PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV = NULL; PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV = NULL; PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV = NULL; PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV = NULL; PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV = NULL; PFNGLGETBUFFERPARAMETERUI64VNVPROC __glewGetBufferParameterui64vNV = NULL; PFNGLGETINTEGERUI64VNVPROC __glewGetIntegerui64vNV = NULL; PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC __glewGetNamedBufferParameterui64vNV = NULL; PFNGLISBUFFERRESIDENTNVPROC __glewIsBufferResidentNV = NULL; PFNGLISNAMEDBUFFERRESIDENTNVPROC __glewIsNamedBufferResidentNV = NULL; PFNGLMAKEBUFFERNONRESIDENTNVPROC __glewMakeBufferNonResidentNV = NULL; PFNGLMAKEBUFFERRESIDENTNVPROC __glewMakeBufferResidentNV = NULL; PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC __glewMakeNamedBufferNonResidentNV = NULL; PFNGLMAKENAMEDBUFFERRESIDENTNVPROC __glewMakeNamedBufferResidentNV = NULL; PFNGLPROGRAMUNIFORMUI64NVPROC __glewProgramUniformui64NV = NULL; PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV = NULL; PFNGLUNIFORMUI64NVPROC __glewUniformui64NV = NULL; PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV = NULL; PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV = NULL; PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV = NULL; PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTexImage3DMultisampleCoverageNV = NULL; PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTextureImage2DMultisampleCoverageNV = NULL; PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC __glewTextureImage2DMultisampleNV = NULL; PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTextureImage3DMultisampleCoverageNV = NULL; PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC __glewTextureImage3DMultisampleNV = NULL; PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV = NULL; PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV = NULL; PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV = NULL; PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV = NULL; PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV = NULL; PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV = NULL; PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV = NULL; PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV = NULL; PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV = NULL; PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV = NULL; PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV = NULL; PFNGLBINDTRANSFORMFEEDBACKNVPROC __glewBindTransformFeedbackNV = NULL; PFNGLDELETETRANSFORMFEEDBACKSNVPROC __glewDeleteTransformFeedbacksNV = NULL; PFNGLDRAWTRANSFORMFEEDBACKNVPROC __glewDrawTransformFeedbackNV = NULL; PFNGLGENTRANSFORMFEEDBACKSNVPROC __glewGenTransformFeedbacksNV = NULL; PFNGLISTRANSFORMFEEDBACKNVPROC __glewIsTransformFeedbackNV = NULL; PFNGLPAUSETRANSFORMFEEDBACKNVPROC __glewPauseTransformFeedbackNV = NULL; PFNGLRESUMETRANSFORMFEEDBACKNVPROC __glewResumeTransformFeedbackNV = NULL; PFNGLVDPAUFININVPROC __glewVDPAUFiniNV = NULL; PFNGLVDPAUGETSURFACEIVNVPROC __glewVDPAUGetSurfaceivNV = NULL; PFNGLVDPAUINITNVPROC __glewVDPAUInitNV = NULL; PFNGLVDPAUISSURFACENVPROC __glewVDPAUIsSurfaceNV = NULL; PFNGLVDPAUMAPSURFACESNVPROC __glewVDPAUMapSurfacesNV = NULL; PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC __glewVDPAURegisterOutputSurfaceNV = NULL; PFNGLVDPAUREGISTERVIDEOSURFACENVPROC __glewVDPAURegisterVideoSurfaceNV = NULL; PFNGLVDPAUSURFACEACCESSNVPROC __glewVDPAUSurfaceAccessNV = NULL; PFNGLVDPAUUNMAPSURFACESNVPROC __glewVDPAUUnmapSurfacesNV = NULL; PFNGLVDPAUUNREGISTERSURFACENVPROC __glewVDPAUUnregisterSurfaceNV = NULL; PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV = NULL; PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV = NULL; PFNGLGETVERTEXATTRIBLI64VNVPROC __glewGetVertexAttribLi64vNV = NULL; PFNGLGETVERTEXATTRIBLUI64VNVPROC __glewGetVertexAttribLui64vNV = NULL; PFNGLVERTEXATTRIBL1I64NVPROC __glewVertexAttribL1i64NV = NULL; PFNGLVERTEXATTRIBL1I64VNVPROC __glewVertexAttribL1i64vNV = NULL; PFNGLVERTEXATTRIBL1UI64NVPROC __glewVertexAttribL1ui64NV = NULL; PFNGLVERTEXATTRIBL1UI64VNVPROC __glewVertexAttribL1ui64vNV = NULL; PFNGLVERTEXATTRIBL2I64NVPROC __glewVertexAttribL2i64NV = NULL; PFNGLVERTEXATTRIBL2I64VNVPROC __glewVertexAttribL2i64vNV = NULL; PFNGLVERTEXATTRIBL2UI64NVPROC __glewVertexAttribL2ui64NV = NULL; PFNGLVERTEXATTRIBL2UI64VNVPROC __glewVertexAttribL2ui64vNV = NULL; PFNGLVERTEXATTRIBL3I64NVPROC __glewVertexAttribL3i64NV = NULL; PFNGLVERTEXATTRIBL3I64VNVPROC __glewVertexAttribL3i64vNV = NULL; PFNGLVERTEXATTRIBL3UI64NVPROC __glewVertexAttribL3ui64NV = NULL; PFNGLVERTEXATTRIBL3UI64VNVPROC __glewVertexAttribL3ui64vNV = NULL; PFNGLVERTEXATTRIBL4I64NVPROC __glewVertexAttribL4i64NV = NULL; PFNGLVERTEXATTRIBL4I64VNVPROC __glewVertexAttribL4i64vNV = NULL; PFNGLVERTEXATTRIBL4UI64NVPROC __glewVertexAttribL4ui64NV = NULL; PFNGLVERTEXATTRIBL4UI64VNVPROC __glewVertexAttribL4ui64vNV = NULL; PFNGLVERTEXATTRIBLFORMATNVPROC __glewVertexAttribLFormatNV = NULL; PFNGLBUFFERADDRESSRANGENVPROC __glewBufferAddressRangeNV = NULL; PFNGLCOLORFORMATNVPROC __glewColorFormatNV = NULL; PFNGLEDGEFLAGFORMATNVPROC __glewEdgeFlagFormatNV = NULL; PFNGLFOGCOORDFORMATNVPROC __glewFogCoordFormatNV = NULL; PFNGLGETINTEGERUI64I_VNVPROC __glewGetIntegerui64i_vNV = NULL; PFNGLINDEXFORMATNVPROC __glewIndexFormatNV = NULL; PFNGLNORMALFORMATNVPROC __glewNormalFormatNV = NULL; PFNGLSECONDARYCOLORFORMATNVPROC __glewSecondaryColorFormatNV = NULL; PFNGLTEXCOORDFORMATNVPROC __glewTexCoordFormatNV = NULL; PFNGLVERTEXATTRIBFORMATNVPROC __glewVertexAttribFormatNV = NULL; PFNGLVERTEXATTRIBIFORMATNVPROC __glewVertexAttribIFormatNV = NULL; PFNGLVERTEXFORMATNVPROC __glewVertexFormatNV = NULL; PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV = NULL; PFNGLBINDPROGRAMNVPROC __glewBindProgramNV = NULL; PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV = NULL; PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV = NULL; PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV = NULL; PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV = NULL; PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV = NULL; PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV = NULL; PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV = NULL; PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV = NULL; PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV = NULL; PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV = NULL; PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV = NULL; PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV = NULL; PFNGLISPROGRAMNVPROC __glewIsProgramNV = NULL; PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV = NULL; PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV = NULL; PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV = NULL; PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV = NULL; PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV = NULL; PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV = NULL; PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV = NULL; PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV = NULL; PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV = NULL; PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV = NULL; PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV = NULL; PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV = NULL; PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV = NULL; PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV = NULL; PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV = NULL; PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV = NULL; PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV = NULL; PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV = NULL; PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV = NULL; PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV = NULL; PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV = NULL; PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV = NULL; PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV = NULL; PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV = NULL; PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV = NULL; PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV = NULL; PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV = NULL; PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV = NULL; PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV = NULL; PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV = NULL; PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV = NULL; PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV = NULL; PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV = NULL; PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV = NULL; PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV = NULL; PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV = NULL; PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV = NULL; PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV = NULL; PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV = NULL; PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV = NULL; PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV = NULL; PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV = NULL; PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV = NULL; PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV = NULL; PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV = NULL; PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV = NULL; PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV = NULL; PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV = NULL; PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV = NULL; PFNGLBEGINVIDEOCAPTURENVPROC __glewBeginVideoCaptureNV = NULL; PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC __glewBindVideoCaptureStreamBufferNV = NULL; PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC __glewBindVideoCaptureStreamTextureNV = NULL; PFNGLENDVIDEOCAPTURENVPROC __glewEndVideoCaptureNV = NULL; PFNGLGETVIDEOCAPTURESTREAMDVNVPROC __glewGetVideoCaptureStreamdvNV = NULL; PFNGLGETVIDEOCAPTURESTREAMFVNVPROC __glewGetVideoCaptureStreamfvNV = NULL; PFNGLGETVIDEOCAPTURESTREAMIVNVPROC __glewGetVideoCaptureStreamivNV = NULL; PFNGLGETVIDEOCAPTUREIVNVPROC __glewGetVideoCaptureivNV = NULL; PFNGLVIDEOCAPTURENVPROC __glewVideoCaptureNV = NULL; PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV = NULL; PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV = NULL; PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV = NULL; PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES = NULL; PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES = NULL; PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES = NULL; PFNGLFRUSTUMFOESPROC __glewFrustumfOES = NULL; PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES = NULL; PFNGLORTHOFOESPROC __glewOrthofOES = NULL; PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL = NULL; PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL = NULL; PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL = NULL; PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS = NULL; PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS = NULL; PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS = NULL; PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS = NULL; PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS = NULL; PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS = NULL; PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS = NULL; PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS = NULL; PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS = NULL; PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS = NULL; PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS = NULL; PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS = NULL; PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX = NULL; PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX = NULL; PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX = NULL; PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX = NULL; PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX = NULL; PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX = NULL; PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX = NULL; PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX = NULL; PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX = NULL; PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX = NULL; PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX = NULL; PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX = NULL; PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX = NULL; PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX = NULL; PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX = NULL; PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX = NULL; PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX = NULL; PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX = NULL; PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX = NULL; PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX = NULL; PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX = NULL; PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX = NULL; PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX = NULL; PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX = NULL; PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX = NULL; PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX = NULL; PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX = NULL; PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX = NULL; PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX = NULL; PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX = NULL; PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX = NULL; PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX = NULL; PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX = NULL; PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI = NULL; PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI = NULL; PFNGLCOLORTABLESGIPROC __glewColorTableSGI = NULL; PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI = NULL; PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI = NULL; PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI = NULL; PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI = NULL; PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX = NULL; PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN = NULL; PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN = NULL; PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN = NULL; PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN = NULL; PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN = NULL; PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN = NULL; PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN = NULL; PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN = NULL; PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN = NULL; PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN = NULL; PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN = NULL; PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN = NULL; PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN = NULL; PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN = NULL; PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN = NULL; PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN = NULL; PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN = NULL; PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN = NULL; PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN = NULL; PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN = NULL; PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN = NULL; PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN = NULL; PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN = NULL; PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN = NULL; PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN = NULL; PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN = NULL; PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN = NULL; PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN = NULL; PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN = NULL; PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN = NULL; PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN = NULL; PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN = NULL; PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN = NULL; PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN = NULL; PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN = NULL; PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN = NULL; PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN = NULL; PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN = NULL; PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN = NULL; PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN = NULL; PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN = NULL; PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN = NULL; #endif /* !WIN32 || !GLEW_MX */ #if !defined(GLEW_MX) GLboolean __GLEW_VERSION_1_1 = GL_FALSE; GLboolean __GLEW_VERSION_1_2 = GL_FALSE; GLboolean __GLEW_VERSION_1_2_1 = GL_FALSE; GLboolean __GLEW_VERSION_1_3 = GL_FALSE; GLboolean __GLEW_VERSION_1_4 = GL_FALSE; GLboolean __GLEW_VERSION_1_5 = GL_FALSE; GLboolean __GLEW_VERSION_2_0 = GL_FALSE; GLboolean __GLEW_VERSION_2_1 = GL_FALSE; GLboolean __GLEW_VERSION_3_0 = GL_FALSE; GLboolean __GLEW_VERSION_3_1 = GL_FALSE; GLboolean __GLEW_VERSION_3_2 = GL_FALSE; GLboolean __GLEW_VERSION_3_3 = GL_FALSE; GLboolean __GLEW_VERSION_4_0 = GL_FALSE; GLboolean __GLEW_VERSION_4_1 = GL_FALSE; GLboolean __GLEW_VERSION_4_2 = GL_FALSE; GLboolean __GLEW_VERSION_4_3 = GL_FALSE; GLboolean __GLEW_3DFX_multisample = GL_FALSE; GLboolean __GLEW_3DFX_tbuffer = GL_FALSE; GLboolean __GLEW_3DFX_texture_compression_FXT1 = GL_FALSE; GLboolean __GLEW_AMD_blend_minmax_factor = GL_FALSE; GLboolean __GLEW_AMD_conservative_depth = GL_FALSE; GLboolean __GLEW_AMD_debug_output = GL_FALSE; GLboolean __GLEW_AMD_depth_clamp_separate = GL_FALSE; GLboolean __GLEW_AMD_draw_buffers_blend = GL_FALSE; GLboolean __GLEW_AMD_multi_draw_indirect = GL_FALSE; GLboolean __GLEW_AMD_name_gen_delete = GL_FALSE; GLboolean __GLEW_AMD_performance_monitor = GL_FALSE; GLboolean __GLEW_AMD_pinned_memory = GL_FALSE; GLboolean __GLEW_AMD_query_buffer_object = GL_FALSE; GLboolean __GLEW_AMD_sample_positions = GL_FALSE; GLboolean __GLEW_AMD_seamless_cubemap_per_texture = GL_FALSE; GLboolean __GLEW_AMD_shader_stencil_export = GL_FALSE; GLboolean __GLEW_AMD_stencil_operation_extended = GL_FALSE; GLboolean __GLEW_AMD_texture_texture4 = GL_FALSE; GLboolean __GLEW_AMD_transform_feedback3_lines_triangles = GL_FALSE; GLboolean __GLEW_AMD_vertex_shader_layer = GL_FALSE; GLboolean __GLEW_AMD_vertex_shader_tessellator = GL_FALSE; GLboolean __GLEW_AMD_vertex_shader_viewport_index = GL_FALSE; GLboolean __GLEW_APPLE_aux_depth_stencil = GL_FALSE; GLboolean __GLEW_APPLE_client_storage = GL_FALSE; GLboolean __GLEW_APPLE_element_array = GL_FALSE; GLboolean __GLEW_APPLE_fence = GL_FALSE; GLboolean __GLEW_APPLE_float_pixels = GL_FALSE; GLboolean __GLEW_APPLE_flush_buffer_range = GL_FALSE; GLboolean __GLEW_APPLE_object_purgeable = GL_FALSE; GLboolean __GLEW_APPLE_pixel_buffer = GL_FALSE; GLboolean __GLEW_APPLE_rgb_422 = GL_FALSE; GLboolean __GLEW_APPLE_row_bytes = GL_FALSE; GLboolean __GLEW_APPLE_specular_vector = GL_FALSE; GLboolean __GLEW_APPLE_texture_range = GL_FALSE; GLboolean __GLEW_APPLE_transform_hint = GL_FALSE; GLboolean __GLEW_APPLE_vertex_array_object = GL_FALSE; GLboolean __GLEW_APPLE_vertex_array_range = GL_FALSE; GLboolean __GLEW_APPLE_vertex_program_evaluators = GL_FALSE; GLboolean __GLEW_APPLE_ycbcr_422 = GL_FALSE; GLboolean __GLEW_ARB_ES2_compatibility = GL_FALSE; GLboolean __GLEW_ARB_ES3_compatibility = GL_FALSE; GLboolean __GLEW_ARB_arrays_of_arrays = GL_FALSE; GLboolean __GLEW_ARB_base_instance = GL_FALSE; GLboolean __GLEW_ARB_blend_func_extended = GL_FALSE; GLboolean __GLEW_ARB_cl_event = GL_FALSE; GLboolean __GLEW_ARB_clear_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_color_buffer_float = GL_FALSE; GLboolean __GLEW_ARB_compatibility = GL_FALSE; GLboolean __GLEW_ARB_compressed_texture_pixel_storage = GL_FALSE; GLboolean __GLEW_ARB_compute_shader = GL_FALSE; GLboolean __GLEW_ARB_conservative_depth = GL_FALSE; GLboolean __GLEW_ARB_copy_buffer = GL_FALSE; GLboolean __GLEW_ARB_copy_image = GL_FALSE; GLboolean __GLEW_ARB_debug_output = GL_FALSE; GLboolean __GLEW_ARB_depth_buffer_float = GL_FALSE; GLboolean __GLEW_ARB_depth_clamp = GL_FALSE; GLboolean __GLEW_ARB_depth_texture = GL_FALSE; GLboolean __GLEW_ARB_draw_buffers = GL_FALSE; GLboolean __GLEW_ARB_draw_buffers_blend = GL_FALSE; GLboolean __GLEW_ARB_draw_elements_base_vertex = GL_FALSE; GLboolean __GLEW_ARB_draw_indirect = GL_FALSE; GLboolean __GLEW_ARB_draw_instanced = GL_FALSE; GLboolean __GLEW_ARB_explicit_attrib_location = GL_FALSE; GLboolean __GLEW_ARB_explicit_uniform_location = GL_FALSE; GLboolean __GLEW_ARB_fragment_coord_conventions = GL_FALSE; GLboolean __GLEW_ARB_fragment_layer_viewport = GL_FALSE; GLboolean __GLEW_ARB_fragment_program = GL_FALSE; GLboolean __GLEW_ARB_fragment_program_shadow = GL_FALSE; GLboolean __GLEW_ARB_fragment_shader = GL_FALSE; GLboolean __GLEW_ARB_framebuffer_no_attachments = GL_FALSE; GLboolean __GLEW_ARB_framebuffer_object = GL_FALSE; GLboolean __GLEW_ARB_framebuffer_sRGB = GL_FALSE; GLboolean __GLEW_ARB_geometry_shader4 = GL_FALSE; GLboolean __GLEW_ARB_get_program_binary = GL_FALSE; GLboolean __GLEW_ARB_gpu_shader5 = GL_FALSE; GLboolean __GLEW_ARB_gpu_shader_fp64 = GL_FALSE; GLboolean __GLEW_ARB_half_float_pixel = GL_FALSE; GLboolean __GLEW_ARB_half_float_vertex = GL_FALSE; GLboolean __GLEW_ARB_imaging = GL_FALSE; GLboolean __GLEW_ARB_instanced_arrays = GL_FALSE; GLboolean __GLEW_ARB_internalformat_query = GL_FALSE; GLboolean __GLEW_ARB_internalformat_query2 = GL_FALSE; GLboolean __GLEW_ARB_invalidate_subdata = GL_FALSE; GLboolean __GLEW_ARB_map_buffer_alignment = GL_FALSE; GLboolean __GLEW_ARB_map_buffer_range = GL_FALSE; GLboolean __GLEW_ARB_matrix_palette = GL_FALSE; GLboolean __GLEW_ARB_multi_draw_indirect = GL_FALSE; GLboolean __GLEW_ARB_multisample = GL_FALSE; GLboolean __GLEW_ARB_multitexture = GL_FALSE; GLboolean __GLEW_ARB_occlusion_query = GL_FALSE; GLboolean __GLEW_ARB_occlusion_query2 = GL_FALSE; GLboolean __GLEW_ARB_pixel_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_point_parameters = GL_FALSE; GLboolean __GLEW_ARB_point_sprite = GL_FALSE; GLboolean __GLEW_ARB_program_interface_query = GL_FALSE; GLboolean __GLEW_ARB_provoking_vertex = GL_FALSE; GLboolean __GLEW_ARB_robust_buffer_access_behavior = GL_FALSE; GLboolean __GLEW_ARB_robustness = GL_FALSE; GLboolean __GLEW_ARB_robustness_application_isolation = GL_FALSE; GLboolean __GLEW_ARB_robustness_share_group_isolation = GL_FALSE; GLboolean __GLEW_ARB_sample_shading = GL_FALSE; GLboolean __GLEW_ARB_sampler_objects = GL_FALSE; GLboolean __GLEW_ARB_seamless_cube_map = GL_FALSE; GLboolean __GLEW_ARB_separate_shader_objects = GL_FALSE; GLboolean __GLEW_ARB_shader_atomic_counters = GL_FALSE; GLboolean __GLEW_ARB_shader_bit_encoding = GL_FALSE; GLboolean __GLEW_ARB_shader_image_load_store = GL_FALSE; GLboolean __GLEW_ARB_shader_image_size = GL_FALSE; GLboolean __GLEW_ARB_shader_objects = GL_FALSE; GLboolean __GLEW_ARB_shader_precision = GL_FALSE; GLboolean __GLEW_ARB_shader_stencil_export = GL_FALSE; GLboolean __GLEW_ARB_shader_storage_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_shader_subroutine = GL_FALSE; GLboolean __GLEW_ARB_shader_texture_lod = GL_FALSE; GLboolean __GLEW_ARB_shading_language_100 = GL_FALSE; GLboolean __GLEW_ARB_shading_language_420pack = GL_FALSE; GLboolean __GLEW_ARB_shading_language_include = GL_FALSE; GLboolean __GLEW_ARB_shading_language_packing = GL_FALSE; GLboolean __GLEW_ARB_shadow = GL_FALSE; GLboolean __GLEW_ARB_shadow_ambient = GL_FALSE; GLboolean __GLEW_ARB_stencil_texturing = GL_FALSE; GLboolean __GLEW_ARB_sync = GL_FALSE; GLboolean __GLEW_ARB_tessellation_shader = GL_FALSE; GLboolean __GLEW_ARB_texture_border_clamp = GL_FALSE; GLboolean __GLEW_ARB_texture_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_texture_buffer_object_rgb32 = GL_FALSE; GLboolean __GLEW_ARB_texture_buffer_range = GL_FALSE; GLboolean __GLEW_ARB_texture_compression = GL_FALSE; GLboolean __GLEW_ARB_texture_compression_bptc = GL_FALSE; GLboolean __GLEW_ARB_texture_compression_rgtc = GL_FALSE; GLboolean __GLEW_ARB_texture_cube_map = GL_FALSE; GLboolean __GLEW_ARB_texture_cube_map_array = GL_FALSE; GLboolean __GLEW_ARB_texture_env_add = GL_FALSE; GLboolean __GLEW_ARB_texture_env_combine = GL_FALSE; GLboolean __GLEW_ARB_texture_env_crossbar = GL_FALSE; GLboolean __GLEW_ARB_texture_env_dot3 = GL_FALSE; GLboolean __GLEW_ARB_texture_float = GL_FALSE; GLboolean __GLEW_ARB_texture_gather = GL_FALSE; GLboolean __GLEW_ARB_texture_mirrored_repeat = GL_FALSE; GLboolean __GLEW_ARB_texture_multisample = GL_FALSE; GLboolean __GLEW_ARB_texture_non_power_of_two = GL_FALSE; GLboolean __GLEW_ARB_texture_query_levels = GL_FALSE; GLboolean __GLEW_ARB_texture_query_lod = GL_FALSE; GLboolean __GLEW_ARB_texture_rectangle = GL_FALSE; GLboolean __GLEW_ARB_texture_rg = GL_FALSE; GLboolean __GLEW_ARB_texture_rgb10_a2ui = GL_FALSE; GLboolean __GLEW_ARB_texture_storage = GL_FALSE; GLboolean __GLEW_ARB_texture_storage_multisample = GL_FALSE; GLboolean __GLEW_ARB_texture_swizzle = GL_FALSE; GLboolean __GLEW_ARB_texture_view = GL_FALSE; GLboolean __GLEW_ARB_timer_query = GL_FALSE; GLboolean __GLEW_ARB_transform_feedback2 = GL_FALSE; GLboolean __GLEW_ARB_transform_feedback3 = GL_FALSE; GLboolean __GLEW_ARB_transform_feedback_instanced = GL_FALSE; GLboolean __GLEW_ARB_transpose_matrix = GL_FALSE; GLboolean __GLEW_ARB_uniform_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_vertex_array_bgra = GL_FALSE; GLboolean __GLEW_ARB_vertex_array_object = GL_FALSE; GLboolean __GLEW_ARB_vertex_attrib_64bit = GL_FALSE; GLboolean __GLEW_ARB_vertex_attrib_binding = GL_FALSE; GLboolean __GLEW_ARB_vertex_blend = GL_FALSE; GLboolean __GLEW_ARB_vertex_buffer_object = GL_FALSE; GLboolean __GLEW_ARB_vertex_program = GL_FALSE; GLboolean __GLEW_ARB_vertex_shader = GL_FALSE; GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev = GL_FALSE; GLboolean __GLEW_ARB_viewport_array = GL_FALSE; GLboolean __GLEW_ARB_window_pos = GL_FALSE; GLboolean __GLEW_ATIX_point_sprites = GL_FALSE; GLboolean __GLEW_ATIX_texture_env_combine3 = GL_FALSE; GLboolean __GLEW_ATIX_texture_env_route = GL_FALSE; GLboolean __GLEW_ATIX_vertex_shader_output_point_size = GL_FALSE; GLboolean __GLEW_ATI_draw_buffers = GL_FALSE; GLboolean __GLEW_ATI_element_array = GL_FALSE; GLboolean __GLEW_ATI_envmap_bumpmap = GL_FALSE; GLboolean __GLEW_ATI_fragment_shader = GL_FALSE; GLboolean __GLEW_ATI_map_object_buffer = GL_FALSE; GLboolean __GLEW_ATI_meminfo = GL_FALSE; GLboolean __GLEW_ATI_pn_triangles = GL_FALSE; GLboolean __GLEW_ATI_separate_stencil = GL_FALSE; GLboolean __GLEW_ATI_shader_texture_lod = GL_FALSE; GLboolean __GLEW_ATI_text_fragment_shader = GL_FALSE; GLboolean __GLEW_ATI_texture_compression_3dc = GL_FALSE; GLboolean __GLEW_ATI_texture_env_combine3 = GL_FALSE; GLboolean __GLEW_ATI_texture_float = GL_FALSE; GLboolean __GLEW_ATI_texture_mirror_once = GL_FALSE; GLboolean __GLEW_ATI_vertex_array_object = GL_FALSE; GLboolean __GLEW_ATI_vertex_attrib_array_object = GL_FALSE; GLboolean __GLEW_ATI_vertex_streams = GL_FALSE; GLboolean __GLEW_EXT_422_pixels = GL_FALSE; GLboolean __GLEW_EXT_Cg_shader = GL_FALSE; GLboolean __GLEW_EXT_abgr = GL_FALSE; GLboolean __GLEW_EXT_bgra = GL_FALSE; GLboolean __GLEW_EXT_bindable_uniform = GL_FALSE; GLboolean __GLEW_EXT_blend_color = GL_FALSE; GLboolean __GLEW_EXT_blend_equation_separate = GL_FALSE; GLboolean __GLEW_EXT_blend_func_separate = GL_FALSE; GLboolean __GLEW_EXT_blend_logic_op = GL_FALSE; GLboolean __GLEW_EXT_blend_minmax = GL_FALSE; GLboolean __GLEW_EXT_blend_subtract = GL_FALSE; GLboolean __GLEW_EXT_clip_volume_hint = GL_FALSE; GLboolean __GLEW_EXT_cmyka = GL_FALSE; GLboolean __GLEW_EXT_color_subtable = GL_FALSE; GLboolean __GLEW_EXT_compiled_vertex_array = GL_FALSE; GLboolean __GLEW_EXT_convolution = GL_FALSE; GLboolean __GLEW_EXT_coordinate_frame = GL_FALSE; GLboolean __GLEW_EXT_copy_texture = GL_FALSE; GLboolean __GLEW_EXT_cull_vertex = GL_FALSE; GLboolean __GLEW_EXT_debug_marker = GL_FALSE; GLboolean __GLEW_EXT_depth_bounds_test = GL_FALSE; GLboolean __GLEW_EXT_direct_state_access = GL_FALSE; GLboolean __GLEW_EXT_draw_buffers2 = GL_FALSE; GLboolean __GLEW_EXT_draw_instanced = GL_FALSE; GLboolean __GLEW_EXT_draw_range_elements = GL_FALSE; GLboolean __GLEW_EXT_fog_coord = GL_FALSE; GLboolean __GLEW_EXT_fragment_lighting = GL_FALSE; GLboolean __GLEW_EXT_framebuffer_blit = GL_FALSE; GLboolean __GLEW_EXT_framebuffer_multisample = GL_FALSE; GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled = GL_FALSE; GLboolean __GLEW_EXT_framebuffer_object = GL_FALSE; GLboolean __GLEW_EXT_framebuffer_sRGB = GL_FALSE; GLboolean __GLEW_EXT_geometry_shader4 = GL_FALSE; GLboolean __GLEW_EXT_gpu_program_parameters = GL_FALSE; GLboolean __GLEW_EXT_gpu_shader4 = GL_FALSE; GLboolean __GLEW_EXT_histogram = GL_FALSE; GLboolean __GLEW_EXT_index_array_formats = GL_FALSE; GLboolean __GLEW_EXT_index_func = GL_FALSE; GLboolean __GLEW_EXT_index_material = GL_FALSE; GLboolean __GLEW_EXT_index_texture = GL_FALSE; GLboolean __GLEW_EXT_light_texture = GL_FALSE; GLboolean __GLEW_EXT_misc_attribute = GL_FALSE; GLboolean __GLEW_EXT_multi_draw_arrays = GL_FALSE; GLboolean __GLEW_EXT_multisample = GL_FALSE; GLboolean __GLEW_EXT_packed_depth_stencil = GL_FALSE; GLboolean __GLEW_EXT_packed_float = GL_FALSE; GLboolean __GLEW_EXT_packed_pixels = GL_FALSE; GLboolean __GLEW_EXT_paletted_texture = GL_FALSE; GLboolean __GLEW_EXT_pixel_buffer_object = GL_FALSE; GLboolean __GLEW_EXT_pixel_transform = GL_FALSE; GLboolean __GLEW_EXT_pixel_transform_color_table = GL_FALSE; GLboolean __GLEW_EXT_point_parameters = GL_FALSE; GLboolean __GLEW_EXT_polygon_offset = GL_FALSE; GLboolean __GLEW_EXT_provoking_vertex = GL_FALSE; GLboolean __GLEW_EXT_rescale_normal = GL_FALSE; GLboolean __GLEW_EXT_scene_marker = GL_FALSE; GLboolean __GLEW_EXT_secondary_color = GL_FALSE; GLboolean __GLEW_EXT_separate_shader_objects = GL_FALSE; GLboolean __GLEW_EXT_separate_specular_color = GL_FALSE; GLboolean __GLEW_EXT_shader_image_load_store = GL_FALSE; GLboolean __GLEW_EXT_shadow_funcs = GL_FALSE; GLboolean __GLEW_EXT_shared_texture_palette = GL_FALSE; GLboolean __GLEW_EXT_stencil_clear_tag = GL_FALSE; GLboolean __GLEW_EXT_stencil_two_side = GL_FALSE; GLboolean __GLEW_EXT_stencil_wrap = GL_FALSE; GLboolean __GLEW_EXT_subtexture = GL_FALSE; GLboolean __GLEW_EXT_texture = GL_FALSE; GLboolean __GLEW_EXT_texture3D = GL_FALSE; GLboolean __GLEW_EXT_texture_array = GL_FALSE; GLboolean __GLEW_EXT_texture_buffer_object = GL_FALSE; GLboolean __GLEW_EXT_texture_compression_dxt1 = GL_FALSE; GLboolean __GLEW_EXT_texture_compression_latc = GL_FALSE; GLboolean __GLEW_EXT_texture_compression_rgtc = GL_FALSE; GLboolean __GLEW_EXT_texture_compression_s3tc = GL_FALSE; GLboolean __GLEW_EXT_texture_cube_map = GL_FALSE; GLboolean __GLEW_EXT_texture_edge_clamp = GL_FALSE; GLboolean __GLEW_EXT_texture_env = GL_FALSE; GLboolean __GLEW_EXT_texture_env_add = GL_FALSE; GLboolean __GLEW_EXT_texture_env_combine = GL_FALSE; GLboolean __GLEW_EXT_texture_env_dot3 = GL_FALSE; GLboolean __GLEW_EXT_texture_filter_anisotropic = GL_FALSE; GLboolean __GLEW_EXT_texture_integer = GL_FALSE; GLboolean __GLEW_EXT_texture_lod_bias = GL_FALSE; GLboolean __GLEW_EXT_texture_mirror_clamp = GL_FALSE; GLboolean __GLEW_EXT_texture_object = GL_FALSE; GLboolean __GLEW_EXT_texture_perturb_normal = GL_FALSE; GLboolean __GLEW_EXT_texture_rectangle = GL_FALSE; GLboolean __GLEW_EXT_texture_sRGB = GL_FALSE; GLboolean __GLEW_EXT_texture_sRGB_decode = GL_FALSE; GLboolean __GLEW_EXT_texture_shared_exponent = GL_FALSE; GLboolean __GLEW_EXT_texture_snorm = GL_FALSE; GLboolean __GLEW_EXT_texture_swizzle = GL_FALSE; GLboolean __GLEW_EXT_timer_query = GL_FALSE; GLboolean __GLEW_EXT_transform_feedback = GL_FALSE; GLboolean __GLEW_EXT_vertex_array = GL_FALSE; GLboolean __GLEW_EXT_vertex_array_bgra = GL_FALSE; GLboolean __GLEW_EXT_vertex_attrib_64bit = GL_FALSE; GLboolean __GLEW_EXT_vertex_shader = GL_FALSE; GLboolean __GLEW_EXT_vertex_weighting = GL_FALSE; GLboolean __GLEW_EXT_x11_sync_object = GL_FALSE; GLboolean __GLEW_GREMEDY_frame_terminator = GL_FALSE; GLboolean __GLEW_GREMEDY_string_marker = GL_FALSE; GLboolean __GLEW_HP_convolution_border_modes = GL_FALSE; GLboolean __GLEW_HP_image_transform = GL_FALSE; GLboolean __GLEW_HP_occlusion_test = GL_FALSE; GLboolean __GLEW_HP_texture_lighting = GL_FALSE; GLboolean __GLEW_IBM_cull_vertex = GL_FALSE; GLboolean __GLEW_IBM_multimode_draw_arrays = GL_FALSE; GLboolean __GLEW_IBM_rasterpos_clip = GL_FALSE; GLboolean __GLEW_IBM_static_data = GL_FALSE; GLboolean __GLEW_IBM_texture_mirrored_repeat = GL_FALSE; GLboolean __GLEW_IBM_vertex_array_lists = GL_FALSE; GLboolean __GLEW_INGR_color_clamp = GL_FALSE; GLboolean __GLEW_INGR_interlace_read = GL_FALSE; GLboolean __GLEW_INTEL_parallel_arrays = GL_FALSE; GLboolean __GLEW_INTEL_texture_scissor = GL_FALSE; GLboolean __GLEW_KHR_debug = GL_FALSE; GLboolean __GLEW_KHR_texture_compression_astc_ldr = GL_FALSE; GLboolean __GLEW_KTX_buffer_region = GL_FALSE; GLboolean __GLEW_MESAX_texture_stack = GL_FALSE; GLboolean __GLEW_MESA_pack_invert = GL_FALSE; GLboolean __GLEW_MESA_resize_buffers = GL_FALSE; GLboolean __GLEW_MESA_window_pos = GL_FALSE; GLboolean __GLEW_MESA_ycbcr_texture = GL_FALSE; GLboolean __GLEW_NVX_gpu_memory_info = GL_FALSE; GLboolean __GLEW_NV_bindless_texture = GL_FALSE; GLboolean __GLEW_NV_blend_square = GL_FALSE; GLboolean __GLEW_NV_conditional_render = GL_FALSE; GLboolean __GLEW_NV_copy_depth_to_color = GL_FALSE; GLboolean __GLEW_NV_copy_image = GL_FALSE; GLboolean __GLEW_NV_depth_buffer_float = GL_FALSE; GLboolean __GLEW_NV_depth_clamp = GL_FALSE; GLboolean __GLEW_NV_depth_range_unclamped = GL_FALSE; GLboolean __GLEW_NV_evaluators = GL_FALSE; GLboolean __GLEW_NV_explicit_multisample = GL_FALSE; GLboolean __GLEW_NV_fence = GL_FALSE; GLboolean __GLEW_NV_float_buffer = GL_FALSE; GLboolean __GLEW_NV_fog_distance = GL_FALSE; GLboolean __GLEW_NV_fragment_program = GL_FALSE; GLboolean __GLEW_NV_fragment_program2 = GL_FALSE; GLboolean __GLEW_NV_fragment_program4 = GL_FALSE; GLboolean __GLEW_NV_fragment_program_option = GL_FALSE; GLboolean __GLEW_NV_framebuffer_multisample_coverage = GL_FALSE; GLboolean __GLEW_NV_geometry_program4 = GL_FALSE; GLboolean __GLEW_NV_geometry_shader4 = GL_FALSE; GLboolean __GLEW_NV_gpu_program4 = GL_FALSE; GLboolean __GLEW_NV_gpu_program5 = GL_FALSE; GLboolean __GLEW_NV_gpu_program_fp64 = GL_FALSE; GLboolean __GLEW_NV_gpu_shader5 = GL_FALSE; GLboolean __GLEW_NV_half_float = GL_FALSE; GLboolean __GLEW_NV_light_max_exponent = GL_FALSE; GLboolean __GLEW_NV_multisample_coverage = GL_FALSE; GLboolean __GLEW_NV_multisample_filter_hint = GL_FALSE; GLboolean __GLEW_NV_occlusion_query = GL_FALSE; GLboolean __GLEW_NV_packed_depth_stencil = GL_FALSE; GLboolean __GLEW_NV_parameter_buffer_object = GL_FALSE; GLboolean __GLEW_NV_parameter_buffer_object2 = GL_FALSE; GLboolean __GLEW_NV_path_rendering = GL_FALSE; GLboolean __GLEW_NV_pixel_data_range = GL_FALSE; GLboolean __GLEW_NV_point_sprite = GL_FALSE; GLboolean __GLEW_NV_present_video = GL_FALSE; GLboolean __GLEW_NV_primitive_restart = GL_FALSE; GLboolean __GLEW_NV_register_combiners = GL_FALSE; GLboolean __GLEW_NV_register_combiners2 = GL_FALSE; GLboolean __GLEW_NV_shader_atomic_float = GL_FALSE; GLboolean __GLEW_NV_shader_buffer_load = GL_FALSE; GLboolean __GLEW_NV_tessellation_program5 = GL_FALSE; GLboolean __GLEW_NV_texgen_emboss = GL_FALSE; GLboolean __GLEW_NV_texgen_reflection = GL_FALSE; GLboolean __GLEW_NV_texture_barrier = GL_FALSE; GLboolean __GLEW_NV_texture_compression_vtc = GL_FALSE; GLboolean __GLEW_NV_texture_env_combine4 = GL_FALSE; GLboolean __GLEW_NV_texture_expand_normal = GL_FALSE; GLboolean __GLEW_NV_texture_multisample = GL_FALSE; GLboolean __GLEW_NV_texture_rectangle = GL_FALSE; GLboolean __GLEW_NV_texture_shader = GL_FALSE; GLboolean __GLEW_NV_texture_shader2 = GL_FALSE; GLboolean __GLEW_NV_texture_shader3 = GL_FALSE; GLboolean __GLEW_NV_transform_feedback = GL_FALSE; GLboolean __GLEW_NV_transform_feedback2 = GL_FALSE; GLboolean __GLEW_NV_vdpau_interop = GL_FALSE; GLboolean __GLEW_NV_vertex_array_range = GL_FALSE; GLboolean __GLEW_NV_vertex_array_range2 = GL_FALSE; GLboolean __GLEW_NV_vertex_attrib_integer_64bit = GL_FALSE; GLboolean __GLEW_NV_vertex_buffer_unified_memory = GL_FALSE; GLboolean __GLEW_NV_vertex_program = GL_FALSE; GLboolean __GLEW_NV_vertex_program1_1 = GL_FALSE; GLboolean __GLEW_NV_vertex_program2 = GL_FALSE; GLboolean __GLEW_NV_vertex_program2_option = GL_FALSE; GLboolean __GLEW_NV_vertex_program3 = GL_FALSE; GLboolean __GLEW_NV_vertex_program4 = GL_FALSE; GLboolean __GLEW_NV_video_capture = GL_FALSE; GLboolean __GLEW_OES_byte_coordinates = GL_FALSE; GLboolean __GLEW_OES_compressed_paletted_texture = GL_FALSE; GLboolean __GLEW_OES_read_format = GL_FALSE; GLboolean __GLEW_OES_single_precision = GL_FALSE; GLboolean __GLEW_OML_interlace = GL_FALSE; GLboolean __GLEW_OML_resample = GL_FALSE; GLboolean __GLEW_OML_subsample = GL_FALSE; GLboolean __GLEW_PGI_misc_hints = GL_FALSE; GLboolean __GLEW_PGI_vertex_hints = GL_FALSE; GLboolean __GLEW_REGAL_error_string = GL_FALSE; GLboolean __GLEW_REGAL_extension_query = GL_FALSE; GLboolean __GLEW_REGAL_log = GL_FALSE; GLboolean __GLEW_REND_screen_coordinates = GL_FALSE; GLboolean __GLEW_S3_s3tc = GL_FALSE; GLboolean __GLEW_SGIS_color_range = GL_FALSE; GLboolean __GLEW_SGIS_detail_texture = GL_FALSE; GLboolean __GLEW_SGIS_fog_function = GL_FALSE; GLboolean __GLEW_SGIS_generate_mipmap = GL_FALSE; GLboolean __GLEW_SGIS_multisample = GL_FALSE; GLboolean __GLEW_SGIS_pixel_texture = GL_FALSE; GLboolean __GLEW_SGIS_point_line_texgen = GL_FALSE; GLboolean __GLEW_SGIS_sharpen_texture = GL_FALSE; GLboolean __GLEW_SGIS_texture4D = GL_FALSE; GLboolean __GLEW_SGIS_texture_border_clamp = GL_FALSE; GLboolean __GLEW_SGIS_texture_edge_clamp = GL_FALSE; GLboolean __GLEW_SGIS_texture_filter4 = GL_FALSE; GLboolean __GLEW_SGIS_texture_lod = GL_FALSE; GLboolean __GLEW_SGIS_texture_select = GL_FALSE; GLboolean __GLEW_SGIX_async = GL_FALSE; GLboolean __GLEW_SGIX_async_histogram = GL_FALSE; GLboolean __GLEW_SGIX_async_pixel = GL_FALSE; GLboolean __GLEW_SGIX_blend_alpha_minmax = GL_FALSE; GLboolean __GLEW_SGIX_clipmap = GL_FALSE; GLboolean __GLEW_SGIX_convolution_accuracy = GL_FALSE; GLboolean __GLEW_SGIX_depth_texture = GL_FALSE; GLboolean __GLEW_SGIX_flush_raster = GL_FALSE; GLboolean __GLEW_SGIX_fog_offset = GL_FALSE; GLboolean __GLEW_SGIX_fog_texture = GL_FALSE; GLboolean __GLEW_SGIX_fragment_specular_lighting = GL_FALSE; GLboolean __GLEW_SGIX_framezoom = GL_FALSE; GLboolean __GLEW_SGIX_interlace = GL_FALSE; GLboolean __GLEW_SGIX_ir_instrument1 = GL_FALSE; GLboolean __GLEW_SGIX_list_priority = GL_FALSE; GLboolean __GLEW_SGIX_pixel_texture = GL_FALSE; GLboolean __GLEW_SGIX_pixel_texture_bits = GL_FALSE; GLboolean __GLEW_SGIX_reference_plane = GL_FALSE; GLboolean __GLEW_SGIX_resample = GL_FALSE; GLboolean __GLEW_SGIX_shadow = GL_FALSE; GLboolean __GLEW_SGIX_shadow_ambient = GL_FALSE; GLboolean __GLEW_SGIX_sprite = GL_FALSE; GLboolean __GLEW_SGIX_tag_sample_buffer = GL_FALSE; GLboolean __GLEW_SGIX_texture_add_env = GL_FALSE; GLboolean __GLEW_SGIX_texture_coordinate_clamp = GL_FALSE; GLboolean __GLEW_SGIX_texture_lod_bias = GL_FALSE; GLboolean __GLEW_SGIX_texture_multi_buffer = GL_FALSE; GLboolean __GLEW_SGIX_texture_range = GL_FALSE; GLboolean __GLEW_SGIX_texture_scale_bias = GL_FALSE; GLboolean __GLEW_SGIX_vertex_preclip = GL_FALSE; GLboolean __GLEW_SGIX_vertex_preclip_hint = GL_FALSE; GLboolean __GLEW_SGIX_ycrcb = GL_FALSE; GLboolean __GLEW_SGI_color_matrix = GL_FALSE; GLboolean __GLEW_SGI_color_table = GL_FALSE; GLboolean __GLEW_SGI_texture_color_table = GL_FALSE; GLboolean __GLEW_SUNX_constant_data = GL_FALSE; GLboolean __GLEW_SUN_convolution_border_modes = GL_FALSE; GLboolean __GLEW_SUN_global_alpha = GL_FALSE; GLboolean __GLEW_SUN_mesh_array = GL_FALSE; GLboolean __GLEW_SUN_read_video_pixels = GL_FALSE; GLboolean __GLEW_SUN_slice_accum = GL_FALSE; GLboolean __GLEW_SUN_triangle_list = GL_FALSE; GLboolean __GLEW_SUN_vertex = GL_FALSE; GLboolean __GLEW_WIN_phong_shading = GL_FALSE; GLboolean __GLEW_WIN_specular_fog = GL_FALSE; GLboolean __GLEW_WIN_swap_hint = GL_FALSE; #endif /* !GLEW_MX */ #ifdef GL_VERSION_1_2 static GLboolean _glewInit_GL_VERSION_1_2 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3D")) == NULL) || r; r = ((glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElements")) == NULL) || r; r = ((glTexImage3D = (PFNGLTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexImage3D")) == NULL) || r; r = ((glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3D")) == NULL) || r; return r; } #endif /* GL_VERSION_1_2 */ #ifdef GL_VERSION_1_2_1 #endif /* GL_VERSION_1_2_1 */ #ifdef GL_VERSION_1_3 static GLboolean _glewInit_GL_VERSION_1_3 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glActiveTexture = (PFNGLACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glActiveTexture")) == NULL) || r; r = ((glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTexture")) == NULL) || r; r = ((glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1D")) == NULL) || r; r = ((glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2D")) == NULL) || r; r = ((glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3D")) == NULL) || r; r = ((glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1D")) == NULL) || r; r = ((glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2D")) == NULL) || r; r = ((glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3D")) == NULL) || r; r = ((glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImage")) == NULL) || r; r = ((glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixd")) == NULL) || r; r = ((glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixf")) == NULL) || r; r = ((glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixd")) == NULL) || r; r = ((glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixf")) == NULL) || r; r = ((glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1d")) == NULL) || r; r = ((glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dv")) == NULL) || r; r = ((glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1f")) == NULL) || r; r = ((glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fv")) == NULL) || r; r = ((glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1i")) == NULL) || r; r = ((glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iv")) == NULL) || r; r = ((glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1s")) == NULL) || r; r = ((glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sv")) == NULL) || r; r = ((glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2d")) == NULL) || r; r = ((glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dv")) == NULL) || r; r = ((glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2f")) == NULL) || r; r = ((glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fv")) == NULL) || r; r = ((glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2i")) == NULL) || r; r = ((glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iv")) == NULL) || r; r = ((glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2s")) == NULL) || r; r = ((glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sv")) == NULL) || r; r = ((glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3d")) == NULL) || r; r = ((glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dv")) == NULL) || r; r = ((glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3f")) == NULL) || r; r = ((glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fv")) == NULL) || r; r = ((glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3i")) == NULL) || r; r = ((glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iv")) == NULL) || r; r = ((glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3s")) == NULL) || r; r = ((glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sv")) == NULL) || r; r = ((glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4d")) == NULL) || r; r = ((glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dv")) == NULL) || r; r = ((glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4f")) == NULL) || r; r = ((glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fv")) == NULL) || r; r = ((glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4i")) == NULL) || r; r = ((glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iv")) == NULL) || r; r = ((glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4s")) == NULL) || r; r = ((glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sv")) == NULL) || r; r = ((glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverage")) == NULL) || r; return r; } #endif /* GL_VERSION_1_3 */ #ifdef GL_VERSION_1_4 static GLboolean _glewInit_GL_VERSION_1_4 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendColor = (PFNGLBLENDCOLORPROC)glewGetProcAddress((const GLubyte*)"glBlendColor")) == NULL) || r; r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; r = ((glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparate")) == NULL) || r; r = ((glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointer")) == NULL) || r; r = ((glFogCoordd = (PFNGLFOGCOORDDPROC)glewGetProcAddress((const GLubyte*)"glFogCoordd")) == NULL) || r; r = ((glFogCoorddv = (PFNGLFOGCOORDDVPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddv")) == NULL) || r; r = ((glFogCoordf = (PFNGLFOGCOORDFPROC)glewGetProcAddress((const GLubyte*)"glFogCoordf")) == NULL) || r; r = ((glFogCoordfv = (PFNGLFOGCOORDFVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfv")) == NULL) || r; r = ((glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArrays")) == NULL) || r; r = ((glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElements")) == NULL) || r; r = ((glPointParameterf = (PFNGLPOINTPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glPointParameterf")) == NULL) || r; r = ((glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfv")) == NULL) || r; r = ((glPointParameteri = (PFNGLPOINTPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPointParameteri")) == NULL) || r; r = ((glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriv")) == NULL) || r; r = ((glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3b")) == NULL) || r; r = ((glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bv")) == NULL) || r; r = ((glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3d")) == NULL) || r; r = ((glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dv")) == NULL) || r; r = ((glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3f")) == NULL) || r; r = ((glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fv")) == NULL) || r; r = ((glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3i")) == NULL) || r; r = ((glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iv")) == NULL) || r; r = ((glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3s")) == NULL) || r; r = ((glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sv")) == NULL) || r; r = ((glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ub")) == NULL) || r; r = ((glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubv")) == NULL) || r; r = ((glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ui")) == NULL) || r; r = ((glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiv")) == NULL) || r; r = ((glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3us")) == NULL) || r; r = ((glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usv")) == NULL) || r; r = ((glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointer")) == NULL) || r; r = ((glWindowPos2d = (PFNGLWINDOWPOS2DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2d")) == NULL) || r; r = ((glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dv")) == NULL) || r; r = ((glWindowPos2f = (PFNGLWINDOWPOS2FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2f")) == NULL) || r; r = ((glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fv")) == NULL) || r; r = ((glWindowPos2i = (PFNGLWINDOWPOS2IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2i")) == NULL) || r; r = ((glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iv")) == NULL) || r; r = ((glWindowPos2s = (PFNGLWINDOWPOS2SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2s")) == NULL) || r; r = ((glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sv")) == NULL) || r; r = ((glWindowPos3d = (PFNGLWINDOWPOS3DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3d")) == NULL) || r; r = ((glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dv")) == NULL) || r; r = ((glWindowPos3f = (PFNGLWINDOWPOS3FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3f")) == NULL) || r; r = ((glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fv")) == NULL) || r; r = ((glWindowPos3i = (PFNGLWINDOWPOS3IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3i")) == NULL) || r; r = ((glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iv")) == NULL) || r; r = ((glWindowPos3s = (PFNGLWINDOWPOS3SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3s")) == NULL) || r; r = ((glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sv")) == NULL) || r; return r; } #endif /* GL_VERSION_1_4 */ #ifdef GL_VERSION_1_5 static GLboolean _glewInit_GL_VERSION_1_5 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginQuery = (PFNGLBEGINQUERYPROC)glewGetProcAddress((const GLubyte*)"glBeginQuery")) == NULL) || r; r = ((glBindBuffer = (PFNGLBINDBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindBuffer")) == NULL) || r; r = ((glBufferData = (PFNGLBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferData")) == NULL) || r; r = ((glBufferSubData = (PFNGLBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferSubData")) == NULL) || r; r = ((glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffers")) == NULL) || r; r = ((glDeleteQueries = (PFNGLDELETEQUERIESPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueries")) == NULL) || r; r = ((glEndQuery = (PFNGLENDQUERYPROC)glewGetProcAddress((const GLubyte*)"glEndQuery")) == NULL) || r; r = ((glGenBuffers = (PFNGLGENBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenBuffers")) == NULL) || r; r = ((glGenQueries = (PFNGLGENQUERIESPROC)glewGetProcAddress((const GLubyte*)"glGenQueries")) == NULL) || r; r = ((glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteriv")) == NULL) || r; r = ((glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointerv")) == NULL) || r; r = ((glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubData")) == NULL) || r; r = ((glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectiv")) == NULL) || r; r = ((glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuiv")) == NULL) || r; r = ((glGetQueryiv = (PFNGLGETQUERYIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryiv")) == NULL) || r; r = ((glIsBuffer = (PFNGLISBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsBuffer")) == NULL) || r; r = ((glIsQuery = (PFNGLISQUERYPROC)glewGetProcAddress((const GLubyte*)"glIsQuery")) == NULL) || r; r = ((glMapBuffer = (PFNGLMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glMapBuffer")) == NULL) || r; r = ((glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glUnmapBuffer")) == NULL) || r; return r; } #endif /* GL_VERSION_1_5 */ #ifdef GL_VERSION_2_0 static GLboolean _glewInit_GL_VERSION_2_0 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glAttachShader = (PFNGLATTACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glAttachShader")) == NULL) || r; r = ((glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocation")) == NULL) || r; r = ((glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparate")) == NULL) || r; r = ((glCompileShader = (PFNGLCOMPILESHADERPROC)glewGetProcAddress((const GLubyte*)"glCompileShader")) == NULL) || r; r = ((glCreateProgram = (PFNGLCREATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glCreateProgram")) == NULL) || r; r = ((glCreateShader = (PFNGLCREATESHADERPROC)glewGetProcAddress((const GLubyte*)"glCreateShader")) == NULL) || r; r = ((glDeleteProgram = (PFNGLDELETEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgram")) == NULL) || r; r = ((glDeleteShader = (PFNGLDELETESHADERPROC)glewGetProcAddress((const GLubyte*)"glDeleteShader")) == NULL) || r; r = ((glDetachShader = (PFNGLDETACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glDetachShader")) == NULL) || r; r = ((glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArray")) == NULL) || r; r = ((glDrawBuffers = (PFNGLDRAWBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffers")) == NULL) || r; r = ((glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArray")) == NULL) || r; r = ((glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttrib")) == NULL) || r; r = ((glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniform")) == NULL) || r; r = ((glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedShaders")) == NULL) || r; r = ((glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocation")) == NULL) || r; r = ((glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInfoLog")) == NULL) || r; r = ((glGetProgramiv = (PFNGLGETPROGRAMIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramiv")) == NULL) || r; r = ((glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetShaderInfoLog")) == NULL) || r; r = ((glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSource")) == NULL) || r; r = ((glGetShaderiv = (PFNGLGETSHADERIVPROC)glewGetProcAddress((const GLubyte*)"glGetShaderiv")) == NULL) || r; r = ((glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocation")) == NULL) || r; r = ((glGetUniformfv = (PFNGLGETUNIFORMFVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfv")) == NULL) || r; r = ((glGetUniformiv = (PFNGLGETUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformiv")) == NULL) || r; r = ((glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointerv")) == NULL) || r; r = ((glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdv")) == NULL) || r; r = ((glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfv")) == NULL) || r; r = ((glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribiv")) == NULL) || r; r = ((glIsProgram = (PFNGLISPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glIsProgram")) == NULL) || r; r = ((glIsShader = (PFNGLISSHADERPROC)glewGetProcAddress((const GLubyte*)"glIsShader")) == NULL) || r; r = ((glLinkProgram = (PFNGLLINKPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glLinkProgram")) == NULL) || r; r = ((glShaderSource = (PFNGLSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glShaderSource")) == NULL) || r; r = ((glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparate")) == NULL) || r; r = ((glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilMaskSeparate")) == NULL) || r; r = ((glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparate")) == NULL) || r; r = ((glUniform1f = (PFNGLUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glUniform1f")) == NULL) || r; r = ((glUniform1fv = (PFNGLUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glUniform1fv")) == NULL) || r; r = ((glUniform1i = (PFNGLUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glUniform1i")) == NULL) || r; r = ((glUniform1iv = (PFNGLUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glUniform1iv")) == NULL) || r; r = ((glUniform2f = (PFNGLUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glUniform2f")) == NULL) || r; r = ((glUniform2fv = (PFNGLUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glUniform2fv")) == NULL) || r; r = ((glUniform2i = (PFNGLUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glUniform2i")) == NULL) || r; r = ((glUniform2iv = (PFNGLUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glUniform2iv")) == NULL) || r; r = ((glUniform3f = (PFNGLUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glUniform3f")) == NULL) || r; r = ((glUniform3fv = (PFNGLUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glUniform3fv")) == NULL) || r; r = ((glUniform3i = (PFNGLUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glUniform3i")) == NULL) || r; r = ((glUniform3iv = (PFNGLUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glUniform3iv")) == NULL) || r; r = ((glUniform4f = (PFNGLUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glUniform4f")) == NULL) || r; r = ((glUniform4fv = (PFNGLUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glUniform4fv")) == NULL) || r; r = ((glUniform4i = (PFNGLUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glUniform4i")) == NULL) || r; r = ((glUniform4iv = (PFNGLUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glUniform4iv")) == NULL) || r; r = ((glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fv")) == NULL) || r; r = ((glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fv")) == NULL) || r; r = ((glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fv")) == NULL) || r; r = ((glUseProgram = (PFNGLUSEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glUseProgram")) == NULL) || r; r = ((glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glValidateProgram")) == NULL) || r; r = ((glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1d")) == NULL) || r; r = ((glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dv")) == NULL) || r; r = ((glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1f")) == NULL) || r; r = ((glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fv")) == NULL) || r; r = ((glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1s")) == NULL) || r; r = ((glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sv")) == NULL) || r; r = ((glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2d")) == NULL) || r; r = ((glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dv")) == NULL) || r; r = ((glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2f")) == NULL) || r; r = ((glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fv")) == NULL) || r; r = ((glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2s")) == NULL) || r; r = ((glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sv")) == NULL) || r; r = ((glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3d")) == NULL) || r; r = ((glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dv")) == NULL) || r; r = ((glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3f")) == NULL) || r; r = ((glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fv")) == NULL) || r; r = ((glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3s")) == NULL) || r; r = ((glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sv")) == NULL) || r; r = ((glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nbv")) == NULL) || r; r = ((glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Niv")) == NULL) || r; r = ((glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nsv")) == NULL) || r; r = ((glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nub")) == NULL) || r; r = ((glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nubv")) == NULL) || r; r = ((glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nuiv")) == NULL) || r; r = ((glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nusv")) == NULL) || r; r = ((glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bv")) == NULL) || r; r = ((glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4d")) == NULL) || r; r = ((glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dv")) == NULL) || r; r = ((glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4f")) == NULL) || r; r = ((glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fv")) == NULL) || r; r = ((glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4iv")) == NULL) || r; r = ((glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4s")) == NULL) || r; r = ((glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sv")) == NULL) || r; r = ((glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubv")) == NULL) || r; r = ((glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uiv")) == NULL) || r; r = ((glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usv")) == NULL) || r; r = ((glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointer")) == NULL) || r; return r; } #endif /* GL_VERSION_2_0 */ #ifdef GL_VERSION_2_1 static GLboolean _glewInit_GL_VERSION_2_1 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3fv")) == NULL) || r; r = ((glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4fv")) == NULL) || r; r = ((glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2fv")) == NULL) || r; r = ((glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4fv")) == NULL) || r; r = ((glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2fv")) == NULL) || r; r = ((glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3fv")) == NULL) || r; return r; } #endif /* GL_VERSION_2_1 */ #ifdef GL_VERSION_3_0 static GLboolean _glewInit_GL_VERSION_3_0 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRender")) == NULL) || r; r = ((glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedback")) == NULL) || r; r = ((glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocation")) == NULL) || r; r = ((glClampColor = (PFNGLCLAMPCOLORPROC)glewGetProcAddress((const GLubyte*)"glClampColor")) == NULL) || r; r = ((glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfi")) == NULL) || r; r = ((glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfv")) == NULL) || r; r = ((glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferiv")) == NULL) || r; r = ((glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferuiv")) == NULL) || r; r = ((glColorMaski = (PFNGLCOLORMASKIPROC)glewGetProcAddress((const GLubyte*)"glColorMaski")) == NULL) || r; r = ((glDisablei = (PFNGLDISABLEIPROC)glewGetProcAddress((const GLubyte*)"glDisablei")) == NULL) || r; r = ((glEnablei = (PFNGLENABLEIPROC)glewGetProcAddress((const GLubyte*)"glEnablei")) == NULL) || r; r = ((glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRender")) == NULL) || r; r = ((glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedback")) == NULL) || r; r = ((glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)glewGetProcAddress((const GLubyte*)"glGetBooleani_v")) == NULL) || r; r = ((glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocation")) == NULL) || r; r = ((glGetStringi = (PFNGLGETSTRINGIPROC)glewGetProcAddress((const GLubyte*)"glGetStringi")) == NULL) || r; r = ((glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIiv")) == NULL) || r; r = ((glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuiv")) == NULL) || r; r = ((glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVarying")) == NULL) || r; r = ((glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuiv")) == NULL) || r; r = ((glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIiv")) == NULL) || r; r = ((glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuiv")) == NULL) || r; r = ((glIsEnabledi = (PFNGLISENABLEDIPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledi")) == NULL) || r; r = ((glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIiv")) == NULL) || r; r = ((glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuiv")) == NULL) || r; r = ((glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryings")) == NULL) || r; r = ((glUniform1ui = (PFNGLUNIFORM1UIPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui")) == NULL) || r; r = ((glUniform1uiv = (PFNGLUNIFORM1UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiv")) == NULL) || r; r = ((glUniform2ui = (PFNGLUNIFORM2UIPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui")) == NULL) || r; r = ((glUniform2uiv = (PFNGLUNIFORM2UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiv")) == NULL) || r; r = ((glUniform3ui = (PFNGLUNIFORM3UIPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui")) == NULL) || r; r = ((glUniform3uiv = (PFNGLUNIFORM3UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiv")) == NULL) || r; r = ((glUniform4ui = (PFNGLUNIFORM4UIPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui")) == NULL) || r; r = ((glUniform4uiv = (PFNGLUNIFORM4UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiv")) == NULL) || r; r = ((glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1i")) == NULL) || r; r = ((glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iv")) == NULL) || r; r = ((glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ui")) == NULL) || r; r = ((glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiv")) == NULL) || r; r = ((glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2i")) == NULL) || r; r = ((glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iv")) == NULL) || r; r = ((glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ui")) == NULL) || r; r = ((glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiv")) == NULL) || r; r = ((glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3i")) == NULL) || r; r = ((glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iv")) == NULL) || r; r = ((glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ui")) == NULL) || r; r = ((glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiv")) == NULL) || r; r = ((glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bv")) == NULL) || r; r = ((glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4i")) == NULL) || r; r = ((glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iv")) == NULL) || r; r = ((glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4sv")) == NULL) || r; r = ((glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubv")) == NULL) || r; r = ((glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ui")) == NULL) || r; r = ((glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiv")) == NULL) || r; r = ((glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usv")) == NULL) || r; r = ((glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointer")) == NULL) || r; return r; } #endif /* GL_VERSION_3_0 */ #ifdef GL_VERSION_3_1 static GLboolean _glewInit_GL_VERSION_3_1 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstanced")) == NULL) || r; r = ((glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstanced")) == NULL) || r; r = ((glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndex")) == NULL) || r; r = ((glTexBuffer = (PFNGLTEXBUFFERPROC)glewGetProcAddress((const GLubyte*)"glTexBuffer")) == NULL) || r; return r; } #endif /* GL_VERSION_3_1 */ #ifdef GL_VERSION_3_2 static GLboolean _glewInit_GL_VERSION_3_2 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture")) == NULL) || r; r = ((glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteri64v")) == NULL) || r; r = ((glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)glewGetProcAddress((const GLubyte*)"glGetInteger64i_v")) == NULL) || r; return r; } #endif /* GL_VERSION_3_2 */ #ifdef GL_VERSION_3_3 static GLboolean _glewInit_GL_VERSION_3_3 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisor")) == NULL) || r; return r; } #endif /* GL_VERSION_3_3 */ #ifdef GL_VERSION_4_0 static GLboolean _glewInit_GL_VERSION_4_0 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparatei")) == NULL) || r; r = ((glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationi")) == NULL) || r; r = ((glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparatei")) == NULL) || r; r = ((glBlendFunci = (PFNGLBLENDFUNCIPROC)glewGetProcAddress((const GLubyte*)"glBlendFunci")) == NULL) || r; r = ((glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)glewGetProcAddress((const GLubyte*)"glMinSampleShading")) == NULL) || r; return r; } #endif /* GL_VERSION_4_0 */ #ifdef GL_VERSION_4_1 #endif /* GL_VERSION_4_1 */ #ifdef GL_VERSION_4_2 #endif /* GL_VERSION_4_2 */ #ifdef GL_VERSION_4_3 #endif /* GL_VERSION_4_3 */ #ifdef GL_3DFX_multisample #endif /* GL_3DFX_multisample */ #ifdef GL_3DFX_tbuffer static GLboolean _glewInit_GL_3DFX_tbuffer (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC)glewGetProcAddress((const GLubyte*)"glTbufferMask3DFX")) == NULL) || r; return r; } #endif /* GL_3DFX_tbuffer */ #ifdef GL_3DFX_texture_compression_FXT1 #endif /* GL_3DFX_texture_compression_FXT1 */ #ifdef GL_AMD_blend_minmax_factor #endif /* GL_AMD_blend_minmax_factor */ #ifdef GL_AMD_conservative_depth #endif /* GL_AMD_conservative_depth */ #ifdef GL_AMD_debug_output static GLboolean _glewInit_GL_AMD_debug_output (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallbackAMD")) == NULL) || r; r = ((glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageEnableAMD")) == NULL) || r; r = ((glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsertAMD")) == NULL) || r; r = ((glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLogAMD")) == NULL) || r; return r; } #endif /* GL_AMD_debug_output */ #ifdef GL_AMD_depth_clamp_separate #endif /* GL_AMD_depth_clamp_separate */ #ifdef GL_AMD_draw_buffers_blend static GLboolean _glewInit_GL_AMD_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendEquationIndexedAMD = (PFNGLBLENDEQUATIONINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationIndexedAMD")) == NULL) || r; r = ((glBlendEquationSeparateIndexedAMD = (PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateIndexedAMD")) == NULL) || r; r = ((glBlendFuncIndexedAMD = (PFNGLBLENDFUNCINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncIndexedAMD")) == NULL) || r; r = ((glBlendFuncSeparateIndexedAMD = (PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateIndexedAMD")) == NULL) || r; return r; } #endif /* GL_AMD_draw_buffers_blend */ #ifdef GL_AMD_multi_draw_indirect static GLboolean _glewInit_GL_AMD_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glMultiDrawArraysIndirectAMD = (PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectAMD")) == NULL) || r; r = ((glMultiDrawElementsIndirectAMD = (PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectAMD")) == NULL) || r; return r; } #endif /* GL_AMD_multi_draw_indirect */ #ifdef GL_AMD_name_gen_delete static GLboolean _glewInit_GL_AMD_name_gen_delete (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDeleteNamesAMD = (PFNGLDELETENAMESAMDPROC)glewGetProcAddress((const GLubyte*)"glDeleteNamesAMD")) == NULL) || r; r = ((glGenNamesAMD = (PFNGLGENNAMESAMDPROC)glewGetProcAddress((const GLubyte*)"glGenNamesAMD")) == NULL) || r; r = ((glIsNameAMD = (PFNGLISNAMEAMDPROC)glewGetProcAddress((const GLubyte*)"glIsNameAMD")) == NULL) || r; return r; } #endif /* GL_AMD_name_gen_delete */ #ifdef GL_AMD_performance_monitor static GLboolean _glewInit_GL_AMD_performance_monitor (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginPerfMonitorAMD = (PFNGLBEGINPERFMONITORAMDPROC)glewGetProcAddress((const GLubyte*)"glBeginPerfMonitorAMD")) == NULL) || r; r = ((glDeletePerfMonitorsAMD = (PFNGLDELETEPERFMONITORSAMDPROC)glewGetProcAddress((const GLubyte*)"glDeletePerfMonitorsAMD")) == NULL) || r; r = ((glEndPerfMonitorAMD = (PFNGLENDPERFMONITORAMDPROC)glewGetProcAddress((const GLubyte*)"glEndPerfMonitorAMD")) == NULL) || r; r = ((glGenPerfMonitorsAMD = (PFNGLGENPERFMONITORSAMDPROC)glewGetProcAddress((const GLubyte*)"glGenPerfMonitorsAMD")) == NULL) || r; r = ((glGetPerfMonitorCounterDataAMD = (PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterDataAMD")) == NULL) || r; r = ((glGetPerfMonitorCounterInfoAMD = (PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterInfoAMD")) == NULL) || r; r = ((glGetPerfMonitorCounterStringAMD = (PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterStringAMD")) == NULL) || r; r = ((glGetPerfMonitorCountersAMD = (PFNGLGETPERFMONITORCOUNTERSAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCountersAMD")) == NULL) || r; r = ((glGetPerfMonitorGroupStringAMD = (PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorGroupStringAMD")) == NULL) || r; r = ((glGetPerfMonitorGroupsAMD = (PFNGLGETPERFMONITORGROUPSAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorGroupsAMD")) == NULL) || r; r = ((glSelectPerfMonitorCountersAMD = (PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)glewGetProcAddress((const GLubyte*)"glSelectPerfMonitorCountersAMD")) == NULL) || r; return r; } #endif /* GL_AMD_performance_monitor */ #ifdef GL_AMD_pinned_memory #endif /* GL_AMD_pinned_memory */ #ifdef GL_AMD_query_buffer_object #endif /* GL_AMD_query_buffer_object */ #ifdef GL_AMD_sample_positions static GLboolean _glewInit_GL_AMD_sample_positions (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glSetMultisamplefvAMD = (PFNGLSETMULTISAMPLEFVAMDPROC)glewGetProcAddress((const GLubyte*)"glSetMultisamplefvAMD")) == NULL) || r; return r; } #endif /* GL_AMD_sample_positions */ #ifdef GL_AMD_seamless_cubemap_per_texture #endif /* GL_AMD_seamless_cubemap_per_texture */ #ifdef GL_AMD_shader_stencil_export #endif /* GL_AMD_shader_stencil_export */ #ifdef GL_AMD_stencil_operation_extended static GLboolean _glewInit_GL_AMD_stencil_operation_extended (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glStencilOpValueAMD = (PFNGLSTENCILOPVALUEAMDPROC)glewGetProcAddress((const GLubyte*)"glStencilOpValueAMD")) == NULL) || r; return r; } #endif /* GL_AMD_stencil_operation_extended */ #ifdef GL_AMD_texture_texture4 #endif /* GL_AMD_texture_texture4 */ #ifdef GL_AMD_transform_feedback3_lines_triangles #endif /* GL_AMD_transform_feedback3_lines_triangles */ #ifdef GL_AMD_vertex_shader_layer #endif /* GL_AMD_vertex_shader_layer */ #ifdef GL_AMD_vertex_shader_tessellator static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTessellationFactorAMD = (PFNGLTESSELLATIONFACTORAMDPROC)glewGetProcAddress((const GLubyte*)"glTessellationFactorAMD")) == NULL) || r; r = ((glTessellationModeAMD = (PFNGLTESSELLATIONMODEAMDPROC)glewGetProcAddress((const GLubyte*)"glTessellationModeAMD")) == NULL) || r; return r; } #endif /* GL_AMD_vertex_shader_tessellator */ #ifdef GL_AMD_vertex_shader_viewport_index #endif /* GL_AMD_vertex_shader_viewport_index */ #ifdef GL_APPLE_aux_depth_stencil #endif /* GL_APPLE_aux_depth_stencil */ #ifdef GL_APPLE_client_storage #endif /* GL_APPLE_client_storage */ #ifdef GL_APPLE_element_array static GLboolean _glewInit_GL_APPLE_element_array (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayAPPLE")) == NULL) || r; r = ((glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayAPPLE")) == NULL) || r; r = ((glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC)glewGetProcAddress((const GLubyte*)"glElementPointerAPPLE")) == NULL) || r; r = ((glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementArrayAPPLE")) == NULL) || r; r = ((glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawRangeElementArrayAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_element_array */ #ifdef GL_APPLE_fence static GLboolean _glewInit_GL_APPLE_fence (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesAPPLE")) == NULL) || r; r = ((glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceAPPLE")) == NULL) || r; r = ((glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishObjectAPPLE")) == NULL) || r; r = ((glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenFencesAPPLE")) == NULL) || r; r = ((glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsFenceAPPLE")) == NULL) || r; r = ((glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glSetFenceAPPLE")) == NULL) || r; r = ((glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestFenceAPPLE")) == NULL) || r; r = ((glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestObjectAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_fence */ #ifdef GL_APPLE_float_pixels #endif /* GL_APPLE_float_pixels */ #ifdef GL_APPLE_flush_buffer_range static GLboolean _glewInit_GL_APPLE_flush_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBufferParameteriAPPLE")) == NULL) || r; r = ((glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRangeAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_flush_buffer_range */ #ifdef GL_APPLE_object_purgeable static GLboolean _glewInit_GL_APPLE_object_purgeable (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetObjectParameterivAPPLE = (PFNGLGETOBJECTPARAMETERIVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivAPPLE")) == NULL) || r; r = ((glObjectPurgeableAPPLE = (PFNGLOBJECTPURGEABLEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glObjectPurgeableAPPLE")) == NULL) || r; r = ((glObjectUnpurgeableAPPLE = (PFNGLOBJECTUNPURGEABLEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glObjectUnpurgeableAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_object_purgeable */ #ifdef GL_APPLE_pixel_buffer #endif /* GL_APPLE_pixel_buffer */ #ifdef GL_APPLE_rgb_422 #endif /* GL_APPLE_rgb_422 */ #ifdef GL_APPLE_row_bytes #endif /* GL_APPLE_row_bytes */ #ifdef GL_APPLE_specular_vector #endif /* GL_APPLE_specular_vector */ #ifdef GL_APPLE_texture_range static GLboolean _glewInit_GL_APPLE_texture_range (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterPointervAPPLE")) == NULL) || r; r = ((glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTextureRangeAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_texture_range */ #ifdef GL_APPLE_transform_hint #endif /* GL_APPLE_transform_hint */ #ifdef GL_APPLE_vertex_array_object static GLboolean _glewInit_GL_APPLE_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArrayAPPLE")) == NULL) || r; r = ((glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArraysAPPLE")) == NULL) || r; r = ((glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArraysAPPLE")) == NULL) || r; r = ((glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArrayAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_vertex_array_object */ #ifdef GL_APPLE_vertex_array_range static GLboolean _glewInit_GL_APPLE_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeAPPLE")) == NULL) || r; r = ((glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayParameteriAPPLE")) == NULL) || r; r = ((glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_vertex_array_range */ #ifdef GL_APPLE_vertex_program_evaluators static GLboolean _glewInit_GL_APPLE_vertex_program_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDisableVertexAttribAPPLE = (PFNGLDISABLEVERTEXATTRIBAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribAPPLE")) == NULL) || r; r = ((glEnableVertexAttribAPPLE = (PFNGLENABLEVERTEXATTRIBAPPLEPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribAPPLE")) == NULL) || r; r = ((glIsVertexAttribEnabledAPPLE = (PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexAttribEnabledAPPLE")) == NULL) || r; r = ((glMapVertexAttrib1dAPPLE = (PFNGLMAPVERTEXATTRIB1DAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib1dAPPLE")) == NULL) || r; r = ((glMapVertexAttrib1fAPPLE = (PFNGLMAPVERTEXATTRIB1FAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib1fAPPLE")) == NULL) || r; r = ((glMapVertexAttrib2dAPPLE = (PFNGLMAPVERTEXATTRIB2DAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib2dAPPLE")) == NULL) || r; r = ((glMapVertexAttrib2fAPPLE = (PFNGLMAPVERTEXATTRIB2FAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib2fAPPLE")) == NULL) || r; return r; } #endif /* GL_APPLE_vertex_program_evaluators */ #ifdef GL_APPLE_ycbcr_422 #endif /* GL_APPLE_ycbcr_422 */ #ifdef GL_ARB_ES2_compatibility static GLboolean _glewInit_GL_ARB_ES2_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClearDepthf = (PFNGLCLEARDEPTHFPROC)glewGetProcAddress((const GLubyte*)"glClearDepthf")) == NULL) || r; r = ((glDepthRangef = (PFNGLDEPTHRANGEFPROC)glewGetProcAddress((const GLubyte*)"glDepthRangef")) == NULL) || r; r = ((glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)glewGetProcAddress((const GLubyte*)"glGetShaderPrecisionFormat")) == NULL) || r; r = ((glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)glewGetProcAddress((const GLubyte*)"glReleaseShaderCompiler")) == NULL) || r; r = ((glShaderBinary = (PFNGLSHADERBINARYPROC)glewGetProcAddress((const GLubyte*)"glShaderBinary")) == NULL) || r; return r; } #endif /* GL_ARB_ES2_compatibility */ #ifdef GL_ARB_ES3_compatibility #endif /* GL_ARB_ES3_compatibility */ #ifdef GL_ARB_arrays_of_arrays #endif /* GL_ARB_arrays_of_arrays */ #ifdef GL_ARB_base_instance static GLboolean _glewInit_GL_ARB_base_instance (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedBaseInstance")) == NULL) || r; r = ((glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseInstance")) == NULL) || r; r = ((glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseVertexBaseInstance")) == NULL) || r; return r; } #endif /* GL_ARB_base_instance */ #ifdef GL_ARB_blend_func_extended static GLboolean _glewInit_GL_ARB_blend_func_extended (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationIndexed")) == NULL) || r; r = ((glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataIndex")) == NULL) || r; return r; } #endif /* GL_ARB_blend_func_extended */ #ifdef GL_ARB_cl_event static GLboolean _glewInit_GL_ARB_cl_event (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCreateSyncFromCLeventARB = (PFNGLCREATESYNCFROMCLEVENTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateSyncFromCLeventARB")) == NULL) || r; return r; } #endif /* GL_ARB_cl_event */ #ifdef GL_ARB_clear_buffer_object static GLboolean _glewInit_GL_ARB_clear_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glClearBufferData")) == NULL) || r; r = ((glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glClearBufferSubData")) == NULL) || r; r = ((glClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glClearNamedBufferDataEXT")) == NULL) || r; r = ((glClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glClearNamedBufferSubDataEXT")) == NULL) || r; return r; } #endif /* GL_ARB_clear_buffer_object */ #ifdef GL_ARB_color_buffer_float static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClampColorARB = (PFNGLCLAMPCOLORARBPROC)glewGetProcAddress((const GLubyte*)"glClampColorARB")) == NULL) || r; return r; } #endif /* GL_ARB_color_buffer_float */ #ifdef GL_ARB_compatibility #endif /* GL_ARB_compatibility */ #ifdef GL_ARB_compressed_texture_pixel_storage #endif /* GL_ARB_compressed_texture_pixel_storage */ #ifdef GL_ARB_compute_shader static GLboolean _glewInit_GL_ARB_compute_shader (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)glewGetProcAddress((const GLubyte*)"glDispatchCompute")) == NULL) || r; r = ((glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDispatchComputeIndirect")) == NULL) || r; return r; } #endif /* GL_ARB_compute_shader */ #ifdef GL_ARB_conservative_depth #endif /* GL_ARB_conservative_depth */ #ifdef GL_ARB_copy_buffer static GLboolean _glewInit_GL_ARB_copy_buffer (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glCopyBufferSubData")) == NULL) || r; return r; } #endif /* GL_ARB_copy_buffer */ #ifdef GL_ARB_copy_image static GLboolean _glewInit_GL_ARB_copy_image (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)glewGetProcAddress((const GLubyte*)"glCopyImageSubData")) == NULL) || r; return r; } #endif /* GL_ARB_copy_image */ #ifdef GL_ARB_debug_output static GLboolean _glewInit_GL_ARB_debug_output (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallbackARB")) == NULL) || r; r = ((glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageControlARB")) == NULL) || r; r = ((glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsertARB")) == NULL) || r; r = ((glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLogARB")) == NULL) || r; return r; } #endif /* GL_ARB_debug_output */ #ifdef GL_ARB_depth_buffer_float #endif /* GL_ARB_depth_buffer_float */ #ifdef GL_ARB_depth_clamp #endif /* GL_ARB_depth_clamp */ #ifdef GL_ARB_depth_texture #endif /* GL_ARB_depth_texture */ #ifdef GL_ARB_draw_buffers static GLboolean _glewInit_GL_ARB_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersARB")) == NULL) || r; return r; } #endif /* GL_ARB_draw_buffers */ #ifdef GL_ARB_draw_buffers_blend static GLboolean _glewInit_GL_ARB_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateiARB")) == NULL) || r; r = ((glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationiARB")) == NULL) || r; r = ((glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateiARB")) == NULL) || r; r = ((glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendFunciARB")) == NULL) || r; return r; } #endif /* GL_ARB_draw_buffers_blend */ #ifdef GL_ARB_draw_elements_base_vertex static GLboolean _glewInit_GL_ARB_draw_elements_base_vertex (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsBaseVertex")) == NULL) || r; r = ((glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseVertex")) == NULL) || r; r = ((glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsBaseVertex")) == NULL) || r; r = ((glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsBaseVertex")) == NULL) || r; return r; } #endif /* GL_ARB_draw_elements_base_vertex */ #ifdef GL_ARB_draw_indirect static GLboolean _glewInit_GL_ARB_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysIndirect")) == NULL) || r; r = ((glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsIndirect")) == NULL) || r; return r; } #endif /* GL_ARB_draw_indirect */ #ifdef GL_ARB_draw_instanced #endif /* GL_ARB_draw_instanced */ #ifdef GL_ARB_explicit_attrib_location #endif /* GL_ARB_explicit_attrib_location */ #ifdef GL_ARB_explicit_uniform_location #endif /* GL_ARB_explicit_uniform_location */ #ifdef GL_ARB_fragment_coord_conventions #endif /* GL_ARB_fragment_coord_conventions */ #ifdef GL_ARB_fragment_layer_viewport #endif /* GL_ARB_fragment_layer_viewport */ #ifdef GL_ARB_fragment_program #endif /* GL_ARB_fragment_program */ #ifdef GL_ARB_fragment_program_shadow #endif /* GL_ARB_fragment_program_shadow */ #ifdef GL_ARB_fragment_shader #endif /* GL_ARB_fragment_shader */ #ifdef GL_ARB_framebuffer_no_attachments static GLboolean _glewInit_GL_ARB_framebuffer_no_attachments (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glFramebufferParameteri")) == NULL) || r; r = ((glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferParameteriv")) == NULL) || r; r = ((glGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedFramebufferParameterivEXT")) == NULL) || r; r = ((glNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferParameteriEXT")) == NULL) || r; return r; } #endif /* GL_ARB_framebuffer_no_attachments */ #ifdef GL_ARB_framebuffer_object static GLboolean _glewInit_GL_ARB_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindFramebuffer")) == NULL) || r; r = ((glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbuffer")) == NULL) || r; r = ((glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebuffer")) == NULL) || r; r = ((glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatus")) == NULL) || r; r = ((glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffers")) == NULL) || r; r = ((glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffers")) == NULL) || r; r = ((glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbuffer")) == NULL) || r; r = ((glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1D")) == NULL) || r; r = ((glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2D")) == NULL) || r; r = ((glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3D")) == NULL) || r; r = ((glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayer")) == NULL) || r; r = ((glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffers")) == NULL) || r; r = ((glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffers")) == NULL) || r; r = ((glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmap")) == NULL) || r; r = ((glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameteriv")) == NULL) || r; r = ((glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameteriv")) == NULL) || r; r = ((glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsFramebuffer")) == NULL) || r; r = ((glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbuffer")) == NULL) || r; r = ((glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorage")) == NULL) || r; r = ((glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisample")) == NULL) || r; return r; } #endif /* GL_ARB_framebuffer_object */ #ifdef GL_ARB_framebuffer_sRGB #endif /* GL_ARB_framebuffer_sRGB */ #ifdef GL_ARB_geometry_shader4 static GLboolean _glewInit_GL_ARB_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFramebufferTextureARB = (PFNGLFRAMEBUFFERTEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureARB")) == NULL) || r; r = ((glFramebufferTextureFaceARB = (PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceARB")) == NULL) || r; r = ((glFramebufferTextureLayerARB = (PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerARB")) == NULL) || r; r = ((glProgramParameteriARB = (PFNGLPROGRAMPARAMETERIARBPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriARB")) == NULL) || r; return r; } #endif /* GL_ARB_geometry_shader4 */ #ifdef GL_ARB_get_program_binary static GLboolean _glewInit_GL_ARB_get_program_binary (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)glewGetProcAddress((const GLubyte*)"glGetProgramBinary")) == NULL) || r; r = ((glProgramBinary = (PFNGLPROGRAMBINARYPROC)glewGetProcAddress((const GLubyte*)"glProgramBinary")) == NULL) || r; r = ((glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteri")) == NULL) || r; return r; } #endif /* GL_ARB_get_program_binary */ #ifdef GL_ARB_gpu_shader5 #endif /* GL_ARB_gpu_shader5 */ #ifdef GL_ARB_gpu_shader_fp64 static GLboolean _glewInit_GL_ARB_gpu_shader_fp64 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetUniformdv = (PFNGLGETUNIFORMDVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformdv")) == NULL) || r; r = ((glUniform1d = (PFNGLUNIFORM1DPROC)glewGetProcAddress((const GLubyte*)"glUniform1d")) == NULL) || r; r = ((glUniform1dv = (PFNGLUNIFORM1DVPROC)glewGetProcAddress((const GLubyte*)"glUniform1dv")) == NULL) || r; r = ((glUniform2d = (PFNGLUNIFORM2DPROC)glewGetProcAddress((const GLubyte*)"glUniform2d")) == NULL) || r; r = ((glUniform2dv = (PFNGLUNIFORM2DVPROC)glewGetProcAddress((const GLubyte*)"glUniform2dv")) == NULL) || r; r = ((glUniform3d = (PFNGLUNIFORM3DPROC)glewGetProcAddress((const GLubyte*)"glUniform3d")) == NULL) || r; r = ((glUniform3dv = (PFNGLUNIFORM3DVPROC)glewGetProcAddress((const GLubyte*)"glUniform3dv")) == NULL) || r; r = ((glUniform4d = (PFNGLUNIFORM4DPROC)glewGetProcAddress((const GLubyte*)"glUniform4d")) == NULL) || r; r = ((glUniform4dv = (PFNGLUNIFORM4DVPROC)glewGetProcAddress((const GLubyte*)"glUniform4dv")) == NULL) || r; r = ((glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2dv")) == NULL) || r; r = ((glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3dv")) == NULL) || r; r = ((glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4dv")) == NULL) || r; r = ((glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3dv")) == NULL) || r; r = ((glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2dv")) == NULL) || r; r = ((glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4dv")) == NULL) || r; r = ((glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4dv")) == NULL) || r; r = ((glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2dv")) == NULL) || r; r = ((glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3dv")) == NULL) || r; return r; } #endif /* GL_ARB_gpu_shader_fp64 */ #ifdef GL_ARB_half_float_pixel #endif /* GL_ARB_half_float_pixel */ #ifdef GL_ARB_half_float_vertex #endif /* GL_ARB_half_float_vertex */ #ifdef GL_ARB_imaging static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; r = ((glColorSubTable = (PFNGLCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorSubTable")) == NULL) || r; r = ((glColorTable = (PFNGLCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorTable")) == NULL) || r; r = ((glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfv")) == NULL) || r; r = ((glColorTableParameteriv = (PFNGLCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameteriv")) == NULL) || r; r = ((glConvolutionFilter1D = (PFNGLCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1D")) == NULL) || r; r = ((glConvolutionFilter2D = (PFNGLCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2D")) == NULL) || r; r = ((glConvolutionParameterf = (PFNGLCONVOLUTIONPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterf")) == NULL) || r; r = ((glConvolutionParameterfv = (PFNGLCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfv")) == NULL) || r; r = ((glConvolutionParameteri = (PFNGLCONVOLUTIONPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteri")) == NULL) || r; r = ((glConvolutionParameteriv = (PFNGLCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriv")) == NULL) || r; r = ((glCopyColorSubTable = (PFNGLCOPYCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTable")) == NULL) || r; r = ((glCopyColorTable = (PFNGLCOPYCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTable")) == NULL) || r; r = ((glCopyConvolutionFilter1D = (PFNGLCOPYCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1D")) == NULL) || r; r = ((glCopyConvolutionFilter2D = (PFNGLCOPYCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2D")) == NULL) || r; r = ((glGetColorTable = (PFNGLGETCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glGetColorTable")) == NULL) || r; r = ((glGetColorTableParameterfv = (PFNGLGETCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfv")) == NULL) || r; r = ((glGetColorTableParameteriv = (PFNGLGETCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameteriv")) == NULL) || r; r = ((glGetConvolutionFilter = (PFNGLGETCONVOLUTIONFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilter")) == NULL) || r; r = ((glGetConvolutionParameterfv = (PFNGLGETCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfv")) == NULL) || r; r = ((glGetConvolutionParameteriv = (PFNGLGETCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameteriv")) == NULL) || r; r = ((glGetHistogram = (PFNGLGETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glGetHistogram")) == NULL) || r; r = ((glGetHistogramParameterfv = (PFNGLGETHISTOGRAMPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfv")) == NULL) || r; r = ((glGetHistogramParameteriv = (PFNGLGETHISTOGRAMPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameteriv")) == NULL) || r; r = ((glGetMinmax = (PFNGLGETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glGetMinmax")) == NULL) || r; r = ((glGetMinmaxParameterfv = (PFNGLGETMINMAXPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfv")) == NULL) || r; r = ((glGetMinmaxParameteriv = (PFNGLGETMINMAXPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameteriv")) == NULL) || r; r = ((glGetSeparableFilter = (PFNGLGETSEPARABLEFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilter")) == NULL) || r; r = ((glHistogram = (PFNGLHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glHistogram")) == NULL) || r; r = ((glMinmax = (PFNGLMINMAXPROC)glewGetProcAddress((const GLubyte*)"glMinmax")) == NULL) || r; r = ((glResetHistogram = (PFNGLRESETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glResetHistogram")) == NULL) || r; r = ((glResetMinmax = (PFNGLRESETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glResetMinmax")) == NULL) || r; r = ((glSeparableFilter2D = (PFNGLSEPARABLEFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2D")) == NULL) || r; return r; } #endif /* GL_ARB_imaging */ #ifdef GL_ARB_instanced_arrays static GLboolean _glewInit_GL_ARB_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawArraysInstancedARB = (PFNGLDRAWARRAYSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedARB")) == NULL) || r; r = ((glDrawElementsInstancedARB = (PFNGLDRAWELEMENTSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedARB")) == NULL) || r; r = ((glVertexAttribDivisorARB = (PFNGLVERTEXATTRIBDIVISORARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisorARB")) == NULL) || r; return r; } #endif /* GL_ARB_instanced_arrays */ #ifdef GL_ARB_internalformat_query static GLboolean _glewInit_GL_ARB_internalformat_query (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)glewGetProcAddress((const GLubyte*)"glGetInternalformativ")) == NULL) || r; return r; } #endif /* GL_ARB_internalformat_query */ #ifdef GL_ARB_internalformat_query2 static GLboolean _glewInit_GL_ARB_internalformat_query2 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)glewGetProcAddress((const GLubyte*)"glGetInternalformati64v")) == NULL) || r; return r; } #endif /* GL_ARB_internalformat_query2 */ #ifdef GL_ARB_invalidate_subdata static GLboolean _glewInit_GL_ARB_invalidate_subdata (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glInvalidateBufferData")) == NULL) || r; r = ((glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glInvalidateBufferSubData")) == NULL) || r; r = ((glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glInvalidateFramebuffer")) == NULL) || r; r = ((glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glInvalidateSubFramebuffer")) == NULL) || r; r = ((glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glInvalidateTexImage")) == NULL) || r; r = ((glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)glewGetProcAddress((const GLubyte*)"glInvalidateTexSubImage")) == NULL) || r; return r; } #endif /* GL_ARB_invalidate_subdata */ #ifdef GL_ARB_map_buffer_alignment #endif /* GL_ARB_map_buffer_alignment */ #ifdef GL_ARB_map_buffer_range static GLboolean _glewInit_GL_ARB_map_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRange")) == NULL) || r; r = ((glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glMapBufferRange")) == NULL) || r; return r; } #endif /* GL_ARB_map_buffer_range */ #ifdef GL_ARB_matrix_palette static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC)glewGetProcAddress((const GLubyte*)"glCurrentPaletteMatrixARB")) == NULL) || r; r = ((glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexPointerARB")) == NULL) || r; r = ((glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexubvARB")) == NULL) || r; r = ((glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexuivARB")) == NULL) || r; r = ((glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexusvARB")) == NULL) || r; return r; } #endif /* GL_ARB_matrix_palette */ #ifdef GL_ARB_multi_draw_indirect static GLboolean _glewInit_GL_ARB_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirect")) == NULL) || r; r = ((glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirect")) == NULL) || r; return r; } #endif /* GL_ARB_multi_draw_indirect */ #ifdef GL_ARB_multisample static GLboolean _glewInit_GL_ARB_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverageARB")) == NULL) || r; return r; } #endif /* GL_ARB_multisample */ #ifdef GL_ARB_multitexture static GLboolean _glewInit_GL_ARB_multitexture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glActiveTextureARB")) == NULL) || r; r = ((glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTextureARB")) == NULL) || r; r = ((glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dARB")) == NULL) || r; r = ((glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dvARB")) == NULL) || r; r = ((glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fARB")) == NULL) || r; r = ((glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fvARB")) == NULL) || r; r = ((glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iARB")) == NULL) || r; r = ((glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1ivARB")) == NULL) || r; r = ((glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sARB")) == NULL) || r; r = ((glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1svARB")) == NULL) || r; r = ((glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dARB")) == NULL) || r; r = ((glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dvARB")) == NULL) || r; r = ((glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fARB")) == NULL) || r; r = ((glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fvARB")) == NULL) || r; r = ((glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iARB")) == NULL) || r; r = ((glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2ivARB")) == NULL) || r; r = ((glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sARB")) == NULL) || r; r = ((glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2svARB")) == NULL) || r; r = ((glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dARB")) == NULL) || r; r = ((glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dvARB")) == NULL) || r; r = ((glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fARB")) == NULL) || r; r = ((glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fvARB")) == NULL) || r; r = ((glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iARB")) == NULL) || r; r = ((glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3ivARB")) == NULL) || r; r = ((glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sARB")) == NULL) || r; r = ((glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3svARB")) == NULL) || r; r = ((glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dARB")) == NULL) || r; r = ((glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dvARB")) == NULL) || r; r = ((glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fARB")) == NULL) || r; r = ((glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fvARB")) == NULL) || r; r = ((glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iARB")) == NULL) || r; r = ((glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4ivARB")) == NULL) || r; r = ((glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sARB")) == NULL) || r; r = ((glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4svARB")) == NULL) || r; return r; } #endif /* GL_ARB_multitexture */ #ifdef GL_ARB_occlusion_query static GLboolean _glewInit_GL_ARB_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryARB")) == NULL) || r; r = ((glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesARB")) == NULL) || r; r = ((glEndQueryARB = (PFNGLENDQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glEndQueryARB")) == NULL) || r; r = ((glGenQueriesARB = (PFNGLGENQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesARB")) == NULL) || r; r = ((glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivARB")) == NULL) || r; r = ((glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivARB")) == NULL) || r; r = ((glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivARB")) == NULL) || r; r = ((glIsQueryARB = (PFNGLISQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glIsQueryARB")) == NULL) || r; return r; } #endif /* GL_ARB_occlusion_query */ #ifdef GL_ARB_occlusion_query2 #endif /* GL_ARB_occlusion_query2 */ #ifdef GL_ARB_pixel_buffer_object #endif /* GL_ARB_pixel_buffer_object */ #ifdef GL_ARB_point_parameters static GLboolean _glewInit_GL_ARB_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfARB")) == NULL) || r; r = ((glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvARB")) == NULL) || r; return r; } #endif /* GL_ARB_point_parameters */ #ifdef GL_ARB_point_sprite #endif /* GL_ARB_point_sprite */ #ifdef GL_ARB_program_interface_query static GLboolean _glewInit_GL_ARB_program_interface_query (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInterfaceiv")) == NULL) || r; r = ((glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceIndex")) == NULL) || r; r = ((glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceLocation")) == NULL) || r; r = ((glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceLocationIndex")) == NULL) || r; r = ((glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceName")) == NULL) || r; r = ((glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceiv")) == NULL) || r; return r; } #endif /* GL_ARB_program_interface_query */ #ifdef GL_ARB_provoking_vertex static GLboolean _glewInit_GL_ARB_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)glewGetProcAddress((const GLubyte*)"glProvokingVertex")) == NULL) || r; return r; } #endif /* GL_ARB_provoking_vertex */ #ifdef GL_ARB_robust_buffer_access_behavior #endif /* GL_ARB_robust_buffer_access_behavior */ #ifdef GL_ARB_robustness static GLboolean _glewInit_GL_ARB_robustness (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC)glewGetProcAddress((const GLubyte*)"glGetGraphicsResetStatusARB")) == NULL) || r; r = ((glGetnColorTableARB = (PFNGLGETNCOLORTABLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnColorTableARB")) == NULL) || r; r = ((glGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnCompressedTexImageARB")) == NULL) || r; r = ((glGetnConvolutionFilterARB = (PFNGLGETNCONVOLUTIONFILTERARBPROC)glewGetProcAddress((const GLubyte*)"glGetnConvolutionFilterARB")) == NULL) || r; r = ((glGetnHistogramARB = (PFNGLGETNHISTOGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glGetnHistogramARB")) == NULL) || r; r = ((glGetnMapdvARB = (PFNGLGETNMAPDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapdvARB")) == NULL) || r; r = ((glGetnMapfvARB = (PFNGLGETNMAPFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapfvARB")) == NULL) || r; r = ((glGetnMapivARB = (PFNGLGETNMAPIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapivARB")) == NULL) || r; r = ((glGetnMinmaxARB = (PFNGLGETNMINMAXARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMinmaxARB")) == NULL) || r; r = ((glGetnPixelMapfvARB = (PFNGLGETNPIXELMAPFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapfvARB")) == NULL) || r; r = ((glGetnPixelMapuivARB = (PFNGLGETNPIXELMAPUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapuivARB")) == NULL) || r; r = ((glGetnPixelMapusvARB = (PFNGLGETNPIXELMAPUSVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapusvARB")) == NULL) || r; r = ((glGetnPolygonStippleARB = (PFNGLGETNPOLYGONSTIPPLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPolygonStippleARB")) == NULL) || r; r = ((glGetnSeparableFilterARB = (PFNGLGETNSEPARABLEFILTERARBPROC)glewGetProcAddress((const GLubyte*)"glGetnSeparableFilterARB")) == NULL) || r; r = ((glGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnTexImageARB")) == NULL) || r; r = ((glGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformdvARB")) == NULL) || r; r = ((glGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformfvARB")) == NULL) || r; r = ((glGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformivARB")) == NULL) || r; r = ((glGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformuivARB")) == NULL) || r; r = ((glReadnPixelsARB = (PFNGLREADNPIXELSARBPROC)glewGetProcAddress((const GLubyte*)"glReadnPixelsARB")) == NULL) || r; return r; } #endif /* GL_ARB_robustness */ #ifdef GL_ARB_robustness_application_isolation #endif /* GL_ARB_robustness_application_isolation */ #ifdef GL_ARB_robustness_share_group_isolation #endif /* GL_ARB_robustness_share_group_isolation */ #ifdef GL_ARB_sample_shading static GLboolean _glewInit_GL_ARB_sample_shading (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glMinSampleShadingARB = (PFNGLMINSAMPLESHADINGARBPROC)glewGetProcAddress((const GLubyte*)"glMinSampleShadingARB")) == NULL) || r; return r; } #endif /* GL_ARB_sample_shading */ #ifdef GL_ARB_sampler_objects static GLboolean _glewInit_GL_ARB_sampler_objects (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindSampler = (PFNGLBINDSAMPLERPROC)glewGetProcAddress((const GLubyte*)"glBindSampler")) == NULL) || r; r = ((glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteSamplers")) == NULL) || r; r = ((glGenSamplers = (PFNGLGENSAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glGenSamplers")) == NULL) || r; r = ((glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterIiv")) == NULL) || r; r = ((glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterIuiv")) == NULL) || r; r = ((glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterfv")) == NULL) || r; r = ((glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameteriv")) == NULL) || r; r = ((glIsSampler = (PFNGLISSAMPLERPROC)glewGetProcAddress((const GLubyte*)"glIsSampler")) == NULL) || r; r = ((glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterIiv")) == NULL) || r; r = ((glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterIuiv")) == NULL) || r; r = ((glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterf")) == NULL) || r; r = ((glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterfv")) == NULL) || r; r = ((glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameteri")) == NULL) || r; r = ((glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameteriv")) == NULL) || r; return r; } #endif /* GL_ARB_sampler_objects */ #ifdef GL_ARB_seamless_cube_map #endif /* GL_ARB_seamless_cube_map */ #ifdef GL_ARB_separate_shader_objects static GLboolean _glewInit_GL_ARB_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glActiveShaderProgram")) == NULL) || r; r = ((glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glBindProgramPipeline")) == NULL) || r; r = ((glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderProgramv")) == NULL) || r; r = ((glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramPipelines")) == NULL) || r; r = ((glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)glewGetProcAddress((const GLubyte*)"glGenProgramPipelines")) == NULL) || r; r = ((glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramPipelineInfoLog")) == NULL) || r; r = ((glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramPipelineiv")) == NULL) || r; r = ((glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glIsProgramPipeline")) == NULL) || r; r = ((glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1d")) == NULL) || r; r = ((glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1dv")) == NULL) || r; r = ((glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1f")) == NULL) || r; r = ((glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fv")) == NULL) || r; r = ((glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i")) == NULL) || r; r = ((glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iv")) == NULL) || r; r = ((glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui")) == NULL) || r; r = ((glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiv")) == NULL) || r; r = ((glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2d")) == NULL) || r; r = ((glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2dv")) == NULL) || r; r = ((glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2f")) == NULL) || r; r = ((glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fv")) == NULL) || r; r = ((glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i")) == NULL) || r; r = ((glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iv")) == NULL) || r; r = ((glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui")) == NULL) || r; r = ((glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiv")) == NULL) || r; r = ((glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3d")) == NULL) || r; r = ((glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3dv")) == NULL) || r; r = ((glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3f")) == NULL) || r; r = ((glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fv")) == NULL) || r; r = ((glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i")) == NULL) || r; r = ((glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iv")) == NULL) || r; r = ((glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui")) == NULL) || r; r = ((glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiv")) == NULL) || r; r = ((glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4d")) == NULL) || r; r = ((glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4dv")) == NULL) || r; r = ((glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4f")) == NULL) || r; r = ((glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fv")) == NULL) || r; r = ((glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i")) == NULL) || r; r = ((glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iv")) == NULL) || r; r = ((glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui")) == NULL) || r; r = ((glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiv")) == NULL) || r; r = ((glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2dv")) == NULL) || r; r = ((glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fv")) == NULL) || r; r = ((glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3dv")) == NULL) || r; r = ((glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fv")) == NULL) || r; r = ((glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4dv")) == NULL) || r; r = ((glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fv")) == NULL) || r; r = ((glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3dv")) == NULL) || r; r = ((glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fv")) == NULL) || r; r = ((glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2dv")) == NULL) || r; r = ((glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fv")) == NULL) || r; r = ((glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4dv")) == NULL) || r; r = ((glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fv")) == NULL) || r; r = ((glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4dv")) == NULL) || r; r = ((glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fv")) == NULL) || r; r = ((glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2dv")) == NULL) || r; r = ((glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fv")) == NULL) || r; r = ((glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3dv")) == NULL) || r; r = ((glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fv")) == NULL) || r; r = ((glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)glewGetProcAddress((const GLubyte*)"glUseProgramStages")) == NULL) || r; r = ((glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramPipeline")) == NULL) || r; return r; } #endif /* GL_ARB_separate_shader_objects */ #ifdef GL_ARB_shader_atomic_counters static GLboolean _glewInit_GL_ARB_shader_atomic_counters (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAtomicCounterBufferiv")) == NULL) || r; return r; } #endif /* GL_ARB_shader_atomic_counters */ #ifdef GL_ARB_shader_bit_encoding #endif /* GL_ARB_shader_bit_encoding */ #ifdef GL_ARB_shader_image_load_store static GLboolean _glewInit_GL_ARB_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glBindImageTexture")) == NULL) || r; r = ((glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)glewGetProcAddress((const GLubyte*)"glMemoryBarrier")) == NULL) || r; return r; } #endif /* GL_ARB_shader_image_load_store */ #ifdef GL_ARB_shader_image_size #endif /* GL_ARB_shader_image_size */ #ifdef GL_ARB_shader_objects static GLboolean _glewInit_GL_ARB_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glAttachObjectARB")) == NULL) || r; r = ((glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderARB")) == NULL) || r; r = ((glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateProgramObjectARB")) == NULL) || r; r = ((glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderObjectARB")) == NULL) || r; r = ((glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteObjectARB")) == NULL) || r; r = ((glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDetachObjectARB")) == NULL) || r; r = ((glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformARB")) == NULL) || r; r = ((glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedObjectsARB")) == NULL) || r; r = ((glGetHandleARB = (PFNGLGETHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetHandleARB")) == NULL) || r; r = ((glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetInfoLogARB")) == NULL) || r; r = ((glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterfvARB")) == NULL) || r; r = ((glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivARB")) == NULL) || r; r = ((glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSourceARB")) == NULL) || r; r = ((glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocationARB")) == NULL) || r; r = ((glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfvARB")) == NULL) || r; r = ((glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformivARB")) == NULL) || r; r = ((glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glLinkProgramARB")) == NULL) || r; r = ((glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glShaderSourceARB")) == NULL) || r; r = ((glUniform1fARB = (PFNGLUNIFORM1FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fARB")) == NULL) || r; r = ((glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fvARB")) == NULL) || r; r = ((glUniform1iARB = (PFNGLUNIFORM1IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1iARB")) == NULL) || r; r = ((glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1ivARB")) == NULL) || r; r = ((glUniform2fARB = (PFNGLUNIFORM2FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fARB")) == NULL) || r; r = ((glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fvARB")) == NULL) || r; r = ((glUniform2iARB = (PFNGLUNIFORM2IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2iARB")) == NULL) || r; r = ((glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2ivARB")) == NULL) || r; r = ((glUniform3fARB = (PFNGLUNIFORM3FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fARB")) == NULL) || r; r = ((glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fvARB")) == NULL) || r; r = ((glUniform3iARB = (PFNGLUNIFORM3IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3iARB")) == NULL) || r; r = ((glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3ivARB")) == NULL) || r; r = ((glUniform4fARB = (PFNGLUNIFORM4FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fARB")) == NULL) || r; r = ((glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fvARB")) == NULL) || r; r = ((glUniform4iARB = (PFNGLUNIFORM4IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4iARB")) == NULL) || r; r = ((glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4ivARB")) == NULL) || r; r = ((glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fvARB")) == NULL) || r; r = ((glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fvARB")) == NULL) || r; r = ((glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fvARB")) == NULL) || r; r = ((glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glUseProgramObjectARB")) == NULL) || r; r = ((glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramARB")) == NULL) || r; return r; } #endif /* GL_ARB_shader_objects */ #ifdef GL_ARB_shader_precision #endif /* GL_ARB_shader_precision */ #ifdef GL_ARB_shader_stencil_export #endif /* GL_ARB_shader_stencil_export */ #ifdef GL_ARB_shader_storage_buffer_object static GLboolean _glewInit_GL_ARB_shader_storage_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)glewGetProcAddress((const GLubyte*)"glShaderStorageBlockBinding")) == NULL) || r; return r; } #endif /* GL_ARB_shader_storage_buffer_object */ #ifdef GL_ARB_shader_subroutine static GLboolean _glewInit_GL_ARB_shader_subroutine (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineName")) == NULL) || r; r = ((glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineUniformName")) == NULL) || r; r = ((glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineUniformiv")) == NULL) || r; r = ((glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStageiv")) == NULL) || r; r = ((glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetSubroutineIndex")) == NULL) || r; r = ((glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetSubroutineUniformLocation")) == NULL) || r; r = ((glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformSubroutineuiv")) == NULL) || r; r = ((glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)glewGetProcAddress((const GLubyte*)"glUniformSubroutinesuiv")) == NULL) || r; return r; } #endif /* GL_ARB_shader_subroutine */ #ifdef GL_ARB_shader_texture_lod #endif /* GL_ARB_shader_texture_lod */ #ifdef GL_ARB_shading_language_100 #endif /* GL_ARB_shading_language_100 */ #ifdef GL_ARB_shading_language_420pack #endif /* GL_ARB_shading_language_420pack */ #ifdef GL_ARB_shading_language_include static GLboolean _glewInit_GL_ARB_shading_language_include (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCompileShaderIncludeARB = (PFNGLCOMPILESHADERINCLUDEARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderIncludeARB")) == NULL) || r; r = ((glDeleteNamedStringARB = (PFNGLDELETENAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteNamedStringARB")) == NULL) || r; r = ((glGetNamedStringARB = (PFNGLGETNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetNamedStringARB")) == NULL) || r; r = ((glGetNamedStringivARB = (PFNGLGETNAMEDSTRINGIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetNamedStringivARB")) == NULL) || r; r = ((glIsNamedStringARB = (PFNGLISNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glIsNamedStringARB")) == NULL) || r; r = ((glNamedStringARB = (PFNGLNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glNamedStringARB")) == NULL) || r; return r; } #endif /* GL_ARB_shading_language_include */ #ifdef GL_ARB_shading_language_packing #endif /* GL_ARB_shading_language_packing */ #ifdef GL_ARB_shadow #endif /* GL_ARB_shadow */ #ifdef GL_ARB_shadow_ambient #endif /* GL_ARB_shadow_ambient */ #ifdef GL_ARB_stencil_texturing #endif /* GL_ARB_stencil_texturing */ #ifdef GL_ARB_sync static GLboolean _glewInit_GL_ARB_sync (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"glClientWaitSync")) == NULL) || r; r = ((glDeleteSync = (PFNGLDELETESYNCPROC)glewGetProcAddress((const GLubyte*)"glDeleteSync")) == NULL) || r; r = ((glFenceSync = (PFNGLFENCESYNCPROC)glewGetProcAddress((const GLubyte*)"glFenceSync")) == NULL) || r; r = ((glGetInteger64v = (PFNGLGETINTEGER64VPROC)glewGetProcAddress((const GLubyte*)"glGetInteger64v")) == NULL) || r; r = ((glGetSynciv = (PFNGLGETSYNCIVPROC)glewGetProcAddress((const GLubyte*)"glGetSynciv")) == NULL) || r; r = ((glIsSync = (PFNGLISSYNCPROC)glewGetProcAddress((const GLubyte*)"glIsSync")) == NULL) || r; r = ((glWaitSync = (PFNGLWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"glWaitSync")) == NULL) || r; return r; } #endif /* GL_ARB_sync */ #ifdef GL_ARB_tessellation_shader static GLboolean _glewInit_GL_ARB_tessellation_shader (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPatchParameterfv")) == NULL) || r; r = ((glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPatchParameteri")) == NULL) || r; return r; } #endif /* GL_ARB_tessellation_shader */ #ifdef GL_ARB_texture_border_clamp #endif /* GL_ARB_texture_border_clamp */ #ifdef GL_ARB_texture_buffer_object static GLboolean _glewInit_GL_ARB_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexBufferARB = (PFNGLTEXBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glTexBufferARB")) == NULL) || r; return r; } #endif /* GL_ARB_texture_buffer_object */ #ifdef GL_ARB_texture_buffer_object_rgb32 #endif /* GL_ARB_texture_buffer_object_rgb32 */ #ifdef GL_ARB_texture_buffer_range static GLboolean _glewInit_GL_ARB_texture_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glTexBufferRange")) == NULL) || r; r = ((glTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferRangeEXT")) == NULL) || r; return r; } #endif /* GL_ARB_texture_buffer_range */ #ifdef GL_ARB_texture_compression static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1DARB")) == NULL) || r; r = ((glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2DARB")) == NULL) || r; r = ((glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3DARB")) == NULL) || r; r = ((glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1DARB")) == NULL) || r; r = ((glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2DARB")) == NULL) || r; r = ((glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3DARB")) == NULL) || r; r = ((glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImageARB")) == NULL) || r; return r; } #endif /* GL_ARB_texture_compression */ #ifdef GL_ARB_texture_compression_bptc #endif /* GL_ARB_texture_compression_bptc */ #ifdef GL_ARB_texture_compression_rgtc #endif /* GL_ARB_texture_compression_rgtc */ #ifdef GL_ARB_texture_cube_map #endif /* GL_ARB_texture_cube_map */ #ifdef GL_ARB_texture_cube_map_array #endif /* GL_ARB_texture_cube_map_array */ #ifdef GL_ARB_texture_env_add #endif /* GL_ARB_texture_env_add */ #ifdef GL_ARB_texture_env_combine #endif /* GL_ARB_texture_env_combine */ #ifdef GL_ARB_texture_env_crossbar #endif /* GL_ARB_texture_env_crossbar */ #ifdef GL_ARB_texture_env_dot3 #endif /* GL_ARB_texture_env_dot3 */ #ifdef GL_ARB_texture_float #endif /* GL_ARB_texture_float */ #ifdef GL_ARB_texture_gather #endif /* GL_ARB_texture_gather */ #ifdef GL_ARB_texture_mirrored_repeat #endif /* GL_ARB_texture_mirrored_repeat */ #ifdef GL_ARB_texture_multisample static GLboolean _glewInit_GL_ARB_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)glewGetProcAddress((const GLubyte*)"glGetMultisamplefv")) == NULL) || r; r = ((glSampleMaski = (PFNGLSAMPLEMASKIPROC)glewGetProcAddress((const GLubyte*)"glSampleMaski")) == NULL) || r; r = ((glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexImage2DMultisample")) == NULL) || r; r = ((glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DMultisample")) == NULL) || r; return r; } #endif /* GL_ARB_texture_multisample */ #ifdef GL_ARB_texture_non_power_of_two #endif /* GL_ARB_texture_non_power_of_two */ #ifdef GL_ARB_texture_query_levels #endif /* GL_ARB_texture_query_levels */ #ifdef GL_ARB_texture_query_lod #endif /* GL_ARB_texture_query_lod */ #ifdef GL_ARB_texture_rectangle #endif /* GL_ARB_texture_rectangle */ #ifdef GL_ARB_texture_rg #endif /* GL_ARB_texture_rg */ #ifdef GL_ARB_texture_rgb10_a2ui #endif /* GL_ARB_texture_rgb10_a2ui */ #ifdef GL_ARB_texture_storage static GLboolean _glewInit_GL_ARB_texture_storage (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage1D")) == NULL) || r; r = ((glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage2D")) == NULL) || r; r = ((glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage3D")) == NULL) || r; r = ((glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage1DEXT")) == NULL) || r; r = ((glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage2DEXT")) == NULL) || r; r = ((glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage3DEXT")) == NULL) || r; return r; } #endif /* GL_ARB_texture_storage */ #ifdef GL_ARB_texture_storage_multisample static GLboolean _glewInit_GL_ARB_texture_storage_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexStorage2DMultisample")) == NULL) || r; r = ((glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexStorage3DMultisample")) == NULL) || r; r = ((glTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage2DMultisampleEXT")) == NULL) || r; r = ((glTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage3DMultisampleEXT")) == NULL) || r; return r; } #endif /* GL_ARB_texture_storage_multisample */ #ifdef GL_ARB_texture_swizzle #endif /* GL_ARB_texture_swizzle */ #ifdef GL_ARB_texture_view static GLboolean _glewInit_GL_ARB_texture_view (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTextureView = (PFNGLTEXTUREVIEWPROC)glewGetProcAddress((const GLubyte*)"glTextureView")) == NULL) || r; return r; } #endif /* GL_ARB_texture_view */ #ifdef GL_ARB_timer_query static GLboolean _glewInit_GL_ARB_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64v")) == NULL) || r; r = ((glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64v")) == NULL) || r; r = ((glQueryCounter = (PFNGLQUERYCOUNTERPROC)glewGetProcAddress((const GLubyte*)"glQueryCounter")) == NULL) || r; return r; } #endif /* GL_ARB_timer_query */ #ifdef GL_ARB_transform_feedback2 static GLboolean _glewInit_GL_ARB_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBindTransformFeedback")) == NULL) || r; r = ((glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)glewGetProcAddress((const GLubyte*)"glDeleteTransformFeedbacks")) == NULL) || r; r = ((glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedback")) == NULL) || r; r = ((glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)glewGetProcAddress((const GLubyte*)"glGenTransformFeedbacks")) == NULL) || r; r = ((glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glIsTransformFeedback")) == NULL) || r; r = ((glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glPauseTransformFeedback")) == NULL) || r; r = ((glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glResumeTransformFeedback")) == NULL) || r; return r; } #endif /* GL_ARB_transform_feedback2 */ #ifdef GL_ARB_transform_feedback3 static GLboolean _glewInit_GL_ARB_transform_feedback3 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryIndexed")) == NULL) || r; r = ((glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackStream")) == NULL) || r; r = ((glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glEndQueryIndexed")) == NULL) || r; r = ((glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryIndexediv")) == NULL) || r; return r; } #endif /* GL_ARB_transform_feedback3 */ #ifdef GL_ARB_transform_feedback_instanced static GLboolean _glewInit_GL_ARB_transform_feedback_instanced (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackInstanced")) == NULL) || r; r = ((glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackStreamInstanced")) == NULL) || r; return r; } #endif /* GL_ARB_transform_feedback_instanced */ #ifdef GL_ARB_transpose_matrix static GLboolean _glewInit_GL_ARB_transpose_matrix (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixdARB")) == NULL) || r; r = ((glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixfARB")) == NULL) || r; r = ((glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixdARB")) == NULL) || r; r = ((glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixfARB")) == NULL) || r; return r; } #endif /* GL_ARB_transpose_matrix */ #ifdef GL_ARB_uniform_buffer_object static GLboolean _glewInit_GL_ARB_uniform_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBase")) == NULL) || r; r = ((glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRange")) == NULL) || r; r = ((glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformBlockName")) == NULL) || r; r = ((glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformBlockiv")) == NULL) || r; r = ((glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformName")) == NULL) || r; r = ((glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformsiv")) == NULL) || r; r = ((glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)glewGetProcAddress((const GLubyte*)"glGetIntegeri_v")) == NULL) || r; r = ((glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBlockIndex")) == NULL) || r; r = ((glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)glewGetProcAddress((const GLubyte*)"glGetUniformIndices")) == NULL) || r; r = ((glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)glewGetProcAddress((const GLubyte*)"glUniformBlockBinding")) == NULL) || r; return r; } #endif /* GL_ARB_uniform_buffer_object */ #ifdef GL_ARB_vertex_array_bgra #endif /* GL_ARB_vertex_array_bgra */ #ifdef GL_ARB_vertex_array_object static GLboolean _glewInit_GL_ARB_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArray")) == NULL) || r; r = ((glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArrays")) == NULL) || r; r = ((glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArrays")) == NULL) || r; r = ((glIsVertexArray = (PFNGLISVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArray")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_array_object */ #ifdef GL_ARB_vertex_attrib_64bit static GLboolean _glewInit_GL_ARB_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLdv")) == NULL) || r; r = ((glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1d")) == NULL) || r; r = ((glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dv")) == NULL) || r; r = ((glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2d")) == NULL) || r; r = ((glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dv")) == NULL) || r; r = ((glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3d")) == NULL) || r; r = ((glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dv")) == NULL) || r; r = ((glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4d")) == NULL) || r; r = ((glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dv")) == NULL) || r; r = ((glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLPointer")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_attrib_64bit */ #ifdef GL_ARB_vertex_attrib_binding static GLboolean _glewInit_GL_ARB_vertex_attrib_binding (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindVertexBuffer")) == NULL) || r; r = ((glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribBinding")) == NULL) || r; r = ((glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribFormat")) == NULL) || r; r = ((glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIFormat")) == NULL) || r; r = ((glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLFormat")) == NULL) || r; r = ((glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)glewGetProcAddress((const GLubyte*)"glVertexBindingDivisor")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_attrib_binding */ #ifdef GL_ARB_vertex_blend static GLboolean _glewInit_GL_ARB_vertex_blend (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendARB")) == NULL) || r; r = ((glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glWeightPointerARB")) == NULL) || r; r = ((glWeightbvARB = (PFNGLWEIGHTBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightbvARB")) == NULL) || r; r = ((glWeightdvARB = (PFNGLWEIGHTDVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightdvARB")) == NULL) || r; r = ((glWeightfvARB = (PFNGLWEIGHTFVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightfvARB")) == NULL) || r; r = ((glWeightivARB = (PFNGLWEIGHTIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightivARB")) == NULL) || r; r = ((glWeightsvARB = (PFNGLWEIGHTSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightsvARB")) == NULL) || r; r = ((glWeightubvARB = (PFNGLWEIGHTUBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightubvARB")) == NULL) || r; r = ((glWeightuivARB = (PFNGLWEIGHTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightuivARB")) == NULL) || r; r = ((glWeightusvARB = (PFNGLWEIGHTUSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightusvARB")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_blend */ #ifdef GL_ARB_vertex_buffer_object static GLboolean _glewInit_GL_ARB_vertex_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindBufferARB = (PFNGLBINDBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glBindBufferARB")) == NULL) || r; r = ((glBufferDataARB = (PFNGLBUFFERDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferDataARB")) == NULL) || r; r = ((glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferSubDataARB")) == NULL) || r; r = ((glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffersARB")) == NULL) || r; r = ((glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glGenBuffersARB")) == NULL) || r; r = ((glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterivARB")) == NULL) || r; r = ((glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointervARB")) == NULL) || r; r = ((glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubDataARB")) == NULL) || r; r = ((glIsBufferARB = (PFNGLISBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glIsBufferARB")) == NULL) || r; r = ((glMapBufferARB = (PFNGLMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glMapBufferARB")) == NULL) || r; r = ((glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glUnmapBufferARB")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_buffer_object */ #ifdef GL_ARB_vertex_program static GLboolean _glewInit_GL_ARB_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glBindProgramARB")) == NULL) || r; r = ((glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsARB")) == NULL) || r; r = ((glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArrayARB")) == NULL) || r; r = ((glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArrayARB")) == NULL) || r; r = ((glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsARB")) == NULL) || r; r = ((glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterdvARB")) == NULL) || r; r = ((glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterfvARB")) == NULL) || r; r = ((glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterdvARB")) == NULL) || r; r = ((glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterfvARB")) == NULL) || r; r = ((glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringARB")) == NULL) || r; r = ((glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivARB")) == NULL) || r; r = ((glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervARB")) == NULL) || r; r = ((glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvARB")) == NULL) || r; r = ((glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvARB")) == NULL) || r; r = ((glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivARB")) == NULL) || r; r = ((glIsProgramARB = (PFNGLISPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glIsProgramARB")) == NULL) || r; r = ((glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dARB")) == NULL) || r; r = ((glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dvARB")) == NULL) || r; r = ((glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fARB")) == NULL) || r; r = ((glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fvARB")) == NULL) || r; r = ((glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dARB")) == NULL) || r; r = ((glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dvARB")) == NULL) || r; r = ((glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fARB")) == NULL) || r; r = ((glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fvARB")) == NULL) || r; r = ((glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glProgramStringARB")) == NULL) || r; r = ((glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dARB")) == NULL) || r; r = ((glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvARB")) == NULL) || r; r = ((glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fARB")) == NULL) || r; r = ((glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvARB")) == NULL) || r; r = ((glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sARB")) == NULL) || r; r = ((glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svARB")) == NULL) || r; r = ((glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dARB")) == NULL) || r; r = ((glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvARB")) == NULL) || r; r = ((glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fARB")) == NULL) || r; r = ((glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvARB")) == NULL) || r; r = ((glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sARB")) == NULL) || r; r = ((glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svARB")) == NULL) || r; r = ((glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dARB")) == NULL) || r; r = ((glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvARB")) == NULL) || r; r = ((glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fARB")) == NULL) || r; r = ((glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvARB")) == NULL) || r; r = ((glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sARB")) == NULL) || r; r = ((glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svARB")) == NULL) || r; r = ((glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NbvARB")) == NULL) || r; r = ((glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NivARB")) == NULL) || r; r = ((glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NsvARB")) == NULL) || r; r = ((glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubARB")) == NULL) || r; r = ((glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubvARB")) == NULL) || r; r = ((glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NuivARB")) == NULL) || r; r = ((glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NusvARB")) == NULL) || r; r = ((glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bvARB")) == NULL) || r; r = ((glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dARB")) == NULL) || r; r = ((glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvARB")) == NULL) || r; r = ((glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fARB")) == NULL) || r; r = ((glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvARB")) == NULL) || r; r = ((glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ivARB")) == NULL) || r; r = ((glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sARB")) == NULL) || r; r = ((glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svARB")) == NULL) || r; r = ((glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvARB")) == NULL) || r; r = ((glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uivARB")) == NULL) || r; r = ((glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usvARB")) == NULL) || r; r = ((glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerARB")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_program */ #ifdef GL_ARB_vertex_shader static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocationARB")) == NULL) || r; r = ((glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttribARB")) == NULL) || r; r = ((glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocationARB")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_shader */ #ifdef GL_ARB_vertex_type_2_10_10_10_rev static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColorP3ui = (PFNGLCOLORP3UIPROC)glewGetProcAddress((const GLubyte*)"glColorP3ui")) == NULL) || r; r = ((glColorP3uiv = (PFNGLCOLORP3UIVPROC)glewGetProcAddress((const GLubyte*)"glColorP3uiv")) == NULL) || r; r = ((glColorP4ui = (PFNGLCOLORP4UIPROC)glewGetProcAddress((const GLubyte*)"glColorP4ui")) == NULL) || r; r = ((glColorP4uiv = (PFNGLCOLORP4UIVPROC)glewGetProcAddress((const GLubyte*)"glColorP4uiv")) == NULL) || r; r = ((glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP1ui")) == NULL) || r; r = ((glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP1uiv")) == NULL) || r; r = ((glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP2ui")) == NULL) || r; r = ((glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP2uiv")) == NULL) || r; r = ((glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP3ui")) == NULL) || r; r = ((glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP3uiv")) == NULL) || r; r = ((glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP4ui")) == NULL) || r; r = ((glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP4uiv")) == NULL) || r; r = ((glNormalP3ui = (PFNGLNORMALP3UIPROC)glewGetProcAddress((const GLubyte*)"glNormalP3ui")) == NULL) || r; r = ((glNormalP3uiv = (PFNGLNORMALP3UIVPROC)glewGetProcAddress((const GLubyte*)"glNormalP3uiv")) == NULL) || r; r = ((glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorP3ui")) == NULL) || r; r = ((glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorP3uiv")) == NULL) || r; r = ((glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP1ui")) == NULL) || r; r = ((glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP1uiv")) == NULL) || r; r = ((glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP2ui")) == NULL) || r; r = ((glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP2uiv")) == NULL) || r; r = ((glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP3ui")) == NULL) || r; r = ((glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP3uiv")) == NULL) || r; r = ((glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP4ui")) == NULL) || r; r = ((glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP4uiv")) == NULL) || r; r = ((glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP1ui")) == NULL) || r; r = ((glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP1uiv")) == NULL) || r; r = ((glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP2ui")) == NULL) || r; r = ((glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP2uiv")) == NULL) || r; r = ((glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP3ui")) == NULL) || r; r = ((glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP3uiv")) == NULL) || r; r = ((glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP4ui")) == NULL) || r; r = ((glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP4uiv")) == NULL) || r; r = ((glVertexP2ui = (PFNGLVERTEXP2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP2ui")) == NULL) || r; r = ((glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP2uiv")) == NULL) || r; r = ((glVertexP3ui = (PFNGLVERTEXP3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP3ui")) == NULL) || r; r = ((glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP3uiv")) == NULL) || r; r = ((glVertexP4ui = (PFNGLVERTEXP4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP4ui")) == NULL) || r; r = ((glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP4uiv")) == NULL) || r; return r; } #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ #ifdef GL_ARB_viewport_array static GLboolean _glewInit_GL_ARB_viewport_array (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangeArrayv")) == NULL) || r; r = ((glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glDepthRangeIndexed")) == NULL) || r; r = ((glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)glewGetProcAddress((const GLubyte*)"glGetDoublei_v")) == NULL) || r; r = ((glGetFloati_v = (PFNGLGETFLOATI_VPROC)glewGetProcAddress((const GLubyte*)"glGetFloati_v")) == NULL) || r; r = ((glScissorArrayv = (PFNGLSCISSORARRAYVPROC)glewGetProcAddress((const GLubyte*)"glScissorArrayv")) == NULL) || r; r = ((glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glScissorIndexed")) == NULL) || r; r = ((glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)glewGetProcAddress((const GLubyte*)"glScissorIndexedv")) == NULL) || r; r = ((glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)glewGetProcAddress((const GLubyte*)"glViewportArrayv")) == NULL) || r; r = ((glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)glewGetProcAddress((const GLubyte*)"glViewportIndexedf")) == NULL) || r; r = ((glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)glewGetProcAddress((const GLubyte*)"glViewportIndexedfv")) == NULL) || r; return r; } #endif /* GL_ARB_viewport_array */ #ifdef GL_ARB_window_pos static GLboolean _glewInit_GL_ARB_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dARB")) == NULL) || r; r = ((glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvARB")) == NULL) || r; r = ((glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fARB")) == NULL) || r; r = ((glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvARB")) == NULL) || r; r = ((glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iARB")) == NULL) || r; r = ((glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivARB")) == NULL) || r; r = ((glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sARB")) == NULL) || r; r = ((glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svARB")) == NULL) || r; r = ((glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dARB")) == NULL) || r; r = ((glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvARB")) == NULL) || r; r = ((glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fARB")) == NULL) || r; r = ((glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvARB")) == NULL) || r; r = ((glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iARB")) == NULL) || r; r = ((glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivARB")) == NULL) || r; r = ((glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sARB")) == NULL) || r; r = ((glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svARB")) == NULL) || r; return r; } #endif /* GL_ARB_window_pos */ #ifdef GL_ATIX_point_sprites #endif /* GL_ATIX_point_sprites */ #ifdef GL_ATIX_texture_env_combine3 #endif /* GL_ATIX_texture_env_combine3 */ #ifdef GL_ATIX_texture_env_route #endif /* GL_ATIX_texture_env_route */ #ifdef GL_ATIX_vertex_shader_output_point_size #endif /* GL_ATIX_vertex_shader_output_point_size */ #ifdef GL_ATI_draw_buffers static GLboolean _glewInit_GL_ATI_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersATI")) == NULL) || r; return r; } #endif /* GL_ATI_draw_buffers */ #ifdef GL_ATI_element_array static GLboolean _glewInit_GL_ATI_element_array (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayATI")) == NULL) || r; r = ((glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayATI")) == NULL) || r; r = ((glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)glewGetProcAddress((const GLubyte*)"glElementPointerATI")) == NULL) || r; return r; } #endif /* GL_ATI_element_array */ #ifdef GL_ATI_envmap_bumpmap static GLboolean _glewInit_GL_ATI_envmap_bumpmap (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterfvATI")) == NULL) || r; r = ((glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterivATI")) == NULL) || r; r = ((glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterfvATI")) == NULL) || r; r = ((glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterivATI")) == NULL) || r; return r; } #endif /* GL_ATI_envmap_bumpmap */ #ifdef GL_ATI_fragment_shader static GLboolean _glewInit_GL_ATI_fragment_shader (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp1ATI")) == NULL) || r; r = ((glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp2ATI")) == NULL) || r; r = ((glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp3ATI")) == NULL) || r; r = ((glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBeginFragmentShaderATI")) == NULL) || r; r = ((glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBindFragmentShaderATI")) == NULL) || r; r = ((glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp1ATI")) == NULL) || r; r = ((glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp2ATI")) == NULL) || r; r = ((glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp3ATI")) == NULL) || r; r = ((glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glDeleteFragmentShaderATI")) == NULL) || r; r = ((glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glEndFragmentShaderATI")) == NULL) || r; r = ((glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)glewGetProcAddress((const GLubyte*)"glGenFragmentShadersATI")) == NULL) || r; r = ((glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)glewGetProcAddress((const GLubyte*)"glPassTexCoordATI")) == NULL) || r; r = ((glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)glewGetProcAddress((const GLubyte*)"glSampleMapATI")) == NULL) || r; r = ((glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)glewGetProcAddress((const GLubyte*)"glSetFragmentShaderConstantATI")) == NULL) || r; return r; } #endif /* GL_ATI_fragment_shader */ #ifdef GL_ATI_map_object_buffer static GLboolean _glewInit_GL_ATI_map_object_buffer (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glMapObjectBufferATI")) == NULL) || r; r = ((glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUnmapObjectBufferATI")) == NULL) || r; return r; } #endif /* GL_ATI_map_object_buffer */ #ifdef GL_ATI_meminfo #endif /* GL_ATI_meminfo */ #ifdef GL_ATI_pn_triangles static GLboolean _glewInit_GL_ATI_pn_triangles (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesfATI")) == NULL) || r; r = ((glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesiATI")) == NULL) || r; return r; } #endif /* GL_ATI_pn_triangles */ #ifdef GL_ATI_separate_stencil static GLboolean _glewInit_GL_ATI_separate_stencil (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparateATI")) == NULL) || r; r = ((glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparateATI")) == NULL) || r; return r; } #endif /* GL_ATI_separate_stencil */ #ifdef GL_ATI_shader_texture_lod #endif /* GL_ATI_shader_texture_lod */ #ifdef GL_ATI_text_fragment_shader #endif /* GL_ATI_text_fragment_shader */ #ifdef GL_ATI_texture_compression_3dc #endif /* GL_ATI_texture_compression_3dc */ #ifdef GL_ATI_texture_env_combine3 #endif /* GL_ATI_texture_env_combine3 */ #ifdef GL_ATI_texture_float #endif /* GL_ATI_texture_float */ #ifdef GL_ATI_texture_mirror_once #endif /* GL_ATI_texture_mirror_once */ #ifdef GL_ATI_vertex_array_object static GLboolean _glewInit_GL_ATI_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glArrayObjectATI")) == NULL) || r; r = ((glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glFreeObjectBufferATI")) == NULL) || r; r = ((glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectfvATI")) == NULL) || r; r = ((glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectivATI")) == NULL) || r; r = ((glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferfvATI")) == NULL) || r; r = ((glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferivATI")) == NULL) || r; r = ((glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectfvATI")) == NULL) || r; r = ((glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectivATI")) == NULL) || r; r = ((glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glIsObjectBufferATI")) == NULL) || r; r = ((glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glNewObjectBufferATI")) == NULL) || r; r = ((glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUpdateObjectBufferATI")) == NULL) || r; r = ((glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVariantArrayObjectATI")) == NULL) || r; return r; } #endif /* GL_ATI_vertex_array_object */ #ifdef GL_ATI_vertex_attrib_array_object static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectfvATI")) == NULL) || r; r = ((glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectivATI")) == NULL) || r; r = ((glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribArrayObjectATI")) == NULL) || r; return r; } #endif /* GL_ATI_vertex_attrib_array_object */ #ifdef GL_ATI_vertex_streams static GLboolean _glewInit_GL_ATI_vertex_streams (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)glewGetProcAddress((const GLubyte*)"glClientActiveVertexStreamATI")) == NULL) || r; r = ((glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bATI")) == NULL) || r; r = ((glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bvATI")) == NULL) || r; r = ((glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dATI")) == NULL) || r; r = ((glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dvATI")) == NULL) || r; r = ((glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fATI")) == NULL) || r; r = ((glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fvATI")) == NULL) || r; r = ((glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3iATI")) == NULL) || r; r = ((glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3ivATI")) == NULL) || r; r = ((glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3sATI")) == NULL) || r; r = ((glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3svATI")) == NULL) || r; r = ((glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnvfATI")) == NULL) || r; r = ((glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnviATI")) == NULL) || r; r = ((glVertexStream1dATI = (PFNGLVERTEXSTREAM1DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1dATI")) == NULL) || r; r = ((glVertexStream1dvATI = (PFNGLVERTEXSTREAM1DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1dvATI")) == NULL) || r; r = ((glVertexStream1fATI = (PFNGLVERTEXSTREAM1FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1fATI")) == NULL) || r; r = ((glVertexStream1fvATI = (PFNGLVERTEXSTREAM1FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1fvATI")) == NULL) || r; r = ((glVertexStream1iATI = (PFNGLVERTEXSTREAM1IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1iATI")) == NULL) || r; r = ((glVertexStream1ivATI = (PFNGLVERTEXSTREAM1IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1ivATI")) == NULL) || r; r = ((glVertexStream1sATI = (PFNGLVERTEXSTREAM1SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1sATI")) == NULL) || r; r = ((glVertexStream1svATI = (PFNGLVERTEXSTREAM1SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1svATI")) == NULL) || r; r = ((glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dATI")) == NULL) || r; r = ((glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dvATI")) == NULL) || r; r = ((glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fATI")) == NULL) || r; r = ((glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fvATI")) == NULL) || r; r = ((glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2iATI")) == NULL) || r; r = ((glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2ivATI")) == NULL) || r; r = ((glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2sATI")) == NULL) || r; r = ((glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2svATI")) == NULL) || r; r = ((glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dATI")) == NULL) || r; r = ((glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dvATI")) == NULL) || r; r = ((glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fATI")) == NULL) || r; r = ((glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fvATI")) == NULL) || r; r = ((glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3iATI")) == NULL) || r; r = ((glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3ivATI")) == NULL) || r; r = ((glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3sATI")) == NULL) || r; r = ((glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3svATI")) == NULL) || r; r = ((glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dATI")) == NULL) || r; r = ((glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dvATI")) == NULL) || r; r = ((glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fATI")) == NULL) || r; r = ((glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fvATI")) == NULL) || r; r = ((glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4iATI")) == NULL) || r; r = ((glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4ivATI")) == NULL) || r; r = ((glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4sATI")) == NULL) || r; r = ((glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4svATI")) == NULL) || r; return r; } #endif /* GL_ATI_vertex_streams */ #ifdef GL_EXT_422_pixels #endif /* GL_EXT_422_pixels */ #ifdef GL_EXT_Cg_shader #endif /* GL_EXT_Cg_shader */ #ifdef GL_EXT_abgr #endif /* GL_EXT_abgr */ #ifdef GL_EXT_bgra #endif /* GL_EXT_bgra */ #ifdef GL_EXT_bindable_uniform static GLboolean _glewInit_GL_EXT_bindable_uniform (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBufferSizeEXT")) == NULL) || r; r = ((glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformOffsetEXT")) == NULL) || r; r = ((glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUniformBufferEXT")) == NULL) || r; return r; } #endif /* GL_EXT_bindable_uniform */ #ifdef GL_EXT_blend_color static GLboolean _glewInit_GL_EXT_blend_color (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)glewGetProcAddress((const GLubyte*)"glBlendColorEXT")) == NULL) || r; return r; } #endif /* GL_EXT_blend_color */ #ifdef GL_EXT_blend_equation_separate static GLboolean _glewInit_GL_EXT_blend_equation_separate (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateEXT")) == NULL) || r; return r; } #endif /* GL_EXT_blend_equation_separate */ #ifdef GL_EXT_blend_func_separate static GLboolean _glewInit_GL_EXT_blend_func_separate (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateEXT")) == NULL) || r; return r; } #endif /* GL_EXT_blend_func_separate */ #ifdef GL_EXT_blend_logic_op #endif /* GL_EXT_blend_logic_op */ #ifdef GL_EXT_blend_minmax static GLboolean _glewInit_GL_EXT_blend_minmax (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationEXT")) == NULL) || r; return r; } #endif /* GL_EXT_blend_minmax */ #ifdef GL_EXT_blend_subtract #endif /* GL_EXT_blend_subtract */ #ifdef GL_EXT_clip_volume_hint #endif /* GL_EXT_clip_volume_hint */ #ifdef GL_EXT_cmyka #endif /* GL_EXT_cmyka */ #ifdef GL_EXT_color_subtable static GLboolean _glewInit_GL_EXT_color_subtable (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorSubTableEXT")) == NULL) || r; r = ((glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTableEXT")) == NULL) || r; return r; } #endif /* GL_EXT_color_subtable */ #ifdef GL_EXT_compiled_vertex_array static GLboolean _glewInit_GL_EXT_compiled_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glLockArraysEXT")) == NULL) || r; r = ((glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glUnlockArraysEXT")) == NULL) || r; return r; } #endif /* GL_EXT_compiled_vertex_array */ #ifdef GL_EXT_convolution static GLboolean _glewInit_GL_EXT_convolution (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1DEXT")) == NULL) || r; r = ((glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2DEXT")) == NULL) || r; r = ((glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfEXT")) == NULL) || r; r = ((glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfvEXT")) == NULL) || r; r = ((glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriEXT")) == NULL) || r; r = ((glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterivEXT")) == NULL) || r; r = ((glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1DEXT")) == NULL) || r; r = ((glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2DEXT")) == NULL) || r; r = ((glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilterEXT")) == NULL) || r; r = ((glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfvEXT")) == NULL) || r; r = ((glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterivEXT")) == NULL) || r; r = ((glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilterEXT")) == NULL) || r; r = ((glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2DEXT")) == NULL) || r; return r; } #endif /* GL_EXT_convolution */ #ifdef GL_EXT_coordinate_frame static GLboolean _glewInit_GL_EXT_coordinate_frame (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glBinormalPointerEXT")) == NULL) || r; r = ((glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTangentPointerEXT")) == NULL) || r; return r; } #endif /* GL_EXT_coordinate_frame */ #ifdef GL_EXT_copy_texture static GLboolean _glewInit_GL_EXT_copy_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage1DEXT")) == NULL) || r; r = ((glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage2DEXT")) == NULL) || r; r = ((glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage1DEXT")) == NULL) || r; r = ((glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage2DEXT")) == NULL) || r; r = ((glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3DEXT")) == NULL) || r; return r; } #endif /* GL_EXT_copy_texture */ #ifdef GL_EXT_cull_vertex static GLboolean _glewInit_GL_EXT_cull_vertex (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterdvEXT")) == NULL) || r; r = ((glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterfvEXT")) == NULL) || r; return r; } #endif /* GL_EXT_cull_vertex */ #ifdef GL_EXT_debug_marker static GLboolean _glewInit_GL_EXT_debug_marker (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glInsertEventMarkerEXT")) == NULL) || r; r = ((glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glPopGroupMarkerEXT")) == NULL) || r; r = ((glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glPushGroupMarkerEXT")) == NULL) || r; return r; } #endif /* GL_EXT_debug_marker */ #ifdef GL_EXT_depth_bounds_test static GLboolean _glewInit_GL_EXT_depth_bounds_test (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsEXT")) == NULL) || r; return r; } #endif /* GL_EXT_depth_bounds_test */ #ifdef GL_EXT_direct_state_access static GLboolean _glewInit_GL_EXT_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindMultiTextureEXT = (PFNGLBINDMULTITEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindMultiTextureEXT")) == NULL) || r; r = ((glCheckNamedFramebufferStatusEXT = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckNamedFramebufferStatusEXT")) == NULL) || r; r = ((glClientAttribDefaultEXT = (PFNGLCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glClientAttribDefaultEXT")) == NULL) || r; r = ((glCompressedMultiTexImage1DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage1DEXT")) == NULL) || r; r = ((glCompressedMultiTexImage2DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage2DEXT")) == NULL) || r; r = ((glCompressedMultiTexImage3DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage3DEXT")) == NULL) || r; r = ((glCompressedMultiTexSubImage1DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage1DEXT")) == NULL) || r; r = ((glCompressedMultiTexSubImage2DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage2DEXT")) == NULL) || r; r = ((glCompressedMultiTexSubImage3DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage3DEXT")) == NULL) || r; r = ((glCompressedTextureImage1DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage1DEXT")) == NULL) || r; r = ((glCompressedTextureImage2DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage2DEXT")) == NULL) || r; r = ((glCompressedTextureImage3DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage3DEXT")) == NULL) || r; r = ((glCompressedTextureSubImage1DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage1DEXT")) == NULL) || r; r = ((glCompressedTextureSubImage2DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage2DEXT")) == NULL) || r; r = ((glCompressedTextureSubImage3DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage3DEXT")) == NULL) || r; r = ((glCopyMultiTexImage1DEXT = (PFNGLCOPYMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage1DEXT")) == NULL) || r; r = ((glCopyMultiTexImage2DEXT = (PFNGLCOPYMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage2DEXT")) == NULL) || r; r = ((glCopyMultiTexSubImage1DEXT = (PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage1DEXT")) == NULL) || r; r = ((glCopyMultiTexSubImage2DEXT = (PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage2DEXT")) == NULL) || r; r = ((glCopyMultiTexSubImage3DEXT = (PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage3DEXT")) == NULL) || r; r = ((glCopyTextureImage1DEXT = (PFNGLCOPYTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage1DEXT")) == NULL) || r; r = ((glCopyTextureImage2DEXT = (PFNGLCOPYTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage2DEXT")) == NULL) || r; r = ((glCopyTextureSubImage1DEXT = (PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage1DEXT")) == NULL) || r; r = ((glCopyTextureSubImage2DEXT = (PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage2DEXT")) == NULL) || r; r = ((glCopyTextureSubImage3DEXT = (PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage3DEXT")) == NULL) || r; r = ((glDisableClientStateIndexedEXT = (PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableClientStateIndexedEXT")) == NULL) || r; r = ((glDisableClientStateiEXT = (PFNGLDISABLECLIENTSTATEIEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableClientStateiEXT")) == NULL) || r; r = ((glDisableVertexArrayAttribEXT = (PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexArrayAttribEXT")) == NULL) || r; r = ((glDisableVertexArrayEXT = (PFNGLDISABLEVERTEXARRAYEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexArrayEXT")) == NULL) || r; r = ((glEnableClientStateIndexedEXT = (PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableClientStateIndexedEXT")) == NULL) || r; r = ((glEnableClientStateiEXT = (PFNGLENABLECLIENTSTATEIEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableClientStateiEXT")) == NULL) || r; r = ((glEnableVertexArrayAttribEXT = (PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexArrayAttribEXT")) == NULL) || r; r = ((glEnableVertexArrayEXT = (PFNGLENABLEVERTEXARRAYEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexArrayEXT")) == NULL) || r; r = ((glFlushMappedNamedBufferRangeEXT = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedNamedBufferRangeEXT")) == NULL) || r; r = ((glFramebufferDrawBufferEXT = (PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBufferEXT")) == NULL) || r; r = ((glFramebufferDrawBuffersEXT = (PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBuffersEXT")) == NULL) || r; r = ((glFramebufferReadBufferEXT = (PFNGLFRAMEBUFFERREADBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferReadBufferEXT")) == NULL) || r; r = ((glGenerateMultiTexMipmapEXT = (PFNGLGENERATEMULTITEXMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMultiTexMipmapEXT")) == NULL) || r; r = ((glGenerateTextureMipmapEXT = (PFNGLGENERATETEXTUREMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateTextureMipmapEXT")) == NULL) || r; r = ((glGetCompressedMultiTexImageEXT = (PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedMultiTexImageEXT")) == NULL) || r; r = ((glGetCompressedTextureImageEXT = (PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTextureImageEXT")) == NULL) || r; r = ((glGetDoubleIndexedvEXT = (PFNGLGETDOUBLEINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetDoubleIndexedvEXT")) == NULL) || r; r = ((glGetDoublei_vEXT = (PFNGLGETDOUBLEI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetDoublei_vEXT")) == NULL) || r; r = ((glGetFloatIndexedvEXT = (PFNGLGETFLOATINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFloatIndexedvEXT")) == NULL) || r; r = ((glGetFloati_vEXT = (PFNGLGETFLOATI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFloati_vEXT")) == NULL) || r; r = ((glGetFramebufferParameterivEXT = (PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferParameterivEXT")) == NULL) || r; r = ((glGetMultiTexEnvfvEXT = (PFNGLGETMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvfvEXT")) == NULL) || r; r = ((glGetMultiTexEnvivEXT = (PFNGLGETMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvivEXT")) == NULL) || r; r = ((glGetMultiTexGendvEXT = (PFNGLGETMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGendvEXT")) == NULL) || r; r = ((glGetMultiTexGenfvEXT = (PFNGLGETMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenfvEXT")) == NULL) || r; r = ((glGetMultiTexGenivEXT = (PFNGLGETMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenivEXT")) == NULL) || r; r = ((glGetMultiTexImageEXT = (PFNGLGETMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexImageEXT")) == NULL) || r; r = ((glGetMultiTexLevelParameterfvEXT = (PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterfvEXT")) == NULL) || r; r = ((glGetMultiTexLevelParameterivEXT = (PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterivEXT")) == NULL) || r; r = ((glGetMultiTexParameterIivEXT = (PFNGLGETMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIivEXT")) == NULL) || r; r = ((glGetMultiTexParameterIuivEXT = (PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIuivEXT")) == NULL) || r; r = ((glGetMultiTexParameterfvEXT = (PFNGLGETMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterfvEXT")) == NULL) || r; r = ((glGetMultiTexParameterivEXT = (PFNGLGETMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterivEXT")) == NULL) || r; r = ((glGetNamedBufferParameterivEXT = (PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferParameterivEXT")) == NULL) || r; r = ((glGetNamedBufferPointervEXT = (PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferPointervEXT")) == NULL) || r; r = ((glGetNamedBufferSubDataEXT = (PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferSubDataEXT")) == NULL) || r; r = ((glGetNamedFramebufferAttachmentParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedFramebufferAttachmentParameterivEXT")) == NULL) || r; r = ((glGetNamedProgramLocalParameterIivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIivEXT")) == NULL) || r; r = ((glGetNamedProgramLocalParameterIuivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIuivEXT")) == NULL) || r; r = ((glGetNamedProgramLocalParameterdvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterdvEXT")) == NULL) || r; r = ((glGetNamedProgramLocalParameterfvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterfvEXT")) == NULL) || r; r = ((glGetNamedProgramStringEXT = (PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramStringEXT")) == NULL) || r; r = ((glGetNamedProgramivEXT = (PFNGLGETNAMEDPROGRAMIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramivEXT")) == NULL) || r; r = ((glGetNamedRenderbufferParameterivEXT = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedRenderbufferParameterivEXT")) == NULL) || r; r = ((glGetPointerIndexedvEXT = (PFNGLGETPOINTERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointerIndexedvEXT")) == NULL) || r; r = ((glGetPointeri_vEXT = (PFNGLGETPOINTERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointeri_vEXT")) == NULL) || r; r = ((glGetTextureImageEXT = (PFNGLGETTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureImageEXT")) == NULL) || r; r = ((glGetTextureLevelParameterfvEXT = (PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterfvEXT")) == NULL) || r; r = ((glGetTextureLevelParameterivEXT = (PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterivEXT")) == NULL) || r; r = ((glGetTextureParameterIivEXT = (PFNGLGETTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIivEXT")) == NULL) || r; r = ((glGetTextureParameterIuivEXT = (PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIuivEXT")) == NULL) || r; r = ((glGetTextureParameterfvEXT = (PFNGLGETTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterfvEXT")) == NULL) || r; r = ((glGetTextureParameterivEXT = (PFNGLGETTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterivEXT")) == NULL) || r; r = ((glGetVertexArrayIntegeri_vEXT = (PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayIntegeri_vEXT")) == NULL) || r; r = ((glGetVertexArrayIntegervEXT = (PFNGLGETVERTEXARRAYINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayIntegervEXT")) == NULL) || r; r = ((glGetVertexArrayPointeri_vEXT = (PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayPointeri_vEXT")) == NULL) || r; r = ((glGetVertexArrayPointervEXT = (PFNGLGETVERTEXARRAYPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayPointervEXT")) == NULL) || r; r = ((glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMapNamedBufferEXT")) == NULL) || r; r = ((glMapNamedBufferRangeEXT = (PFNGLMAPNAMEDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glMapNamedBufferRangeEXT")) == NULL) || r; r = ((glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixFrustumEXT")) == NULL) || r; r = ((glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadIdentityEXT")) == NULL) || r; r = ((glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposedEXT")) == NULL) || r; r = ((glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposefEXT")) == NULL) || r; r = ((glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoaddEXT")) == NULL) || r; r = ((glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadfEXT")) == NULL) || r; r = ((glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposedEXT")) == NULL) || r; r = ((glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposefEXT")) == NULL) || r; r = ((glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultdEXT")) == NULL) || r; r = ((glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultfEXT")) == NULL) || r; r = ((glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixOrthoEXT")) == NULL) || r; r = ((glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPopEXT")) == NULL) || r; r = ((glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPushEXT")) == NULL) || r; r = ((glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatedEXT")) == NULL) || r; r = ((glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatefEXT")) == NULL) || r; r = ((glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScaledEXT")) == NULL) || r; r = ((glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScalefEXT")) == NULL) || r; r = ((glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatedEXT")) == NULL) || r; r = ((glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatefEXT")) == NULL) || r; r = ((glMultiTexBufferEXT = (PFNGLMULTITEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexBufferEXT")) == NULL) || r; r = ((glMultiTexCoordPointerEXT = (PFNGLMULTITEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordPointerEXT")) == NULL) || r; r = ((glMultiTexEnvfEXT = (PFNGLMULTITEXENVFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfEXT")) == NULL) || r; r = ((glMultiTexEnvfvEXT = (PFNGLMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfvEXT")) == NULL) || r; r = ((glMultiTexEnviEXT = (PFNGLMULTITEXENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnviEXT")) == NULL) || r; r = ((glMultiTexEnvivEXT = (PFNGLMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvivEXT")) == NULL) || r; r = ((glMultiTexGendEXT = (PFNGLMULTITEXGENDEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendEXT")) == NULL) || r; r = ((glMultiTexGendvEXT = (PFNGLMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendvEXT")) == NULL) || r; r = ((glMultiTexGenfEXT = (PFNGLMULTITEXGENFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfEXT")) == NULL) || r; r = ((glMultiTexGenfvEXT = (PFNGLMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfvEXT")) == NULL) || r; r = ((glMultiTexGeniEXT = (PFNGLMULTITEXGENIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGeniEXT")) == NULL) || r; r = ((glMultiTexGenivEXT = (PFNGLMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenivEXT")) == NULL) || r; r = ((glMultiTexImage1DEXT = (PFNGLMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage1DEXT")) == NULL) || r; r = ((glMultiTexImage2DEXT = (PFNGLMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage2DEXT")) == NULL) || r; r = ((glMultiTexImage3DEXT = (PFNGLMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage3DEXT")) == NULL) || r; r = ((glMultiTexParameterIivEXT = (PFNGLMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIivEXT")) == NULL) || r; r = ((glMultiTexParameterIuivEXT = (PFNGLMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIuivEXT")) == NULL) || r; r = ((glMultiTexParameterfEXT = (PFNGLMULTITEXPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfEXT")) == NULL) || r; r = ((glMultiTexParameterfvEXT = (PFNGLMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfvEXT")) == NULL) || r; r = ((glMultiTexParameteriEXT = (PFNGLMULTITEXPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameteriEXT")) == NULL) || r; r = ((glMultiTexParameterivEXT = (PFNGLMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterivEXT")) == NULL) || r; r = ((glMultiTexRenderbufferEXT = (PFNGLMULTITEXRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexRenderbufferEXT")) == NULL) || r; r = ((glMultiTexSubImage1DEXT = (PFNGLMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage1DEXT")) == NULL) || r; r = ((glMultiTexSubImage2DEXT = (PFNGLMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage2DEXT")) == NULL) || r; r = ((glMultiTexSubImage3DEXT = (PFNGLMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage3DEXT")) == NULL) || r; r = ((glNamedBufferDataEXT = (PFNGLNAMEDBUFFERDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferDataEXT")) == NULL) || r; r = ((glNamedBufferSubDataEXT = (PFNGLNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferSubDataEXT")) == NULL) || r; r = ((glNamedCopyBufferSubDataEXT = (PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedCopyBufferSubDataEXT")) == NULL) || r; r = ((glNamedFramebufferRenderbufferEXT = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferRenderbufferEXT")) == NULL) || r; r = ((glNamedFramebufferTexture1DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture1DEXT")) == NULL) || r; r = ((glNamedFramebufferTexture2DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture2DEXT")) == NULL) || r; r = ((glNamedFramebufferTexture3DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture3DEXT")) == NULL) || r; r = ((glNamedFramebufferTextureEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureEXT")) == NULL) || r; r = ((glNamedFramebufferTextureFaceEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureFaceEXT")) == NULL) || r; r = ((glNamedFramebufferTextureLayerEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureLayerEXT")) == NULL) || r; r = ((glNamedProgramLocalParameter4dEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dEXT")) == NULL) || r; r = ((glNamedProgramLocalParameter4dvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dvEXT")) == NULL) || r; r = ((glNamedProgramLocalParameter4fEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fEXT")) == NULL) || r; r = ((glNamedProgramLocalParameter4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fvEXT")) == NULL) || r; r = ((glNamedProgramLocalParameterI4iEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4iEXT")) == NULL) || r; r = ((glNamedProgramLocalParameterI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4ivEXT")) == NULL) || r; r = ((glNamedProgramLocalParameterI4uiEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uiEXT")) == NULL) || r; r = ((glNamedProgramLocalParameterI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uivEXT")) == NULL) || r; r = ((glNamedProgramLocalParameters4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameters4fvEXT")) == NULL) || r; r = ((glNamedProgramLocalParametersI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4ivEXT")) == NULL) || r; r = ((glNamedProgramLocalParametersI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4uivEXT")) == NULL) || r; r = ((glNamedProgramStringEXT = (PFNGLNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramStringEXT")) == NULL) || r; r = ((glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageEXT")) == NULL) || r; r = ((glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleCoverageEXT")) == NULL) || r; r = ((glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleEXT")) == NULL) || r; r = ((glProgramUniform1dEXT = (PFNGLPROGRAMUNIFORM1DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1dEXT")) == NULL) || r; r = ((glProgramUniform1dvEXT = (PFNGLPROGRAMUNIFORM1DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1dvEXT")) == NULL) || r; r = ((glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fEXT")) == NULL) || r; r = ((glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fvEXT")) == NULL) || r; r = ((glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iEXT")) == NULL) || r; r = ((glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ivEXT")) == NULL) || r; r = ((glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiEXT")) == NULL) || r; r = ((glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uivEXT")) == NULL) || r; r = ((glProgramUniform2dEXT = (PFNGLPROGRAMUNIFORM2DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2dEXT")) == NULL) || r; r = ((glProgramUniform2dvEXT = (PFNGLPROGRAMUNIFORM2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2dvEXT")) == NULL) || r; r = ((glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fEXT")) == NULL) || r; r = ((glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fvEXT")) == NULL) || r; r = ((glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iEXT")) == NULL) || r; r = ((glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ivEXT")) == NULL) || r; r = ((glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiEXT")) == NULL) || r; r = ((glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uivEXT")) == NULL) || r; r = ((glProgramUniform3dEXT = (PFNGLPROGRAMUNIFORM3DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3dEXT")) == NULL) || r; r = ((glProgramUniform3dvEXT = (PFNGLPROGRAMUNIFORM3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3dvEXT")) == NULL) || r; r = ((glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fEXT")) == NULL) || r; r = ((glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fvEXT")) == NULL) || r; r = ((glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iEXT")) == NULL) || r; r = ((glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ivEXT")) == NULL) || r; r = ((glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiEXT")) == NULL) || r; r = ((glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uivEXT")) == NULL) || r; r = ((glProgramUniform4dEXT = (PFNGLPROGRAMUNIFORM4DEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4dEXT")) == NULL) || r; r = ((glProgramUniform4dvEXT = (PFNGLPROGRAMUNIFORM4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4dvEXT")) == NULL) || r; r = ((glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fEXT")) == NULL) || r; r = ((glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fvEXT")) == NULL) || r; r = ((glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iEXT")) == NULL) || r; r = ((glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ivEXT")) == NULL) || r; r = ((glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiEXT")) == NULL) || r; r = ((glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uivEXT")) == NULL) || r; r = ((glProgramUniformMatrix2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3dvEXT")) == NULL) || r; r = ((glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fvEXT")) == NULL) || r; r = ((glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glPushClientAttribDefaultEXT")) == NULL) || r; r = ((glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferEXT")) == NULL) || r; r = ((glTextureImage1DEXT = (PFNGLTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage1DEXT")) == NULL) || r; r = ((glTextureImage2DEXT = (PFNGLTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DEXT")) == NULL) || r; r = ((glTextureImage3DEXT = (PFNGLTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DEXT")) == NULL) || r; r = ((glTextureParameterIivEXT = (PFNGLTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIivEXT")) == NULL) || r; r = ((glTextureParameterIuivEXT = (PFNGLTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIuivEXT")) == NULL) || r; r = ((glTextureParameterfEXT = (PFNGLTEXTUREPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfEXT")) == NULL) || r; r = ((glTextureParameterfvEXT = (PFNGLTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfvEXT")) == NULL) || r; r = ((glTextureParameteriEXT = (PFNGLTEXTUREPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameteriEXT")) == NULL) || r; r = ((glTextureParameterivEXT = (PFNGLTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterivEXT")) == NULL) || r; r = ((glTextureRenderbufferEXT = (PFNGLTEXTURERENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureRenderbufferEXT")) == NULL) || r; r = ((glTextureSubImage1DEXT = (PFNGLTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage1DEXT")) == NULL) || r; r = ((glTextureSubImage2DEXT = (PFNGLTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage2DEXT")) == NULL) || r; r = ((glTextureSubImage3DEXT = (PFNGLTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage3DEXT")) == NULL) || r; r = ((glUnmapNamedBufferEXT = (PFNGLUNMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUnmapNamedBufferEXT")) == NULL) || r; r = ((glVertexArrayColorOffsetEXT = (PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayColorOffsetEXT")) == NULL) || r; r = ((glVertexArrayEdgeFlagOffsetEXT = (PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayEdgeFlagOffsetEXT")) == NULL) || r; r = ((glVertexArrayFogCoordOffsetEXT = (PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayFogCoordOffsetEXT")) == NULL) || r; r = ((glVertexArrayIndexOffsetEXT = (PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayIndexOffsetEXT")) == NULL) || r; r = ((glVertexArrayMultiTexCoordOffsetEXT = (PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayMultiTexCoordOffsetEXT")) == NULL) || r; r = ((glVertexArrayNormalOffsetEXT = (PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayNormalOffsetEXT")) == NULL) || r; r = ((glVertexArraySecondaryColorOffsetEXT = (PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArraySecondaryColorOffsetEXT")) == NULL) || r; r = ((glVertexArrayTexCoordOffsetEXT = (PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayTexCoordOffsetEXT")) == NULL) || r; r = ((glVertexArrayVertexAttribIOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribIOffsetEXT")) == NULL) || r; r = ((glVertexArrayVertexAttribOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribOffsetEXT")) == NULL) || r; r = ((glVertexArrayVertexOffsetEXT = (PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexOffsetEXT")) == NULL) || r; return r; } #endif /* GL_EXT_direct_state_access */ #ifdef GL_EXT_draw_buffers2 static GLboolean _glewInit_GL_EXT_draw_buffers2 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glColorMaskIndexedEXT")) == NULL) || r; r = ((glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableIndexedEXT")) == NULL) || r; r = ((glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableIndexedEXT")) == NULL) || r; r = ((glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetBooleanIndexedvEXT")) == NULL) || r; r = ((glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerIndexedvEXT")) == NULL) || r; r = ((glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledIndexedEXT")) == NULL) || r; return r; } #endif /* GL_EXT_draw_buffers2 */ #ifdef GL_EXT_draw_instanced static GLboolean _glewInit_GL_EXT_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedEXT")) == NULL) || r; r = ((glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedEXT")) == NULL) || r; return r; } #endif /* GL_EXT_draw_instanced */ #ifdef GL_EXT_draw_range_elements static GLboolean _glewInit_GL_EXT_draw_range_elements (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsEXT")) == NULL) || r; return r; } #endif /* GL_EXT_draw_range_elements */ #ifdef GL_EXT_fog_coord static GLboolean _glewInit_GL_EXT_fog_coord (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerEXT")) == NULL) || r; r = ((glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddEXT")) == NULL) || r; r = ((glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddvEXT")) == NULL) || r; r = ((glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfEXT")) == NULL) || r; r = ((glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfvEXT")) == NULL) || r; return r; } #endif /* GL_EXT_fog_coord */ #ifdef GL_EXT_fragment_lighting static GLboolean _glewInit_GL_EXT_fragment_lighting (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFragmentColorMaterialEXT = (PFNGLFRAGMENTCOLORMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialEXT")) == NULL) || r; r = ((glFragmentLightModelfEXT = (PFNGLFRAGMENTLIGHTMODELFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfEXT")) == NULL) || r; r = ((glFragmentLightModelfvEXT = (PFNGLFRAGMENTLIGHTMODELFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvEXT")) == NULL) || r; r = ((glFragmentLightModeliEXT = (PFNGLFRAGMENTLIGHTMODELIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliEXT")) == NULL) || r; r = ((glFragmentLightModelivEXT = (PFNGLFRAGMENTLIGHTMODELIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivEXT")) == NULL) || r; r = ((glFragmentLightfEXT = (PFNGLFRAGMENTLIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfEXT")) == NULL) || r; r = ((glFragmentLightfvEXT = (PFNGLFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvEXT")) == NULL) || r; r = ((glFragmentLightiEXT = (PFNGLFRAGMENTLIGHTIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiEXT")) == NULL) || r; r = ((glFragmentLightivEXT = (PFNGLFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivEXT")) == NULL) || r; r = ((glFragmentMaterialfEXT = (PFNGLFRAGMENTMATERIALFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfEXT")) == NULL) || r; r = ((glFragmentMaterialfvEXT = (PFNGLFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvEXT")) == NULL) || r; r = ((glFragmentMaterialiEXT = (PFNGLFRAGMENTMATERIALIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiEXT")) == NULL) || r; r = ((glFragmentMaterialivEXT = (PFNGLFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivEXT")) == NULL) || r; r = ((glGetFragmentLightfvEXT = (PFNGLGETFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvEXT")) == NULL) || r; r = ((glGetFragmentLightivEXT = (PFNGLGETFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivEXT")) == NULL) || r; r = ((glGetFragmentMaterialfvEXT = (PFNGLGETFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvEXT")) == NULL) || r; r = ((glGetFragmentMaterialivEXT = (PFNGLGETFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivEXT")) == NULL) || r; r = ((glLightEnviEXT = (PFNGLLIGHTENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glLightEnviEXT")) == NULL) || r; return r; } #endif /* GL_EXT_fragment_lighting */ #ifdef GL_EXT_framebuffer_blit static GLboolean _glewInit_GL_EXT_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferEXT")) == NULL) || r; return r; } #endif /* GL_EXT_framebuffer_blit */ #ifdef GL_EXT_framebuffer_multisample static GLboolean _glewInit_GL_EXT_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleEXT")) == NULL) || r; return r; } #endif /* GL_EXT_framebuffer_multisample */ #ifdef GL_EXT_framebuffer_multisample_blit_scaled #endif /* GL_EXT_framebuffer_multisample_blit_scaled */ #ifdef GL_EXT_framebuffer_object static GLboolean _glewInit_GL_EXT_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindFramebufferEXT")) == NULL) || r; r = ((glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbufferEXT")) == NULL) || r; r = ((glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatusEXT")) == NULL) || r; r = ((glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffersEXT")) == NULL) || r; r = ((glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffersEXT")) == NULL) || r; r = ((glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbufferEXT")) == NULL) || r; r = ((glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1DEXT")) == NULL) || r; r = ((glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2DEXT")) == NULL) || r; r = ((glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3DEXT")) == NULL) || r; r = ((glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffersEXT")) == NULL) || r; r = ((glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffersEXT")) == NULL) || r; r = ((glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmapEXT")) == NULL) || r; r = ((glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameterivEXT")) == NULL) || r; r = ((glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameterivEXT")) == NULL) || r; r = ((glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsFramebufferEXT")) == NULL) || r; r = ((glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbufferEXT")) == NULL) || r; r = ((glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageEXT")) == NULL) || r; return r; } #endif /* GL_EXT_framebuffer_object */ #ifdef GL_EXT_framebuffer_sRGB #endif /* GL_EXT_framebuffer_sRGB */ #ifdef GL_EXT_geometry_shader4 static GLboolean _glewInit_GL_EXT_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureEXT")) == NULL) || r; r = ((glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceEXT")) == NULL) || r; r = ((glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriEXT")) == NULL) || r; return r; } #endif /* GL_EXT_geometry_shader4 */ #ifdef GL_EXT_gpu_program_parameters static GLboolean _glewInit_GL_EXT_gpu_program_parameters (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameters4fvEXT")) == NULL) || r; r = ((glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameters4fvEXT")) == NULL) || r; return r; } #endif /* GL_EXT_gpu_program_parameters */ #ifdef GL_EXT_gpu_shader4 static GLboolean _glewInit_GL_EXT_gpu_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationEXT")) == NULL) || r; r = ((glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocationEXT")) == NULL) || r; r = ((glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuivEXT")) == NULL) || r; r = ((glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIivEXT")) == NULL) || r; r = ((glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuivEXT")) == NULL) || r; r = ((glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiEXT")) == NULL) || r; r = ((glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uivEXT")) == NULL) || r; r = ((glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiEXT")) == NULL) || r; r = ((glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uivEXT")) == NULL) || r; r = ((glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiEXT")) == NULL) || r; r = ((glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uivEXT")) == NULL) || r; r = ((glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiEXT")) == NULL) || r; r = ((glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uivEXT")) == NULL) || r; r = ((glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iEXT")) == NULL) || r; r = ((glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ivEXT")) == NULL) || r; r = ((glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiEXT")) == NULL) || r; r = ((glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uivEXT")) == NULL) || r; r = ((glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iEXT")) == NULL) || r; r = ((glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ivEXT")) == NULL) || r; r = ((glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiEXT")) == NULL) || r; r = ((glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uivEXT")) == NULL) || r; r = ((glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iEXT")) == NULL) || r; r = ((glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ivEXT")) == NULL) || r; r = ((glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiEXT")) == NULL) || r; r = ((glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uivEXT")) == NULL) || r; r = ((glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bvEXT")) == NULL) || r; r = ((glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iEXT")) == NULL) || r; r = ((glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ivEXT")) == NULL) || r; r = ((glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4svEXT")) == NULL) || r; r = ((glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubvEXT")) == NULL) || r; r = ((glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiEXT")) == NULL) || r; r = ((glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uivEXT")) == NULL) || r; r = ((glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usvEXT")) == NULL) || r; r = ((glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointerEXT")) == NULL) || r; return r; } #endif /* GL_EXT_gpu_shader4 */ #ifdef GL_EXT_histogram static GLboolean _glewInit_GL_EXT_histogram (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramEXT")) == NULL) || r; r = ((glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfvEXT")) == NULL) || r; r = ((glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterivEXT")) == NULL) || r; r = ((glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxEXT")) == NULL) || r; r = ((glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfvEXT")) == NULL) || r; r = ((glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterivEXT")) == NULL) || r; r = ((glHistogramEXT = (PFNGLHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glHistogramEXT")) == NULL) || r; r = ((glMinmaxEXT = (PFNGLMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glMinmaxEXT")) == NULL) || r; r = ((glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glResetHistogramEXT")) == NULL) || r; r = ((glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glResetMinmaxEXT")) == NULL) || r; return r; } #endif /* GL_EXT_histogram */ #ifdef GL_EXT_index_array_formats #endif /* GL_EXT_index_array_formats */ #ifdef GL_EXT_index_func static GLboolean _glewInit_GL_EXT_index_func (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexFuncEXT")) == NULL) || r; return r; } #endif /* GL_EXT_index_func */ #ifdef GL_EXT_index_material static GLboolean _glewInit_GL_EXT_index_material (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexMaterialEXT")) == NULL) || r; return r; } #endif /* GL_EXT_index_material */ #ifdef GL_EXT_index_texture #endif /* GL_EXT_index_texture */ #ifdef GL_EXT_light_texture static GLboolean _glewInit_GL_EXT_light_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glApplyTextureEXT")) == NULL) || r; r = ((glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureLightEXT")) == NULL) || r; r = ((glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureMaterialEXT")) == NULL) || r; return r; } #endif /* GL_EXT_light_texture */ #ifdef GL_EXT_misc_attribute #endif /* GL_EXT_misc_attribute */ #ifdef GL_EXT_multi_draw_arrays static GLboolean _glewInit_GL_EXT_multi_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysEXT")) == NULL) || r; r = ((glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsEXT")) == NULL) || r; return r; } #endif /* GL_EXT_multi_draw_arrays */ #ifdef GL_EXT_multisample static GLboolean _glewInit_GL_EXT_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskEXT")) == NULL) || r; r = ((glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternEXT")) == NULL) || r; return r; } #endif /* GL_EXT_multisample */ #ifdef GL_EXT_packed_depth_stencil #endif /* GL_EXT_packed_depth_stencil */ #ifdef GL_EXT_packed_float #endif /* GL_EXT_packed_float */ #ifdef GL_EXT_packed_pixels #endif /* GL_EXT_packed_pixels */ #ifdef GL_EXT_paletted_texture static GLboolean _glewInit_GL_EXT_paletted_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorTableEXT")) == NULL) || r; r = ((glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableEXT")) == NULL) || r; r = ((glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvEXT")) == NULL) || r; r = ((glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivEXT")) == NULL) || r; return r; } #endif /* GL_EXT_paletted_texture */ #ifdef GL_EXT_pixel_buffer_object #endif /* GL_EXT_pixel_buffer_object */ #ifdef GL_EXT_pixel_transform static GLboolean _glewInit_GL_EXT_pixel_transform (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterfvEXT")) == NULL) || r; r = ((glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterivEXT")) == NULL) || r; r = ((glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfEXT")) == NULL) || r; r = ((glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfvEXT")) == NULL) || r; r = ((glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameteriEXT")) == NULL) || r; r = ((glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterivEXT")) == NULL) || r; return r; } #endif /* GL_EXT_pixel_transform */ #ifdef GL_EXT_pixel_transform_color_table #endif /* GL_EXT_pixel_transform_color_table */ #ifdef GL_EXT_point_parameters static GLboolean _glewInit_GL_EXT_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfEXT")) == NULL) || r; r = ((glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvEXT")) == NULL) || r; return r; } #endif /* GL_EXT_point_parameters */ #ifdef GL_EXT_polygon_offset static GLboolean _glewInit_GL_EXT_polygon_offset (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetEXT")) == NULL) || r; return r; } #endif /* GL_EXT_polygon_offset */ #ifdef GL_EXT_provoking_vertex static GLboolean _glewInit_GL_EXT_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glProvokingVertexEXT = (PFNGLPROVOKINGVERTEXEXTPROC)glewGetProcAddress((const GLubyte*)"glProvokingVertexEXT")) == NULL) || r; return r; } #endif /* GL_EXT_provoking_vertex */ #ifdef GL_EXT_rescale_normal #endif /* GL_EXT_rescale_normal */ #ifdef GL_EXT_scene_marker static GLboolean _glewInit_GL_EXT_scene_marker (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginSceneEXT = (PFNGLBEGINSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginSceneEXT")) == NULL) || r; r = ((glEndSceneEXT = (PFNGLENDSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glEndSceneEXT")) == NULL) || r; return r; } #endif /* GL_EXT_scene_marker */ #ifdef GL_EXT_secondary_color static GLboolean _glewInit_GL_EXT_secondary_color (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bEXT")) == NULL) || r; r = ((glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bvEXT")) == NULL) || r; r = ((glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dEXT")) == NULL) || r; r = ((glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dvEXT")) == NULL) || r; r = ((glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fEXT")) == NULL) || r; r = ((glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fvEXT")) == NULL) || r; r = ((glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iEXT")) == NULL) || r; r = ((glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ivEXT")) == NULL) || r; r = ((glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sEXT")) == NULL) || r; r = ((glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3svEXT")) == NULL) || r; r = ((glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubEXT")) == NULL) || r; r = ((glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubvEXT")) == NULL) || r; r = ((glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiEXT")) == NULL) || r; r = ((glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uivEXT")) == NULL) || r; r = ((glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usEXT")) == NULL) || r; r = ((glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usvEXT")) == NULL) || r; r = ((glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerEXT")) == NULL) || r; return r; } #endif /* GL_EXT_secondary_color */ #ifdef GL_EXT_separate_shader_objects static GLboolean _glewInit_GL_EXT_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glActiveProgramEXT = (PFNGLACTIVEPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveProgramEXT")) == NULL) || r; r = ((glCreateShaderProgramEXT = (PFNGLCREATESHADERPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderProgramEXT")) == NULL) || r; r = ((glUseShaderProgramEXT = (PFNGLUSESHADERPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glUseShaderProgramEXT")) == NULL) || r; return r; } #endif /* GL_EXT_separate_shader_objects */ #ifdef GL_EXT_separate_specular_color #endif /* GL_EXT_separate_specular_color */ #ifdef GL_EXT_shader_image_load_store static GLboolean _glewInit_GL_EXT_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindImageTextureEXT = (PFNGLBINDIMAGETEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindImageTextureEXT")) == NULL) || r; r = ((glMemoryBarrierEXT = (PFNGLMEMORYBARRIEREXTPROC)glewGetProcAddress((const GLubyte*)"glMemoryBarrierEXT")) == NULL) || r; return r; } #endif /* GL_EXT_shader_image_load_store */ #ifdef GL_EXT_shadow_funcs #endif /* GL_EXT_shadow_funcs */ #ifdef GL_EXT_shared_texture_palette #endif /* GL_EXT_shared_texture_palette */ #ifdef GL_EXT_stencil_clear_tag #endif /* GL_EXT_stencil_clear_tag */ #ifdef GL_EXT_stencil_two_side static GLboolean _glewInit_GL_EXT_stencil_two_side (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveStencilFaceEXT")) == NULL) || r; return r; } #endif /* GL_EXT_stencil_two_side */ #ifdef GL_EXT_stencil_wrap #endif /* GL_EXT_stencil_wrap */ #ifdef GL_EXT_subtexture static GLboolean _glewInit_GL_EXT_subtexture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage1DEXT")) == NULL) || r; r = ((glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage2DEXT")) == NULL) || r; r = ((glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3DEXT")) == NULL) || r; return r; } #endif /* GL_EXT_subtexture */ #ifdef GL_EXT_texture #endif /* GL_EXT_texture */ #ifdef GL_EXT_texture3D static GLboolean _glewInit_GL_EXT_texture3D (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DEXT")) == NULL) || r; return r; } #endif /* GL_EXT_texture3D */ #ifdef GL_EXT_texture_array static GLboolean _glewInit_GL_EXT_texture_array (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerEXT")) == NULL) || r; return r; } #endif /* GL_EXT_texture_array */ #ifdef GL_EXT_texture_buffer_object static GLboolean _glewInit_GL_EXT_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexBufferEXT")) == NULL) || r; return r; } #endif /* GL_EXT_texture_buffer_object */ #ifdef GL_EXT_texture_compression_dxt1 #endif /* GL_EXT_texture_compression_dxt1 */ #ifdef GL_EXT_texture_compression_latc #endif /* GL_EXT_texture_compression_latc */ #ifdef GL_EXT_texture_compression_rgtc #endif /* GL_EXT_texture_compression_rgtc */ #ifdef GL_EXT_texture_compression_s3tc #endif /* GL_EXT_texture_compression_s3tc */ #ifdef GL_EXT_texture_cube_map #endif /* GL_EXT_texture_cube_map */ #ifdef GL_EXT_texture_edge_clamp #endif /* GL_EXT_texture_edge_clamp */ #ifdef GL_EXT_texture_env #endif /* GL_EXT_texture_env */ #ifdef GL_EXT_texture_env_add #endif /* GL_EXT_texture_env_add */ #ifdef GL_EXT_texture_env_combine #endif /* GL_EXT_texture_env_combine */ #ifdef GL_EXT_texture_env_dot3 #endif /* GL_EXT_texture_env_dot3 */ #ifdef GL_EXT_texture_filter_anisotropic #endif /* GL_EXT_texture_filter_anisotropic */ #ifdef GL_EXT_texture_integer static GLboolean _glewInit_GL_EXT_texture_integer (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIiEXT")) == NULL) || r; r = ((glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIuiEXT")) == NULL) || r; r = ((glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIivEXT")) == NULL) || r; r = ((glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuivEXT")) == NULL) || r; r = ((glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIivEXT")) == NULL) || r; r = ((glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuivEXT")) == NULL) || r; return r; } #endif /* GL_EXT_texture_integer */ #ifdef GL_EXT_texture_lod_bias #endif /* GL_EXT_texture_lod_bias */ #ifdef GL_EXT_texture_mirror_clamp #endif /* GL_EXT_texture_mirror_clamp */ #ifdef GL_EXT_texture_object static GLboolean _glewInit_GL_EXT_texture_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC)glewGetProcAddress((const GLubyte*)"glAreTexturesResidentEXT")) == NULL) || r; r = ((glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureEXT")) == NULL) || r; r = ((glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteTexturesEXT")) == NULL) || r; r = ((glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glGenTexturesEXT")) == NULL) || r; r = ((glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glIsTextureEXT")) == NULL) || r; r = ((glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glPrioritizeTexturesEXT")) == NULL) || r; return r; } #endif /* GL_EXT_texture_object */ #ifdef GL_EXT_texture_perturb_normal static GLboolean _glewInit_GL_EXT_texture_perturb_normal (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureNormalEXT")) == NULL) || r; return r; } #endif /* GL_EXT_texture_perturb_normal */ #ifdef GL_EXT_texture_rectangle #endif /* GL_EXT_texture_rectangle */ #ifdef GL_EXT_texture_sRGB #endif /* GL_EXT_texture_sRGB */ #ifdef GL_EXT_texture_sRGB_decode #endif /* GL_EXT_texture_sRGB_decode */ #ifdef GL_EXT_texture_shared_exponent #endif /* GL_EXT_texture_shared_exponent */ #ifdef GL_EXT_texture_snorm #endif /* GL_EXT_texture_snorm */ #ifdef GL_EXT_texture_swizzle #endif /* GL_EXT_texture_swizzle */ #ifdef GL_EXT_timer_query static GLboolean _glewInit_GL_EXT_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vEXT")) == NULL) || r; r = ((glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vEXT")) == NULL) || r; return r; } #endif /* GL_EXT_timer_query */ #ifdef GL_EXT_transform_feedback static GLboolean _glewInit_GL_EXT_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginTransformFeedbackEXT = (PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackEXT")) == NULL) || r; r = ((glBindBufferBaseEXT = (PFNGLBINDBUFFERBASEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseEXT")) == NULL) || r; r = ((glBindBufferOffsetEXT = (PFNGLBINDBUFFEROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetEXT")) == NULL) || r; r = ((glBindBufferRangeEXT = (PFNGLBINDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeEXT")) == NULL) || r; r = ((glEndTransformFeedbackEXT = (PFNGLENDTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackEXT")) == NULL) || r; r = ((glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingEXT")) == NULL) || r; r = ((glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsEXT")) == NULL) || r; return r; } #endif /* GL_EXT_transform_feedback */ #ifdef GL_EXT_vertex_array static GLboolean _glewInit_GL_EXT_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glArrayElementEXT")) == NULL) || r; r = ((glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glColorPointerEXT")) == NULL) || r; r = ((glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysEXT")) == NULL) || r; r = ((glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerEXT")) == NULL) || r; r = ((glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerEXT")) == NULL) || r; r = ((glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerEXT")) == NULL) || r; r = ((glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerEXT")) == NULL) || r; r = ((glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerEXT")) == NULL) || r; return r; } #endif /* GL_EXT_vertex_array */ #ifdef GL_EXT_vertex_array_bgra #endif /* GL_EXT_vertex_array_bgra */ #ifdef GL_EXT_vertex_attrib_64bit static GLboolean _glewInit_GL_EXT_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetVertexAttribLdvEXT = (PFNGLGETVERTEXATTRIBLDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLdvEXT")) == NULL) || r; r = ((glVertexArrayVertexAttribLOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribLOffsetEXT")) == NULL) || r; r = ((glVertexAttribL1dEXT = (PFNGLVERTEXATTRIBL1DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dEXT")) == NULL) || r; r = ((glVertexAttribL1dvEXT = (PFNGLVERTEXATTRIBL1DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dvEXT")) == NULL) || r; r = ((glVertexAttribL2dEXT = (PFNGLVERTEXATTRIBL2DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dEXT")) == NULL) || r; r = ((glVertexAttribL2dvEXT = (PFNGLVERTEXATTRIBL2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dvEXT")) == NULL) || r; r = ((glVertexAttribL3dEXT = (PFNGLVERTEXATTRIBL3DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dEXT")) == NULL) || r; r = ((glVertexAttribL3dvEXT = (PFNGLVERTEXATTRIBL3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dvEXT")) == NULL) || r; r = ((glVertexAttribL4dEXT = (PFNGLVERTEXATTRIBL4DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dEXT")) == NULL) || r; r = ((glVertexAttribL4dvEXT = (PFNGLVERTEXATTRIBL4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dvEXT")) == NULL) || r; r = ((glVertexAttribLPointerEXT = (PFNGLVERTEXATTRIBLPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLPointerEXT")) == NULL) || r; return r; } #endif /* GL_EXT_vertex_attrib_64bit */ #ifdef GL_EXT_vertex_shader static GLboolean _glewInit_GL_EXT_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBeginVertexShaderEXT")) == NULL) || r; r = ((glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindLightParameterEXT")) == NULL) || r; r = ((glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindMaterialParameterEXT")) == NULL) || r; r = ((glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindParameterEXT")) == NULL) || r; r = ((glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTexGenParameterEXT")) == NULL) || r; r = ((glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureUnitParameterEXT")) == NULL) || r; r = ((glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindVertexShaderEXT")) == NULL) || r; r = ((glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexShaderEXT")) == NULL) || r; r = ((glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVariantClientStateEXT")) == NULL) || r; r = ((glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVariantClientStateEXT")) == NULL) || r; r = ((glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glEndVertexShaderEXT")) == NULL) || r; r = ((glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glExtractComponentEXT")) == NULL) || r; r = ((glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenSymbolsEXT")) == NULL) || r; r = ((glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenVertexShadersEXT")) == NULL) || r; r = ((glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantBooleanvEXT")) == NULL) || r; r = ((glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantFloatvEXT")) == NULL) || r; r = ((glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantIntegervEXT")) == NULL) || r; r = ((glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantBooleanvEXT")) == NULL) || r; r = ((glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantFloatvEXT")) == NULL) || r; r = ((glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantIntegervEXT")) == NULL) || r; r = ((glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantBooleanvEXT")) == NULL) || r; r = ((glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantFloatvEXT")) == NULL) || r; r = ((glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantIntegervEXT")) == NULL) || r; r = ((glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantPointervEXT")) == NULL) || r; r = ((glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glInsertComponentEXT")) == NULL) || r; r = ((glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsVariantEnabledEXT")) == NULL) || r; r = ((glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetInvariantEXT")) == NULL) || r; r = ((glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetLocalConstantEXT")) == NULL) || r; r = ((glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp1EXT")) == NULL) || r; r = ((glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp2EXT")) == NULL) || r; r = ((glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp3EXT")) == NULL) || r; r = ((glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)glewGetProcAddress((const GLubyte*)"glSwizzleEXT")) == NULL) || r; r = ((glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVariantPointerEXT")) == NULL) || r; r = ((glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantbvEXT")) == NULL) || r; r = ((glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantdvEXT")) == NULL) || r; r = ((glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantfvEXT")) == NULL) || r; r = ((glVariantivEXT = (PFNGLVARIANTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantivEXT")) == NULL) || r; r = ((glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantsvEXT")) == NULL) || r; r = ((glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantubvEXT")) == NULL) || r; r = ((glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantuivEXT")) == NULL) || r; r = ((glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantusvEXT")) == NULL) || r; r = ((glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glWriteMaskEXT")) == NULL) || r; return r; } #endif /* GL_EXT_vertex_shader */ #ifdef GL_EXT_vertex_weighting static GLboolean _glewInit_GL_EXT_vertex_weighting (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightPointerEXT")) == NULL) || r; r = ((glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfEXT")) == NULL) || r; r = ((glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfvEXT")) == NULL) || r; return r; } #endif /* GL_EXT_vertex_weighting */ #ifdef GL_EXT_x11_sync_object static GLboolean _glewInit_GL_EXT_x11_sync_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glImportSyncEXT = (PFNGLIMPORTSYNCEXTPROC)glewGetProcAddress((const GLubyte*)"glImportSyncEXT")) == NULL) || r; return r; } #endif /* GL_EXT_x11_sync_object */ #ifdef GL_GREMEDY_frame_terminator static GLboolean _glewInit_GL_GREMEDY_frame_terminator (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glFrameTerminatorGREMEDY")) == NULL) || r; return r; } #endif /* GL_GREMEDY_frame_terminator */ #ifdef GL_GREMEDY_string_marker static GLboolean _glewInit_GL_GREMEDY_string_marker (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glStringMarkerGREMEDY")) == NULL) || r; return r; } #endif /* GL_GREMEDY_string_marker */ #ifdef GL_HP_convolution_border_modes #endif /* GL_HP_convolution_border_modes */ #ifdef GL_HP_image_transform static GLboolean _glewInit_GL_HP_image_transform (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterfvHP")) == NULL) || r; r = ((glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterivHP")) == NULL) || r; r = ((glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfHP")) == NULL) || r; r = ((glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfvHP")) == NULL) || r; r = ((glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameteriHP")) == NULL) || r; r = ((glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterivHP")) == NULL) || r; return r; } #endif /* GL_HP_image_transform */ #ifdef GL_HP_occlusion_test #endif /* GL_HP_occlusion_test */ #ifdef GL_HP_texture_lighting #endif /* GL_HP_texture_lighting */ #ifdef GL_IBM_cull_vertex #endif /* GL_IBM_cull_vertex */ #ifdef GL_IBM_multimode_draw_arrays static GLboolean _glewInit_GL_IBM_multimode_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawArraysIBM")) == NULL) || r; r = ((glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawElementsIBM")) == NULL) || r; return r; } #endif /* GL_IBM_multimode_draw_arrays */ #ifdef GL_IBM_rasterpos_clip #endif /* GL_IBM_rasterpos_clip */ #ifdef GL_IBM_static_data #endif /* GL_IBM_static_data */ #ifdef GL_IBM_texture_mirrored_repeat #endif /* GL_IBM_texture_mirrored_repeat */ #ifdef GL_IBM_vertex_array_lists static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glColorPointerListIBM")) == NULL) || r; r = ((glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerListIBM")) == NULL) || r; r = ((glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerListIBM")) == NULL) || r; r = ((glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerListIBM")) == NULL) || r; r = ((glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerListIBM")) == NULL) || r; r = ((glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerListIBM")) == NULL) || r; r = ((glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerListIBM")) == NULL) || r; r = ((glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerListIBM")) == NULL) || r; return r; } #endif /* GL_IBM_vertex_array_lists */ #ifdef GL_INGR_color_clamp #endif /* GL_INGR_color_clamp */ #ifdef GL_INGR_interlace_read #endif /* GL_INGR_interlace_read */ #ifdef GL_INTEL_parallel_arrays static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glColorPointervINTEL")) == NULL) || r; r = ((glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glNormalPointervINTEL")) == NULL) || r; r = ((glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointervINTEL")) == NULL) || r; r = ((glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glVertexPointervINTEL")) == NULL) || r; return r; } #endif /* GL_INTEL_parallel_arrays */ #ifdef GL_INTEL_texture_scissor static GLboolean _glewInit_GL_INTEL_texture_scissor (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexScissorFuncINTEL = (PFNGLTEXSCISSORFUNCINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorFuncINTEL")) == NULL) || r; r = ((glTexScissorINTEL = (PFNGLTEXSCISSORINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorINTEL")) == NULL) || r; return r; } #endif /* GL_INTEL_texture_scissor */ #ifdef GL_KHR_debug static GLboolean _glewInit_GL_KHR_debug (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallback")) == NULL) || r; r = ((glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageControl")) == NULL) || r; r = ((glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsert")) == NULL) || r; r = ((glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLog")) == NULL) || r; r = ((glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectLabel")) == NULL) || r; r = ((glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectPtrLabel")) == NULL) || r; r = ((glGetPointerv = (PFNGLGETPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetPointerv")) == NULL) || r; r = ((glObjectLabel = (PFNGLOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectLabel")) == NULL) || r; r = ((glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectPtrLabel")) == NULL) || r; r = ((glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)glewGetProcAddress((const GLubyte*)"glPushDebugGroup")) == NULL) || r; return r; } #endif /* GL_KHR_debug */ #ifdef GL_KHR_texture_compression_astc_ldr #endif /* GL_KHR_texture_compression_astc_ldr */ #ifdef GL_KTX_buffer_region static GLboolean _glewInit_GL_KTX_buffer_region (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBufferRegionEnabled = (PFNGLBUFFERREGIONENABLEDPROC)glewGetProcAddress((const GLubyte*)"glBufferRegionEnabled")) == NULL) || r; r = ((glDeleteBufferRegion = (PFNGLDELETEBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glDeleteBufferRegion")) == NULL) || r; r = ((glDrawBufferRegion = (PFNGLDRAWBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glDrawBufferRegion")) == NULL) || r; r = ((glNewBufferRegion = (PFNGLNEWBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glNewBufferRegion")) == NULL) || r; r = ((glReadBufferRegion = (PFNGLREADBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glReadBufferRegion")) == NULL) || r; return r; } #endif /* GL_KTX_buffer_region */ #ifdef GL_MESAX_texture_stack #endif /* GL_MESAX_texture_stack */ #ifdef GL_MESA_pack_invert #endif /* GL_MESA_pack_invert */ #ifdef GL_MESA_resize_buffers static GLboolean _glewInit_GL_MESA_resize_buffers (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glResizeBuffersMESA")) == NULL) || r; return r; } #endif /* GL_MESA_resize_buffers */ #ifdef GL_MESA_window_pos static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dMESA")) == NULL) || r; r = ((glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvMESA")) == NULL) || r; r = ((glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fMESA")) == NULL) || r; r = ((glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvMESA")) == NULL) || r; r = ((glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iMESA")) == NULL) || r; r = ((glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivMESA")) == NULL) || r; r = ((glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sMESA")) == NULL) || r; r = ((glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svMESA")) == NULL) || r; r = ((glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dMESA")) == NULL) || r; r = ((glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvMESA")) == NULL) || r; r = ((glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fMESA")) == NULL) || r; r = ((glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvMESA")) == NULL) || r; r = ((glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iMESA")) == NULL) || r; r = ((glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivMESA")) == NULL) || r; r = ((glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sMESA")) == NULL) || r; r = ((glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svMESA")) == NULL) || r; r = ((glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dMESA")) == NULL) || r; r = ((glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dvMESA")) == NULL) || r; r = ((glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fMESA")) == NULL) || r; r = ((glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fvMESA")) == NULL) || r; r = ((glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4iMESA")) == NULL) || r; r = ((glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4ivMESA")) == NULL) || r; r = ((glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4sMESA")) == NULL) || r; r = ((glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4svMESA")) == NULL) || r; return r; } #endif /* GL_MESA_window_pos */ #ifdef GL_MESA_ycbcr_texture #endif /* GL_MESA_ycbcr_texture */ #ifdef GL_NVX_gpu_memory_info #endif /* GL_NVX_gpu_memory_info */ #ifdef GL_NV_bindless_texture static GLboolean _glewInit_GL_NV_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetImageHandleNV = (PFNGLGETIMAGEHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetImageHandleNV")) == NULL) || r; r = ((glGetTextureHandleNV = (PFNGLGETTEXTUREHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetTextureHandleNV")) == NULL) || r; r = ((glGetTextureSamplerHandleNV = (PFNGLGETTEXTURESAMPLERHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetTextureSamplerHandleNV")) == NULL) || r; r = ((glIsImageHandleResidentNV = (PFNGLISIMAGEHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsImageHandleResidentNV")) == NULL) || r; r = ((glIsTextureHandleResidentNV = (PFNGLISTEXTUREHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsTextureHandleResidentNV")) == NULL) || r; r = ((glMakeImageHandleNonResidentNV = (PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleNonResidentNV")) == NULL) || r; r = ((glMakeImageHandleResidentNV = (PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleResidentNV")) == NULL) || r; r = ((glMakeTextureHandleNonResidentNV = (PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleNonResidentNV")) == NULL) || r; r = ((glMakeTextureHandleResidentNV = (PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleResidentNV")) == NULL) || r; r = ((glProgramUniformHandleui64NV = (PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64NV")) == NULL) || r; r = ((glProgramUniformHandleui64vNV = (PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64vNV")) == NULL) || r; r = ((glUniformHandleui64NV = (PFNGLUNIFORMHANDLEUI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64NV")) == NULL) || r; r = ((glUniformHandleui64vNV = (PFNGLUNIFORMHANDLEUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64vNV")) == NULL) || r; return r; } #endif /* GL_NV_bindless_texture */ #ifdef GL_NV_blend_square #endif /* GL_NV_blend_square */ #ifdef GL_NV_conditional_render static GLboolean _glewInit_GL_NV_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginConditionalRenderNV = (PFNGLBEGINCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRenderNV")) == NULL) || r; r = ((glEndConditionalRenderNV = (PFNGLENDCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRenderNV")) == NULL) || r; return r; } #endif /* GL_NV_conditional_render */ #ifdef GL_NV_copy_depth_to_color #endif /* GL_NV_copy_depth_to_color */ #ifdef GL_NV_copy_image static GLboolean _glewInit_GL_NV_copy_image (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCopyImageSubDataNV = (PFNGLCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glCopyImageSubDataNV")) == NULL) || r; return r; } #endif /* GL_NV_copy_image */ #ifdef GL_NV_depth_buffer_float static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)glewGetProcAddress((const GLubyte*)"glClearDepthdNV")) == NULL) || r; r = ((glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsdNV")) == NULL) || r; r = ((glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangedNV")) == NULL) || r; return r; } #endif /* GL_NV_depth_buffer_float */ #ifdef GL_NV_depth_clamp #endif /* GL_NV_depth_clamp */ #ifdef GL_NV_depth_range_unclamped #endif /* GL_NV_depth_range_unclamped */ #ifdef GL_NV_evaluators static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glEvalMapsNV = (PFNGLEVALMAPSNVPROC)glewGetProcAddress((const GLubyte*)"glEvalMapsNV")) == NULL) || r; r = ((glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterfvNV")) == NULL) || r; r = ((glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterivNV")) == NULL) || r; r = ((glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapControlPointsNV")) == NULL) || r; r = ((glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterfvNV")) == NULL) || r; r = ((glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterivNV")) == NULL) || r; r = ((glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glMapControlPointsNV")) == NULL) || r; r = ((glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterfvNV")) == NULL) || r; r = ((glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterivNV")) == NULL) || r; return r; } #endif /* GL_NV_evaluators */ #ifdef GL_NV_explicit_multisample static GLboolean _glewInit_GL_NV_explicit_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetMultisamplefvNV = (PFNGLGETMULTISAMPLEFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMultisamplefvNV")) == NULL) || r; r = ((glSampleMaskIndexedNV = (PFNGLSAMPLEMASKINDEXEDNVPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskIndexedNV")) == NULL) || r; r = ((glTexRenderbufferNV = (PFNGLTEXRENDERBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glTexRenderbufferNV")) == NULL) || r; return r; } #endif /* GL_NV_explicit_multisample */ #ifdef GL_NV_fence static GLboolean _glewInit_GL_NV_fence (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesNV")) == NULL) || r; r = ((glFinishFenceNV = (PFNGLFINISHFENCENVPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceNV")) == NULL) || r; r = ((glGenFencesNV = (PFNGLGENFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glGenFencesNV")) == NULL) || r; r = ((glGetFenceivNV = (PFNGLGETFENCEIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFenceivNV")) == NULL) || r; r = ((glIsFenceNV = (PFNGLISFENCENVPROC)glewGetProcAddress((const GLubyte*)"glIsFenceNV")) == NULL) || r; r = ((glSetFenceNV = (PFNGLSETFENCENVPROC)glewGetProcAddress((const GLubyte*)"glSetFenceNV")) == NULL) || r; r = ((glTestFenceNV = (PFNGLTESTFENCENVPROC)glewGetProcAddress((const GLubyte*)"glTestFenceNV")) == NULL) || r; return r; } #endif /* GL_NV_fence */ #ifdef GL_NV_float_buffer #endif /* GL_NV_float_buffer */ #ifdef GL_NV_fog_distance #endif /* GL_NV_fog_distance */ #ifdef GL_NV_fragment_program static GLboolean _glewInit_GL_NV_fragment_program (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterdvNV")) == NULL) || r; r = ((glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterfvNV")) == NULL) || r; r = ((glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dNV")) == NULL) || r; r = ((glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dvNV")) == NULL) || r; r = ((glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fNV")) == NULL) || r; r = ((glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fvNV")) == NULL) || r; return r; } #endif /* GL_NV_fragment_program */ #ifdef GL_NV_fragment_program2 #endif /* GL_NV_fragment_program2 */ #ifdef GL_NV_fragment_program4 #endif /* GL_NV_fragment_program4 */ #ifdef GL_NV_fragment_program_option #endif /* GL_NV_fragment_program_option */ #ifdef GL_NV_framebuffer_multisample_coverage static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleCoverageNV")) == NULL) || r; return r; } #endif /* GL_NV_framebuffer_multisample_coverage */ #ifdef GL_NV_geometry_program4 static GLboolean _glewInit_GL_NV_geometry_program4 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC)glewGetProcAddress((const GLubyte*)"glProgramVertexLimitNV")) == NULL) || r; return r; } #endif /* GL_NV_geometry_program4 */ #ifdef GL_NV_geometry_shader4 #endif /* GL_NV_geometry_shader4 */ #ifdef GL_NV_gpu_program4 static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4iNV")) == NULL) || r; r = ((glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4ivNV")) == NULL) || r; r = ((glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uiNV")) == NULL) || r; r = ((glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uivNV")) == NULL) || r; r = ((glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4ivNV")) == NULL) || r; r = ((glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4uivNV")) == NULL) || r; r = ((glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4iNV")) == NULL) || r; r = ((glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4ivNV")) == NULL) || r; r = ((glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uiNV")) == NULL) || r; r = ((glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uivNV")) == NULL) || r; r = ((glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4ivNV")) == NULL) || r; r = ((glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4uivNV")) == NULL) || r; return r; } #endif /* GL_NV_gpu_program4 */ #ifdef GL_NV_gpu_program5 #endif /* GL_NV_gpu_program5 */ #ifdef GL_NV_gpu_program_fp64 #endif /* GL_NV_gpu_program_fp64 */ #ifdef GL_NV_gpu_shader5 static GLboolean _glewInit_GL_NV_gpu_shader5 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformi64vNV")) == NULL) || r; r = ((glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformui64vNV")) == NULL) || r; r = ((glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i64NV")) == NULL) || r; r = ((glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i64vNV")) == NULL) || r; r = ((glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui64NV")) == NULL) || r; r = ((glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui64vNV")) == NULL) || r; r = ((glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i64NV")) == NULL) || r; r = ((glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i64vNV")) == NULL) || r; r = ((glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui64NV")) == NULL) || r; r = ((glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui64vNV")) == NULL) || r; r = ((glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i64NV")) == NULL) || r; r = ((glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i64vNV")) == NULL) || r; r = ((glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui64NV")) == NULL) || r; r = ((glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui64vNV")) == NULL) || r; r = ((glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i64NV")) == NULL) || r; r = ((glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i64vNV")) == NULL) || r; r = ((glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui64NV")) == NULL) || r; r = ((glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui64vNV")) == NULL) || r; r = ((glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform1i64NV")) == NULL) || r; r = ((glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform1i64vNV")) == NULL) || r; r = ((glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui64NV")) == NULL) || r; r = ((glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui64vNV")) == NULL) || r; r = ((glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform2i64NV")) == NULL) || r; r = ((glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform2i64vNV")) == NULL) || r; r = ((glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui64NV")) == NULL) || r; r = ((glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui64vNV")) == NULL) || r; r = ((glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform3i64NV")) == NULL) || r; r = ((glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform3i64vNV")) == NULL) || r; r = ((glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui64NV")) == NULL) || r; r = ((glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui64vNV")) == NULL) || r; r = ((glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform4i64NV")) == NULL) || r; r = ((glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform4i64vNV")) == NULL) || r; r = ((glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui64NV")) == NULL) || r; r = ((glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui64vNV")) == NULL) || r; return r; } #endif /* GL_NV_gpu_shader5 */ #ifdef GL_NV_half_float static GLboolean _glewInit_GL_NV_half_float (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColor3hNV = (PFNGLCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hNV")) == NULL) || r; r = ((glColor3hvNV = (PFNGLCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hvNV")) == NULL) || r; r = ((glColor4hNV = (PFNGLCOLOR4HNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hNV")) == NULL) || r; r = ((glColor4hvNV = (PFNGLCOLOR4HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hvNV")) == NULL) || r; r = ((glFogCoordhNV = (PFNGLFOGCOORDHNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhNV")) == NULL) || r; r = ((glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhvNV")) == NULL) || r; r = ((glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hNV")) == NULL) || r; r = ((glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hvNV")) == NULL) || r; r = ((glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hNV")) == NULL) || r; r = ((glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hvNV")) == NULL) || r; r = ((glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hNV")) == NULL) || r; r = ((glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hvNV")) == NULL) || r; r = ((glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hNV")) == NULL) || r; r = ((glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hvNV")) == NULL) || r; r = ((glNormal3hNV = (PFNGLNORMAL3HNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hNV")) == NULL) || r; r = ((glNormal3hvNV = (PFNGLNORMAL3HVNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hvNV")) == NULL) || r; r = ((glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hNV")) == NULL) || r; r = ((glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hvNV")) == NULL) || r; r = ((glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hNV")) == NULL) || r; r = ((glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hvNV")) == NULL) || r; r = ((glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hNV")) == NULL) || r; r = ((glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hvNV")) == NULL) || r; r = ((glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hNV")) == NULL) || r; r = ((glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hvNV")) == NULL) || r; r = ((glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hNV")) == NULL) || r; r = ((glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hvNV")) == NULL) || r; r = ((glVertex2hNV = (PFNGLVERTEX2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hNV")) == NULL) || r; r = ((glVertex2hvNV = (PFNGLVERTEX2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hvNV")) == NULL) || r; r = ((glVertex3hNV = (PFNGLVERTEX3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hNV")) == NULL) || r; r = ((glVertex3hvNV = (PFNGLVERTEX3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hvNV")) == NULL) || r; r = ((glVertex4hNV = (PFNGLVERTEX4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hNV")) == NULL) || r; r = ((glVertex4hvNV = (PFNGLVERTEX4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hvNV")) == NULL) || r; r = ((glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hNV")) == NULL) || r; r = ((glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hvNV")) == NULL) || r; r = ((glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hNV")) == NULL) || r; r = ((glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hvNV")) == NULL) || r; r = ((glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hNV")) == NULL) || r; r = ((glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hvNV")) == NULL) || r; r = ((glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hNV")) == NULL) || r; r = ((glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hvNV")) == NULL) || r; r = ((glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1hvNV")) == NULL) || r; r = ((glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2hvNV")) == NULL) || r; r = ((glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3hvNV")) == NULL) || r; r = ((glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4hvNV")) == NULL) || r; r = ((glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthNV")) == NULL) || r; r = ((glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthvNV")) == NULL) || r; return r; } #endif /* GL_NV_half_float */ #ifdef GL_NV_light_max_exponent #endif /* GL_NV_light_max_exponent */ #ifdef GL_NV_multisample_coverage #endif /* GL_NV_multisample_coverage */ #ifdef GL_NV_multisample_filter_hint #endif /* GL_NV_multisample_filter_hint */ #ifdef GL_NV_occlusion_query static GLboolean _glewInit_GL_NV_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glBeginOcclusionQueryNV")) == NULL) || r; r = ((glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteOcclusionQueriesNV")) == NULL) || r; r = ((glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glEndOcclusionQueryNV")) == NULL) || r; r = ((glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glGenOcclusionQueriesNV")) == NULL) || r; r = ((glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryivNV")) == NULL) || r; r = ((glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryuivNV")) == NULL) || r; r = ((glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glIsOcclusionQueryNV")) == NULL) || r; return r; } #endif /* GL_NV_occlusion_query */ #ifdef GL_NV_packed_depth_stencil #endif /* GL_NV_packed_depth_stencil */ #ifdef GL_NV_parameter_buffer_object static GLboolean _glewInit_GL_NV_parameter_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIivNV")) == NULL) || r; r = ((glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIuivNV")) == NULL) || r; r = ((glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersfvNV")) == NULL) || r; return r; } #endif /* GL_NV_parameter_buffer_object */ #ifdef GL_NV_parameter_buffer_object2 #endif /* GL_NV_parameter_buffer_object2 */ #ifdef GL_NV_path_rendering static GLboolean _glewInit_GL_NV_path_rendering (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCopyPathNV = (PFNGLCOPYPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCopyPathNV")) == NULL) || r; r = ((glCoverFillPathInstancedNV = (PFNGLCOVERFILLPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glCoverFillPathInstancedNV")) == NULL) || r; r = ((glCoverFillPathNV = (PFNGLCOVERFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCoverFillPathNV")) == NULL) || r; r = ((glCoverStrokePathInstancedNV = (PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glCoverStrokePathInstancedNV")) == NULL) || r; r = ((glCoverStrokePathNV = (PFNGLCOVERSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCoverStrokePathNV")) == NULL) || r; r = ((glDeletePathsNV = (PFNGLDELETEPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glDeletePathsNV")) == NULL) || r; r = ((glGenPathsNV = (PFNGLGENPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glGenPathsNV")) == NULL) || r; r = ((glGetPathColorGenfvNV = (PFNGLGETPATHCOLORGENFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathColorGenfvNV")) == NULL) || r; r = ((glGetPathColorGenivNV = (PFNGLGETPATHCOLORGENIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathColorGenivNV")) == NULL) || r; r = ((glGetPathCommandsNV = (PFNGLGETPATHCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathCommandsNV")) == NULL) || r; r = ((glGetPathCoordsNV = (PFNGLGETPATHCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathCoordsNV")) == NULL) || r; r = ((glGetPathDashArrayNV = (PFNGLGETPATHDASHARRAYNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathDashArrayNV")) == NULL) || r; r = ((glGetPathLengthNV = (PFNGLGETPATHLENGTHNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathLengthNV")) == NULL) || r; r = ((glGetPathMetricRangeNV = (PFNGLGETPATHMETRICRANGENVPROC)glewGetProcAddress((const GLubyte*)"glGetPathMetricRangeNV")) == NULL) || r; r = ((glGetPathMetricsNV = (PFNGLGETPATHMETRICSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathMetricsNV")) == NULL) || r; r = ((glGetPathParameterfvNV = (PFNGLGETPATHPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathParameterfvNV")) == NULL) || r; r = ((glGetPathParameterivNV = (PFNGLGETPATHPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathParameterivNV")) == NULL) || r; r = ((glGetPathSpacingNV = (PFNGLGETPATHSPACINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathSpacingNV")) == NULL) || r; r = ((glGetPathTexGenfvNV = (PFNGLGETPATHTEXGENFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathTexGenfvNV")) == NULL) || r; r = ((glGetPathTexGenivNV = (PFNGLGETPATHTEXGENIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathTexGenivNV")) == NULL) || r; r = ((glInterpolatePathsNV = (PFNGLINTERPOLATEPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glInterpolatePathsNV")) == NULL) || r; r = ((glIsPathNV = (PFNGLISPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPathNV")) == NULL) || r; r = ((glIsPointInFillPathNV = (PFNGLISPOINTINFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPointInFillPathNV")) == NULL) || r; r = ((glIsPointInStrokePathNV = (PFNGLISPOINTINSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPointInStrokePathNV")) == NULL) || r; r = ((glPathColorGenNV = (PFNGLPATHCOLORGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathColorGenNV")) == NULL) || r; r = ((glPathCommandsNV = (PFNGLPATHCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathCommandsNV")) == NULL) || r; r = ((glPathCoordsNV = (PFNGLPATHCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathCoordsNV")) == NULL) || r; r = ((glPathCoverDepthFuncNV = (PFNGLPATHCOVERDEPTHFUNCNVPROC)glewGetProcAddress((const GLubyte*)"glPathCoverDepthFuncNV")) == NULL) || r; r = ((glPathDashArrayNV = (PFNGLPATHDASHARRAYNVPROC)glewGetProcAddress((const GLubyte*)"glPathDashArrayNV")) == NULL) || r; r = ((glPathFogGenNV = (PFNGLPATHFOGGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathFogGenNV")) == NULL) || r; r = ((glPathGlyphRangeNV = (PFNGLPATHGLYPHRANGENVPROC)glewGetProcAddress((const GLubyte*)"glPathGlyphRangeNV")) == NULL) || r; r = ((glPathGlyphsNV = (PFNGLPATHGLYPHSNVPROC)glewGetProcAddress((const GLubyte*)"glPathGlyphsNV")) == NULL) || r; r = ((glPathParameterfNV = (PFNGLPATHPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterfNV")) == NULL) || r; r = ((glPathParameterfvNV = (PFNGLPATHPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterfvNV")) == NULL) || r; r = ((glPathParameteriNV = (PFNGLPATHPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPathParameteriNV")) == NULL) || r; r = ((glPathParameterivNV = (PFNGLPATHPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterivNV")) == NULL) || r; r = ((glPathStencilDepthOffsetNV = (PFNGLPATHSTENCILDEPTHOFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glPathStencilDepthOffsetNV")) == NULL) || r; r = ((glPathStencilFuncNV = (PFNGLPATHSTENCILFUNCNVPROC)glewGetProcAddress((const GLubyte*)"glPathStencilFuncNV")) == NULL) || r; r = ((glPathStringNV = (PFNGLPATHSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glPathStringNV")) == NULL) || r; r = ((glPathSubCommandsNV = (PFNGLPATHSUBCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathSubCommandsNV")) == NULL) || r; r = ((glPathSubCoordsNV = (PFNGLPATHSUBCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathSubCoordsNV")) == NULL) || r; r = ((glPathTexGenNV = (PFNGLPATHTEXGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathTexGenNV")) == NULL) || r; r = ((glPointAlongPathNV = (PFNGLPOINTALONGPATHNVPROC)glewGetProcAddress((const GLubyte*)"glPointAlongPathNV")) == NULL) || r; r = ((glStencilFillPathInstancedNV = (PFNGLSTENCILFILLPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glStencilFillPathInstancedNV")) == NULL) || r; r = ((glStencilFillPathNV = (PFNGLSTENCILFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glStencilFillPathNV")) == NULL) || r; r = ((glStencilStrokePathInstancedNV = (PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glStencilStrokePathInstancedNV")) == NULL) || r; r = ((glStencilStrokePathNV = (PFNGLSTENCILSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glStencilStrokePathNV")) == NULL) || r; r = ((glTransformPathNV = (PFNGLTRANSFORMPATHNVPROC)glewGetProcAddress((const GLubyte*)"glTransformPathNV")) == NULL) || r; r = ((glWeightPathsNV = (PFNGLWEIGHTPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glWeightPathsNV")) == NULL) || r; return r; } #endif /* GL_NV_path_rendering */ #ifdef GL_NV_pixel_data_range static GLboolean _glewInit_GL_NV_pixel_data_range (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushPixelDataRangeNV")) == NULL) || r; r = ((glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glPixelDataRangeNV")) == NULL) || r; return r; } #endif /* GL_NV_pixel_data_range */ #ifdef GL_NV_point_sprite static GLboolean _glewInit_GL_NV_point_sprite (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriNV")) == NULL) || r; r = ((glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterivNV")) == NULL) || r; return r; } #endif /* GL_NV_point_sprite */ #ifdef GL_NV_present_video static GLboolean _glewInit_GL_NV_present_video (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetVideoi64vNV = (PFNGLGETVIDEOI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoi64vNV")) == NULL) || r; r = ((glGetVideoivNV = (PFNGLGETVIDEOIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoivNV")) == NULL) || r; r = ((glGetVideoui64vNV = (PFNGLGETVIDEOUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoui64vNV")) == NULL) || r; r = ((glGetVideouivNV = (PFNGLGETVIDEOUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideouivNV")) == NULL) || r; r = ((glPresentFrameDualFillNV = (PFNGLPRESENTFRAMEDUALFILLNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameDualFillNV")) == NULL) || r; r = ((glPresentFrameKeyedNV = (PFNGLPRESENTFRAMEKEYEDNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameKeyedNV")) == NULL) || r; return r; } #endif /* GL_NV_present_video */ #ifdef GL_NV_primitive_restart static GLboolean _glewInit_GL_NV_primitive_restart (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndexNV")) == NULL) || r; r = ((glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartNV")) == NULL) || r; return r; } #endif /* GL_NV_primitive_restart */ #ifdef GL_NV_register_combiners static GLboolean _glewInit_GL_NV_register_combiners (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerInputNV")) == NULL) || r; r = ((glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerOutputNV")) == NULL) || r; r = ((glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfNV")) == NULL) || r; r = ((glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfvNV")) == NULL) || r; r = ((glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameteriNV")) == NULL) || r; r = ((glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterivNV")) == NULL) || r; r = ((glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glFinalCombinerInputNV")) == NULL) || r; r = ((glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterfvNV")) == NULL) || r; r = ((glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterivNV")) == NULL) || r; r = ((glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterfvNV")) == NULL) || r; r = ((glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterivNV")) == NULL) || r; r = ((glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterfvNV")) == NULL) || r; r = ((glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterivNV")) == NULL) || r; return r; } #endif /* GL_NV_register_combiners */ #ifdef GL_NV_register_combiners2 static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerStageParameterfvNV")) == NULL) || r; r = ((glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerStageParameterfvNV")) == NULL) || r; return r; } #endif /* GL_NV_register_combiners2 */ #ifdef GL_NV_shader_atomic_float #endif /* GL_NV_shader_atomic_float */ #ifdef GL_NV_shader_buffer_load static GLboolean _glewInit_GL_NV_shader_buffer_load (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetBufferParameterui64vNV = (PFNGLGETBUFFERPARAMETERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterui64vNV")) == NULL) || r; r = ((glGetIntegerui64vNV = (PFNGLGETINTEGERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerui64vNV")) == NULL) || r; r = ((glGetNamedBufferParameterui64vNV = (PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferParameterui64vNV")) == NULL) || r; r = ((glIsBufferResidentNV = (PFNGLISBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsBufferResidentNV")) == NULL) || r; r = ((glIsNamedBufferResidentNV = (PFNGLISNAMEDBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsNamedBufferResidentNV")) == NULL) || r; r = ((glMakeBufferNonResidentNV = (PFNGLMAKEBUFFERNONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeBufferNonResidentNV")) == NULL) || r; r = ((glMakeBufferResidentNV = (PFNGLMAKEBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeBufferResidentNV")) == NULL) || r; r = ((glMakeNamedBufferNonResidentNV = (PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeNamedBufferNonResidentNV")) == NULL) || r; r = ((glMakeNamedBufferResidentNV = (PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeNamedBufferResidentNV")) == NULL) || r; r = ((glProgramUniformui64NV = (PFNGLPROGRAMUNIFORMUI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformui64NV")) == NULL) || r; r = ((glProgramUniformui64vNV = (PFNGLPROGRAMUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformui64vNV")) == NULL) || r; r = ((glUniformui64NV = (PFNGLUNIFORMUI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniformui64NV")) == NULL) || r; r = ((glUniformui64vNV = (PFNGLUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniformui64vNV")) == NULL) || r; return r; } #endif /* GL_NV_shader_buffer_load */ #ifdef GL_NV_tessellation_program5 #endif /* GL_NV_tessellation_program5 */ #ifdef GL_NV_texgen_emboss #endif /* GL_NV_texgen_emboss */ #ifdef GL_NV_texgen_reflection #endif /* GL_NV_texgen_reflection */ #ifdef GL_NV_texture_barrier static GLboolean _glewInit_GL_NV_texture_barrier (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTextureBarrierNV = (PFNGLTEXTUREBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glTextureBarrierNV")) == NULL) || r; return r; } #endif /* GL_NV_texture_barrier */ #ifdef GL_NV_texture_compression_vtc #endif /* GL_NV_texture_compression_vtc */ #ifdef GL_NV_texture_env_combine4 #endif /* GL_NV_texture_env_combine4 */ #ifdef GL_NV_texture_expand_normal #endif /* GL_NV_texture_expand_normal */ #ifdef GL_NV_texture_multisample static GLboolean _glewInit_GL_NV_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexImage2DMultisampleCoverageNV = (PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTexImage2DMultisampleCoverageNV")) == NULL) || r; r = ((glTexImage3DMultisampleCoverageNV = (PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DMultisampleCoverageNV")) == NULL) || r; r = ((glTextureImage2DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DMultisampleCoverageNV")) == NULL) || r; r = ((glTextureImage2DMultisampleNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DMultisampleNV")) == NULL) || r; r = ((glTextureImage3DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DMultisampleCoverageNV")) == NULL) || r; r = ((glTextureImage3DMultisampleNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DMultisampleNV")) == NULL) || r; return r; } #endif /* GL_NV_texture_multisample */ #ifdef GL_NV_texture_rectangle #endif /* GL_NV_texture_rectangle */ #ifdef GL_NV_texture_shader #endif /* GL_NV_texture_shader */ #ifdef GL_NV_texture_shader2 #endif /* GL_NV_texture_shader2 */ #ifdef GL_NV_texture_shader3 #endif /* GL_NV_texture_shader3 */ #ifdef GL_NV_transform_feedback static GLboolean _glewInit_GL_NV_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glActiveVaryingNV")) == NULL) || r; r = ((glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackNV")) == NULL) || r; r = ((glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseNV")) == NULL) || r; r = ((glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetNV")) == NULL) || r; r = ((glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeNV")) == NULL) || r; r = ((glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackNV")) == NULL) || r; r = ((glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveVaryingNV")) == NULL) || r; r = ((glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingNV")) == NULL) || r; r = ((glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC)glewGetProcAddress((const GLubyte*)"glGetVaryingLocationNV")) == NULL) || r; r = ((glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackAttribsNV")) == NULL) || r; r = ((glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsNV")) == NULL) || r; return r; } #endif /* GL_NV_transform_feedback */ #ifdef GL_NV_transform_feedback2 static GLboolean _glewInit_GL_NV_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBindTransformFeedbackNV = (PFNGLBINDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBindTransformFeedbackNV")) == NULL) || r; r = ((glDeleteTransformFeedbacksNV = (PFNGLDELETETRANSFORMFEEDBACKSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteTransformFeedbacksNV")) == NULL) || r; r = ((glDrawTransformFeedbackNV = (PFNGLDRAWTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackNV")) == NULL) || r; r = ((glGenTransformFeedbacksNV = (PFNGLGENTRANSFORMFEEDBACKSNVPROC)glewGetProcAddress((const GLubyte*)"glGenTransformFeedbacksNV")) == NULL) || r; r = ((glIsTransformFeedbackNV = (PFNGLISTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glIsTransformFeedbackNV")) == NULL) || r; r = ((glPauseTransformFeedbackNV = (PFNGLPAUSETRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glPauseTransformFeedbackNV")) == NULL) || r; r = ((glResumeTransformFeedbackNV = (PFNGLRESUMETRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glResumeTransformFeedbackNV")) == NULL) || r; return r; } #endif /* GL_NV_transform_feedback2 */ #ifdef GL_NV_vdpau_interop static GLboolean _glewInit_GL_NV_vdpau_interop (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glVDPAUFiniNV = (PFNGLVDPAUFININVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUFiniNV")) == NULL) || r; r = ((glVDPAUGetSurfaceivNV = (PFNGLVDPAUGETSURFACEIVNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUGetSurfaceivNV")) == NULL) || r; r = ((glVDPAUInitNV = (PFNGLVDPAUINITNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUInitNV")) == NULL) || r; r = ((glVDPAUIsSurfaceNV = (PFNGLVDPAUISSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUIsSurfaceNV")) == NULL) || r; r = ((glVDPAUMapSurfacesNV = (PFNGLVDPAUMAPSURFACESNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUMapSurfacesNV")) == NULL) || r; r = ((glVDPAURegisterOutputSurfaceNV = (PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAURegisterOutputSurfaceNV")) == NULL) || r; r = ((glVDPAURegisterVideoSurfaceNV = (PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAURegisterVideoSurfaceNV")) == NULL) || r; r = ((glVDPAUSurfaceAccessNV = (PFNGLVDPAUSURFACEACCESSNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUSurfaceAccessNV")) == NULL) || r; r = ((glVDPAUUnmapSurfacesNV = (PFNGLVDPAUUNMAPSURFACESNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUUnmapSurfacesNV")) == NULL) || r; r = ((glVDPAUUnregisterSurfaceNV = (PFNGLVDPAUUNREGISTERSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUUnregisterSurfaceNV")) == NULL) || r; return r; } #endif /* GL_NV_vdpau_interop */ #ifdef GL_NV_vertex_array_range static GLboolean _glewInit_GL_NV_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeNV")) == NULL) || r; r = ((glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeNV")) == NULL) || r; return r; } #endif /* GL_NV_vertex_array_range */ #ifdef GL_NV_vertex_array_range2 #endif /* GL_NV_vertex_array_range2 */ #ifdef GL_NV_vertex_attrib_integer_64bit static GLboolean _glewInit_GL_NV_vertex_attrib_integer_64bit (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetVertexAttribLi64vNV = (PFNGLGETVERTEXATTRIBLI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLi64vNV")) == NULL) || r; r = ((glGetVertexAttribLui64vNV = (PFNGLGETVERTEXATTRIBLUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLui64vNV")) == NULL) || r; r = ((glVertexAttribL1i64NV = (PFNGLVERTEXATTRIBL1I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1i64NV")) == NULL) || r; r = ((glVertexAttribL1i64vNV = (PFNGLVERTEXATTRIBL1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1i64vNV")) == NULL) || r; r = ((glVertexAttribL1ui64NV = (PFNGLVERTEXATTRIBL1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64NV")) == NULL) || r; r = ((glVertexAttribL1ui64vNV = (PFNGLVERTEXATTRIBL1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64vNV")) == NULL) || r; r = ((glVertexAttribL2i64NV = (PFNGLVERTEXATTRIBL2I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2i64NV")) == NULL) || r; r = ((glVertexAttribL2i64vNV = (PFNGLVERTEXATTRIBL2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2i64vNV")) == NULL) || r; r = ((glVertexAttribL2ui64NV = (PFNGLVERTEXATTRIBL2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2ui64NV")) == NULL) || r; r = ((glVertexAttribL2ui64vNV = (PFNGLVERTEXATTRIBL2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2ui64vNV")) == NULL) || r; r = ((glVertexAttribL3i64NV = (PFNGLVERTEXATTRIBL3I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3i64NV")) == NULL) || r; r = ((glVertexAttribL3i64vNV = (PFNGLVERTEXATTRIBL3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3i64vNV")) == NULL) || r; r = ((glVertexAttribL3ui64NV = (PFNGLVERTEXATTRIBL3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3ui64NV")) == NULL) || r; r = ((glVertexAttribL3ui64vNV = (PFNGLVERTEXATTRIBL3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3ui64vNV")) == NULL) || r; r = ((glVertexAttribL4i64NV = (PFNGLVERTEXATTRIBL4I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4i64NV")) == NULL) || r; r = ((glVertexAttribL4i64vNV = (PFNGLVERTEXATTRIBL4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4i64vNV")) == NULL) || r; r = ((glVertexAttribL4ui64NV = (PFNGLVERTEXATTRIBL4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4ui64NV")) == NULL) || r; r = ((glVertexAttribL4ui64vNV = (PFNGLVERTEXATTRIBL4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4ui64vNV")) == NULL) || r; r = ((glVertexAttribLFormatNV = (PFNGLVERTEXATTRIBLFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLFormatNV")) == NULL) || r; return r; } #endif /* GL_NV_vertex_attrib_integer_64bit */ #ifdef GL_NV_vertex_buffer_unified_memory static GLboolean _glewInit_GL_NV_vertex_buffer_unified_memory (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBufferAddressRangeNV = (PFNGLBUFFERADDRESSRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBufferAddressRangeNV")) == NULL) || r; r = ((glColorFormatNV = (PFNGLCOLORFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glColorFormatNV")) == NULL) || r; r = ((glEdgeFlagFormatNV = (PFNGLEDGEFLAGFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagFormatNV")) == NULL) || r; r = ((glFogCoordFormatNV = (PFNGLFOGCOORDFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordFormatNV")) == NULL) || r; r = ((glGetIntegerui64i_vNV = (PFNGLGETINTEGERUI64I_VNVPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerui64i_vNV")) == NULL) || r; r = ((glIndexFormatNV = (PFNGLINDEXFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glIndexFormatNV")) == NULL) || r; r = ((glNormalFormatNV = (PFNGLNORMALFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glNormalFormatNV")) == NULL) || r; r = ((glSecondaryColorFormatNV = (PFNGLSECONDARYCOLORFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorFormatNV")) == NULL) || r; r = ((glTexCoordFormatNV = (PFNGLTEXCOORDFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordFormatNV")) == NULL) || r; r = ((glVertexAttribFormatNV = (PFNGLVERTEXATTRIBFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribFormatNV")) == NULL) || r; r = ((glVertexAttribIFormatNV = (PFNGLVERTEXATTRIBIFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIFormatNV")) == NULL) || r; r = ((glVertexFormatNV = (PFNGLVERTEXFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexFormatNV")) == NULL) || r; return r; } #endif /* GL_NV_vertex_buffer_unified_memory */ #ifdef GL_NV_vertex_program static GLboolean _glewInit_GL_NV_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glAreProgramsResidentNV")) == NULL) || r; r = ((glBindProgramNV = (PFNGLBINDPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glBindProgramNV")) == NULL) || r; r = ((glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsNV")) == NULL) || r; r = ((glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glExecuteProgramNV")) == NULL) || r; r = ((glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsNV")) == NULL) || r; r = ((glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterdvNV")) == NULL) || r; r = ((glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterfvNV")) == NULL) || r; r = ((glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringNV")) == NULL) || r; r = ((glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivNV")) == NULL) || r; r = ((glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetTrackMatrixivNV")) == NULL) || r; r = ((glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervNV")) == NULL) || r; r = ((glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvNV")) == NULL) || r; r = ((glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvNV")) == NULL) || r; r = ((glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivNV")) == NULL) || r; r = ((glIsProgramNV = (PFNGLISPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glIsProgramNV")) == NULL) || r; r = ((glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glLoadProgramNV")) == NULL) || r; r = ((glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dNV")) == NULL) || r; r = ((glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dvNV")) == NULL) || r; r = ((glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fNV")) == NULL) || r; r = ((glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fvNV")) == NULL) || r; r = ((glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4dvNV")) == NULL) || r; r = ((glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4fvNV")) == NULL) || r; r = ((glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glRequestResidentProgramsNV")) == NULL) || r; r = ((glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC)glewGetProcAddress((const GLubyte*)"glTrackMatrixNV")) == NULL) || r; r = ((glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dNV")) == NULL) || r; r = ((glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvNV")) == NULL) || r; r = ((glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fNV")) == NULL) || r; r = ((glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvNV")) == NULL) || r; r = ((glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sNV")) == NULL) || r; r = ((glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svNV")) == NULL) || r; r = ((glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dNV")) == NULL) || r; r = ((glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvNV")) == NULL) || r; r = ((glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fNV")) == NULL) || r; r = ((glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvNV")) == NULL) || r; r = ((glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sNV")) == NULL) || r; r = ((glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svNV")) == NULL) || r; r = ((glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dNV")) == NULL) || r; r = ((glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvNV")) == NULL) || r; r = ((glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fNV")) == NULL) || r; r = ((glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvNV")) == NULL) || r; r = ((glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sNV")) == NULL) || r; r = ((glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svNV")) == NULL) || r; r = ((glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dNV")) == NULL) || r; r = ((glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvNV")) == NULL) || r; r = ((glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fNV")) == NULL) || r; r = ((glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvNV")) == NULL) || r; r = ((glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sNV")) == NULL) || r; r = ((glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svNV")) == NULL) || r; r = ((glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubNV")) == NULL) || r; r = ((glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvNV")) == NULL) || r; r = ((glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerNV")) == NULL) || r; r = ((glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1dvNV")) == NULL) || r; r = ((glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1fvNV")) == NULL) || r; r = ((glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1svNV")) == NULL) || r; r = ((glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2dvNV")) == NULL) || r; r = ((glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2fvNV")) == NULL) || r; r = ((glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2svNV")) == NULL) || r; r = ((glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3dvNV")) == NULL) || r; r = ((glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3fvNV")) == NULL) || r; r = ((glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3svNV")) == NULL) || r; r = ((glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4dvNV")) == NULL) || r; r = ((glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4fvNV")) == NULL) || r; r = ((glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4svNV")) == NULL) || r; r = ((glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4ubvNV")) == NULL) || r; return r; } #endif /* GL_NV_vertex_program */ #ifdef GL_NV_vertex_program1_1 #endif /* GL_NV_vertex_program1_1 */ #ifdef GL_NV_vertex_program2 #endif /* GL_NV_vertex_program2 */ #ifdef GL_NV_vertex_program2_option #endif /* GL_NV_vertex_program2_option */ #ifdef GL_NV_vertex_program3 #endif /* GL_NV_vertex_program3 */ #ifdef GL_NV_vertex_program4 #endif /* GL_NV_vertex_program4 */ #ifdef GL_NV_video_capture static GLboolean _glewInit_GL_NV_video_capture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glBeginVideoCaptureNV = (PFNGLBEGINVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glBeginVideoCaptureNV")) == NULL) || r; r = ((glBindVideoCaptureStreamBufferNV = (PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glBindVideoCaptureStreamBufferNV")) == NULL) || r; r = ((glBindVideoCaptureStreamTextureNV = (PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)glewGetProcAddress((const GLubyte*)"glBindVideoCaptureStreamTextureNV")) == NULL) || r; r = ((glEndVideoCaptureNV = (PFNGLENDVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glEndVideoCaptureNV")) == NULL) || r; r = ((glGetVideoCaptureStreamdvNV = (PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamdvNV")) == NULL) || r; r = ((glGetVideoCaptureStreamfvNV = (PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamfvNV")) == NULL) || r; r = ((glGetVideoCaptureStreamivNV = (PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamivNV")) == NULL) || r; r = ((glGetVideoCaptureivNV = (PFNGLGETVIDEOCAPTUREIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureivNV")) == NULL) || r; r = ((glVideoCaptureNV = (PFNGLVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureNV")) == NULL) || r; r = ((glVideoCaptureStreamParameterdvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterdvNV")) == NULL) || r; r = ((glVideoCaptureStreamParameterfvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterfvNV")) == NULL) || r; r = ((glVideoCaptureStreamParameterivNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterivNV")) == NULL) || r; return r; } #endif /* GL_NV_video_capture */ #ifdef GL_OES_byte_coordinates #endif /* GL_OES_byte_coordinates */ #ifdef GL_OES_compressed_paletted_texture #endif /* GL_OES_compressed_paletted_texture */ #ifdef GL_OES_read_format #endif /* GL_OES_read_format */ #ifdef GL_OES_single_precision static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC)glewGetProcAddress((const GLubyte*)"glClearDepthfOES")) == NULL) || r; r = ((glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glClipPlanefOES")) == NULL) || r; r = ((glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC)glewGetProcAddress((const GLubyte*)"glDepthRangefOES")) == NULL) || r; r = ((glFrustumfOES = (PFNGLFRUSTUMFOESPROC)glewGetProcAddress((const GLubyte*)"glFrustumfOES")) == NULL) || r; r = ((glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanefOES")) == NULL) || r; r = ((glOrthofOES = (PFNGLORTHOFOESPROC)glewGetProcAddress((const GLubyte*)"glOrthofOES")) == NULL) || r; return r; } #endif /* GL_OES_single_precision */ #ifdef GL_OML_interlace #endif /* GL_OML_interlace */ #ifdef GL_OML_resample #endif /* GL_OML_resample */ #ifdef GL_OML_subsample #endif /* GL_OML_subsample */ #ifdef GL_PGI_misc_hints #endif /* GL_PGI_misc_hints */ #ifdef GL_PGI_vertex_hints #endif /* GL_PGI_vertex_hints */ #ifdef GL_REGAL_error_string static GLboolean _glewInit_GL_REGAL_error_string (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glErrorStringREGAL = (PFNGLERRORSTRINGREGALPROC)glewGetProcAddress((const GLubyte*)"glErrorStringREGAL")) == NULL) || r; return r; } #endif /* GL_REGAL_error_string */ #ifdef GL_REGAL_extension_query static GLboolean _glewInit_GL_REGAL_extension_query (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetExtensionREGAL = (PFNGLGETEXTENSIONREGALPROC)glewGetProcAddress((const GLubyte*)"glGetExtensionREGAL")) == NULL) || r; r = ((glIsSupportedREGAL = (PFNGLISSUPPORTEDREGALPROC)glewGetProcAddress((const GLubyte*)"glIsSupportedREGAL")) == NULL) || r; return r; } #endif /* GL_REGAL_extension_query */ #ifdef GL_REGAL_log #endif /* GL_REGAL_log */ #ifdef GL_REND_screen_coordinates #endif /* GL_REND_screen_coordinates */ #ifdef GL_S3_s3tc #endif /* GL_S3_s3tc */ #ifdef GL_SGIS_color_range #endif /* GL_SGIS_color_range */ #ifdef GL_SGIS_detail_texture static GLboolean _glewInit_GL_SGIS_detail_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glDetailTexFuncSGIS")) == NULL) || r; r = ((glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetDetailTexFuncSGIS")) == NULL) || r; return r; } #endif /* GL_SGIS_detail_texture */ #ifdef GL_SGIS_fog_function static GLboolean _glewInit_GL_SGIS_fog_function (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glFogFuncSGIS")) == NULL) || r; r = ((glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetFogFuncSGIS")) == NULL) || r; return r; } #endif /* GL_SGIS_fog_function */ #ifdef GL_SGIS_generate_mipmap #endif /* GL_SGIS_generate_mipmap */ #ifdef GL_SGIS_multisample static GLboolean _glewInit_GL_SGIS_multisample (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskSGIS")) == NULL) || r; r = ((glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternSGIS")) == NULL) || r; return r; } #endif /* GL_SGIS_multisample */ #ifdef GL_SGIS_pixel_texture #endif /* GL_SGIS_pixel_texture */ #ifdef GL_SGIS_point_line_texgen #endif /* GL_SGIS_point_line_texgen */ #ifdef GL_SGIS_sharpen_texture static GLboolean _glewInit_GL_SGIS_sharpen_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetSharpenTexFuncSGIS")) == NULL) || r; r = ((glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glSharpenTexFuncSGIS")) == NULL) || r; return r; } #endif /* GL_SGIS_sharpen_texture */ #ifdef GL_SGIS_texture4D static GLboolean _glewInit_GL_SGIS_texture4D (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexImage4DSGIS")) == NULL) || r; r = ((glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage4DSGIS")) == NULL) || r; return r; } #endif /* GL_SGIS_texture4D */ #ifdef GL_SGIS_texture_border_clamp #endif /* GL_SGIS_texture_border_clamp */ #ifdef GL_SGIS_texture_edge_clamp #endif /* GL_SGIS_texture_edge_clamp */ #ifdef GL_SGIS_texture_filter4 static GLboolean _glewInit_GL_SGIS_texture_filter4 (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetTexFilterFuncSGIS")) == NULL) || r; r = ((glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glTexFilterFuncSGIS")) == NULL) || r; return r; } #endif /* GL_SGIS_texture_filter4 */ #ifdef GL_SGIS_texture_lod #endif /* GL_SGIS_texture_lod */ #ifdef GL_SGIS_texture_select #endif /* GL_SGIS_texture_select */ #ifdef GL_SGIX_async static GLboolean _glewInit_GL_SGIX_async (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glAsyncMarkerSGIX")) == NULL) || r; r = ((glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glDeleteAsyncMarkersSGIX")) == NULL) || r; r = ((glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glFinishAsyncSGIX")) == NULL) || r; r = ((glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glGenAsyncMarkersSGIX")) == NULL) || r; r = ((glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glIsAsyncMarkerSGIX")) == NULL) || r; r = ((glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glPollAsyncSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_async */ #ifdef GL_SGIX_async_histogram #endif /* GL_SGIX_async_histogram */ #ifdef GL_SGIX_async_pixel #endif /* GL_SGIX_async_pixel */ #ifdef GL_SGIX_blend_alpha_minmax #endif /* GL_SGIX_blend_alpha_minmax */ #ifdef GL_SGIX_clipmap #endif /* GL_SGIX_clipmap */ #ifdef GL_SGIX_convolution_accuracy #endif /* GL_SGIX_convolution_accuracy */ #ifdef GL_SGIX_depth_texture #endif /* GL_SGIX_depth_texture */ #ifdef GL_SGIX_flush_raster static GLboolean _glewInit_GL_SGIX_flush_raster (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC)glewGetProcAddress((const GLubyte*)"glFlushRasterSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_flush_raster */ #ifdef GL_SGIX_fog_offset #endif /* GL_SGIX_fog_offset */ #ifdef GL_SGIX_fog_texture static GLboolean _glewInit_GL_SGIX_fog_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTextureFogSGIX = (PFNGLTEXTUREFOGSGIXPROC)glewGetProcAddress((const GLubyte*)"glTextureFogSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_fog_texture */ #ifdef GL_SGIX_fragment_specular_lighting static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialSGIX")) == NULL) || r; r = ((glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfSGIX")) == NULL) || r; r = ((glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvSGIX")) == NULL) || r; r = ((glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliSGIX")) == NULL) || r; r = ((glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivSGIX")) == NULL) || r; r = ((glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfSGIX")) == NULL) || r; r = ((glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvSGIX")) == NULL) || r; r = ((glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiSGIX")) == NULL) || r; r = ((glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivSGIX")) == NULL) || r; r = ((glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfSGIX")) == NULL) || r; r = ((glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvSGIX")) == NULL) || r; r = ((glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiSGIX")) == NULL) || r; r = ((glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivSGIX")) == NULL) || r; r = ((glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvSGIX")) == NULL) || r; r = ((glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivSGIX")) == NULL) || r; r = ((glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvSGIX")) == NULL) || r; r = ((glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_fragment_specular_lighting */ #ifdef GL_SGIX_framezoom static GLboolean _glewInit_GL_SGIX_framezoom (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC)glewGetProcAddress((const GLubyte*)"glFrameZoomSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_framezoom */ #ifdef GL_SGIX_interlace #endif /* GL_SGIX_interlace */ #ifdef GL_SGIX_ir_instrument1 #endif /* GL_SGIX_ir_instrument1 */ #ifdef GL_SGIX_list_priority #endif /* GL_SGIX_list_priority */ #ifdef GL_SGIX_pixel_texture static GLboolean _glewInit_GL_SGIX_pixel_texture (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC)glewGetProcAddress((const GLubyte*)"glPixelTexGenSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_pixel_texture */ #ifdef GL_SGIX_pixel_texture_bits #endif /* GL_SGIX_pixel_texture_bits */ #ifdef GL_SGIX_reference_plane static GLboolean _glewInit_GL_SGIX_reference_plane (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC)glewGetProcAddress((const GLubyte*)"glReferencePlaneSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_reference_plane */ #ifdef GL_SGIX_resample #endif /* GL_SGIX_resample */ #ifdef GL_SGIX_shadow #endif /* GL_SGIX_shadow */ #ifdef GL_SGIX_shadow_ambient #endif /* GL_SGIX_shadow_ambient */ #ifdef GL_SGIX_sprite static GLboolean _glewInit_GL_SGIX_sprite (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfSGIX")) == NULL) || r; r = ((glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfvSGIX")) == NULL) || r; r = ((glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameteriSGIX")) == NULL) || r; r = ((glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterivSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_sprite */ #ifdef GL_SGIX_tag_sample_buffer static GLboolean _glewInit_GL_SGIX_tag_sample_buffer (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glTagSampleBufferSGIX")) == NULL) || r; return r; } #endif /* GL_SGIX_tag_sample_buffer */ #ifdef GL_SGIX_texture_add_env #endif /* GL_SGIX_texture_add_env */ #ifdef GL_SGIX_texture_coordinate_clamp #endif /* GL_SGIX_texture_coordinate_clamp */ #ifdef GL_SGIX_texture_lod_bias #endif /* GL_SGIX_texture_lod_bias */ #ifdef GL_SGIX_texture_multi_buffer #endif /* GL_SGIX_texture_multi_buffer */ #ifdef GL_SGIX_texture_range #endif /* GL_SGIX_texture_range */ #ifdef GL_SGIX_texture_scale_bias #endif /* GL_SGIX_texture_scale_bias */ #ifdef GL_SGIX_vertex_preclip #endif /* GL_SGIX_vertex_preclip */ #ifdef GL_SGIX_vertex_preclip_hint #endif /* GL_SGIX_vertex_preclip_hint */ #ifdef GL_SGIX_ycrcb #endif /* GL_SGIX_ycrcb */ #ifdef GL_SGI_color_matrix #endif /* GL_SGI_color_matrix */ #ifdef GL_SGI_color_table static GLboolean _glewInit_GL_SGI_color_table (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfvSGI")) == NULL) || r; r = ((glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterivSGI")) == NULL) || r; r = ((glColorTableSGI = (PFNGLCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableSGI")) == NULL) || r; r = ((glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTableSGI")) == NULL) || r; r = ((glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvSGI")) == NULL) || r; r = ((glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivSGI")) == NULL) || r; r = ((glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableSGI")) == NULL) || r; return r; } #endif /* GL_SGI_color_table */ #ifdef GL_SGI_texture_color_table #endif /* GL_SGI_texture_color_table */ #ifdef GL_SUNX_constant_data static GLboolean _glewInit_GL_SUNX_constant_data (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC)glewGetProcAddress((const GLubyte*)"glFinishTextureSUNX")) == NULL) || r; return r; } #endif /* GL_SUNX_constant_data */ #ifdef GL_SUN_convolution_border_modes #endif /* GL_SUN_convolution_border_modes */ #ifdef GL_SUN_global_alpha static GLboolean _glewInit_GL_SUN_global_alpha (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorbSUN")) == NULL) || r; r = ((glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactordSUN")) == NULL) || r; r = ((glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorfSUN")) == NULL) || r; r = ((glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoriSUN")) == NULL) || r; r = ((glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorsSUN")) == NULL) || r; r = ((glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorubSUN")) == NULL) || r; r = ((glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoruiSUN")) == NULL) || r; r = ((glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorusSUN")) == NULL) || r; return r; } #endif /* GL_SUN_global_alpha */ #ifdef GL_SUN_mesh_array #endif /* GL_SUN_mesh_array */ #ifdef GL_SUN_read_video_pixels static GLboolean _glewInit_GL_SUN_read_video_pixels (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glReadVideoPixelsSUN = (PFNGLREADVIDEOPIXELSSUNPROC)glewGetProcAddress((const GLubyte*)"glReadVideoPixelsSUN")) == NULL) || r; return r; } #endif /* GL_SUN_read_video_pixels */ #ifdef GL_SUN_slice_accum #endif /* GL_SUN_slice_accum */ #ifdef GL_SUN_triangle_list static GLboolean _glewInit_GL_SUN_triangle_list (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodePointerSUN")) == NULL) || r; r = ((glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubSUN")) == NULL) || r; r = ((glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubvSUN")) == NULL) || r; r = ((glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiSUN")) == NULL) || r; r = ((glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuivSUN")) == NULL) || r; r = ((glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusSUN")) == NULL) || r; r = ((glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusvSUN")) == NULL) || r; return r; } #endif /* GL_SUN_triangle_list */ #ifdef GL_SUN_vertex static GLboolean _glewInit_GL_SUN_vertex (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fSUN")) == NULL) || r; r = ((glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fvSUN")) == NULL) || r; r = ((glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fSUN")) == NULL) || r; r = ((glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fvSUN")) == NULL) || r; r = ((glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fSUN")) == NULL) || r; r = ((glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fvSUN")) == NULL) || r; r = ((glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fSUN")) == NULL) || r; r = ((glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fvSUN")) == NULL) || r; r = ((glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fSUN")) == NULL) || r; r = ((glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fvSUN")) == NULL) || r; r = ((glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fSUN")) == NULL) || r; r = ((glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fvSUN")) == NULL) || r; r = ((glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fSUN")) == NULL) || r; r = ((glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fvSUN")) == NULL) || r; r = ((glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; r = ((glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; r = ((glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fSUN")) == NULL) || r; r = ((glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fvSUN")) == NULL) || r; r = ((glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; r = ((glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; r = ((glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fSUN")) == NULL) || r; r = ((glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fvSUN")) == NULL) || r; r = ((glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fSUN")) == NULL) || r; r = ((glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fvSUN")) == NULL) || r; r = ((glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fSUN")) == NULL) || r; r = ((glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fvSUN")) == NULL) || r; return r; } #endif /* GL_SUN_vertex */ #ifdef GL_WIN_phong_shading #endif /* GL_WIN_phong_shading */ #ifdef GL_WIN_specular_fog #endif /* GL_WIN_specular_fog */ #ifdef GL_WIN_swap_hint static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glAddSwapHintRectWIN = (PFNGLADDSWAPHINTRECTWINPROC)glewGetProcAddress((const GLubyte*)"glAddSwapHintRectWIN")) == NULL) || r; return r; } #endif /* GL_WIN_swap_hint */ /* ------------------------------------------------------------------------- */ GLboolean GLEWAPIENTRY glewGetExtension (const char* name) { const GLubyte* start; const GLubyte* end; start = (const GLubyte*)glGetString(GL_EXTENSIONS); if (start == 0) return GL_FALSE; end = start + _glewStrLen(start); return _glewSearchExtension(name, start, end); } /* ------------------------------------------------------------------------- */ #ifndef GLEW_MX static #endif GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) { const GLubyte* s; GLuint dot; GLint major, minor; const GLubyte* extStart; const GLubyte* extEnd; /* query opengl version */ s = glGetString(GL_VERSION); dot = _glewStrCLen(s, '.'); if (dot == 0) return GLEW_ERROR_NO_GL_VERSION; major = s[dot-1]-'0'; minor = s[dot+1]-'0'; if (minor < 0 || minor > 9) minor = 0; if (major<0 || major>9) return GLEW_ERROR_NO_GL_VERSION; if (major == 1 && minor == 0) { return GLEW_ERROR_GL_VERSION_10_ONLY; } else { CONST_CAST(GLEW_VERSION_4_3) = ( major > 4 ) || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_4_2) = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_4_1) = GLEW_VERSION_4_2 == GL_TRUE || ( major == 4 && minor >= 1 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_4_0) = GLEW_VERSION_4_1 == GL_TRUE || ( major == 4 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_3_3) = GLEW_VERSION_4_0 == GL_TRUE || ( major == 3 && minor >= 3 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_3_2) = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_3_1) = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_3_0) = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_2_1) = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_2_0) = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_1_5) = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_1_4) = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_1_3) = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_1_2_1) = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_1_2) = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; CONST_CAST(GLEW_VERSION_1_1) = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; } /* query opengl extensions string */ extStart = glGetString(GL_EXTENSIONS); if (extStart == 0) extStart = (const GLubyte*)""; extEnd = extStart + _glewStrLen(extStart); /* initialize extensions */ #ifdef GL_VERSION_1_2 if (glewExperimental || GLEW_VERSION_1_2) CONST_CAST(GLEW_VERSION_1_2) = !_glewInit_GL_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_1_2 */ #ifdef GL_VERSION_1_2_1 #endif /* GL_VERSION_1_2_1 */ #ifdef GL_VERSION_1_3 if (glewExperimental || GLEW_VERSION_1_3) CONST_CAST(GLEW_VERSION_1_3) = !_glewInit_GL_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_1_3 */ #ifdef GL_VERSION_1_4 if (glewExperimental || GLEW_VERSION_1_4) CONST_CAST(GLEW_VERSION_1_4) = !_glewInit_GL_VERSION_1_4(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_1_4 */ #ifdef GL_VERSION_1_5 if (glewExperimental || GLEW_VERSION_1_5) CONST_CAST(GLEW_VERSION_1_5) = !_glewInit_GL_VERSION_1_5(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_1_5 */ #ifdef GL_VERSION_2_0 if (glewExperimental || GLEW_VERSION_2_0) CONST_CAST(GLEW_VERSION_2_0) = !_glewInit_GL_VERSION_2_0(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_2_0 */ #ifdef GL_VERSION_2_1 if (glewExperimental || GLEW_VERSION_2_1) CONST_CAST(GLEW_VERSION_2_1) = !_glewInit_GL_VERSION_2_1(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_2_1 */ #ifdef GL_VERSION_3_0 if (glewExperimental || GLEW_VERSION_3_0) CONST_CAST(GLEW_VERSION_3_0) = !_glewInit_GL_VERSION_3_0(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_3_0 */ #ifdef GL_VERSION_3_1 if (glewExperimental || GLEW_VERSION_3_1) CONST_CAST(GLEW_VERSION_3_1) = !_glewInit_GL_VERSION_3_1(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_3_1 */ #ifdef GL_VERSION_3_2 if (glewExperimental || GLEW_VERSION_3_2) CONST_CAST(GLEW_VERSION_3_2) = !_glewInit_GL_VERSION_3_2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_3_2 */ #ifdef GL_VERSION_3_3 if (glewExperimental || GLEW_VERSION_3_3) CONST_CAST(GLEW_VERSION_3_3) = !_glewInit_GL_VERSION_3_3(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_3_3 */ #ifdef GL_VERSION_4_0 if (glewExperimental || GLEW_VERSION_4_0) CONST_CAST(GLEW_VERSION_4_0) = !_glewInit_GL_VERSION_4_0(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_VERSION_4_0 */ #ifdef GL_VERSION_4_1 #endif /* GL_VERSION_4_1 */ #ifdef GL_VERSION_4_2 #endif /* GL_VERSION_4_2 */ #ifdef GL_VERSION_4_3 #endif /* GL_VERSION_4_3 */ #ifdef GL_3DFX_multisample CONST_CAST(GLEW_3DFX_multisample) = _glewSearchExtension("GL_3DFX_multisample", extStart, extEnd); #endif /* GL_3DFX_multisample */ #ifdef GL_3DFX_tbuffer CONST_CAST(GLEW_3DFX_tbuffer) = _glewSearchExtension("GL_3DFX_tbuffer", extStart, extEnd); if (glewExperimental || GLEW_3DFX_tbuffer) CONST_CAST(GLEW_3DFX_tbuffer) = !_glewInit_GL_3DFX_tbuffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_3DFX_tbuffer */ #ifdef GL_3DFX_texture_compression_FXT1 CONST_CAST(GLEW_3DFX_texture_compression_FXT1) = _glewSearchExtension("GL_3DFX_texture_compression_FXT1", extStart, extEnd); #endif /* GL_3DFX_texture_compression_FXT1 */ #ifdef GL_AMD_blend_minmax_factor CONST_CAST(GLEW_AMD_blend_minmax_factor) = _glewSearchExtension("GL_AMD_blend_minmax_factor", extStart, extEnd); #endif /* GL_AMD_blend_minmax_factor */ #ifdef GL_AMD_conservative_depth CONST_CAST(GLEW_AMD_conservative_depth) = _glewSearchExtension("GL_AMD_conservative_depth", extStart, extEnd); #endif /* GL_AMD_conservative_depth */ #ifdef GL_AMD_debug_output CONST_CAST(GLEW_AMD_debug_output) = _glewSearchExtension("GL_AMD_debug_output", extStart, extEnd); if (glewExperimental || GLEW_AMD_debug_output) CONST_CAST(GLEW_AMD_debug_output) = !_glewInit_GL_AMD_debug_output(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_debug_output */ #ifdef GL_AMD_depth_clamp_separate CONST_CAST(GLEW_AMD_depth_clamp_separate) = _glewSearchExtension("GL_AMD_depth_clamp_separate", extStart, extEnd); #endif /* GL_AMD_depth_clamp_separate */ #ifdef GL_AMD_draw_buffers_blend CONST_CAST(GLEW_AMD_draw_buffers_blend) = _glewSearchExtension("GL_AMD_draw_buffers_blend", extStart, extEnd); if (glewExperimental || GLEW_AMD_draw_buffers_blend) CONST_CAST(GLEW_AMD_draw_buffers_blend) = !_glewInit_GL_AMD_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_draw_buffers_blend */ #ifdef GL_AMD_multi_draw_indirect CONST_CAST(GLEW_AMD_multi_draw_indirect) = _glewSearchExtension("GL_AMD_multi_draw_indirect", extStart, extEnd); if (glewExperimental || GLEW_AMD_multi_draw_indirect) CONST_CAST(GLEW_AMD_multi_draw_indirect) = !_glewInit_GL_AMD_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_multi_draw_indirect */ #ifdef GL_AMD_name_gen_delete CONST_CAST(GLEW_AMD_name_gen_delete) = _glewSearchExtension("GL_AMD_name_gen_delete", extStart, extEnd); if (glewExperimental || GLEW_AMD_name_gen_delete) CONST_CAST(GLEW_AMD_name_gen_delete) = !_glewInit_GL_AMD_name_gen_delete(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_name_gen_delete */ #ifdef GL_AMD_performance_monitor CONST_CAST(GLEW_AMD_performance_monitor) = _glewSearchExtension("GL_AMD_performance_monitor", extStart, extEnd); if (glewExperimental || GLEW_AMD_performance_monitor) CONST_CAST(GLEW_AMD_performance_monitor) = !_glewInit_GL_AMD_performance_monitor(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_performance_monitor */ #ifdef GL_AMD_pinned_memory CONST_CAST(GLEW_AMD_pinned_memory) = _glewSearchExtension("GL_AMD_pinned_memory", extStart, extEnd); #endif /* GL_AMD_pinned_memory */ #ifdef GL_AMD_query_buffer_object CONST_CAST(GLEW_AMD_query_buffer_object) = _glewSearchExtension("GL_AMD_query_buffer_object", extStart, extEnd); #endif /* GL_AMD_query_buffer_object */ #ifdef GL_AMD_sample_positions CONST_CAST(GLEW_AMD_sample_positions) = _glewSearchExtension("GL_AMD_sample_positions", extStart, extEnd); if (glewExperimental || GLEW_AMD_sample_positions) CONST_CAST(GLEW_AMD_sample_positions) = !_glewInit_GL_AMD_sample_positions(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_sample_positions */ #ifdef GL_AMD_seamless_cubemap_per_texture CONST_CAST(GLEW_AMD_seamless_cubemap_per_texture) = _glewSearchExtension("GL_AMD_seamless_cubemap_per_texture", extStart, extEnd); #endif /* GL_AMD_seamless_cubemap_per_texture */ #ifdef GL_AMD_shader_stencil_export CONST_CAST(GLEW_AMD_shader_stencil_export) = _glewSearchExtension("GL_AMD_shader_stencil_export", extStart, extEnd); #endif /* GL_AMD_shader_stencil_export */ #ifdef GL_AMD_stencil_operation_extended CONST_CAST(GLEW_AMD_stencil_operation_extended) = _glewSearchExtension("GL_AMD_stencil_operation_extended", extStart, extEnd); if (glewExperimental || GLEW_AMD_stencil_operation_extended) CONST_CAST(GLEW_AMD_stencil_operation_extended) = !_glewInit_GL_AMD_stencil_operation_extended(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_stencil_operation_extended */ #ifdef GL_AMD_texture_texture4 CONST_CAST(GLEW_AMD_texture_texture4) = _glewSearchExtension("GL_AMD_texture_texture4", extStart, extEnd); #endif /* GL_AMD_texture_texture4 */ #ifdef GL_AMD_transform_feedback3_lines_triangles CONST_CAST(GLEW_AMD_transform_feedback3_lines_triangles) = _glewSearchExtension("GL_AMD_transform_feedback3_lines_triangles", extStart, extEnd); #endif /* GL_AMD_transform_feedback3_lines_triangles */ #ifdef GL_AMD_vertex_shader_layer CONST_CAST(GLEW_AMD_vertex_shader_layer) = _glewSearchExtension("GL_AMD_vertex_shader_layer", extStart, extEnd); #endif /* GL_AMD_vertex_shader_layer */ #ifdef GL_AMD_vertex_shader_tessellator CONST_CAST(GLEW_AMD_vertex_shader_tessellator) = _glewSearchExtension("GL_AMD_vertex_shader_tessellator", extStart, extEnd); if (glewExperimental || GLEW_AMD_vertex_shader_tessellator) CONST_CAST(GLEW_AMD_vertex_shader_tessellator) = !_glewInit_GL_AMD_vertex_shader_tessellator(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_AMD_vertex_shader_tessellator */ #ifdef GL_AMD_vertex_shader_viewport_index CONST_CAST(GLEW_AMD_vertex_shader_viewport_index) = _glewSearchExtension("GL_AMD_vertex_shader_viewport_index", extStart, extEnd); #endif /* GL_AMD_vertex_shader_viewport_index */ #ifdef GL_APPLE_aux_depth_stencil CONST_CAST(GLEW_APPLE_aux_depth_stencil) = _glewSearchExtension("GL_APPLE_aux_depth_stencil", extStart, extEnd); #endif /* GL_APPLE_aux_depth_stencil */ #ifdef GL_APPLE_client_storage CONST_CAST(GLEW_APPLE_client_storage) = _glewSearchExtension("GL_APPLE_client_storage", extStart, extEnd); #endif /* GL_APPLE_client_storage */ #ifdef GL_APPLE_element_array CONST_CAST(GLEW_APPLE_element_array) = _glewSearchExtension("GL_APPLE_element_array", extStart, extEnd); if (glewExperimental || GLEW_APPLE_element_array) CONST_CAST(GLEW_APPLE_element_array) = !_glewInit_GL_APPLE_element_array(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_element_array */ #ifdef GL_APPLE_fence CONST_CAST(GLEW_APPLE_fence) = _glewSearchExtension("GL_APPLE_fence", extStart, extEnd); if (glewExperimental || GLEW_APPLE_fence) CONST_CAST(GLEW_APPLE_fence) = !_glewInit_GL_APPLE_fence(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_fence */ #ifdef GL_APPLE_float_pixels CONST_CAST(GLEW_APPLE_float_pixels) = _glewSearchExtension("GL_APPLE_float_pixels", extStart, extEnd); #endif /* GL_APPLE_float_pixels */ #ifdef GL_APPLE_flush_buffer_range CONST_CAST(GLEW_APPLE_flush_buffer_range) = _glewSearchExtension("GL_APPLE_flush_buffer_range", extStart, extEnd); if (glewExperimental || GLEW_APPLE_flush_buffer_range) CONST_CAST(GLEW_APPLE_flush_buffer_range) = !_glewInit_GL_APPLE_flush_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_flush_buffer_range */ #ifdef GL_APPLE_object_purgeable CONST_CAST(GLEW_APPLE_object_purgeable) = _glewSearchExtension("GL_APPLE_object_purgeable", extStart, extEnd); if (glewExperimental || GLEW_APPLE_object_purgeable) CONST_CAST(GLEW_APPLE_object_purgeable) = !_glewInit_GL_APPLE_object_purgeable(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_object_purgeable */ #ifdef GL_APPLE_pixel_buffer CONST_CAST(GLEW_APPLE_pixel_buffer) = _glewSearchExtension("GL_APPLE_pixel_buffer", extStart, extEnd); #endif /* GL_APPLE_pixel_buffer */ #ifdef GL_APPLE_rgb_422 CONST_CAST(GLEW_APPLE_rgb_422) = _glewSearchExtension("GL_APPLE_rgb_422", extStart, extEnd); #endif /* GL_APPLE_rgb_422 */ #ifdef GL_APPLE_row_bytes CONST_CAST(GLEW_APPLE_row_bytes) = _glewSearchExtension("GL_APPLE_row_bytes", extStart, extEnd); #endif /* GL_APPLE_row_bytes */ #ifdef GL_APPLE_specular_vector CONST_CAST(GLEW_APPLE_specular_vector) = _glewSearchExtension("GL_APPLE_specular_vector", extStart, extEnd); #endif /* GL_APPLE_specular_vector */ #ifdef GL_APPLE_texture_range CONST_CAST(GLEW_APPLE_texture_range) = _glewSearchExtension("GL_APPLE_texture_range", extStart, extEnd); if (glewExperimental || GLEW_APPLE_texture_range) CONST_CAST(GLEW_APPLE_texture_range) = !_glewInit_GL_APPLE_texture_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_texture_range */ #ifdef GL_APPLE_transform_hint CONST_CAST(GLEW_APPLE_transform_hint) = _glewSearchExtension("GL_APPLE_transform_hint", extStart, extEnd); #endif /* GL_APPLE_transform_hint */ #ifdef GL_APPLE_vertex_array_object CONST_CAST(GLEW_APPLE_vertex_array_object) = _glewSearchExtension("GL_APPLE_vertex_array_object", extStart, extEnd); if (glewExperimental || GLEW_APPLE_vertex_array_object) CONST_CAST(GLEW_APPLE_vertex_array_object) = !_glewInit_GL_APPLE_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_vertex_array_object */ #ifdef GL_APPLE_vertex_array_range CONST_CAST(GLEW_APPLE_vertex_array_range) = _glewSearchExtension("GL_APPLE_vertex_array_range", extStart, extEnd); if (glewExperimental || GLEW_APPLE_vertex_array_range) CONST_CAST(GLEW_APPLE_vertex_array_range) = !_glewInit_GL_APPLE_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_vertex_array_range */ #ifdef GL_APPLE_vertex_program_evaluators CONST_CAST(GLEW_APPLE_vertex_program_evaluators) = _glewSearchExtension("GL_APPLE_vertex_program_evaluators", extStart, extEnd); if (glewExperimental || GLEW_APPLE_vertex_program_evaluators) CONST_CAST(GLEW_APPLE_vertex_program_evaluators) = !_glewInit_GL_APPLE_vertex_program_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_APPLE_vertex_program_evaluators */ #ifdef GL_APPLE_ycbcr_422 CONST_CAST(GLEW_APPLE_ycbcr_422) = _glewSearchExtension("GL_APPLE_ycbcr_422", extStart, extEnd); #endif /* GL_APPLE_ycbcr_422 */ #ifdef GL_ARB_ES2_compatibility CONST_CAST(GLEW_ARB_ES2_compatibility) = _glewSearchExtension("GL_ARB_ES2_compatibility", extStart, extEnd); if (glewExperimental || GLEW_ARB_ES2_compatibility) CONST_CAST(GLEW_ARB_ES2_compatibility) = !_glewInit_GL_ARB_ES2_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_ES2_compatibility */ #ifdef GL_ARB_ES3_compatibility CONST_CAST(GLEW_ARB_ES3_compatibility) = _glewSearchExtension("GL_ARB_ES3_compatibility", extStart, extEnd); #endif /* GL_ARB_ES3_compatibility */ #ifdef GL_ARB_arrays_of_arrays CONST_CAST(GLEW_ARB_arrays_of_arrays) = _glewSearchExtension("GL_ARB_arrays_of_arrays", extStart, extEnd); #endif /* GL_ARB_arrays_of_arrays */ #ifdef GL_ARB_base_instance CONST_CAST(GLEW_ARB_base_instance) = _glewSearchExtension("GL_ARB_base_instance", extStart, extEnd); if (glewExperimental || GLEW_ARB_base_instance) CONST_CAST(GLEW_ARB_base_instance) = !_glewInit_GL_ARB_base_instance(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_base_instance */ #ifdef GL_ARB_blend_func_extended CONST_CAST(GLEW_ARB_blend_func_extended) = _glewSearchExtension("GL_ARB_blend_func_extended", extStart, extEnd); if (glewExperimental || GLEW_ARB_blend_func_extended) CONST_CAST(GLEW_ARB_blend_func_extended) = !_glewInit_GL_ARB_blend_func_extended(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_blend_func_extended */ #ifdef GL_ARB_cl_event CONST_CAST(GLEW_ARB_cl_event) = _glewSearchExtension("GL_ARB_cl_event", extStart, extEnd); if (glewExperimental || GLEW_ARB_cl_event) CONST_CAST(GLEW_ARB_cl_event) = !_glewInit_GL_ARB_cl_event(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_cl_event */ #ifdef GL_ARB_clear_buffer_object CONST_CAST(GLEW_ARB_clear_buffer_object) = _glewSearchExtension("GL_ARB_clear_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_clear_buffer_object) CONST_CAST(GLEW_ARB_clear_buffer_object) = !_glewInit_GL_ARB_clear_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_clear_buffer_object */ #ifdef GL_ARB_color_buffer_float CONST_CAST(GLEW_ARB_color_buffer_float) = _glewSearchExtension("GL_ARB_color_buffer_float", extStart, extEnd); if (glewExperimental || GLEW_ARB_color_buffer_float) CONST_CAST(GLEW_ARB_color_buffer_float) = !_glewInit_GL_ARB_color_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_color_buffer_float */ #ifdef GL_ARB_compatibility CONST_CAST(GLEW_ARB_compatibility) = _glewSearchExtension("GL_ARB_compatibility", extStart, extEnd); #endif /* GL_ARB_compatibility */ #ifdef GL_ARB_compressed_texture_pixel_storage CONST_CAST(GLEW_ARB_compressed_texture_pixel_storage) = _glewSearchExtension("GL_ARB_compressed_texture_pixel_storage", extStart, extEnd); #endif /* GL_ARB_compressed_texture_pixel_storage */ #ifdef GL_ARB_compute_shader CONST_CAST(GLEW_ARB_compute_shader) = _glewSearchExtension("GL_ARB_compute_shader", extStart, extEnd); if (glewExperimental || GLEW_ARB_compute_shader) CONST_CAST(GLEW_ARB_compute_shader) = !_glewInit_GL_ARB_compute_shader(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_compute_shader */ #ifdef GL_ARB_conservative_depth CONST_CAST(GLEW_ARB_conservative_depth) = _glewSearchExtension("GL_ARB_conservative_depth", extStart, extEnd); #endif /* GL_ARB_conservative_depth */ #ifdef GL_ARB_copy_buffer CONST_CAST(GLEW_ARB_copy_buffer) = _glewSearchExtension("GL_ARB_copy_buffer", extStart, extEnd); if (glewExperimental || GLEW_ARB_copy_buffer) CONST_CAST(GLEW_ARB_copy_buffer) = !_glewInit_GL_ARB_copy_buffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_copy_buffer */ #ifdef GL_ARB_copy_image CONST_CAST(GLEW_ARB_copy_image) = _glewSearchExtension("GL_ARB_copy_image", extStart, extEnd); if (glewExperimental || GLEW_ARB_copy_image) CONST_CAST(GLEW_ARB_copy_image) = !_glewInit_GL_ARB_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_copy_image */ #ifdef GL_ARB_debug_output CONST_CAST(GLEW_ARB_debug_output) = _glewSearchExtension("GL_ARB_debug_output", extStart, extEnd); if (glewExperimental || GLEW_ARB_debug_output) CONST_CAST(GLEW_ARB_debug_output) = !_glewInit_GL_ARB_debug_output(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_debug_output */ #ifdef GL_ARB_depth_buffer_float CONST_CAST(GLEW_ARB_depth_buffer_float) = _glewSearchExtension("GL_ARB_depth_buffer_float", extStart, extEnd); #endif /* GL_ARB_depth_buffer_float */ #ifdef GL_ARB_depth_clamp CONST_CAST(GLEW_ARB_depth_clamp) = _glewSearchExtension("GL_ARB_depth_clamp", extStart, extEnd); #endif /* GL_ARB_depth_clamp */ #ifdef GL_ARB_depth_texture CONST_CAST(GLEW_ARB_depth_texture) = _glewSearchExtension("GL_ARB_depth_texture", extStart, extEnd); #endif /* GL_ARB_depth_texture */ #ifdef GL_ARB_draw_buffers CONST_CAST(GLEW_ARB_draw_buffers) = _glewSearchExtension("GL_ARB_draw_buffers", extStart, extEnd); if (glewExperimental || GLEW_ARB_draw_buffers) CONST_CAST(GLEW_ARB_draw_buffers) = !_glewInit_GL_ARB_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_draw_buffers */ #ifdef GL_ARB_draw_buffers_blend CONST_CAST(GLEW_ARB_draw_buffers_blend) = _glewSearchExtension("GL_ARB_draw_buffers_blend", extStart, extEnd); if (glewExperimental || GLEW_ARB_draw_buffers_blend) CONST_CAST(GLEW_ARB_draw_buffers_blend) = !_glewInit_GL_ARB_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_draw_buffers_blend */ #ifdef GL_ARB_draw_elements_base_vertex CONST_CAST(GLEW_ARB_draw_elements_base_vertex) = _glewSearchExtension("GL_ARB_draw_elements_base_vertex", extStart, extEnd); if (glewExperimental || GLEW_ARB_draw_elements_base_vertex) CONST_CAST(GLEW_ARB_draw_elements_base_vertex) = !_glewInit_GL_ARB_draw_elements_base_vertex(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_draw_elements_base_vertex */ #ifdef GL_ARB_draw_indirect CONST_CAST(GLEW_ARB_draw_indirect) = _glewSearchExtension("GL_ARB_draw_indirect", extStart, extEnd); if (glewExperimental || GLEW_ARB_draw_indirect) CONST_CAST(GLEW_ARB_draw_indirect) = !_glewInit_GL_ARB_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_draw_indirect */ #ifdef GL_ARB_draw_instanced CONST_CAST(GLEW_ARB_draw_instanced) = _glewSearchExtension("GL_ARB_draw_instanced", extStart, extEnd); #endif /* GL_ARB_draw_instanced */ #ifdef GL_ARB_explicit_attrib_location CONST_CAST(GLEW_ARB_explicit_attrib_location) = _glewSearchExtension("GL_ARB_explicit_attrib_location", extStart, extEnd); #endif /* GL_ARB_explicit_attrib_location */ #ifdef GL_ARB_explicit_uniform_location CONST_CAST(GLEW_ARB_explicit_uniform_location) = _glewSearchExtension("GL_ARB_explicit_uniform_location", extStart, extEnd); #endif /* GL_ARB_explicit_uniform_location */ #ifdef GL_ARB_fragment_coord_conventions CONST_CAST(GLEW_ARB_fragment_coord_conventions) = _glewSearchExtension("GL_ARB_fragment_coord_conventions", extStart, extEnd); #endif /* GL_ARB_fragment_coord_conventions */ #ifdef GL_ARB_fragment_layer_viewport CONST_CAST(GLEW_ARB_fragment_layer_viewport) = _glewSearchExtension("GL_ARB_fragment_layer_viewport", extStart, extEnd); #endif /* GL_ARB_fragment_layer_viewport */ #ifdef GL_ARB_fragment_program CONST_CAST(GLEW_ARB_fragment_program) = _glewSearchExtension("GL_ARB_fragment_program", extStart, extEnd); #endif /* GL_ARB_fragment_program */ #ifdef GL_ARB_fragment_program_shadow CONST_CAST(GLEW_ARB_fragment_program_shadow) = _glewSearchExtension("GL_ARB_fragment_program_shadow", extStart, extEnd); #endif /* GL_ARB_fragment_program_shadow */ #ifdef GL_ARB_fragment_shader CONST_CAST(GLEW_ARB_fragment_shader) = _glewSearchExtension("GL_ARB_fragment_shader", extStart, extEnd); #endif /* GL_ARB_fragment_shader */ #ifdef GL_ARB_framebuffer_no_attachments CONST_CAST(GLEW_ARB_framebuffer_no_attachments) = _glewSearchExtension("GL_ARB_framebuffer_no_attachments", extStart, extEnd); if (glewExperimental || GLEW_ARB_framebuffer_no_attachments) CONST_CAST(GLEW_ARB_framebuffer_no_attachments) = !_glewInit_GL_ARB_framebuffer_no_attachments(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_framebuffer_no_attachments */ #ifdef GL_ARB_framebuffer_object CONST_CAST(GLEW_ARB_framebuffer_object) = _glewSearchExtension("GL_ARB_framebuffer_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_framebuffer_object) CONST_CAST(GLEW_ARB_framebuffer_object) = !_glewInit_GL_ARB_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_framebuffer_object */ #ifdef GL_ARB_framebuffer_sRGB CONST_CAST(GLEW_ARB_framebuffer_sRGB) = _glewSearchExtension("GL_ARB_framebuffer_sRGB", extStart, extEnd); #endif /* GL_ARB_framebuffer_sRGB */ #ifdef GL_ARB_geometry_shader4 CONST_CAST(GLEW_ARB_geometry_shader4) = _glewSearchExtension("GL_ARB_geometry_shader4", extStart, extEnd); if (glewExperimental || GLEW_ARB_geometry_shader4) CONST_CAST(GLEW_ARB_geometry_shader4) = !_glewInit_GL_ARB_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_geometry_shader4 */ #ifdef GL_ARB_get_program_binary CONST_CAST(GLEW_ARB_get_program_binary) = _glewSearchExtension("GL_ARB_get_program_binary", extStart, extEnd); if (glewExperimental || GLEW_ARB_get_program_binary) CONST_CAST(GLEW_ARB_get_program_binary) = !_glewInit_GL_ARB_get_program_binary(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_get_program_binary */ #ifdef GL_ARB_gpu_shader5 CONST_CAST(GLEW_ARB_gpu_shader5) = _glewSearchExtension("GL_ARB_gpu_shader5", extStart, extEnd); #endif /* GL_ARB_gpu_shader5 */ #ifdef GL_ARB_gpu_shader_fp64 CONST_CAST(GLEW_ARB_gpu_shader_fp64) = _glewSearchExtension("GL_ARB_gpu_shader_fp64", extStart, extEnd); if (glewExperimental || GLEW_ARB_gpu_shader_fp64) CONST_CAST(GLEW_ARB_gpu_shader_fp64) = !_glewInit_GL_ARB_gpu_shader_fp64(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_gpu_shader_fp64 */ #ifdef GL_ARB_half_float_pixel CONST_CAST(GLEW_ARB_half_float_pixel) = _glewSearchExtension("GL_ARB_half_float_pixel", extStart, extEnd); #endif /* GL_ARB_half_float_pixel */ #ifdef GL_ARB_half_float_vertex CONST_CAST(GLEW_ARB_half_float_vertex) = _glewSearchExtension("GL_ARB_half_float_vertex", extStart, extEnd); #endif /* GL_ARB_half_float_vertex */ #ifdef GL_ARB_imaging CONST_CAST(GLEW_ARB_imaging) = _glewSearchExtension("GL_ARB_imaging", extStart, extEnd); if (glewExperimental || GLEW_ARB_imaging) CONST_CAST(GLEW_ARB_imaging) = !_glewInit_GL_ARB_imaging(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_imaging */ #ifdef GL_ARB_instanced_arrays CONST_CAST(GLEW_ARB_instanced_arrays) = _glewSearchExtension("GL_ARB_instanced_arrays", extStart, extEnd); if (glewExperimental || GLEW_ARB_instanced_arrays) CONST_CAST(GLEW_ARB_instanced_arrays) = !_glewInit_GL_ARB_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_instanced_arrays */ #ifdef GL_ARB_internalformat_query CONST_CAST(GLEW_ARB_internalformat_query) = _glewSearchExtension("GL_ARB_internalformat_query", extStart, extEnd); if (glewExperimental || GLEW_ARB_internalformat_query) CONST_CAST(GLEW_ARB_internalformat_query) = !_glewInit_GL_ARB_internalformat_query(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_internalformat_query */ #ifdef GL_ARB_internalformat_query2 CONST_CAST(GLEW_ARB_internalformat_query2) = _glewSearchExtension("GL_ARB_internalformat_query2", extStart, extEnd); if (glewExperimental || GLEW_ARB_internalformat_query2) CONST_CAST(GLEW_ARB_internalformat_query2) = !_glewInit_GL_ARB_internalformat_query2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_internalformat_query2 */ #ifdef GL_ARB_invalidate_subdata CONST_CAST(GLEW_ARB_invalidate_subdata) = _glewSearchExtension("GL_ARB_invalidate_subdata", extStart, extEnd); if (glewExperimental || GLEW_ARB_invalidate_subdata) CONST_CAST(GLEW_ARB_invalidate_subdata) = !_glewInit_GL_ARB_invalidate_subdata(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_invalidate_subdata */ #ifdef GL_ARB_map_buffer_alignment CONST_CAST(GLEW_ARB_map_buffer_alignment) = _glewSearchExtension("GL_ARB_map_buffer_alignment", extStart, extEnd); #endif /* GL_ARB_map_buffer_alignment */ #ifdef GL_ARB_map_buffer_range CONST_CAST(GLEW_ARB_map_buffer_range) = _glewSearchExtension("GL_ARB_map_buffer_range", extStart, extEnd); if (glewExperimental || GLEW_ARB_map_buffer_range) CONST_CAST(GLEW_ARB_map_buffer_range) = !_glewInit_GL_ARB_map_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_map_buffer_range */ #ifdef GL_ARB_matrix_palette CONST_CAST(GLEW_ARB_matrix_palette) = _glewSearchExtension("GL_ARB_matrix_palette", extStart, extEnd); if (glewExperimental || GLEW_ARB_matrix_palette) CONST_CAST(GLEW_ARB_matrix_palette) = !_glewInit_GL_ARB_matrix_palette(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_matrix_palette */ #ifdef GL_ARB_multi_draw_indirect CONST_CAST(GLEW_ARB_multi_draw_indirect) = _glewSearchExtension("GL_ARB_multi_draw_indirect", extStart, extEnd); if (glewExperimental || GLEW_ARB_multi_draw_indirect) CONST_CAST(GLEW_ARB_multi_draw_indirect) = !_glewInit_GL_ARB_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_multi_draw_indirect */ #ifdef GL_ARB_multisample CONST_CAST(GLEW_ARB_multisample) = _glewSearchExtension("GL_ARB_multisample", extStart, extEnd); if (glewExperimental || GLEW_ARB_multisample) CONST_CAST(GLEW_ARB_multisample) = !_glewInit_GL_ARB_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_multisample */ #ifdef GL_ARB_multitexture CONST_CAST(GLEW_ARB_multitexture) = _glewSearchExtension("GL_ARB_multitexture", extStart, extEnd); if (glewExperimental || GLEW_ARB_multitexture) CONST_CAST(GLEW_ARB_multitexture) = !_glewInit_GL_ARB_multitexture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_multitexture */ #ifdef GL_ARB_occlusion_query CONST_CAST(GLEW_ARB_occlusion_query) = _glewSearchExtension("GL_ARB_occlusion_query", extStart, extEnd); if (glewExperimental || GLEW_ARB_occlusion_query) CONST_CAST(GLEW_ARB_occlusion_query) = !_glewInit_GL_ARB_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_occlusion_query */ #ifdef GL_ARB_occlusion_query2 CONST_CAST(GLEW_ARB_occlusion_query2) = _glewSearchExtension("GL_ARB_occlusion_query2", extStart, extEnd); #endif /* GL_ARB_occlusion_query2 */ #ifdef GL_ARB_pixel_buffer_object CONST_CAST(GLEW_ARB_pixel_buffer_object) = _glewSearchExtension("GL_ARB_pixel_buffer_object", extStart, extEnd); #endif /* GL_ARB_pixel_buffer_object */ #ifdef GL_ARB_point_parameters CONST_CAST(GLEW_ARB_point_parameters) = _glewSearchExtension("GL_ARB_point_parameters", extStart, extEnd); if (glewExperimental || GLEW_ARB_point_parameters) CONST_CAST(GLEW_ARB_point_parameters) = !_glewInit_GL_ARB_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_point_parameters */ #ifdef GL_ARB_point_sprite CONST_CAST(GLEW_ARB_point_sprite) = _glewSearchExtension("GL_ARB_point_sprite", extStart, extEnd); #endif /* GL_ARB_point_sprite */ #ifdef GL_ARB_program_interface_query CONST_CAST(GLEW_ARB_program_interface_query) = _glewSearchExtension("GL_ARB_program_interface_query", extStart, extEnd); if (glewExperimental || GLEW_ARB_program_interface_query) CONST_CAST(GLEW_ARB_program_interface_query) = !_glewInit_GL_ARB_program_interface_query(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_program_interface_query */ #ifdef GL_ARB_provoking_vertex CONST_CAST(GLEW_ARB_provoking_vertex) = _glewSearchExtension("GL_ARB_provoking_vertex", extStart, extEnd); if (glewExperimental || GLEW_ARB_provoking_vertex) CONST_CAST(GLEW_ARB_provoking_vertex) = !_glewInit_GL_ARB_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_provoking_vertex */ #ifdef GL_ARB_robust_buffer_access_behavior CONST_CAST(GLEW_ARB_robust_buffer_access_behavior) = _glewSearchExtension("GL_ARB_robust_buffer_access_behavior", extStart, extEnd); #endif /* GL_ARB_robust_buffer_access_behavior */ #ifdef GL_ARB_robustness CONST_CAST(GLEW_ARB_robustness) = _glewSearchExtension("GL_ARB_robustness", extStart, extEnd); if (glewExperimental || GLEW_ARB_robustness) CONST_CAST(GLEW_ARB_robustness) = !_glewInit_GL_ARB_robustness(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_robustness */ #ifdef GL_ARB_robustness_application_isolation CONST_CAST(GLEW_ARB_robustness_application_isolation) = _glewSearchExtension("GL_ARB_robustness_application_isolation", extStart, extEnd); #endif /* GL_ARB_robustness_application_isolation */ #ifdef GL_ARB_robustness_share_group_isolation CONST_CAST(GLEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("GL_ARB_robustness_share_group_isolation", extStart, extEnd); #endif /* GL_ARB_robustness_share_group_isolation */ #ifdef GL_ARB_sample_shading CONST_CAST(GLEW_ARB_sample_shading) = _glewSearchExtension("GL_ARB_sample_shading", extStart, extEnd); if (glewExperimental || GLEW_ARB_sample_shading) CONST_CAST(GLEW_ARB_sample_shading) = !_glewInit_GL_ARB_sample_shading(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_sample_shading */ #ifdef GL_ARB_sampler_objects CONST_CAST(GLEW_ARB_sampler_objects) = _glewSearchExtension("GL_ARB_sampler_objects", extStart, extEnd); if (glewExperimental || GLEW_ARB_sampler_objects) CONST_CAST(GLEW_ARB_sampler_objects) = !_glewInit_GL_ARB_sampler_objects(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_sampler_objects */ #ifdef GL_ARB_seamless_cube_map CONST_CAST(GLEW_ARB_seamless_cube_map) = _glewSearchExtension("GL_ARB_seamless_cube_map", extStart, extEnd); #endif /* GL_ARB_seamless_cube_map */ #ifdef GL_ARB_separate_shader_objects CONST_CAST(GLEW_ARB_separate_shader_objects) = _glewSearchExtension("GL_ARB_separate_shader_objects", extStart, extEnd); if (glewExperimental || GLEW_ARB_separate_shader_objects) CONST_CAST(GLEW_ARB_separate_shader_objects) = !_glewInit_GL_ARB_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_separate_shader_objects */ #ifdef GL_ARB_shader_atomic_counters CONST_CAST(GLEW_ARB_shader_atomic_counters) = _glewSearchExtension("GL_ARB_shader_atomic_counters", extStart, extEnd); if (glewExperimental || GLEW_ARB_shader_atomic_counters) CONST_CAST(GLEW_ARB_shader_atomic_counters) = !_glewInit_GL_ARB_shader_atomic_counters(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_shader_atomic_counters */ #ifdef GL_ARB_shader_bit_encoding CONST_CAST(GLEW_ARB_shader_bit_encoding) = _glewSearchExtension("GL_ARB_shader_bit_encoding", extStart, extEnd); #endif /* GL_ARB_shader_bit_encoding */ #ifdef GL_ARB_shader_image_load_store CONST_CAST(GLEW_ARB_shader_image_load_store) = _glewSearchExtension("GL_ARB_shader_image_load_store", extStart, extEnd); if (glewExperimental || GLEW_ARB_shader_image_load_store) CONST_CAST(GLEW_ARB_shader_image_load_store) = !_glewInit_GL_ARB_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_shader_image_load_store */ #ifdef GL_ARB_shader_image_size CONST_CAST(GLEW_ARB_shader_image_size) = _glewSearchExtension("GL_ARB_shader_image_size", extStart, extEnd); #endif /* GL_ARB_shader_image_size */ #ifdef GL_ARB_shader_objects CONST_CAST(GLEW_ARB_shader_objects) = _glewSearchExtension("GL_ARB_shader_objects", extStart, extEnd); if (glewExperimental || GLEW_ARB_shader_objects) CONST_CAST(GLEW_ARB_shader_objects) = !_glewInit_GL_ARB_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_shader_objects */ #ifdef GL_ARB_shader_precision CONST_CAST(GLEW_ARB_shader_precision) = _glewSearchExtension("GL_ARB_shader_precision", extStart, extEnd); #endif /* GL_ARB_shader_precision */ #ifdef GL_ARB_shader_stencil_export CONST_CAST(GLEW_ARB_shader_stencil_export) = _glewSearchExtension("GL_ARB_shader_stencil_export", extStart, extEnd); #endif /* GL_ARB_shader_stencil_export */ #ifdef GL_ARB_shader_storage_buffer_object CONST_CAST(GLEW_ARB_shader_storage_buffer_object) = _glewSearchExtension("GL_ARB_shader_storage_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_shader_storage_buffer_object) CONST_CAST(GLEW_ARB_shader_storage_buffer_object) = !_glewInit_GL_ARB_shader_storage_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_shader_storage_buffer_object */ #ifdef GL_ARB_shader_subroutine CONST_CAST(GLEW_ARB_shader_subroutine) = _glewSearchExtension("GL_ARB_shader_subroutine", extStart, extEnd); if (glewExperimental || GLEW_ARB_shader_subroutine) CONST_CAST(GLEW_ARB_shader_subroutine) = !_glewInit_GL_ARB_shader_subroutine(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_shader_subroutine */ #ifdef GL_ARB_shader_texture_lod CONST_CAST(GLEW_ARB_shader_texture_lod) = _glewSearchExtension("GL_ARB_shader_texture_lod", extStart, extEnd); #endif /* GL_ARB_shader_texture_lod */ #ifdef GL_ARB_shading_language_100 CONST_CAST(GLEW_ARB_shading_language_100) = _glewSearchExtension("GL_ARB_shading_language_100", extStart, extEnd); #endif /* GL_ARB_shading_language_100 */ #ifdef GL_ARB_shading_language_420pack CONST_CAST(GLEW_ARB_shading_language_420pack) = _glewSearchExtension("GL_ARB_shading_language_420pack", extStart, extEnd); #endif /* GL_ARB_shading_language_420pack */ #ifdef GL_ARB_shading_language_include CONST_CAST(GLEW_ARB_shading_language_include) = _glewSearchExtension("GL_ARB_shading_language_include", extStart, extEnd); if (glewExperimental || GLEW_ARB_shading_language_include) CONST_CAST(GLEW_ARB_shading_language_include) = !_glewInit_GL_ARB_shading_language_include(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_shading_language_include */ #ifdef GL_ARB_shading_language_packing CONST_CAST(GLEW_ARB_shading_language_packing) = _glewSearchExtension("GL_ARB_shading_language_packing", extStart, extEnd); #endif /* GL_ARB_shading_language_packing */ #ifdef GL_ARB_shadow CONST_CAST(GLEW_ARB_shadow) = _glewSearchExtension("GL_ARB_shadow", extStart, extEnd); #endif /* GL_ARB_shadow */ #ifdef GL_ARB_shadow_ambient CONST_CAST(GLEW_ARB_shadow_ambient) = _glewSearchExtension("GL_ARB_shadow_ambient", extStart, extEnd); #endif /* GL_ARB_shadow_ambient */ #ifdef GL_ARB_stencil_texturing CONST_CAST(GLEW_ARB_stencil_texturing) = _glewSearchExtension("GL_ARB_stencil_texturing", extStart, extEnd); #endif /* GL_ARB_stencil_texturing */ #ifdef GL_ARB_sync CONST_CAST(GLEW_ARB_sync) = _glewSearchExtension("GL_ARB_sync", extStart, extEnd); if (glewExperimental || GLEW_ARB_sync) CONST_CAST(GLEW_ARB_sync) = !_glewInit_GL_ARB_sync(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_sync */ #ifdef GL_ARB_tessellation_shader CONST_CAST(GLEW_ARB_tessellation_shader) = _glewSearchExtension("GL_ARB_tessellation_shader", extStart, extEnd); if (glewExperimental || GLEW_ARB_tessellation_shader) CONST_CAST(GLEW_ARB_tessellation_shader) = !_glewInit_GL_ARB_tessellation_shader(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_tessellation_shader */ #ifdef GL_ARB_texture_border_clamp CONST_CAST(GLEW_ARB_texture_border_clamp) = _glewSearchExtension("GL_ARB_texture_border_clamp", extStart, extEnd); #endif /* GL_ARB_texture_border_clamp */ #ifdef GL_ARB_texture_buffer_object CONST_CAST(GLEW_ARB_texture_buffer_object) = _glewSearchExtension("GL_ARB_texture_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_buffer_object) CONST_CAST(GLEW_ARB_texture_buffer_object) = !_glewInit_GL_ARB_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_texture_buffer_object */ #ifdef GL_ARB_texture_buffer_object_rgb32 CONST_CAST(GLEW_ARB_texture_buffer_object_rgb32) = _glewSearchExtension("GL_ARB_texture_buffer_object_rgb32", extStart, extEnd); #endif /* GL_ARB_texture_buffer_object_rgb32 */ #ifdef GL_ARB_texture_buffer_range CONST_CAST(GLEW_ARB_texture_buffer_range) = _glewSearchExtension("GL_ARB_texture_buffer_range", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_buffer_range) CONST_CAST(GLEW_ARB_texture_buffer_range) = !_glewInit_GL_ARB_texture_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_texture_buffer_range */ #ifdef GL_ARB_texture_compression CONST_CAST(GLEW_ARB_texture_compression) = _glewSearchExtension("GL_ARB_texture_compression", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_compression) CONST_CAST(GLEW_ARB_texture_compression) = !_glewInit_GL_ARB_texture_compression(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_texture_compression */ #ifdef GL_ARB_texture_compression_bptc CONST_CAST(GLEW_ARB_texture_compression_bptc) = _glewSearchExtension("GL_ARB_texture_compression_bptc", extStart, extEnd); #endif /* GL_ARB_texture_compression_bptc */ #ifdef GL_ARB_texture_compression_rgtc CONST_CAST(GLEW_ARB_texture_compression_rgtc) = _glewSearchExtension("GL_ARB_texture_compression_rgtc", extStart, extEnd); #endif /* GL_ARB_texture_compression_rgtc */ #ifdef GL_ARB_texture_cube_map CONST_CAST(GLEW_ARB_texture_cube_map) = _glewSearchExtension("GL_ARB_texture_cube_map", extStart, extEnd); #endif /* GL_ARB_texture_cube_map */ #ifdef GL_ARB_texture_cube_map_array CONST_CAST(GLEW_ARB_texture_cube_map_array) = _glewSearchExtension("GL_ARB_texture_cube_map_array", extStart, extEnd); #endif /* GL_ARB_texture_cube_map_array */ #ifdef GL_ARB_texture_env_add CONST_CAST(GLEW_ARB_texture_env_add) = _glewSearchExtension("GL_ARB_texture_env_add", extStart, extEnd); #endif /* GL_ARB_texture_env_add */ #ifdef GL_ARB_texture_env_combine CONST_CAST(GLEW_ARB_texture_env_combine) = _glewSearchExtension("GL_ARB_texture_env_combine", extStart, extEnd); #endif /* GL_ARB_texture_env_combine */ #ifdef GL_ARB_texture_env_crossbar CONST_CAST(GLEW_ARB_texture_env_crossbar) = _glewSearchExtension("GL_ARB_texture_env_crossbar", extStart, extEnd); #endif /* GL_ARB_texture_env_crossbar */ #ifdef GL_ARB_texture_env_dot3 CONST_CAST(GLEW_ARB_texture_env_dot3) = _glewSearchExtension("GL_ARB_texture_env_dot3", extStart, extEnd); #endif /* GL_ARB_texture_env_dot3 */ #ifdef GL_ARB_texture_float CONST_CAST(GLEW_ARB_texture_float) = _glewSearchExtension("GL_ARB_texture_float", extStart, extEnd); #endif /* GL_ARB_texture_float */ #ifdef GL_ARB_texture_gather CONST_CAST(GLEW_ARB_texture_gather) = _glewSearchExtension("GL_ARB_texture_gather", extStart, extEnd); #endif /* GL_ARB_texture_gather */ #ifdef GL_ARB_texture_mirrored_repeat CONST_CAST(GLEW_ARB_texture_mirrored_repeat) = _glewSearchExtension("GL_ARB_texture_mirrored_repeat", extStart, extEnd); #endif /* GL_ARB_texture_mirrored_repeat */ #ifdef GL_ARB_texture_multisample CONST_CAST(GLEW_ARB_texture_multisample) = _glewSearchExtension("GL_ARB_texture_multisample", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_multisample) CONST_CAST(GLEW_ARB_texture_multisample) = !_glewInit_GL_ARB_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_texture_multisample */ #ifdef GL_ARB_texture_non_power_of_two CONST_CAST(GLEW_ARB_texture_non_power_of_two) = _glewSearchExtension("GL_ARB_texture_non_power_of_two", extStart, extEnd); #endif /* GL_ARB_texture_non_power_of_two */ #ifdef GL_ARB_texture_query_levels CONST_CAST(GLEW_ARB_texture_query_levels) = _glewSearchExtension("GL_ARB_texture_query_levels", extStart, extEnd); #endif /* GL_ARB_texture_query_levels */ #ifdef GL_ARB_texture_query_lod CONST_CAST(GLEW_ARB_texture_query_lod) = _glewSearchExtension("GL_ARB_texture_query_lod", extStart, extEnd); #endif /* GL_ARB_texture_query_lod */ #ifdef GL_ARB_texture_rectangle CONST_CAST(GLEW_ARB_texture_rectangle) = _glewSearchExtension("GL_ARB_texture_rectangle", extStart, extEnd); #endif /* GL_ARB_texture_rectangle */ #ifdef GL_ARB_texture_rg CONST_CAST(GLEW_ARB_texture_rg) = _glewSearchExtension("GL_ARB_texture_rg", extStart, extEnd); #endif /* GL_ARB_texture_rg */ #ifdef GL_ARB_texture_rgb10_a2ui CONST_CAST(GLEW_ARB_texture_rgb10_a2ui) = _glewSearchExtension("GL_ARB_texture_rgb10_a2ui", extStart, extEnd); #endif /* GL_ARB_texture_rgb10_a2ui */ #ifdef GL_ARB_texture_storage CONST_CAST(GLEW_ARB_texture_storage) = _glewSearchExtension("GL_ARB_texture_storage", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_storage) CONST_CAST(GLEW_ARB_texture_storage) = !_glewInit_GL_ARB_texture_storage(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_texture_storage */ #ifdef GL_ARB_texture_storage_multisample CONST_CAST(GLEW_ARB_texture_storage_multisample) = _glewSearchExtension("GL_ARB_texture_storage_multisample", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_storage_multisample) CONST_CAST(GLEW_ARB_texture_storage_multisample) = !_glewInit_GL_ARB_texture_storage_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_texture_storage_multisample */ #ifdef GL_ARB_texture_swizzle CONST_CAST(GLEW_ARB_texture_swizzle) = _glewSearchExtension("GL_ARB_texture_swizzle", extStart, extEnd); #endif /* GL_ARB_texture_swizzle */ #ifdef GL_ARB_texture_view CONST_CAST(GLEW_ARB_texture_view) = _glewSearchExtension("GL_ARB_texture_view", extStart, extEnd); if (glewExperimental || GLEW_ARB_texture_view) CONST_CAST(GLEW_ARB_texture_view) = !_glewInit_GL_ARB_texture_view(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_texture_view */ #ifdef GL_ARB_timer_query CONST_CAST(GLEW_ARB_timer_query) = _glewSearchExtension("GL_ARB_timer_query", extStart, extEnd); if (glewExperimental || GLEW_ARB_timer_query) CONST_CAST(GLEW_ARB_timer_query) = !_glewInit_GL_ARB_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_timer_query */ #ifdef GL_ARB_transform_feedback2 CONST_CAST(GLEW_ARB_transform_feedback2) = _glewSearchExtension("GL_ARB_transform_feedback2", extStart, extEnd); if (glewExperimental || GLEW_ARB_transform_feedback2) CONST_CAST(GLEW_ARB_transform_feedback2) = !_glewInit_GL_ARB_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_transform_feedback2 */ #ifdef GL_ARB_transform_feedback3 CONST_CAST(GLEW_ARB_transform_feedback3) = _glewSearchExtension("GL_ARB_transform_feedback3", extStart, extEnd); if (glewExperimental || GLEW_ARB_transform_feedback3) CONST_CAST(GLEW_ARB_transform_feedback3) = !_glewInit_GL_ARB_transform_feedback3(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_transform_feedback3 */ #ifdef GL_ARB_transform_feedback_instanced CONST_CAST(GLEW_ARB_transform_feedback_instanced) = _glewSearchExtension("GL_ARB_transform_feedback_instanced", extStart, extEnd); if (glewExperimental || GLEW_ARB_transform_feedback_instanced) CONST_CAST(GLEW_ARB_transform_feedback_instanced) = !_glewInit_GL_ARB_transform_feedback_instanced(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_transform_feedback_instanced */ #ifdef GL_ARB_transpose_matrix CONST_CAST(GLEW_ARB_transpose_matrix) = _glewSearchExtension("GL_ARB_transpose_matrix", extStart, extEnd); if (glewExperimental || GLEW_ARB_transpose_matrix) CONST_CAST(GLEW_ARB_transpose_matrix) = !_glewInit_GL_ARB_transpose_matrix(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_transpose_matrix */ #ifdef GL_ARB_uniform_buffer_object CONST_CAST(GLEW_ARB_uniform_buffer_object) = _glewSearchExtension("GL_ARB_uniform_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_uniform_buffer_object) CONST_CAST(GLEW_ARB_uniform_buffer_object) = !_glewInit_GL_ARB_uniform_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_uniform_buffer_object */ #ifdef GL_ARB_vertex_array_bgra CONST_CAST(GLEW_ARB_vertex_array_bgra) = _glewSearchExtension("GL_ARB_vertex_array_bgra", extStart, extEnd); #endif /* GL_ARB_vertex_array_bgra */ #ifdef GL_ARB_vertex_array_object CONST_CAST(GLEW_ARB_vertex_array_object) = _glewSearchExtension("GL_ARB_vertex_array_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_array_object) CONST_CAST(GLEW_ARB_vertex_array_object) = !_glewInit_GL_ARB_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_array_object */ #ifdef GL_ARB_vertex_attrib_64bit CONST_CAST(GLEW_ARB_vertex_attrib_64bit) = _glewSearchExtension("GL_ARB_vertex_attrib_64bit", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_attrib_64bit) CONST_CAST(GLEW_ARB_vertex_attrib_64bit) = !_glewInit_GL_ARB_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_attrib_64bit */ #ifdef GL_ARB_vertex_attrib_binding CONST_CAST(GLEW_ARB_vertex_attrib_binding) = _glewSearchExtension("GL_ARB_vertex_attrib_binding", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_attrib_binding) CONST_CAST(GLEW_ARB_vertex_attrib_binding) = !_glewInit_GL_ARB_vertex_attrib_binding(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_attrib_binding */ #ifdef GL_ARB_vertex_blend CONST_CAST(GLEW_ARB_vertex_blend) = _glewSearchExtension("GL_ARB_vertex_blend", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_blend) CONST_CAST(GLEW_ARB_vertex_blend) = !_glewInit_GL_ARB_vertex_blend(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_blend */ #ifdef GL_ARB_vertex_buffer_object CONST_CAST(GLEW_ARB_vertex_buffer_object) = _glewSearchExtension("GL_ARB_vertex_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_buffer_object) CONST_CAST(GLEW_ARB_vertex_buffer_object) = !_glewInit_GL_ARB_vertex_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_buffer_object */ #ifdef GL_ARB_vertex_program CONST_CAST(GLEW_ARB_vertex_program) = _glewSearchExtension("GL_ARB_vertex_program", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_program) CONST_CAST(GLEW_ARB_vertex_program) = !_glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_program */ #ifdef GL_ARB_vertex_shader CONST_CAST(GLEW_ARB_vertex_shader) = _glewSearchExtension("GL_ARB_vertex_shader", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_shader) CONST_CAST(GLEW_ARB_vertex_shader) = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_shader */ #ifdef GL_ARB_vertex_type_2_10_10_10_rev CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = _glewSearchExtension("GL_ARB_vertex_type_2_10_10_10_rev", extStart, extEnd); if (glewExperimental || GLEW_ARB_vertex_type_2_10_10_10_rev) CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = !_glewInit_GL_ARB_vertex_type_2_10_10_10_rev(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ #ifdef GL_ARB_viewport_array CONST_CAST(GLEW_ARB_viewport_array) = _glewSearchExtension("GL_ARB_viewport_array", extStart, extEnd); if (glewExperimental || GLEW_ARB_viewport_array) CONST_CAST(GLEW_ARB_viewport_array) = !_glewInit_GL_ARB_viewport_array(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_viewport_array */ #ifdef GL_ARB_window_pos CONST_CAST(GLEW_ARB_window_pos) = _glewSearchExtension("GL_ARB_window_pos", extStart, extEnd); if (glewExperimental || GLEW_ARB_window_pos) CONST_CAST(GLEW_ARB_window_pos) = !_glewInit_GL_ARB_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ARB_window_pos */ #ifdef GL_ATIX_point_sprites CONST_CAST(GLEW_ATIX_point_sprites) = _glewSearchExtension("GL_ATIX_point_sprites", extStart, extEnd); #endif /* GL_ATIX_point_sprites */ #ifdef GL_ATIX_texture_env_combine3 CONST_CAST(GLEW_ATIX_texture_env_combine3) = _glewSearchExtension("GL_ATIX_texture_env_combine3", extStart, extEnd); #endif /* GL_ATIX_texture_env_combine3 */ #ifdef GL_ATIX_texture_env_route CONST_CAST(GLEW_ATIX_texture_env_route) = _glewSearchExtension("GL_ATIX_texture_env_route", extStart, extEnd); #endif /* GL_ATIX_texture_env_route */ #ifdef GL_ATIX_vertex_shader_output_point_size CONST_CAST(GLEW_ATIX_vertex_shader_output_point_size) = _glewSearchExtension("GL_ATIX_vertex_shader_output_point_size", extStart, extEnd); #endif /* GL_ATIX_vertex_shader_output_point_size */ #ifdef GL_ATI_draw_buffers CONST_CAST(GLEW_ATI_draw_buffers) = _glewSearchExtension("GL_ATI_draw_buffers", extStart, extEnd); if (glewExperimental || GLEW_ATI_draw_buffers) CONST_CAST(GLEW_ATI_draw_buffers) = !_glewInit_GL_ATI_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_draw_buffers */ #ifdef GL_ATI_element_array CONST_CAST(GLEW_ATI_element_array) = _glewSearchExtension("GL_ATI_element_array", extStart, extEnd); if (glewExperimental || GLEW_ATI_element_array) CONST_CAST(GLEW_ATI_element_array) = !_glewInit_GL_ATI_element_array(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_element_array */ #ifdef GL_ATI_envmap_bumpmap CONST_CAST(GLEW_ATI_envmap_bumpmap) = _glewSearchExtension("GL_ATI_envmap_bumpmap", extStart, extEnd); if (glewExperimental || GLEW_ATI_envmap_bumpmap) CONST_CAST(GLEW_ATI_envmap_bumpmap) = !_glewInit_GL_ATI_envmap_bumpmap(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_envmap_bumpmap */ #ifdef GL_ATI_fragment_shader CONST_CAST(GLEW_ATI_fragment_shader) = _glewSearchExtension("GL_ATI_fragment_shader", extStart, extEnd); if (glewExperimental || GLEW_ATI_fragment_shader) CONST_CAST(GLEW_ATI_fragment_shader) = !_glewInit_GL_ATI_fragment_shader(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_fragment_shader */ #ifdef GL_ATI_map_object_buffer CONST_CAST(GLEW_ATI_map_object_buffer) = _glewSearchExtension("GL_ATI_map_object_buffer", extStart, extEnd); if (glewExperimental || GLEW_ATI_map_object_buffer) CONST_CAST(GLEW_ATI_map_object_buffer) = !_glewInit_GL_ATI_map_object_buffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_map_object_buffer */ #ifdef GL_ATI_meminfo CONST_CAST(GLEW_ATI_meminfo) = _glewSearchExtension("GL_ATI_meminfo", extStart, extEnd); #endif /* GL_ATI_meminfo */ #ifdef GL_ATI_pn_triangles CONST_CAST(GLEW_ATI_pn_triangles) = _glewSearchExtension("GL_ATI_pn_triangles", extStart, extEnd); if (glewExperimental || GLEW_ATI_pn_triangles) CONST_CAST(GLEW_ATI_pn_triangles) = !_glewInit_GL_ATI_pn_triangles(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_pn_triangles */ #ifdef GL_ATI_separate_stencil CONST_CAST(GLEW_ATI_separate_stencil) = _glewSearchExtension("GL_ATI_separate_stencil", extStart, extEnd); if (glewExperimental || GLEW_ATI_separate_stencil) CONST_CAST(GLEW_ATI_separate_stencil) = !_glewInit_GL_ATI_separate_stencil(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_separate_stencil */ #ifdef GL_ATI_shader_texture_lod CONST_CAST(GLEW_ATI_shader_texture_lod) = _glewSearchExtension("GL_ATI_shader_texture_lod", extStart, extEnd); #endif /* GL_ATI_shader_texture_lod */ #ifdef GL_ATI_text_fragment_shader CONST_CAST(GLEW_ATI_text_fragment_shader) = _glewSearchExtension("GL_ATI_text_fragment_shader", extStart, extEnd); #endif /* GL_ATI_text_fragment_shader */ #ifdef GL_ATI_texture_compression_3dc CONST_CAST(GLEW_ATI_texture_compression_3dc) = _glewSearchExtension("GL_ATI_texture_compression_3dc", extStart, extEnd); #endif /* GL_ATI_texture_compression_3dc */ #ifdef GL_ATI_texture_env_combine3 CONST_CAST(GLEW_ATI_texture_env_combine3) = _glewSearchExtension("GL_ATI_texture_env_combine3", extStart, extEnd); #endif /* GL_ATI_texture_env_combine3 */ #ifdef GL_ATI_texture_float CONST_CAST(GLEW_ATI_texture_float) = _glewSearchExtension("GL_ATI_texture_float", extStart, extEnd); #endif /* GL_ATI_texture_float */ #ifdef GL_ATI_texture_mirror_once CONST_CAST(GLEW_ATI_texture_mirror_once) = _glewSearchExtension("GL_ATI_texture_mirror_once", extStart, extEnd); #endif /* GL_ATI_texture_mirror_once */ #ifdef GL_ATI_vertex_array_object CONST_CAST(GLEW_ATI_vertex_array_object) = _glewSearchExtension("GL_ATI_vertex_array_object", extStart, extEnd); if (glewExperimental || GLEW_ATI_vertex_array_object) CONST_CAST(GLEW_ATI_vertex_array_object) = !_glewInit_GL_ATI_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_vertex_array_object */ #ifdef GL_ATI_vertex_attrib_array_object CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = _glewSearchExtension("GL_ATI_vertex_attrib_array_object", extStart, extEnd); if (glewExperimental || GLEW_ATI_vertex_attrib_array_object) CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = !_glewInit_GL_ATI_vertex_attrib_array_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_vertex_attrib_array_object */ #ifdef GL_ATI_vertex_streams CONST_CAST(GLEW_ATI_vertex_streams) = _glewSearchExtension("GL_ATI_vertex_streams", extStart, extEnd); if (glewExperimental || GLEW_ATI_vertex_streams) CONST_CAST(GLEW_ATI_vertex_streams) = !_glewInit_GL_ATI_vertex_streams(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_ATI_vertex_streams */ #ifdef GL_EXT_422_pixels CONST_CAST(GLEW_EXT_422_pixels) = _glewSearchExtension("GL_EXT_422_pixels", extStart, extEnd); #endif /* GL_EXT_422_pixels */ #ifdef GL_EXT_Cg_shader CONST_CAST(GLEW_EXT_Cg_shader) = _glewSearchExtension("GL_EXT_Cg_shader", extStart, extEnd); #endif /* GL_EXT_Cg_shader */ #ifdef GL_EXT_abgr CONST_CAST(GLEW_EXT_abgr) = _glewSearchExtension("GL_EXT_abgr", extStart, extEnd); #endif /* GL_EXT_abgr */ #ifdef GL_EXT_bgra CONST_CAST(GLEW_EXT_bgra) = _glewSearchExtension("GL_EXT_bgra", extStart, extEnd); #endif /* GL_EXT_bgra */ #ifdef GL_EXT_bindable_uniform CONST_CAST(GLEW_EXT_bindable_uniform) = _glewSearchExtension("GL_EXT_bindable_uniform", extStart, extEnd); if (glewExperimental || GLEW_EXT_bindable_uniform) CONST_CAST(GLEW_EXT_bindable_uniform) = !_glewInit_GL_EXT_bindable_uniform(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_bindable_uniform */ #ifdef GL_EXT_blend_color CONST_CAST(GLEW_EXT_blend_color) = _glewSearchExtension("GL_EXT_blend_color", extStart, extEnd); if (glewExperimental || GLEW_EXT_blend_color) CONST_CAST(GLEW_EXT_blend_color) = !_glewInit_GL_EXT_blend_color(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_blend_color */ #ifdef GL_EXT_blend_equation_separate CONST_CAST(GLEW_EXT_blend_equation_separate) = _glewSearchExtension("GL_EXT_blend_equation_separate", extStart, extEnd); if (glewExperimental || GLEW_EXT_blend_equation_separate) CONST_CAST(GLEW_EXT_blend_equation_separate) = !_glewInit_GL_EXT_blend_equation_separate(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_blend_equation_separate */ #ifdef GL_EXT_blend_func_separate CONST_CAST(GLEW_EXT_blend_func_separate) = _glewSearchExtension("GL_EXT_blend_func_separate", extStart, extEnd); if (glewExperimental || GLEW_EXT_blend_func_separate) CONST_CAST(GLEW_EXT_blend_func_separate) = !_glewInit_GL_EXT_blend_func_separate(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_blend_func_separate */ #ifdef GL_EXT_blend_logic_op CONST_CAST(GLEW_EXT_blend_logic_op) = _glewSearchExtension("GL_EXT_blend_logic_op", extStart, extEnd); #endif /* GL_EXT_blend_logic_op */ #ifdef GL_EXT_blend_minmax CONST_CAST(GLEW_EXT_blend_minmax) = _glewSearchExtension("GL_EXT_blend_minmax", extStart, extEnd); if (glewExperimental || GLEW_EXT_blend_minmax) CONST_CAST(GLEW_EXT_blend_minmax) = !_glewInit_GL_EXT_blend_minmax(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_blend_minmax */ #ifdef GL_EXT_blend_subtract CONST_CAST(GLEW_EXT_blend_subtract) = _glewSearchExtension("GL_EXT_blend_subtract", extStart, extEnd); #endif /* GL_EXT_blend_subtract */ #ifdef GL_EXT_clip_volume_hint CONST_CAST(GLEW_EXT_clip_volume_hint) = _glewSearchExtension("GL_EXT_clip_volume_hint", extStart, extEnd); #endif /* GL_EXT_clip_volume_hint */ #ifdef GL_EXT_cmyka CONST_CAST(GLEW_EXT_cmyka) = _glewSearchExtension("GL_EXT_cmyka", extStart, extEnd); #endif /* GL_EXT_cmyka */ #ifdef GL_EXT_color_subtable CONST_CAST(GLEW_EXT_color_subtable) = _glewSearchExtension("GL_EXT_color_subtable", extStart, extEnd); if (glewExperimental || GLEW_EXT_color_subtable) CONST_CAST(GLEW_EXT_color_subtable) = !_glewInit_GL_EXT_color_subtable(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_color_subtable */ #ifdef GL_EXT_compiled_vertex_array CONST_CAST(GLEW_EXT_compiled_vertex_array) = _glewSearchExtension("GL_EXT_compiled_vertex_array", extStart, extEnd); if (glewExperimental || GLEW_EXT_compiled_vertex_array) CONST_CAST(GLEW_EXT_compiled_vertex_array) = !_glewInit_GL_EXT_compiled_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_compiled_vertex_array */ #ifdef GL_EXT_convolution CONST_CAST(GLEW_EXT_convolution) = _glewSearchExtension("GL_EXT_convolution", extStart, extEnd); if (glewExperimental || GLEW_EXT_convolution) CONST_CAST(GLEW_EXT_convolution) = !_glewInit_GL_EXT_convolution(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_convolution */ #ifdef GL_EXT_coordinate_frame CONST_CAST(GLEW_EXT_coordinate_frame) = _glewSearchExtension("GL_EXT_coordinate_frame", extStart, extEnd); if (glewExperimental || GLEW_EXT_coordinate_frame) CONST_CAST(GLEW_EXT_coordinate_frame) = !_glewInit_GL_EXT_coordinate_frame(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_coordinate_frame */ #ifdef GL_EXT_copy_texture CONST_CAST(GLEW_EXT_copy_texture) = _glewSearchExtension("GL_EXT_copy_texture", extStart, extEnd); if (glewExperimental || GLEW_EXT_copy_texture) CONST_CAST(GLEW_EXT_copy_texture) = !_glewInit_GL_EXT_copy_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_copy_texture */ #ifdef GL_EXT_cull_vertex CONST_CAST(GLEW_EXT_cull_vertex) = _glewSearchExtension("GL_EXT_cull_vertex", extStart, extEnd); if (glewExperimental || GLEW_EXT_cull_vertex) CONST_CAST(GLEW_EXT_cull_vertex) = !_glewInit_GL_EXT_cull_vertex(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_cull_vertex */ #ifdef GL_EXT_debug_marker CONST_CAST(GLEW_EXT_debug_marker) = _glewSearchExtension("GL_EXT_debug_marker", extStart, extEnd); if (glewExperimental || GLEW_EXT_debug_marker) CONST_CAST(GLEW_EXT_debug_marker) = !_glewInit_GL_EXT_debug_marker(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_debug_marker */ #ifdef GL_EXT_depth_bounds_test CONST_CAST(GLEW_EXT_depth_bounds_test) = _glewSearchExtension("GL_EXT_depth_bounds_test", extStart, extEnd); if (glewExperimental || GLEW_EXT_depth_bounds_test) CONST_CAST(GLEW_EXT_depth_bounds_test) = !_glewInit_GL_EXT_depth_bounds_test(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_depth_bounds_test */ #ifdef GL_EXT_direct_state_access CONST_CAST(GLEW_EXT_direct_state_access) = _glewSearchExtension("GL_EXT_direct_state_access", extStart, extEnd); if (glewExperimental || GLEW_EXT_direct_state_access) CONST_CAST(GLEW_EXT_direct_state_access) = !_glewInit_GL_EXT_direct_state_access(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_direct_state_access */ #ifdef GL_EXT_draw_buffers2 CONST_CAST(GLEW_EXT_draw_buffers2) = _glewSearchExtension("GL_EXT_draw_buffers2", extStart, extEnd); if (glewExperimental || GLEW_EXT_draw_buffers2) CONST_CAST(GLEW_EXT_draw_buffers2) = !_glewInit_GL_EXT_draw_buffers2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_draw_buffers2 */ #ifdef GL_EXT_draw_instanced CONST_CAST(GLEW_EXT_draw_instanced) = _glewSearchExtension("GL_EXT_draw_instanced", extStart, extEnd); if (glewExperimental || GLEW_EXT_draw_instanced) CONST_CAST(GLEW_EXT_draw_instanced) = !_glewInit_GL_EXT_draw_instanced(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_draw_instanced */ #ifdef GL_EXT_draw_range_elements CONST_CAST(GLEW_EXT_draw_range_elements) = _glewSearchExtension("GL_EXT_draw_range_elements", extStart, extEnd); if (glewExperimental || GLEW_EXT_draw_range_elements) CONST_CAST(GLEW_EXT_draw_range_elements) = !_glewInit_GL_EXT_draw_range_elements(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_draw_range_elements */ #ifdef GL_EXT_fog_coord CONST_CAST(GLEW_EXT_fog_coord) = _glewSearchExtension("GL_EXT_fog_coord", extStart, extEnd); if (glewExperimental || GLEW_EXT_fog_coord) CONST_CAST(GLEW_EXT_fog_coord) = !_glewInit_GL_EXT_fog_coord(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_fog_coord */ #ifdef GL_EXT_fragment_lighting CONST_CAST(GLEW_EXT_fragment_lighting) = _glewSearchExtension("GL_EXT_fragment_lighting", extStart, extEnd); if (glewExperimental || GLEW_EXT_fragment_lighting) CONST_CAST(GLEW_EXT_fragment_lighting) = !_glewInit_GL_EXT_fragment_lighting(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_fragment_lighting */ #ifdef GL_EXT_framebuffer_blit CONST_CAST(GLEW_EXT_framebuffer_blit) = _glewSearchExtension("GL_EXT_framebuffer_blit", extStart, extEnd); if (glewExperimental || GLEW_EXT_framebuffer_blit) CONST_CAST(GLEW_EXT_framebuffer_blit) = !_glewInit_GL_EXT_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_framebuffer_blit */ #ifdef GL_EXT_framebuffer_multisample CONST_CAST(GLEW_EXT_framebuffer_multisample) = _glewSearchExtension("GL_EXT_framebuffer_multisample", extStart, extEnd); if (glewExperimental || GLEW_EXT_framebuffer_multisample) CONST_CAST(GLEW_EXT_framebuffer_multisample) = !_glewInit_GL_EXT_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_framebuffer_multisample */ #ifdef GL_EXT_framebuffer_multisample_blit_scaled CONST_CAST(GLEW_EXT_framebuffer_multisample_blit_scaled) = _glewSearchExtension("GL_EXT_framebuffer_multisample_blit_scaled", extStart, extEnd); #endif /* GL_EXT_framebuffer_multisample_blit_scaled */ #ifdef GL_EXT_framebuffer_object CONST_CAST(GLEW_EXT_framebuffer_object) = _glewSearchExtension("GL_EXT_framebuffer_object", extStart, extEnd); if (glewExperimental || GLEW_EXT_framebuffer_object) CONST_CAST(GLEW_EXT_framebuffer_object) = !_glewInit_GL_EXT_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_framebuffer_object */ #ifdef GL_EXT_framebuffer_sRGB CONST_CAST(GLEW_EXT_framebuffer_sRGB) = _glewSearchExtension("GL_EXT_framebuffer_sRGB", extStart, extEnd); #endif /* GL_EXT_framebuffer_sRGB */ #ifdef GL_EXT_geometry_shader4 CONST_CAST(GLEW_EXT_geometry_shader4) = _glewSearchExtension("GL_EXT_geometry_shader4", extStart, extEnd); if (glewExperimental || GLEW_EXT_geometry_shader4) CONST_CAST(GLEW_EXT_geometry_shader4) = !_glewInit_GL_EXT_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_geometry_shader4 */ #ifdef GL_EXT_gpu_program_parameters CONST_CAST(GLEW_EXT_gpu_program_parameters) = _glewSearchExtension("GL_EXT_gpu_program_parameters", extStart, extEnd); if (glewExperimental || GLEW_EXT_gpu_program_parameters) CONST_CAST(GLEW_EXT_gpu_program_parameters) = !_glewInit_GL_EXT_gpu_program_parameters(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_gpu_program_parameters */ #ifdef GL_EXT_gpu_shader4 CONST_CAST(GLEW_EXT_gpu_shader4) = _glewSearchExtension("GL_EXT_gpu_shader4", extStart, extEnd); if (glewExperimental || GLEW_EXT_gpu_shader4) CONST_CAST(GLEW_EXT_gpu_shader4) = !_glewInit_GL_EXT_gpu_shader4(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_gpu_shader4 */ #ifdef GL_EXT_histogram CONST_CAST(GLEW_EXT_histogram) = _glewSearchExtension("GL_EXT_histogram", extStart, extEnd); if (glewExperimental || GLEW_EXT_histogram) CONST_CAST(GLEW_EXT_histogram) = !_glewInit_GL_EXT_histogram(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_histogram */ #ifdef GL_EXT_index_array_formats CONST_CAST(GLEW_EXT_index_array_formats) = _glewSearchExtension("GL_EXT_index_array_formats", extStart, extEnd); #endif /* GL_EXT_index_array_formats */ #ifdef GL_EXT_index_func CONST_CAST(GLEW_EXT_index_func) = _glewSearchExtension("GL_EXT_index_func", extStart, extEnd); if (glewExperimental || GLEW_EXT_index_func) CONST_CAST(GLEW_EXT_index_func) = !_glewInit_GL_EXT_index_func(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_index_func */ #ifdef GL_EXT_index_material CONST_CAST(GLEW_EXT_index_material) = _glewSearchExtension("GL_EXT_index_material", extStart, extEnd); if (glewExperimental || GLEW_EXT_index_material) CONST_CAST(GLEW_EXT_index_material) = !_glewInit_GL_EXT_index_material(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_index_material */ #ifdef GL_EXT_index_texture CONST_CAST(GLEW_EXT_index_texture) = _glewSearchExtension("GL_EXT_index_texture", extStart, extEnd); #endif /* GL_EXT_index_texture */ #ifdef GL_EXT_light_texture CONST_CAST(GLEW_EXT_light_texture) = _glewSearchExtension("GL_EXT_light_texture", extStart, extEnd); if (glewExperimental || GLEW_EXT_light_texture) CONST_CAST(GLEW_EXT_light_texture) = !_glewInit_GL_EXT_light_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_light_texture */ #ifdef GL_EXT_misc_attribute CONST_CAST(GLEW_EXT_misc_attribute) = _glewSearchExtension("GL_EXT_misc_attribute", extStart, extEnd); #endif /* GL_EXT_misc_attribute */ #ifdef GL_EXT_multi_draw_arrays CONST_CAST(GLEW_EXT_multi_draw_arrays) = _glewSearchExtension("GL_EXT_multi_draw_arrays", extStart, extEnd); if (glewExperimental || GLEW_EXT_multi_draw_arrays) CONST_CAST(GLEW_EXT_multi_draw_arrays) = !_glewInit_GL_EXT_multi_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_multi_draw_arrays */ #ifdef GL_EXT_multisample CONST_CAST(GLEW_EXT_multisample) = _glewSearchExtension("GL_EXT_multisample", extStart, extEnd); if (glewExperimental || GLEW_EXT_multisample) CONST_CAST(GLEW_EXT_multisample) = !_glewInit_GL_EXT_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_multisample */ #ifdef GL_EXT_packed_depth_stencil CONST_CAST(GLEW_EXT_packed_depth_stencil) = _glewSearchExtension("GL_EXT_packed_depth_stencil", extStart, extEnd); #endif /* GL_EXT_packed_depth_stencil */ #ifdef GL_EXT_packed_float CONST_CAST(GLEW_EXT_packed_float) = _glewSearchExtension("GL_EXT_packed_float", extStart, extEnd); #endif /* GL_EXT_packed_float */ #ifdef GL_EXT_packed_pixels CONST_CAST(GLEW_EXT_packed_pixels) = _glewSearchExtension("GL_EXT_packed_pixels", extStart, extEnd); #endif /* GL_EXT_packed_pixels */ #ifdef GL_EXT_paletted_texture CONST_CAST(GLEW_EXT_paletted_texture) = _glewSearchExtension("GL_EXT_paletted_texture", extStart, extEnd); if (glewExperimental || GLEW_EXT_paletted_texture) CONST_CAST(GLEW_EXT_paletted_texture) = !_glewInit_GL_EXT_paletted_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_paletted_texture */ #ifdef GL_EXT_pixel_buffer_object CONST_CAST(GLEW_EXT_pixel_buffer_object) = _glewSearchExtension("GL_EXT_pixel_buffer_object", extStart, extEnd); #endif /* GL_EXT_pixel_buffer_object */ #ifdef GL_EXT_pixel_transform CONST_CAST(GLEW_EXT_pixel_transform) = _glewSearchExtension("GL_EXT_pixel_transform", extStart, extEnd); if (glewExperimental || GLEW_EXT_pixel_transform) CONST_CAST(GLEW_EXT_pixel_transform) = !_glewInit_GL_EXT_pixel_transform(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_pixel_transform */ #ifdef GL_EXT_pixel_transform_color_table CONST_CAST(GLEW_EXT_pixel_transform_color_table) = _glewSearchExtension("GL_EXT_pixel_transform_color_table", extStart, extEnd); #endif /* GL_EXT_pixel_transform_color_table */ #ifdef GL_EXT_point_parameters CONST_CAST(GLEW_EXT_point_parameters) = _glewSearchExtension("GL_EXT_point_parameters", extStart, extEnd); if (glewExperimental || GLEW_EXT_point_parameters) CONST_CAST(GLEW_EXT_point_parameters) = !_glewInit_GL_EXT_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_point_parameters */ #ifdef GL_EXT_polygon_offset CONST_CAST(GLEW_EXT_polygon_offset) = _glewSearchExtension("GL_EXT_polygon_offset", extStart, extEnd); if (glewExperimental || GLEW_EXT_polygon_offset) CONST_CAST(GLEW_EXT_polygon_offset) = !_glewInit_GL_EXT_polygon_offset(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_polygon_offset */ #ifdef GL_EXT_provoking_vertex CONST_CAST(GLEW_EXT_provoking_vertex) = _glewSearchExtension("GL_EXT_provoking_vertex", extStart, extEnd); if (glewExperimental || GLEW_EXT_provoking_vertex) CONST_CAST(GLEW_EXT_provoking_vertex) = !_glewInit_GL_EXT_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_provoking_vertex */ #ifdef GL_EXT_rescale_normal CONST_CAST(GLEW_EXT_rescale_normal) = _glewSearchExtension("GL_EXT_rescale_normal", extStart, extEnd); #endif /* GL_EXT_rescale_normal */ #ifdef GL_EXT_scene_marker CONST_CAST(GLEW_EXT_scene_marker) = _glewSearchExtension("GL_EXT_scene_marker", extStart, extEnd); if (glewExperimental || GLEW_EXT_scene_marker) CONST_CAST(GLEW_EXT_scene_marker) = !_glewInit_GL_EXT_scene_marker(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_scene_marker */ #ifdef GL_EXT_secondary_color CONST_CAST(GLEW_EXT_secondary_color) = _glewSearchExtension("GL_EXT_secondary_color", extStart, extEnd); if (glewExperimental || GLEW_EXT_secondary_color) CONST_CAST(GLEW_EXT_secondary_color) = !_glewInit_GL_EXT_secondary_color(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_secondary_color */ #ifdef GL_EXT_separate_shader_objects CONST_CAST(GLEW_EXT_separate_shader_objects) = _glewSearchExtension("GL_EXT_separate_shader_objects", extStart, extEnd); if (glewExperimental || GLEW_EXT_separate_shader_objects) CONST_CAST(GLEW_EXT_separate_shader_objects) = !_glewInit_GL_EXT_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_separate_shader_objects */ #ifdef GL_EXT_separate_specular_color CONST_CAST(GLEW_EXT_separate_specular_color) = _glewSearchExtension("GL_EXT_separate_specular_color", extStart, extEnd); #endif /* GL_EXT_separate_specular_color */ #ifdef GL_EXT_shader_image_load_store CONST_CAST(GLEW_EXT_shader_image_load_store) = _glewSearchExtension("GL_EXT_shader_image_load_store", extStart, extEnd); if (glewExperimental || GLEW_EXT_shader_image_load_store) CONST_CAST(GLEW_EXT_shader_image_load_store) = !_glewInit_GL_EXT_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_shader_image_load_store */ #ifdef GL_EXT_shadow_funcs CONST_CAST(GLEW_EXT_shadow_funcs) = _glewSearchExtension("GL_EXT_shadow_funcs", extStart, extEnd); #endif /* GL_EXT_shadow_funcs */ #ifdef GL_EXT_shared_texture_palette CONST_CAST(GLEW_EXT_shared_texture_palette) = _glewSearchExtension("GL_EXT_shared_texture_palette", extStart, extEnd); #endif /* GL_EXT_shared_texture_palette */ #ifdef GL_EXT_stencil_clear_tag CONST_CAST(GLEW_EXT_stencil_clear_tag) = _glewSearchExtension("GL_EXT_stencil_clear_tag", extStart, extEnd); #endif /* GL_EXT_stencil_clear_tag */ #ifdef GL_EXT_stencil_two_side CONST_CAST(GLEW_EXT_stencil_two_side) = _glewSearchExtension("GL_EXT_stencil_two_side", extStart, extEnd); if (glewExperimental || GLEW_EXT_stencil_two_side) CONST_CAST(GLEW_EXT_stencil_two_side) = !_glewInit_GL_EXT_stencil_two_side(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_stencil_two_side */ #ifdef GL_EXT_stencil_wrap CONST_CAST(GLEW_EXT_stencil_wrap) = _glewSearchExtension("GL_EXT_stencil_wrap", extStart, extEnd); #endif /* GL_EXT_stencil_wrap */ #ifdef GL_EXT_subtexture CONST_CAST(GLEW_EXT_subtexture) = _glewSearchExtension("GL_EXT_subtexture", extStart, extEnd); if (glewExperimental || GLEW_EXT_subtexture) CONST_CAST(GLEW_EXT_subtexture) = !_glewInit_GL_EXT_subtexture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_subtexture */ #ifdef GL_EXT_texture CONST_CAST(GLEW_EXT_texture) = _glewSearchExtension("GL_EXT_texture", extStart, extEnd); #endif /* GL_EXT_texture */ #ifdef GL_EXT_texture3D CONST_CAST(GLEW_EXT_texture3D) = _glewSearchExtension("GL_EXT_texture3D", extStart, extEnd); if (glewExperimental || GLEW_EXT_texture3D) CONST_CAST(GLEW_EXT_texture3D) = !_glewInit_GL_EXT_texture3D(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_texture3D */ #ifdef GL_EXT_texture_array CONST_CAST(GLEW_EXT_texture_array) = _glewSearchExtension("GL_EXT_texture_array", extStart, extEnd); if (glewExperimental || GLEW_EXT_texture_array) CONST_CAST(GLEW_EXT_texture_array) = !_glewInit_GL_EXT_texture_array(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_texture_array */ #ifdef GL_EXT_texture_buffer_object CONST_CAST(GLEW_EXT_texture_buffer_object) = _glewSearchExtension("GL_EXT_texture_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_EXT_texture_buffer_object) CONST_CAST(GLEW_EXT_texture_buffer_object) = !_glewInit_GL_EXT_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_texture_buffer_object */ #ifdef GL_EXT_texture_compression_dxt1 CONST_CAST(GLEW_EXT_texture_compression_dxt1) = _glewSearchExtension("GL_EXT_texture_compression_dxt1", extStart, extEnd); #endif /* GL_EXT_texture_compression_dxt1 */ #ifdef GL_EXT_texture_compression_latc CONST_CAST(GLEW_EXT_texture_compression_latc) = _glewSearchExtension("GL_EXT_texture_compression_latc", extStart, extEnd); #endif /* GL_EXT_texture_compression_latc */ #ifdef GL_EXT_texture_compression_rgtc CONST_CAST(GLEW_EXT_texture_compression_rgtc) = _glewSearchExtension("GL_EXT_texture_compression_rgtc", extStart, extEnd); #endif /* GL_EXT_texture_compression_rgtc */ #ifdef GL_EXT_texture_compression_s3tc CONST_CAST(GLEW_EXT_texture_compression_s3tc) = _glewSearchExtension("GL_EXT_texture_compression_s3tc", extStart, extEnd); #endif /* GL_EXT_texture_compression_s3tc */ #ifdef GL_EXT_texture_cube_map CONST_CAST(GLEW_EXT_texture_cube_map) = _glewSearchExtension("GL_EXT_texture_cube_map", extStart, extEnd); #endif /* GL_EXT_texture_cube_map */ #ifdef GL_EXT_texture_edge_clamp CONST_CAST(GLEW_EXT_texture_edge_clamp) = _glewSearchExtension("GL_EXT_texture_edge_clamp", extStart, extEnd); #endif /* GL_EXT_texture_edge_clamp */ #ifdef GL_EXT_texture_env CONST_CAST(GLEW_EXT_texture_env) = _glewSearchExtension("GL_EXT_texture_env", extStart, extEnd); #endif /* GL_EXT_texture_env */ #ifdef GL_EXT_texture_env_add CONST_CAST(GLEW_EXT_texture_env_add) = _glewSearchExtension("GL_EXT_texture_env_add", extStart, extEnd); #endif /* GL_EXT_texture_env_add */ #ifdef GL_EXT_texture_env_combine CONST_CAST(GLEW_EXT_texture_env_combine) = _glewSearchExtension("GL_EXT_texture_env_combine", extStart, extEnd); #endif /* GL_EXT_texture_env_combine */ #ifdef GL_EXT_texture_env_dot3 CONST_CAST(GLEW_EXT_texture_env_dot3) = _glewSearchExtension("GL_EXT_texture_env_dot3", extStart, extEnd); #endif /* GL_EXT_texture_env_dot3 */ #ifdef GL_EXT_texture_filter_anisotropic CONST_CAST(GLEW_EXT_texture_filter_anisotropic) = _glewSearchExtension("GL_EXT_texture_filter_anisotropic", extStart, extEnd); #endif /* GL_EXT_texture_filter_anisotropic */ #ifdef GL_EXT_texture_integer CONST_CAST(GLEW_EXT_texture_integer) = _glewSearchExtension("GL_EXT_texture_integer", extStart, extEnd); if (glewExperimental || GLEW_EXT_texture_integer) CONST_CAST(GLEW_EXT_texture_integer) = !_glewInit_GL_EXT_texture_integer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_texture_integer */ #ifdef GL_EXT_texture_lod_bias CONST_CAST(GLEW_EXT_texture_lod_bias) = _glewSearchExtension("GL_EXT_texture_lod_bias", extStart, extEnd); #endif /* GL_EXT_texture_lod_bias */ #ifdef GL_EXT_texture_mirror_clamp CONST_CAST(GLEW_EXT_texture_mirror_clamp) = _glewSearchExtension("GL_EXT_texture_mirror_clamp", extStart, extEnd); #endif /* GL_EXT_texture_mirror_clamp */ #ifdef GL_EXT_texture_object CONST_CAST(GLEW_EXT_texture_object) = _glewSearchExtension("GL_EXT_texture_object", extStart, extEnd); if (glewExperimental || GLEW_EXT_texture_object) CONST_CAST(GLEW_EXT_texture_object) = !_glewInit_GL_EXT_texture_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_texture_object */ #ifdef GL_EXT_texture_perturb_normal CONST_CAST(GLEW_EXT_texture_perturb_normal) = _glewSearchExtension("GL_EXT_texture_perturb_normal", extStart, extEnd); if (glewExperimental || GLEW_EXT_texture_perturb_normal) CONST_CAST(GLEW_EXT_texture_perturb_normal) = !_glewInit_GL_EXT_texture_perturb_normal(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_texture_perturb_normal */ #ifdef GL_EXT_texture_rectangle CONST_CAST(GLEW_EXT_texture_rectangle) = _glewSearchExtension("GL_EXT_texture_rectangle", extStart, extEnd); #endif /* GL_EXT_texture_rectangle */ #ifdef GL_EXT_texture_sRGB CONST_CAST(GLEW_EXT_texture_sRGB) = _glewSearchExtension("GL_EXT_texture_sRGB", extStart, extEnd); #endif /* GL_EXT_texture_sRGB */ #ifdef GL_EXT_texture_sRGB_decode CONST_CAST(GLEW_EXT_texture_sRGB_decode) = _glewSearchExtension("GL_EXT_texture_sRGB_decode", extStart, extEnd); #endif /* GL_EXT_texture_sRGB_decode */ #ifdef GL_EXT_texture_shared_exponent CONST_CAST(GLEW_EXT_texture_shared_exponent) = _glewSearchExtension("GL_EXT_texture_shared_exponent", extStart, extEnd); #endif /* GL_EXT_texture_shared_exponent */ #ifdef GL_EXT_texture_snorm CONST_CAST(GLEW_EXT_texture_snorm) = _glewSearchExtension("GL_EXT_texture_snorm", extStart, extEnd); #endif /* GL_EXT_texture_snorm */ #ifdef GL_EXT_texture_swizzle CONST_CAST(GLEW_EXT_texture_swizzle) = _glewSearchExtension("GL_EXT_texture_swizzle", extStart, extEnd); #endif /* GL_EXT_texture_swizzle */ #ifdef GL_EXT_timer_query CONST_CAST(GLEW_EXT_timer_query) = _glewSearchExtension("GL_EXT_timer_query", extStart, extEnd); if (glewExperimental || GLEW_EXT_timer_query) CONST_CAST(GLEW_EXT_timer_query) = !_glewInit_GL_EXT_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_timer_query */ #ifdef GL_EXT_transform_feedback CONST_CAST(GLEW_EXT_transform_feedback) = _glewSearchExtension("GL_EXT_transform_feedback", extStart, extEnd); if (glewExperimental || GLEW_EXT_transform_feedback) CONST_CAST(GLEW_EXT_transform_feedback) = !_glewInit_GL_EXT_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_transform_feedback */ #ifdef GL_EXT_vertex_array CONST_CAST(GLEW_EXT_vertex_array) = _glewSearchExtension("GL_EXT_vertex_array", extStart, extEnd); if (glewExperimental || GLEW_EXT_vertex_array) CONST_CAST(GLEW_EXT_vertex_array) = !_glewInit_GL_EXT_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_vertex_array */ #ifdef GL_EXT_vertex_array_bgra CONST_CAST(GLEW_EXT_vertex_array_bgra) = _glewSearchExtension("GL_EXT_vertex_array_bgra", extStart, extEnd); #endif /* GL_EXT_vertex_array_bgra */ #ifdef GL_EXT_vertex_attrib_64bit CONST_CAST(GLEW_EXT_vertex_attrib_64bit) = _glewSearchExtension("GL_EXT_vertex_attrib_64bit", extStart, extEnd); if (glewExperimental || GLEW_EXT_vertex_attrib_64bit) CONST_CAST(GLEW_EXT_vertex_attrib_64bit) = !_glewInit_GL_EXT_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_vertex_attrib_64bit */ #ifdef GL_EXT_vertex_shader CONST_CAST(GLEW_EXT_vertex_shader) = _glewSearchExtension("GL_EXT_vertex_shader", extStart, extEnd); if (glewExperimental || GLEW_EXT_vertex_shader) CONST_CAST(GLEW_EXT_vertex_shader) = !_glewInit_GL_EXT_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_vertex_shader */ #ifdef GL_EXT_vertex_weighting CONST_CAST(GLEW_EXT_vertex_weighting) = _glewSearchExtension("GL_EXT_vertex_weighting", extStart, extEnd); if (glewExperimental || GLEW_EXT_vertex_weighting) CONST_CAST(GLEW_EXT_vertex_weighting) = !_glewInit_GL_EXT_vertex_weighting(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_vertex_weighting */ #ifdef GL_EXT_x11_sync_object CONST_CAST(GLEW_EXT_x11_sync_object) = _glewSearchExtension("GL_EXT_x11_sync_object", extStart, extEnd); if (glewExperimental || GLEW_EXT_x11_sync_object) CONST_CAST(GLEW_EXT_x11_sync_object) = !_glewInit_GL_EXT_x11_sync_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_EXT_x11_sync_object */ #ifdef GL_GREMEDY_frame_terminator CONST_CAST(GLEW_GREMEDY_frame_terminator) = _glewSearchExtension("GL_GREMEDY_frame_terminator", extStart, extEnd); if (glewExperimental || GLEW_GREMEDY_frame_terminator) CONST_CAST(GLEW_GREMEDY_frame_terminator) = !_glewInit_GL_GREMEDY_frame_terminator(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_GREMEDY_frame_terminator */ #ifdef GL_GREMEDY_string_marker CONST_CAST(GLEW_GREMEDY_string_marker) = _glewSearchExtension("GL_GREMEDY_string_marker", extStart, extEnd); if (glewExperimental || GLEW_GREMEDY_string_marker) CONST_CAST(GLEW_GREMEDY_string_marker) = !_glewInit_GL_GREMEDY_string_marker(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_GREMEDY_string_marker */ #ifdef GL_HP_convolution_border_modes CONST_CAST(GLEW_HP_convolution_border_modes) = _glewSearchExtension("GL_HP_convolution_border_modes", extStart, extEnd); #endif /* GL_HP_convolution_border_modes */ #ifdef GL_HP_image_transform CONST_CAST(GLEW_HP_image_transform) = _glewSearchExtension("GL_HP_image_transform", extStart, extEnd); if (glewExperimental || GLEW_HP_image_transform) CONST_CAST(GLEW_HP_image_transform) = !_glewInit_GL_HP_image_transform(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_HP_image_transform */ #ifdef GL_HP_occlusion_test CONST_CAST(GLEW_HP_occlusion_test) = _glewSearchExtension("GL_HP_occlusion_test", extStart, extEnd); #endif /* GL_HP_occlusion_test */ #ifdef GL_HP_texture_lighting CONST_CAST(GLEW_HP_texture_lighting) = _glewSearchExtension("GL_HP_texture_lighting", extStart, extEnd); #endif /* GL_HP_texture_lighting */ #ifdef GL_IBM_cull_vertex CONST_CAST(GLEW_IBM_cull_vertex) = _glewSearchExtension("GL_IBM_cull_vertex", extStart, extEnd); #endif /* GL_IBM_cull_vertex */ #ifdef GL_IBM_multimode_draw_arrays CONST_CAST(GLEW_IBM_multimode_draw_arrays) = _glewSearchExtension("GL_IBM_multimode_draw_arrays", extStart, extEnd); if (glewExperimental || GLEW_IBM_multimode_draw_arrays) CONST_CAST(GLEW_IBM_multimode_draw_arrays) = !_glewInit_GL_IBM_multimode_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_IBM_multimode_draw_arrays */ #ifdef GL_IBM_rasterpos_clip CONST_CAST(GLEW_IBM_rasterpos_clip) = _glewSearchExtension("GL_IBM_rasterpos_clip", extStart, extEnd); #endif /* GL_IBM_rasterpos_clip */ #ifdef GL_IBM_static_data CONST_CAST(GLEW_IBM_static_data) = _glewSearchExtension("GL_IBM_static_data", extStart, extEnd); #endif /* GL_IBM_static_data */ #ifdef GL_IBM_texture_mirrored_repeat CONST_CAST(GLEW_IBM_texture_mirrored_repeat) = _glewSearchExtension("GL_IBM_texture_mirrored_repeat", extStart, extEnd); #endif /* GL_IBM_texture_mirrored_repeat */ #ifdef GL_IBM_vertex_array_lists CONST_CAST(GLEW_IBM_vertex_array_lists) = _glewSearchExtension("GL_IBM_vertex_array_lists", extStart, extEnd); if (glewExperimental || GLEW_IBM_vertex_array_lists) CONST_CAST(GLEW_IBM_vertex_array_lists) = !_glewInit_GL_IBM_vertex_array_lists(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_IBM_vertex_array_lists */ #ifdef GL_INGR_color_clamp CONST_CAST(GLEW_INGR_color_clamp) = _glewSearchExtension("GL_INGR_color_clamp", extStart, extEnd); #endif /* GL_INGR_color_clamp */ #ifdef GL_INGR_interlace_read CONST_CAST(GLEW_INGR_interlace_read) = _glewSearchExtension("GL_INGR_interlace_read", extStart, extEnd); #endif /* GL_INGR_interlace_read */ #ifdef GL_INTEL_parallel_arrays CONST_CAST(GLEW_INTEL_parallel_arrays) = _glewSearchExtension("GL_INTEL_parallel_arrays", extStart, extEnd); if (glewExperimental || GLEW_INTEL_parallel_arrays) CONST_CAST(GLEW_INTEL_parallel_arrays) = !_glewInit_GL_INTEL_parallel_arrays(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_INTEL_parallel_arrays */ #ifdef GL_INTEL_texture_scissor CONST_CAST(GLEW_INTEL_texture_scissor) = _glewSearchExtension("GL_INTEL_texture_scissor", extStart, extEnd); if (glewExperimental || GLEW_INTEL_texture_scissor) CONST_CAST(GLEW_INTEL_texture_scissor) = !_glewInit_GL_INTEL_texture_scissor(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_INTEL_texture_scissor */ #ifdef GL_KHR_debug CONST_CAST(GLEW_KHR_debug) = _glewSearchExtension("GL_KHR_debug", extStart, extEnd); if (glewExperimental || GLEW_KHR_debug) CONST_CAST(GLEW_KHR_debug) = !_glewInit_GL_KHR_debug(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_KHR_debug */ #ifdef GL_KHR_texture_compression_astc_ldr CONST_CAST(GLEW_KHR_texture_compression_astc_ldr) = _glewSearchExtension("GL_KHR_texture_compression_astc_ldr", extStart, extEnd); #endif /* GL_KHR_texture_compression_astc_ldr */ #ifdef GL_KTX_buffer_region CONST_CAST(GLEW_KTX_buffer_region) = _glewSearchExtension("GL_KTX_buffer_region", extStart, extEnd); if (glewExperimental || GLEW_KTX_buffer_region) CONST_CAST(GLEW_KTX_buffer_region) = !_glewInit_GL_KTX_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_KTX_buffer_region */ #ifdef GL_MESAX_texture_stack CONST_CAST(GLEW_MESAX_texture_stack) = _glewSearchExtension("GL_MESAX_texture_stack", extStart, extEnd); #endif /* GL_MESAX_texture_stack */ #ifdef GL_MESA_pack_invert CONST_CAST(GLEW_MESA_pack_invert) = _glewSearchExtension("GL_MESA_pack_invert", extStart, extEnd); #endif /* GL_MESA_pack_invert */ #ifdef GL_MESA_resize_buffers CONST_CAST(GLEW_MESA_resize_buffers) = _glewSearchExtension("GL_MESA_resize_buffers", extStart, extEnd); if (glewExperimental || GLEW_MESA_resize_buffers) CONST_CAST(GLEW_MESA_resize_buffers) = !_glewInit_GL_MESA_resize_buffers(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_MESA_resize_buffers */ #ifdef GL_MESA_window_pos CONST_CAST(GLEW_MESA_window_pos) = _glewSearchExtension("GL_MESA_window_pos", extStart, extEnd); if (glewExperimental || GLEW_MESA_window_pos) CONST_CAST(GLEW_MESA_window_pos) = !_glewInit_GL_MESA_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_MESA_window_pos */ #ifdef GL_MESA_ycbcr_texture CONST_CAST(GLEW_MESA_ycbcr_texture) = _glewSearchExtension("GL_MESA_ycbcr_texture", extStart, extEnd); #endif /* GL_MESA_ycbcr_texture */ #ifdef GL_NVX_gpu_memory_info CONST_CAST(GLEW_NVX_gpu_memory_info) = _glewSearchExtension("GL_NVX_gpu_memory_info", extStart, extEnd); #endif /* GL_NVX_gpu_memory_info */ #ifdef GL_NV_bindless_texture CONST_CAST(GLEW_NV_bindless_texture) = _glewSearchExtension("GL_NV_bindless_texture", extStart, extEnd); if (glewExperimental || GLEW_NV_bindless_texture) CONST_CAST(GLEW_NV_bindless_texture) = !_glewInit_GL_NV_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_bindless_texture */ #ifdef GL_NV_blend_square CONST_CAST(GLEW_NV_blend_square) = _glewSearchExtension("GL_NV_blend_square", extStart, extEnd); #endif /* GL_NV_blend_square */ #ifdef GL_NV_conditional_render CONST_CAST(GLEW_NV_conditional_render) = _glewSearchExtension("GL_NV_conditional_render", extStart, extEnd); if (glewExperimental || GLEW_NV_conditional_render) CONST_CAST(GLEW_NV_conditional_render) = !_glewInit_GL_NV_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_conditional_render */ #ifdef GL_NV_copy_depth_to_color CONST_CAST(GLEW_NV_copy_depth_to_color) = _glewSearchExtension("GL_NV_copy_depth_to_color", extStart, extEnd); #endif /* GL_NV_copy_depth_to_color */ #ifdef GL_NV_copy_image CONST_CAST(GLEW_NV_copy_image) = _glewSearchExtension("GL_NV_copy_image", extStart, extEnd); if (glewExperimental || GLEW_NV_copy_image) CONST_CAST(GLEW_NV_copy_image) = !_glewInit_GL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_copy_image */ #ifdef GL_NV_depth_buffer_float CONST_CAST(GLEW_NV_depth_buffer_float) = _glewSearchExtension("GL_NV_depth_buffer_float", extStart, extEnd); if (glewExperimental || GLEW_NV_depth_buffer_float) CONST_CAST(GLEW_NV_depth_buffer_float) = !_glewInit_GL_NV_depth_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_depth_buffer_float */ #ifdef GL_NV_depth_clamp CONST_CAST(GLEW_NV_depth_clamp) = _glewSearchExtension("GL_NV_depth_clamp", extStart, extEnd); #endif /* GL_NV_depth_clamp */ #ifdef GL_NV_depth_range_unclamped CONST_CAST(GLEW_NV_depth_range_unclamped) = _glewSearchExtension("GL_NV_depth_range_unclamped", extStart, extEnd); #endif /* GL_NV_depth_range_unclamped */ #ifdef GL_NV_evaluators CONST_CAST(GLEW_NV_evaluators) = _glewSearchExtension("GL_NV_evaluators", extStart, extEnd); if (glewExperimental || GLEW_NV_evaluators) CONST_CAST(GLEW_NV_evaluators) = !_glewInit_GL_NV_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_evaluators */ #ifdef GL_NV_explicit_multisample CONST_CAST(GLEW_NV_explicit_multisample) = _glewSearchExtension("GL_NV_explicit_multisample", extStart, extEnd); if (glewExperimental || GLEW_NV_explicit_multisample) CONST_CAST(GLEW_NV_explicit_multisample) = !_glewInit_GL_NV_explicit_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_explicit_multisample */ #ifdef GL_NV_fence CONST_CAST(GLEW_NV_fence) = _glewSearchExtension("GL_NV_fence", extStart, extEnd); if (glewExperimental || GLEW_NV_fence) CONST_CAST(GLEW_NV_fence) = !_glewInit_GL_NV_fence(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_fence */ #ifdef GL_NV_float_buffer CONST_CAST(GLEW_NV_float_buffer) = _glewSearchExtension("GL_NV_float_buffer", extStart, extEnd); #endif /* GL_NV_float_buffer */ #ifdef GL_NV_fog_distance CONST_CAST(GLEW_NV_fog_distance) = _glewSearchExtension("GL_NV_fog_distance", extStart, extEnd); #endif /* GL_NV_fog_distance */ #ifdef GL_NV_fragment_program CONST_CAST(GLEW_NV_fragment_program) = _glewSearchExtension("GL_NV_fragment_program", extStart, extEnd); if (glewExperimental || GLEW_NV_fragment_program) CONST_CAST(GLEW_NV_fragment_program) = !_glewInit_GL_NV_fragment_program(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_fragment_program */ #ifdef GL_NV_fragment_program2 CONST_CAST(GLEW_NV_fragment_program2) = _glewSearchExtension("GL_NV_fragment_program2", extStart, extEnd); #endif /* GL_NV_fragment_program2 */ #ifdef GL_NV_fragment_program4 CONST_CAST(GLEW_NV_fragment_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); #endif /* GL_NV_fragment_program4 */ #ifdef GL_NV_fragment_program_option CONST_CAST(GLEW_NV_fragment_program_option) = _glewSearchExtension("GL_NV_fragment_program_option", extStart, extEnd); #endif /* GL_NV_fragment_program_option */ #ifdef GL_NV_framebuffer_multisample_coverage CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = _glewSearchExtension("GL_NV_framebuffer_multisample_coverage", extStart, extEnd); if (glewExperimental || GLEW_NV_framebuffer_multisample_coverage) CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = !_glewInit_GL_NV_framebuffer_multisample_coverage(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_framebuffer_multisample_coverage */ #ifdef GL_NV_geometry_program4 CONST_CAST(GLEW_NV_geometry_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); if (glewExperimental || GLEW_NV_geometry_program4) CONST_CAST(GLEW_NV_geometry_program4) = !_glewInit_GL_NV_geometry_program4(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_geometry_program4 */ #ifdef GL_NV_geometry_shader4 CONST_CAST(GLEW_NV_geometry_shader4) = _glewSearchExtension("GL_NV_geometry_shader4", extStart, extEnd); #endif /* GL_NV_geometry_shader4 */ #ifdef GL_NV_gpu_program4 CONST_CAST(GLEW_NV_gpu_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); if (glewExperimental || GLEW_NV_gpu_program4) CONST_CAST(GLEW_NV_gpu_program4) = !_glewInit_GL_NV_gpu_program4(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_gpu_program4 */ #ifdef GL_NV_gpu_program5 CONST_CAST(GLEW_NV_gpu_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); #endif /* GL_NV_gpu_program5 */ #ifdef GL_NV_gpu_program_fp64 CONST_CAST(GLEW_NV_gpu_program_fp64) = _glewSearchExtension("GL_NV_gpu_program_fp64", extStart, extEnd); #endif /* GL_NV_gpu_program_fp64 */ #ifdef GL_NV_gpu_shader5 CONST_CAST(GLEW_NV_gpu_shader5) = _glewSearchExtension("GL_NV_gpu_shader5", extStart, extEnd); if (glewExperimental || GLEW_NV_gpu_shader5) CONST_CAST(GLEW_NV_gpu_shader5) = !_glewInit_GL_NV_gpu_shader5(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_gpu_shader5 */ #ifdef GL_NV_half_float CONST_CAST(GLEW_NV_half_float) = _glewSearchExtension("GL_NV_half_float", extStart, extEnd); if (glewExperimental || GLEW_NV_half_float) CONST_CAST(GLEW_NV_half_float) = !_glewInit_GL_NV_half_float(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_half_float */ #ifdef GL_NV_light_max_exponent CONST_CAST(GLEW_NV_light_max_exponent) = _glewSearchExtension("GL_NV_light_max_exponent", extStart, extEnd); #endif /* GL_NV_light_max_exponent */ #ifdef GL_NV_multisample_coverage CONST_CAST(GLEW_NV_multisample_coverage) = _glewSearchExtension("GL_NV_multisample_coverage", extStart, extEnd); #endif /* GL_NV_multisample_coverage */ #ifdef GL_NV_multisample_filter_hint CONST_CAST(GLEW_NV_multisample_filter_hint) = _glewSearchExtension("GL_NV_multisample_filter_hint", extStart, extEnd); #endif /* GL_NV_multisample_filter_hint */ #ifdef GL_NV_occlusion_query CONST_CAST(GLEW_NV_occlusion_query) = _glewSearchExtension("GL_NV_occlusion_query", extStart, extEnd); if (glewExperimental || GLEW_NV_occlusion_query) CONST_CAST(GLEW_NV_occlusion_query) = !_glewInit_GL_NV_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_occlusion_query */ #ifdef GL_NV_packed_depth_stencil CONST_CAST(GLEW_NV_packed_depth_stencil) = _glewSearchExtension("GL_NV_packed_depth_stencil", extStart, extEnd); #endif /* GL_NV_packed_depth_stencil */ #ifdef GL_NV_parameter_buffer_object CONST_CAST(GLEW_NV_parameter_buffer_object) = _glewSearchExtension("GL_NV_parameter_buffer_object", extStart, extEnd); if (glewExperimental || GLEW_NV_parameter_buffer_object) CONST_CAST(GLEW_NV_parameter_buffer_object) = !_glewInit_GL_NV_parameter_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_parameter_buffer_object */ #ifdef GL_NV_parameter_buffer_object2 CONST_CAST(GLEW_NV_parameter_buffer_object2) = _glewSearchExtension("GL_NV_parameter_buffer_object2", extStart, extEnd); #endif /* GL_NV_parameter_buffer_object2 */ #ifdef GL_NV_path_rendering CONST_CAST(GLEW_NV_path_rendering) = _glewSearchExtension("GL_NV_path_rendering", extStart, extEnd); if (glewExperimental || GLEW_NV_path_rendering) CONST_CAST(GLEW_NV_path_rendering) = !_glewInit_GL_NV_path_rendering(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_path_rendering */ #ifdef GL_NV_pixel_data_range CONST_CAST(GLEW_NV_pixel_data_range) = _glewSearchExtension("GL_NV_pixel_data_range", extStart, extEnd); if (glewExperimental || GLEW_NV_pixel_data_range) CONST_CAST(GLEW_NV_pixel_data_range) = !_glewInit_GL_NV_pixel_data_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_pixel_data_range */ #ifdef GL_NV_point_sprite CONST_CAST(GLEW_NV_point_sprite) = _glewSearchExtension("GL_NV_point_sprite", extStart, extEnd); if (glewExperimental || GLEW_NV_point_sprite) CONST_CAST(GLEW_NV_point_sprite) = !_glewInit_GL_NV_point_sprite(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_point_sprite */ #ifdef GL_NV_present_video CONST_CAST(GLEW_NV_present_video) = _glewSearchExtension("GL_NV_present_video", extStart, extEnd); if (glewExperimental || GLEW_NV_present_video) CONST_CAST(GLEW_NV_present_video) = !_glewInit_GL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_present_video */ #ifdef GL_NV_primitive_restart CONST_CAST(GLEW_NV_primitive_restart) = _glewSearchExtension("GL_NV_primitive_restart", extStart, extEnd); if (glewExperimental || GLEW_NV_primitive_restart) CONST_CAST(GLEW_NV_primitive_restart) = !_glewInit_GL_NV_primitive_restart(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_primitive_restart */ #ifdef GL_NV_register_combiners CONST_CAST(GLEW_NV_register_combiners) = _glewSearchExtension("GL_NV_register_combiners", extStart, extEnd); if (glewExperimental || GLEW_NV_register_combiners) CONST_CAST(GLEW_NV_register_combiners) = !_glewInit_GL_NV_register_combiners(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_register_combiners */ #ifdef GL_NV_register_combiners2 CONST_CAST(GLEW_NV_register_combiners2) = _glewSearchExtension("GL_NV_register_combiners2", extStart, extEnd); if (glewExperimental || GLEW_NV_register_combiners2) CONST_CAST(GLEW_NV_register_combiners2) = !_glewInit_GL_NV_register_combiners2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_register_combiners2 */ #ifdef GL_NV_shader_atomic_float CONST_CAST(GLEW_NV_shader_atomic_float) = _glewSearchExtension("GL_NV_shader_atomic_float", extStart, extEnd); #endif /* GL_NV_shader_atomic_float */ #ifdef GL_NV_shader_buffer_load CONST_CAST(GLEW_NV_shader_buffer_load) = _glewSearchExtension("GL_NV_shader_buffer_load", extStart, extEnd); if (glewExperimental || GLEW_NV_shader_buffer_load) CONST_CAST(GLEW_NV_shader_buffer_load) = !_glewInit_GL_NV_shader_buffer_load(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_shader_buffer_load */ #ifdef GL_NV_tessellation_program5 CONST_CAST(GLEW_NV_tessellation_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); #endif /* GL_NV_tessellation_program5 */ #ifdef GL_NV_texgen_emboss CONST_CAST(GLEW_NV_texgen_emboss) = _glewSearchExtension("GL_NV_texgen_emboss", extStart, extEnd); #endif /* GL_NV_texgen_emboss */ #ifdef GL_NV_texgen_reflection CONST_CAST(GLEW_NV_texgen_reflection) = _glewSearchExtension("GL_NV_texgen_reflection", extStart, extEnd); #endif /* GL_NV_texgen_reflection */ #ifdef GL_NV_texture_barrier CONST_CAST(GLEW_NV_texture_barrier) = _glewSearchExtension("GL_NV_texture_barrier", extStart, extEnd); if (glewExperimental || GLEW_NV_texture_barrier) CONST_CAST(GLEW_NV_texture_barrier) = !_glewInit_GL_NV_texture_barrier(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_texture_barrier */ #ifdef GL_NV_texture_compression_vtc CONST_CAST(GLEW_NV_texture_compression_vtc) = _glewSearchExtension("GL_NV_texture_compression_vtc", extStart, extEnd); #endif /* GL_NV_texture_compression_vtc */ #ifdef GL_NV_texture_env_combine4 CONST_CAST(GLEW_NV_texture_env_combine4) = _glewSearchExtension("GL_NV_texture_env_combine4", extStart, extEnd); #endif /* GL_NV_texture_env_combine4 */ #ifdef GL_NV_texture_expand_normal CONST_CAST(GLEW_NV_texture_expand_normal) = _glewSearchExtension("GL_NV_texture_expand_normal", extStart, extEnd); #endif /* GL_NV_texture_expand_normal */ #ifdef GL_NV_texture_multisample CONST_CAST(GLEW_NV_texture_multisample) = _glewSearchExtension("GL_NV_texture_multisample", extStart, extEnd); if (glewExperimental || GLEW_NV_texture_multisample) CONST_CAST(GLEW_NV_texture_multisample) = !_glewInit_GL_NV_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_texture_multisample */ #ifdef GL_NV_texture_rectangle CONST_CAST(GLEW_NV_texture_rectangle) = _glewSearchExtension("GL_NV_texture_rectangle", extStart, extEnd); #endif /* GL_NV_texture_rectangle */ #ifdef GL_NV_texture_shader CONST_CAST(GLEW_NV_texture_shader) = _glewSearchExtension("GL_NV_texture_shader", extStart, extEnd); #endif /* GL_NV_texture_shader */ #ifdef GL_NV_texture_shader2 CONST_CAST(GLEW_NV_texture_shader2) = _glewSearchExtension("GL_NV_texture_shader2", extStart, extEnd); #endif /* GL_NV_texture_shader2 */ #ifdef GL_NV_texture_shader3 CONST_CAST(GLEW_NV_texture_shader3) = _glewSearchExtension("GL_NV_texture_shader3", extStart, extEnd); #endif /* GL_NV_texture_shader3 */ #ifdef GL_NV_transform_feedback CONST_CAST(GLEW_NV_transform_feedback) = _glewSearchExtension("GL_NV_transform_feedback", extStart, extEnd); if (glewExperimental || GLEW_NV_transform_feedback) CONST_CAST(GLEW_NV_transform_feedback) = !_glewInit_GL_NV_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_transform_feedback */ #ifdef GL_NV_transform_feedback2 CONST_CAST(GLEW_NV_transform_feedback2) = _glewSearchExtension("GL_NV_transform_feedback2", extStart, extEnd); if (glewExperimental || GLEW_NV_transform_feedback2) CONST_CAST(GLEW_NV_transform_feedback2) = !_glewInit_GL_NV_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_transform_feedback2 */ #ifdef GL_NV_vdpau_interop CONST_CAST(GLEW_NV_vdpau_interop) = _glewSearchExtension("GL_NV_vdpau_interop", extStart, extEnd); if (glewExperimental || GLEW_NV_vdpau_interop) CONST_CAST(GLEW_NV_vdpau_interop) = !_glewInit_GL_NV_vdpau_interop(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_vdpau_interop */ #ifdef GL_NV_vertex_array_range CONST_CAST(GLEW_NV_vertex_array_range) = _glewSearchExtension("GL_NV_vertex_array_range", extStart, extEnd); if (glewExperimental || GLEW_NV_vertex_array_range) CONST_CAST(GLEW_NV_vertex_array_range) = !_glewInit_GL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_vertex_array_range */ #ifdef GL_NV_vertex_array_range2 CONST_CAST(GLEW_NV_vertex_array_range2) = _glewSearchExtension("GL_NV_vertex_array_range2", extStart, extEnd); #endif /* GL_NV_vertex_array_range2 */ #ifdef GL_NV_vertex_attrib_integer_64bit CONST_CAST(GLEW_NV_vertex_attrib_integer_64bit) = _glewSearchExtension("GL_NV_vertex_attrib_integer_64bit", extStart, extEnd); if (glewExperimental || GLEW_NV_vertex_attrib_integer_64bit) CONST_CAST(GLEW_NV_vertex_attrib_integer_64bit) = !_glewInit_GL_NV_vertex_attrib_integer_64bit(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_vertex_attrib_integer_64bit */ #ifdef GL_NV_vertex_buffer_unified_memory CONST_CAST(GLEW_NV_vertex_buffer_unified_memory) = _glewSearchExtension("GL_NV_vertex_buffer_unified_memory", extStart, extEnd); if (glewExperimental || GLEW_NV_vertex_buffer_unified_memory) CONST_CAST(GLEW_NV_vertex_buffer_unified_memory) = !_glewInit_GL_NV_vertex_buffer_unified_memory(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_vertex_buffer_unified_memory */ #ifdef GL_NV_vertex_program CONST_CAST(GLEW_NV_vertex_program) = _glewSearchExtension("GL_NV_vertex_program", extStart, extEnd); if (glewExperimental || GLEW_NV_vertex_program) CONST_CAST(GLEW_NV_vertex_program) = !_glewInit_GL_NV_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_vertex_program */ #ifdef GL_NV_vertex_program1_1 CONST_CAST(GLEW_NV_vertex_program1_1) = _glewSearchExtension("GL_NV_vertex_program1_1", extStart, extEnd); #endif /* GL_NV_vertex_program1_1 */ #ifdef GL_NV_vertex_program2 CONST_CAST(GLEW_NV_vertex_program2) = _glewSearchExtension("GL_NV_vertex_program2", extStart, extEnd); #endif /* GL_NV_vertex_program2 */ #ifdef GL_NV_vertex_program2_option CONST_CAST(GLEW_NV_vertex_program2_option) = _glewSearchExtension("GL_NV_vertex_program2_option", extStart, extEnd); #endif /* GL_NV_vertex_program2_option */ #ifdef GL_NV_vertex_program3 CONST_CAST(GLEW_NV_vertex_program3) = _glewSearchExtension("GL_NV_vertex_program3", extStart, extEnd); #endif /* GL_NV_vertex_program3 */ #ifdef GL_NV_vertex_program4 CONST_CAST(GLEW_NV_vertex_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); #endif /* GL_NV_vertex_program4 */ #ifdef GL_NV_video_capture CONST_CAST(GLEW_NV_video_capture) = _glewSearchExtension("GL_NV_video_capture", extStart, extEnd); if (glewExperimental || GLEW_NV_video_capture) CONST_CAST(GLEW_NV_video_capture) = !_glewInit_GL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_NV_video_capture */ #ifdef GL_OES_byte_coordinates CONST_CAST(GLEW_OES_byte_coordinates) = _glewSearchExtension("GL_OES_byte_coordinates", extStart, extEnd); #endif /* GL_OES_byte_coordinates */ #ifdef GL_OES_compressed_paletted_texture CONST_CAST(GLEW_OES_compressed_paletted_texture) = _glewSearchExtension("GL_OES_compressed_paletted_texture", extStart, extEnd); #endif /* GL_OES_compressed_paletted_texture */ #ifdef GL_OES_read_format CONST_CAST(GLEW_OES_read_format) = _glewSearchExtension("GL_OES_read_format", extStart, extEnd); #endif /* GL_OES_read_format */ #ifdef GL_OES_single_precision CONST_CAST(GLEW_OES_single_precision) = _glewSearchExtension("GL_OES_single_precision", extStart, extEnd); if (glewExperimental || GLEW_OES_single_precision) CONST_CAST(GLEW_OES_single_precision) = !_glewInit_GL_OES_single_precision(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_OES_single_precision */ #ifdef GL_OML_interlace CONST_CAST(GLEW_OML_interlace) = _glewSearchExtension("GL_OML_interlace", extStart, extEnd); #endif /* GL_OML_interlace */ #ifdef GL_OML_resample CONST_CAST(GLEW_OML_resample) = _glewSearchExtension("GL_OML_resample", extStart, extEnd); #endif /* GL_OML_resample */ #ifdef GL_OML_subsample CONST_CAST(GLEW_OML_subsample) = _glewSearchExtension("GL_OML_subsample", extStart, extEnd); #endif /* GL_OML_subsample */ #ifdef GL_PGI_misc_hints CONST_CAST(GLEW_PGI_misc_hints) = _glewSearchExtension("GL_PGI_misc_hints", extStart, extEnd); #endif /* GL_PGI_misc_hints */ #ifdef GL_PGI_vertex_hints CONST_CAST(GLEW_PGI_vertex_hints) = _glewSearchExtension("GL_PGI_vertex_hints", extStart, extEnd); #endif /* GL_PGI_vertex_hints */ #ifdef GL_REGAL_error_string CONST_CAST(GLEW_REGAL_error_string) = _glewSearchExtension("GL_REGAL_error_string", extStart, extEnd); if (glewExperimental || GLEW_REGAL_error_string) CONST_CAST(GLEW_REGAL_error_string) = !_glewInit_GL_REGAL_error_string(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_REGAL_error_string */ #ifdef GL_REGAL_extension_query CONST_CAST(GLEW_REGAL_extension_query) = _glewSearchExtension("GL_REGAL_extension_query", extStart, extEnd); if (glewExperimental || GLEW_REGAL_extension_query) CONST_CAST(GLEW_REGAL_extension_query) = !_glewInit_GL_REGAL_extension_query(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_REGAL_extension_query */ #ifdef GL_REGAL_log CONST_CAST(GLEW_REGAL_log) = _glewSearchExtension("GL_REGAL_log", extStart, extEnd); #endif /* GL_REGAL_log */ #ifdef GL_REND_screen_coordinates CONST_CAST(GLEW_REND_screen_coordinates) = _glewSearchExtension("GL_REND_screen_coordinates", extStart, extEnd); #endif /* GL_REND_screen_coordinates */ #ifdef GL_S3_s3tc CONST_CAST(GLEW_S3_s3tc) = _glewSearchExtension("GL_S3_s3tc", extStart, extEnd); #endif /* GL_S3_s3tc */ #ifdef GL_SGIS_color_range CONST_CAST(GLEW_SGIS_color_range) = _glewSearchExtension("GL_SGIS_color_range", extStart, extEnd); #endif /* GL_SGIS_color_range */ #ifdef GL_SGIS_detail_texture CONST_CAST(GLEW_SGIS_detail_texture) = _glewSearchExtension("GL_SGIS_detail_texture", extStart, extEnd); if (glewExperimental || GLEW_SGIS_detail_texture) CONST_CAST(GLEW_SGIS_detail_texture) = !_glewInit_GL_SGIS_detail_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIS_detail_texture */ #ifdef GL_SGIS_fog_function CONST_CAST(GLEW_SGIS_fog_function) = _glewSearchExtension("GL_SGIS_fog_function", extStart, extEnd); if (glewExperimental || GLEW_SGIS_fog_function) CONST_CAST(GLEW_SGIS_fog_function) = !_glewInit_GL_SGIS_fog_function(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIS_fog_function */ #ifdef GL_SGIS_generate_mipmap CONST_CAST(GLEW_SGIS_generate_mipmap) = _glewSearchExtension("GL_SGIS_generate_mipmap", extStart, extEnd); #endif /* GL_SGIS_generate_mipmap */ #ifdef GL_SGIS_multisample CONST_CAST(GLEW_SGIS_multisample) = _glewSearchExtension("GL_SGIS_multisample", extStart, extEnd); if (glewExperimental || GLEW_SGIS_multisample) CONST_CAST(GLEW_SGIS_multisample) = !_glewInit_GL_SGIS_multisample(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIS_multisample */ #ifdef GL_SGIS_pixel_texture CONST_CAST(GLEW_SGIS_pixel_texture) = _glewSearchExtension("GL_SGIS_pixel_texture", extStart, extEnd); #endif /* GL_SGIS_pixel_texture */ #ifdef GL_SGIS_point_line_texgen CONST_CAST(GLEW_SGIS_point_line_texgen) = _glewSearchExtension("GL_SGIS_point_line_texgen", extStart, extEnd); #endif /* GL_SGIS_point_line_texgen */ #ifdef GL_SGIS_sharpen_texture CONST_CAST(GLEW_SGIS_sharpen_texture) = _glewSearchExtension("GL_SGIS_sharpen_texture", extStart, extEnd); if (glewExperimental || GLEW_SGIS_sharpen_texture) CONST_CAST(GLEW_SGIS_sharpen_texture) = !_glewInit_GL_SGIS_sharpen_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIS_sharpen_texture */ #ifdef GL_SGIS_texture4D CONST_CAST(GLEW_SGIS_texture4D) = _glewSearchExtension("GL_SGIS_texture4D", extStart, extEnd); if (glewExperimental || GLEW_SGIS_texture4D) CONST_CAST(GLEW_SGIS_texture4D) = !_glewInit_GL_SGIS_texture4D(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIS_texture4D */ #ifdef GL_SGIS_texture_border_clamp CONST_CAST(GLEW_SGIS_texture_border_clamp) = _glewSearchExtension("GL_SGIS_texture_border_clamp", extStart, extEnd); #endif /* GL_SGIS_texture_border_clamp */ #ifdef GL_SGIS_texture_edge_clamp CONST_CAST(GLEW_SGIS_texture_edge_clamp) = _glewSearchExtension("GL_SGIS_texture_edge_clamp", extStart, extEnd); #endif /* GL_SGIS_texture_edge_clamp */ #ifdef GL_SGIS_texture_filter4 CONST_CAST(GLEW_SGIS_texture_filter4) = _glewSearchExtension("GL_SGIS_texture_filter4", extStart, extEnd); if (glewExperimental || GLEW_SGIS_texture_filter4) CONST_CAST(GLEW_SGIS_texture_filter4) = !_glewInit_GL_SGIS_texture_filter4(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIS_texture_filter4 */ #ifdef GL_SGIS_texture_lod CONST_CAST(GLEW_SGIS_texture_lod) = _glewSearchExtension("GL_SGIS_texture_lod", extStart, extEnd); #endif /* GL_SGIS_texture_lod */ #ifdef GL_SGIS_texture_select CONST_CAST(GLEW_SGIS_texture_select) = _glewSearchExtension("GL_SGIS_texture_select", extStart, extEnd); #endif /* GL_SGIS_texture_select */ #ifdef GL_SGIX_async CONST_CAST(GLEW_SGIX_async) = _glewSearchExtension("GL_SGIX_async", extStart, extEnd); if (glewExperimental || GLEW_SGIX_async) CONST_CAST(GLEW_SGIX_async) = !_glewInit_GL_SGIX_async(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_async */ #ifdef GL_SGIX_async_histogram CONST_CAST(GLEW_SGIX_async_histogram) = _glewSearchExtension("GL_SGIX_async_histogram", extStart, extEnd); #endif /* GL_SGIX_async_histogram */ #ifdef GL_SGIX_async_pixel CONST_CAST(GLEW_SGIX_async_pixel) = _glewSearchExtension("GL_SGIX_async_pixel", extStart, extEnd); #endif /* GL_SGIX_async_pixel */ #ifdef GL_SGIX_blend_alpha_minmax CONST_CAST(GLEW_SGIX_blend_alpha_minmax) = _glewSearchExtension("GL_SGIX_blend_alpha_minmax", extStart, extEnd); #endif /* GL_SGIX_blend_alpha_minmax */ #ifdef GL_SGIX_clipmap CONST_CAST(GLEW_SGIX_clipmap) = _glewSearchExtension("GL_SGIX_clipmap", extStart, extEnd); #endif /* GL_SGIX_clipmap */ #ifdef GL_SGIX_convolution_accuracy CONST_CAST(GLEW_SGIX_convolution_accuracy) = _glewSearchExtension("GL_SGIX_convolution_accuracy", extStart, extEnd); #endif /* GL_SGIX_convolution_accuracy */ #ifdef GL_SGIX_depth_texture CONST_CAST(GLEW_SGIX_depth_texture) = _glewSearchExtension("GL_SGIX_depth_texture", extStart, extEnd); #endif /* GL_SGIX_depth_texture */ #ifdef GL_SGIX_flush_raster CONST_CAST(GLEW_SGIX_flush_raster) = _glewSearchExtension("GL_SGIX_flush_raster", extStart, extEnd); if (glewExperimental || GLEW_SGIX_flush_raster) CONST_CAST(GLEW_SGIX_flush_raster) = !_glewInit_GL_SGIX_flush_raster(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_flush_raster */ #ifdef GL_SGIX_fog_offset CONST_CAST(GLEW_SGIX_fog_offset) = _glewSearchExtension("GL_SGIX_fog_offset", extStart, extEnd); #endif /* GL_SGIX_fog_offset */ #ifdef GL_SGIX_fog_texture CONST_CAST(GLEW_SGIX_fog_texture) = _glewSearchExtension("GL_SGIX_fog_texture", extStart, extEnd); if (glewExperimental || GLEW_SGIX_fog_texture) CONST_CAST(GLEW_SGIX_fog_texture) = !_glewInit_GL_SGIX_fog_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_fog_texture */ #ifdef GL_SGIX_fragment_specular_lighting CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = _glewSearchExtension("GL_SGIX_fragment_specular_lighting", extStart, extEnd); if (glewExperimental || GLEW_SGIX_fragment_specular_lighting) CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = !_glewInit_GL_SGIX_fragment_specular_lighting(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_fragment_specular_lighting */ #ifdef GL_SGIX_framezoom CONST_CAST(GLEW_SGIX_framezoom) = _glewSearchExtension("GL_SGIX_framezoom", extStart, extEnd); if (glewExperimental || GLEW_SGIX_framezoom) CONST_CAST(GLEW_SGIX_framezoom) = !_glewInit_GL_SGIX_framezoom(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_framezoom */ #ifdef GL_SGIX_interlace CONST_CAST(GLEW_SGIX_interlace) = _glewSearchExtension("GL_SGIX_interlace", extStart, extEnd); #endif /* GL_SGIX_interlace */ #ifdef GL_SGIX_ir_instrument1 CONST_CAST(GLEW_SGIX_ir_instrument1) = _glewSearchExtension("GL_SGIX_ir_instrument1", extStart, extEnd); #endif /* GL_SGIX_ir_instrument1 */ #ifdef GL_SGIX_list_priority CONST_CAST(GLEW_SGIX_list_priority) = _glewSearchExtension("GL_SGIX_list_priority", extStart, extEnd); #endif /* GL_SGIX_list_priority */ #ifdef GL_SGIX_pixel_texture CONST_CAST(GLEW_SGIX_pixel_texture) = _glewSearchExtension("GL_SGIX_pixel_texture", extStart, extEnd); if (glewExperimental || GLEW_SGIX_pixel_texture) CONST_CAST(GLEW_SGIX_pixel_texture) = !_glewInit_GL_SGIX_pixel_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_pixel_texture */ #ifdef GL_SGIX_pixel_texture_bits CONST_CAST(GLEW_SGIX_pixel_texture_bits) = _glewSearchExtension("GL_SGIX_pixel_texture_bits", extStart, extEnd); #endif /* GL_SGIX_pixel_texture_bits */ #ifdef GL_SGIX_reference_plane CONST_CAST(GLEW_SGIX_reference_plane) = _glewSearchExtension("GL_SGIX_reference_plane", extStart, extEnd); if (glewExperimental || GLEW_SGIX_reference_plane) CONST_CAST(GLEW_SGIX_reference_plane) = !_glewInit_GL_SGIX_reference_plane(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_reference_plane */ #ifdef GL_SGIX_resample CONST_CAST(GLEW_SGIX_resample) = _glewSearchExtension("GL_SGIX_resample", extStart, extEnd); #endif /* GL_SGIX_resample */ #ifdef GL_SGIX_shadow CONST_CAST(GLEW_SGIX_shadow) = _glewSearchExtension("GL_SGIX_shadow", extStart, extEnd); #endif /* GL_SGIX_shadow */ #ifdef GL_SGIX_shadow_ambient CONST_CAST(GLEW_SGIX_shadow_ambient) = _glewSearchExtension("GL_SGIX_shadow_ambient", extStart, extEnd); #endif /* GL_SGIX_shadow_ambient */ #ifdef GL_SGIX_sprite CONST_CAST(GLEW_SGIX_sprite) = _glewSearchExtension("GL_SGIX_sprite", extStart, extEnd); if (glewExperimental || GLEW_SGIX_sprite) CONST_CAST(GLEW_SGIX_sprite) = !_glewInit_GL_SGIX_sprite(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_sprite */ #ifdef GL_SGIX_tag_sample_buffer CONST_CAST(GLEW_SGIX_tag_sample_buffer) = _glewSearchExtension("GL_SGIX_tag_sample_buffer", extStart, extEnd); if (glewExperimental || GLEW_SGIX_tag_sample_buffer) CONST_CAST(GLEW_SGIX_tag_sample_buffer) = !_glewInit_GL_SGIX_tag_sample_buffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGIX_tag_sample_buffer */ #ifdef GL_SGIX_texture_add_env CONST_CAST(GLEW_SGIX_texture_add_env) = _glewSearchExtension("GL_SGIX_texture_add_env", extStart, extEnd); #endif /* GL_SGIX_texture_add_env */ #ifdef GL_SGIX_texture_coordinate_clamp CONST_CAST(GLEW_SGIX_texture_coordinate_clamp) = _glewSearchExtension("GL_SGIX_texture_coordinate_clamp", extStart, extEnd); #endif /* GL_SGIX_texture_coordinate_clamp */ #ifdef GL_SGIX_texture_lod_bias CONST_CAST(GLEW_SGIX_texture_lod_bias) = _glewSearchExtension("GL_SGIX_texture_lod_bias", extStart, extEnd); #endif /* GL_SGIX_texture_lod_bias */ #ifdef GL_SGIX_texture_multi_buffer CONST_CAST(GLEW_SGIX_texture_multi_buffer) = _glewSearchExtension("GL_SGIX_texture_multi_buffer", extStart, extEnd); #endif /* GL_SGIX_texture_multi_buffer */ #ifdef GL_SGIX_texture_range CONST_CAST(GLEW_SGIX_texture_range) = _glewSearchExtension("GL_SGIX_texture_range", extStart, extEnd); #endif /* GL_SGIX_texture_range */ #ifdef GL_SGIX_texture_scale_bias CONST_CAST(GLEW_SGIX_texture_scale_bias) = _glewSearchExtension("GL_SGIX_texture_scale_bias", extStart, extEnd); #endif /* GL_SGIX_texture_scale_bias */ #ifdef GL_SGIX_vertex_preclip CONST_CAST(GLEW_SGIX_vertex_preclip) = _glewSearchExtension("GL_SGIX_vertex_preclip", extStart, extEnd); #endif /* GL_SGIX_vertex_preclip */ #ifdef GL_SGIX_vertex_preclip_hint CONST_CAST(GLEW_SGIX_vertex_preclip_hint) = _glewSearchExtension("GL_SGIX_vertex_preclip_hint", extStart, extEnd); #endif /* GL_SGIX_vertex_preclip_hint */ #ifdef GL_SGIX_ycrcb CONST_CAST(GLEW_SGIX_ycrcb) = _glewSearchExtension("GL_SGIX_ycrcb", extStart, extEnd); #endif /* GL_SGIX_ycrcb */ #ifdef GL_SGI_color_matrix CONST_CAST(GLEW_SGI_color_matrix) = _glewSearchExtension("GL_SGI_color_matrix", extStart, extEnd); #endif /* GL_SGI_color_matrix */ #ifdef GL_SGI_color_table CONST_CAST(GLEW_SGI_color_table) = _glewSearchExtension("GL_SGI_color_table", extStart, extEnd); if (glewExperimental || GLEW_SGI_color_table) CONST_CAST(GLEW_SGI_color_table) = !_glewInit_GL_SGI_color_table(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SGI_color_table */ #ifdef GL_SGI_texture_color_table CONST_CAST(GLEW_SGI_texture_color_table) = _glewSearchExtension("GL_SGI_texture_color_table", extStart, extEnd); #endif /* GL_SGI_texture_color_table */ #ifdef GL_SUNX_constant_data CONST_CAST(GLEW_SUNX_constant_data) = _glewSearchExtension("GL_SUNX_constant_data", extStart, extEnd); if (glewExperimental || GLEW_SUNX_constant_data) CONST_CAST(GLEW_SUNX_constant_data) = !_glewInit_GL_SUNX_constant_data(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SUNX_constant_data */ #ifdef GL_SUN_convolution_border_modes CONST_CAST(GLEW_SUN_convolution_border_modes) = _glewSearchExtension("GL_SUN_convolution_border_modes", extStart, extEnd); #endif /* GL_SUN_convolution_border_modes */ #ifdef GL_SUN_global_alpha CONST_CAST(GLEW_SUN_global_alpha) = _glewSearchExtension("GL_SUN_global_alpha", extStart, extEnd); if (glewExperimental || GLEW_SUN_global_alpha) CONST_CAST(GLEW_SUN_global_alpha) = !_glewInit_GL_SUN_global_alpha(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SUN_global_alpha */ #ifdef GL_SUN_mesh_array CONST_CAST(GLEW_SUN_mesh_array) = _glewSearchExtension("GL_SUN_mesh_array", extStart, extEnd); #endif /* GL_SUN_mesh_array */ #ifdef GL_SUN_read_video_pixels CONST_CAST(GLEW_SUN_read_video_pixels) = _glewSearchExtension("GL_SUN_read_video_pixels", extStart, extEnd); if (glewExperimental || GLEW_SUN_read_video_pixels) CONST_CAST(GLEW_SUN_read_video_pixels) = !_glewInit_GL_SUN_read_video_pixels(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SUN_read_video_pixels */ #ifdef GL_SUN_slice_accum CONST_CAST(GLEW_SUN_slice_accum) = _glewSearchExtension("GL_SUN_slice_accum", extStart, extEnd); #endif /* GL_SUN_slice_accum */ #ifdef GL_SUN_triangle_list CONST_CAST(GLEW_SUN_triangle_list) = _glewSearchExtension("GL_SUN_triangle_list", extStart, extEnd); if (glewExperimental || GLEW_SUN_triangle_list) CONST_CAST(GLEW_SUN_triangle_list) = !_glewInit_GL_SUN_triangle_list(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SUN_triangle_list */ #ifdef GL_SUN_vertex CONST_CAST(GLEW_SUN_vertex) = _glewSearchExtension("GL_SUN_vertex", extStart, extEnd); if (glewExperimental || GLEW_SUN_vertex) CONST_CAST(GLEW_SUN_vertex) = !_glewInit_GL_SUN_vertex(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_SUN_vertex */ #ifdef GL_WIN_phong_shading CONST_CAST(GLEW_WIN_phong_shading) = _glewSearchExtension("GL_WIN_phong_shading", extStart, extEnd); #endif /* GL_WIN_phong_shading */ #ifdef GL_WIN_specular_fog CONST_CAST(GLEW_WIN_specular_fog) = _glewSearchExtension("GL_WIN_specular_fog", extStart, extEnd); #endif /* GL_WIN_specular_fog */ #ifdef GL_WIN_swap_hint CONST_CAST(GLEW_WIN_swap_hint) = _glewSearchExtension("GL_WIN_swap_hint", extStart, extEnd); if (glewExperimental || GLEW_WIN_swap_hint) CONST_CAST(GLEW_WIN_swap_hint) = !_glewInit_GL_WIN_swap_hint(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GL_WIN_swap_hint */ return GLEW_OK; } #if defined(_WIN32) #if !defined(GLEW_MX) PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL; PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC __wglewBlitContextFramebufferAMD = NULL; PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC __wglewCreateAssociatedContextAMD = NULL; PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __wglewCreateAssociatedContextAttribsAMD = NULL; PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC __wglewDeleteAssociatedContextAMD = NULL; PFNWGLGETCONTEXTGPUIDAMDPROC __wglewGetContextGPUIDAMD = NULL; PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC __wglewGetCurrentAssociatedContextAMD = NULL; PFNWGLGETGPUIDSAMDPROC __wglewGetGPUIDsAMD = NULL; PFNWGLGETGPUINFOAMDPROC __wglewGetGPUInfoAMD = NULL; PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __wglewMakeAssociatedContextCurrentAMD = NULL; PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB = NULL; PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB = NULL; PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB = NULL; PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB = NULL; PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB = NULL; PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB = NULL; PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB = NULL; PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB = NULL; PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB = NULL; PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB = NULL; PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB = NULL; PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB = NULL; PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB = NULL; PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB = NULL; PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB = NULL; PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB = NULL; PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB = NULL; PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB = NULL; PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB = NULL; PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT = NULL; PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT = NULL; PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT = NULL; PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT = NULL; PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT = NULL; PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT = NULL; PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT = NULL; PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT = NULL; PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT = NULL; PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT = NULL; PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT = NULL; PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT = NULL; PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT = NULL; PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT = NULL; PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT = NULL; PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT = NULL; PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT = NULL; PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D = NULL; PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D = NULL; PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D = NULL; PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D = NULL; PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D = NULL; PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D = NULL; PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D = NULL; PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D = NULL; PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D = NULL; PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D = NULL; PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D = NULL; PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D = NULL; PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D = NULL; PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D = NULL; PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D = NULL; PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D = NULL; PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D = NULL; PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D = NULL; PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D = NULL; PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D = NULL; PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D = NULL; PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D = NULL; PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D = NULL; PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D = NULL; PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D = NULL; PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D = NULL; PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D = NULL; PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D = NULL; PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D = NULL; PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D = NULL; PFNWGLDXCLOSEDEVICENVPROC __wglewDXCloseDeviceNV = NULL; PFNWGLDXLOCKOBJECTSNVPROC __wglewDXLockObjectsNV = NULL; PFNWGLDXOBJECTACCESSNVPROC __wglewDXObjectAccessNV = NULL; PFNWGLDXOPENDEVICENVPROC __wglewDXOpenDeviceNV = NULL; PFNWGLDXREGISTEROBJECTNVPROC __wglewDXRegisterObjectNV = NULL; PFNWGLDXSETRESOURCESHAREHANDLENVPROC __wglewDXSetResourceShareHandleNV = NULL; PFNWGLDXUNLOCKOBJECTSNVPROC __wglewDXUnlockObjectsNV = NULL; PFNWGLDXUNREGISTEROBJECTNVPROC __wglewDXUnregisterObjectNV = NULL; PFNWGLCOPYIMAGESUBDATANVPROC __wglewCopyImageSubDataNV = NULL; PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV = NULL; PFNWGLDELETEDCNVPROC __wglewDeleteDCNV = NULL; PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV = NULL; PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV = NULL; PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV = NULL; PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV = NULL; PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV = NULL; PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV = NULL; PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV = NULL; PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV = NULL; PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV = NULL; PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV = NULL; PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV = NULL; PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV = NULL; PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV = NULL; PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV = NULL; PFNWGLBINDVIDEOCAPTUREDEVICENVPROC __wglewBindVideoCaptureDeviceNV = NULL; PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC __wglewEnumerateVideoCaptureDevicesNV = NULL; PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC __wglewLockVideoCaptureDeviceNV = NULL; PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC __wglewQueryVideoCaptureDeviceNV = NULL; PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC __wglewReleaseVideoCaptureDeviceNV = NULL; PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV = NULL; PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV = NULL; PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV = NULL; PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV = NULL; PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV = NULL; PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV = NULL; PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML = NULL; PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML = NULL; PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML = NULL; PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML = NULL; PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML = NULL; PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML = NULL; GLboolean __WGLEW_3DFX_multisample = GL_FALSE; GLboolean __WGLEW_3DL_stereo_control = GL_FALSE; GLboolean __WGLEW_AMD_gpu_association = GL_FALSE; GLboolean __WGLEW_ARB_buffer_region = GL_FALSE; GLboolean __WGLEW_ARB_create_context = GL_FALSE; GLboolean __WGLEW_ARB_create_context_profile = GL_FALSE; GLboolean __WGLEW_ARB_create_context_robustness = GL_FALSE; GLboolean __WGLEW_ARB_extensions_string = GL_FALSE; GLboolean __WGLEW_ARB_framebuffer_sRGB = GL_FALSE; GLboolean __WGLEW_ARB_make_current_read = GL_FALSE; GLboolean __WGLEW_ARB_multisample = GL_FALSE; GLboolean __WGLEW_ARB_pbuffer = GL_FALSE; GLboolean __WGLEW_ARB_pixel_format = GL_FALSE; GLboolean __WGLEW_ARB_pixel_format_float = GL_FALSE; GLboolean __WGLEW_ARB_render_texture = GL_FALSE; GLboolean __WGLEW_ATI_pixel_format_float = GL_FALSE; GLboolean __WGLEW_ATI_render_texture_rectangle = GL_FALSE; GLboolean __WGLEW_EXT_create_context_es2_profile = GL_FALSE; GLboolean __WGLEW_EXT_create_context_es_profile = GL_FALSE; GLboolean __WGLEW_EXT_depth_float = GL_FALSE; GLboolean __WGLEW_EXT_display_color_table = GL_FALSE; GLboolean __WGLEW_EXT_extensions_string = GL_FALSE; GLboolean __WGLEW_EXT_framebuffer_sRGB = GL_FALSE; GLboolean __WGLEW_EXT_make_current_read = GL_FALSE; GLboolean __WGLEW_EXT_multisample = GL_FALSE; GLboolean __WGLEW_EXT_pbuffer = GL_FALSE; GLboolean __WGLEW_EXT_pixel_format = GL_FALSE; GLboolean __WGLEW_EXT_pixel_format_packed_float = GL_FALSE; GLboolean __WGLEW_EXT_swap_control = GL_FALSE; GLboolean __WGLEW_EXT_swap_control_tear = GL_FALSE; GLboolean __WGLEW_I3D_digital_video_control = GL_FALSE; GLboolean __WGLEW_I3D_gamma = GL_FALSE; GLboolean __WGLEW_I3D_genlock = GL_FALSE; GLboolean __WGLEW_I3D_image_buffer = GL_FALSE; GLboolean __WGLEW_I3D_swap_frame_lock = GL_FALSE; GLboolean __WGLEW_I3D_swap_frame_usage = GL_FALSE; GLboolean __WGLEW_NV_DX_interop = GL_FALSE; GLboolean __WGLEW_NV_DX_interop2 = GL_FALSE; GLboolean __WGLEW_NV_copy_image = GL_FALSE; GLboolean __WGLEW_NV_float_buffer = GL_FALSE; GLboolean __WGLEW_NV_gpu_affinity = GL_FALSE; GLboolean __WGLEW_NV_multisample_coverage = GL_FALSE; GLboolean __WGLEW_NV_present_video = GL_FALSE; GLboolean __WGLEW_NV_render_depth_texture = GL_FALSE; GLboolean __WGLEW_NV_render_texture_rectangle = GL_FALSE; GLboolean __WGLEW_NV_swap_group = GL_FALSE; GLboolean __WGLEW_NV_vertex_array_range = GL_FALSE; GLboolean __WGLEW_NV_video_capture = GL_FALSE; GLboolean __WGLEW_NV_video_output = GL_FALSE; GLboolean __WGLEW_OML_sync_control = GL_FALSE; #endif /* !GLEW_MX */ #ifdef WGL_3DFX_multisample #endif /* WGL_3DFX_multisample */ #ifdef WGL_3DL_stereo_control static GLboolean _glewInit_WGL_3DL_stereo_control (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglSetStereoEmitterState3DL = (PFNWGLSETSTEREOEMITTERSTATE3DLPROC)glewGetProcAddress((const GLubyte*)"wglSetStereoEmitterState3DL")) == NULL) || r; return r; } #endif /* WGL_3DL_stereo_control */ #ifdef WGL_AMD_gpu_association static GLboolean _glewInit_WGL_AMD_gpu_association (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBlitContextFramebufferAMD = (PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)glewGetProcAddress((const GLubyte*)"wglBlitContextFramebufferAMD")) == NULL) || r; r = ((wglCreateAssociatedContextAMD = (PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglCreateAssociatedContextAMD")) == NULL) || r; r = ((wglCreateAssociatedContextAttribsAMD = (PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)glewGetProcAddress((const GLubyte*)"wglCreateAssociatedContextAttribsAMD")) == NULL) || r; r = ((wglDeleteAssociatedContextAMD = (PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglDeleteAssociatedContextAMD")) == NULL) || r; r = ((wglGetContextGPUIDAMD = (PFNWGLGETCONTEXTGPUIDAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetContextGPUIDAMD")) == NULL) || r; r = ((wglGetCurrentAssociatedContextAMD = (PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentAssociatedContextAMD")) == NULL) || r; r = ((wglGetGPUIDsAMD = (PFNWGLGETGPUIDSAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetGPUIDsAMD")) == NULL) || r; r = ((wglGetGPUInfoAMD = (PFNWGLGETGPUINFOAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetGPUInfoAMD")) == NULL) || r; r = ((wglMakeAssociatedContextCurrentAMD = (PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)glewGetProcAddress((const GLubyte*)"wglMakeAssociatedContextCurrentAMD")) == NULL) || r; return r; } #endif /* WGL_AMD_gpu_association */ #ifdef WGL_ARB_buffer_region static GLboolean _glewInit_WGL_ARB_buffer_region (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglCreateBufferRegionARB = (PFNWGLCREATEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateBufferRegionARB")) == NULL) || r; r = ((wglDeleteBufferRegionARB = (PFNWGLDELETEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglDeleteBufferRegionARB")) == NULL) || r; r = ((wglRestoreBufferRegionARB = (PFNWGLRESTOREBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglRestoreBufferRegionARB")) == NULL) || r; r = ((wglSaveBufferRegionARB = (PFNWGLSAVEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglSaveBufferRegionARB")) == NULL) || r; return r; } #endif /* WGL_ARB_buffer_region */ #ifdef WGL_ARB_create_context static GLboolean _glewInit_WGL_ARB_create_context (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateContextAttribsARB")) == NULL) || r; return r; } #endif /* WGL_ARB_create_context */ #ifdef WGL_ARB_create_context_profile #endif /* WGL_ARB_create_context_profile */ #ifdef WGL_ARB_create_context_robustness #endif /* WGL_ARB_create_context_robustness */ #ifdef WGL_ARB_extensions_string static GLboolean _glewInit_WGL_ARB_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB")) == NULL) || r; return r; } #endif /* WGL_ARB_extensions_string */ #ifdef WGL_ARB_framebuffer_sRGB #endif /* WGL_ARB_framebuffer_sRGB */ #ifdef WGL_ARB_make_current_read static GLboolean _glewInit_WGL_ARB_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetCurrentReadDCARB = (PFNWGLGETCURRENTREADDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCARB")) == NULL) || r; r = ((wglMakeContextCurrentARB = (PFNWGLMAKECONTEXTCURRENTARBPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentARB")) == NULL) || r; return r; } #endif /* WGL_ARB_make_current_read */ #ifdef WGL_ARB_multisample #endif /* WGL_ARB_multisample */ #ifdef WGL_ARB_pbuffer static GLboolean _glewInit_WGL_ARB_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglCreatePbufferARB = (PFNWGLCREATEPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferARB")) == NULL) || r; r = ((wglDestroyPbufferARB = (PFNWGLDESTROYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferARB")) == NULL) || r; r = ((wglGetPbufferDCARB = (PFNWGLGETPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCARB")) == NULL) || r; r = ((wglQueryPbufferARB = (PFNWGLQUERYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferARB")) == NULL) || r; r = ((wglReleasePbufferDCARB = (PFNWGLRELEASEPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCARB")) == NULL) || r; return r; } #endif /* WGL_ARB_pbuffer */ #ifdef WGL_ARB_pixel_format static GLboolean _glewInit_WGL_ARB_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatARB")) == NULL) || r; r = ((wglGetPixelFormatAttribfvARB = (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvARB")) == NULL) || r; r = ((wglGetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivARB")) == NULL) || r; return r; } #endif /* WGL_ARB_pixel_format */ #ifdef WGL_ARB_pixel_format_float #endif /* WGL_ARB_pixel_format_float */ #ifdef WGL_ARB_render_texture static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglBindTexImageARB")) == NULL) || r; r = ((wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglReleaseTexImageARB")) == NULL) || r; r = ((wglSetPbufferAttribARB = (PFNWGLSETPBUFFERATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"wglSetPbufferAttribARB")) == NULL) || r; return r; } #endif /* WGL_ARB_render_texture */ #ifdef WGL_ATI_pixel_format_float #endif /* WGL_ATI_pixel_format_float */ #ifdef WGL_ATI_render_texture_rectangle #endif /* WGL_ATI_render_texture_rectangle */ #ifdef WGL_EXT_create_context_es2_profile #endif /* WGL_EXT_create_context_es2_profile */ #ifdef WGL_EXT_create_context_es_profile #endif /* WGL_EXT_create_context_es_profile */ #ifdef WGL_EXT_depth_float #endif /* WGL_EXT_depth_float */ #ifdef WGL_EXT_display_color_table static GLboolean _glewInit_WGL_EXT_display_color_table (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBindDisplayColorTableEXT = (PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglBindDisplayColorTableEXT")) == NULL) || r; r = ((wglCreateDisplayColorTableEXT = (PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglCreateDisplayColorTableEXT")) == NULL) || r; r = ((wglDestroyDisplayColorTableEXT = (PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyDisplayColorTableEXT")) == NULL) || r; r = ((wglLoadDisplayColorTableEXT = (PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglLoadDisplayColorTableEXT")) == NULL) || r; return r; } #endif /* WGL_EXT_display_color_table */ #ifdef WGL_EXT_extensions_string static GLboolean _glewInit_WGL_EXT_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT")) == NULL) || r; return r; } #endif /* WGL_EXT_extensions_string */ #ifdef WGL_EXT_framebuffer_sRGB #endif /* WGL_EXT_framebuffer_sRGB */ #ifdef WGL_EXT_make_current_read static GLboolean _glewInit_WGL_EXT_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetCurrentReadDCEXT = (PFNWGLGETCURRENTREADDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCEXT")) == NULL) || r; r = ((wglMakeContextCurrentEXT = (PFNWGLMAKECONTEXTCURRENTEXTPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentEXT")) == NULL) || r; return r; } #endif /* WGL_EXT_make_current_read */ #ifdef WGL_EXT_multisample #endif /* WGL_EXT_multisample */ #ifdef WGL_EXT_pbuffer static GLboolean _glewInit_WGL_EXT_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglCreatePbufferEXT = (PFNWGLCREATEPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferEXT")) == NULL) || r; r = ((wglDestroyPbufferEXT = (PFNWGLDESTROYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferEXT")) == NULL) || r; r = ((wglGetPbufferDCEXT = (PFNWGLGETPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCEXT")) == NULL) || r; r = ((wglQueryPbufferEXT = (PFNWGLQUERYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferEXT")) == NULL) || r; r = ((wglReleasePbufferDCEXT = (PFNWGLRELEASEPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCEXT")) == NULL) || r; return r; } #endif /* WGL_EXT_pbuffer */ #ifdef WGL_EXT_pixel_format static GLboolean _glewInit_WGL_EXT_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglChoosePixelFormatEXT = (PFNWGLCHOOSEPIXELFORMATEXTPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatEXT")) == NULL) || r; r = ((wglGetPixelFormatAttribfvEXT = (PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvEXT")) == NULL) || r; r = ((wglGetPixelFormatAttribivEXT = (PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivEXT")) == NULL) || r; return r; } #endif /* WGL_EXT_pixel_format */ #ifdef WGL_EXT_pixel_format_packed_float #endif /* WGL_EXT_pixel_format_packed_float */ #ifdef WGL_EXT_swap_control static GLboolean _glewInit_WGL_EXT_swap_control (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetSwapIntervalEXT")) == NULL) || r; r = ((wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglSwapIntervalEXT")) == NULL) || r; return r; } #endif /* WGL_EXT_swap_control */ #ifdef WGL_EXT_swap_control_tear #endif /* WGL_EXT_swap_control_tear */ #ifdef WGL_I3D_digital_video_control static GLboolean _glewInit_WGL_I3D_digital_video_control (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetDigitalVideoParametersI3D = (PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetDigitalVideoParametersI3D")) == NULL) || r; r = ((wglSetDigitalVideoParametersI3D = (PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetDigitalVideoParametersI3D")) == NULL) || r; return r; } #endif /* WGL_I3D_digital_video_control */ #ifdef WGL_I3D_gamma static GLboolean _glewInit_WGL_I3D_gamma (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetGammaTableI3D = (PFNWGLGETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableI3D")) == NULL) || r; r = ((wglGetGammaTableParametersI3D = (PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableParametersI3D")) == NULL) || r; r = ((wglSetGammaTableI3D = (PFNWGLSETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableI3D")) == NULL) || r; r = ((wglSetGammaTableParametersI3D = (PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableParametersI3D")) == NULL) || r; return r; } #endif /* WGL_I3D_gamma */ #ifdef WGL_I3D_genlock static GLboolean _glewInit_WGL_I3D_genlock (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglDisableGenlockI3D = (PFNWGLDISABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableGenlockI3D")) == NULL) || r; r = ((wglEnableGenlockI3D = (PFNWGLENABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableGenlockI3D")) == NULL) || r; r = ((wglGenlockSampleRateI3D = (PFNWGLGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSampleRateI3D")) == NULL) || r; r = ((wglGenlockSourceDelayI3D = (PFNWGLGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceDelayI3D")) == NULL) || r; r = ((wglGenlockSourceEdgeI3D = (PFNWGLGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceEdgeI3D")) == NULL) || r; r = ((wglGenlockSourceI3D = (PFNWGLGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceI3D")) == NULL) || r; r = ((wglGetGenlockSampleRateI3D = (PFNWGLGETGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSampleRateI3D")) == NULL) || r; r = ((wglGetGenlockSourceDelayI3D = (PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceDelayI3D")) == NULL) || r; r = ((wglGetGenlockSourceEdgeI3D = (PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceEdgeI3D")) == NULL) || r; r = ((wglGetGenlockSourceI3D = (PFNWGLGETGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceI3D")) == NULL) || r; r = ((wglIsEnabledGenlockI3D = (PFNWGLISENABLEDGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledGenlockI3D")) == NULL) || r; r = ((wglQueryGenlockMaxSourceDelayI3D = (PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryGenlockMaxSourceDelayI3D")) == NULL) || r; return r; } #endif /* WGL_I3D_genlock */ #ifdef WGL_I3D_image_buffer static GLboolean _glewInit_WGL_I3D_image_buffer (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglAssociateImageBufferEventsI3D = (PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglAssociateImageBufferEventsI3D")) == NULL) || r; r = ((wglCreateImageBufferI3D = (PFNWGLCREATEIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglCreateImageBufferI3D")) == NULL) || r; r = ((wglDestroyImageBufferI3D = (PFNWGLDESTROYIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglDestroyImageBufferI3D")) == NULL) || r; r = ((wglReleaseImageBufferEventsI3D = (PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglReleaseImageBufferEventsI3D")) == NULL) || r; return r; } #endif /* WGL_I3D_image_buffer */ #ifdef WGL_I3D_swap_frame_lock static GLboolean _glewInit_WGL_I3D_swap_frame_lock (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglDisableFrameLockI3D = (PFNWGLDISABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableFrameLockI3D")) == NULL) || r; r = ((wglEnableFrameLockI3D = (PFNWGLENABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableFrameLockI3D")) == NULL) || r; r = ((wglIsEnabledFrameLockI3D = (PFNWGLISENABLEDFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledFrameLockI3D")) == NULL) || r; r = ((wglQueryFrameLockMasterI3D = (PFNWGLQUERYFRAMELOCKMASTERI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameLockMasterI3D")) == NULL) || r; return r; } #endif /* WGL_I3D_swap_frame_lock */ #ifdef WGL_I3D_swap_frame_usage static GLboolean _glewInit_WGL_I3D_swap_frame_usage (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBeginFrameTrackingI3D = (PFNWGLBEGINFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglBeginFrameTrackingI3D")) == NULL) || r; r = ((wglEndFrameTrackingI3D = (PFNWGLENDFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglEndFrameTrackingI3D")) == NULL) || r; r = ((wglGetFrameUsageI3D = (PFNWGLGETFRAMEUSAGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetFrameUsageI3D")) == NULL) || r; r = ((wglQueryFrameTrackingI3D = (PFNWGLQUERYFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameTrackingI3D")) == NULL) || r; return r; } #endif /* WGL_I3D_swap_frame_usage */ #ifdef WGL_NV_DX_interop static GLboolean _glewInit_WGL_NV_DX_interop (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglDXCloseDeviceNV = (PFNWGLDXCLOSEDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglDXCloseDeviceNV")) == NULL) || r; r = ((wglDXLockObjectsNV = (PFNWGLDXLOCKOBJECTSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXLockObjectsNV")) == NULL) || r; r = ((wglDXObjectAccessNV = (PFNWGLDXOBJECTACCESSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXObjectAccessNV")) == NULL) || r; r = ((wglDXOpenDeviceNV = (PFNWGLDXOPENDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglDXOpenDeviceNV")) == NULL) || r; r = ((wglDXRegisterObjectNV = (PFNWGLDXREGISTEROBJECTNVPROC)glewGetProcAddress((const GLubyte*)"wglDXRegisterObjectNV")) == NULL) || r; r = ((wglDXSetResourceShareHandleNV = (PFNWGLDXSETRESOURCESHAREHANDLENVPROC)glewGetProcAddress((const GLubyte*)"wglDXSetResourceShareHandleNV")) == NULL) || r; r = ((wglDXUnlockObjectsNV = (PFNWGLDXUNLOCKOBJECTSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXUnlockObjectsNV")) == NULL) || r; r = ((wglDXUnregisterObjectNV = (PFNWGLDXUNREGISTEROBJECTNVPROC)glewGetProcAddress((const GLubyte*)"wglDXUnregisterObjectNV")) == NULL) || r; return r; } #endif /* WGL_NV_DX_interop */ #ifdef WGL_NV_DX_interop2 #endif /* WGL_NV_DX_interop2 */ #ifdef WGL_NV_copy_image static GLboolean _glewInit_WGL_NV_copy_image (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglCopyImageSubDataNV = (PFNWGLCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"wglCopyImageSubDataNV")) == NULL) || r; return r; } #endif /* WGL_NV_copy_image */ #ifdef WGL_NV_float_buffer #endif /* WGL_NV_float_buffer */ #ifdef WGL_NV_gpu_affinity static GLboolean _glewInit_WGL_NV_gpu_affinity (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglCreateAffinityDCNV = (PFNWGLCREATEAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglCreateAffinityDCNV")) == NULL) || r; r = ((wglDeleteDCNV = (PFNWGLDELETEDCNVPROC)glewGetProcAddress((const GLubyte*)"wglDeleteDCNV")) == NULL) || r; r = ((wglEnumGpuDevicesNV = (PFNWGLENUMGPUDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpuDevicesNV")) == NULL) || r; r = ((wglEnumGpusFromAffinityDCNV = (PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusFromAffinityDCNV")) == NULL) || r; r = ((wglEnumGpusNV = (PFNWGLENUMGPUSNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusNV")) == NULL) || r; return r; } #endif /* WGL_NV_gpu_affinity */ #ifdef WGL_NV_multisample_coverage #endif /* WGL_NV_multisample_coverage */ #ifdef WGL_NV_present_video static GLboolean _glewInit_WGL_NV_present_video (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBindVideoDeviceNV = (PFNWGLBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoDeviceNV")) == NULL) || r; r = ((wglEnumerateVideoDevicesNV = (PFNWGLENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumerateVideoDevicesNV")) == NULL) || r; r = ((wglQueryCurrentContextNV = (PFNWGLQUERYCURRENTCONTEXTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryCurrentContextNV")) == NULL) || r; return r; } #endif /* WGL_NV_present_video */ #ifdef WGL_NV_render_depth_texture #endif /* WGL_NV_render_depth_texture */ #ifdef WGL_NV_render_texture_rectangle #endif /* WGL_NV_render_texture_rectangle */ #ifdef WGL_NV_swap_group static GLboolean _glewInit_WGL_NV_swap_group (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBindSwapBarrierNV = (PFNWGLBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"wglBindSwapBarrierNV")) == NULL) || r; r = ((wglJoinSwapGroupNV = (PFNWGLJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglJoinSwapGroupNV")) == NULL) || r; r = ((wglQueryFrameCountNV = (PFNWGLQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameCountNV")) == NULL) || r; r = ((wglQueryMaxSwapGroupsNV = (PFNWGLQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryMaxSwapGroupsNV")) == NULL) || r; r = ((wglQuerySwapGroupNV = (PFNWGLQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglQuerySwapGroupNV")) == NULL) || r; r = ((wglResetFrameCountNV = (PFNWGLRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglResetFrameCountNV")) == NULL) || r; return r; } #endif /* WGL_NV_swap_group */ #ifdef WGL_NV_vertex_array_range static GLboolean _glewInit_WGL_NV_vertex_array_range (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglAllocateMemoryNV = (PFNWGLALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglAllocateMemoryNV")) == NULL) || r; r = ((wglFreeMemoryNV = (PFNWGLFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglFreeMemoryNV")) == NULL) || r; return r; } #endif /* WGL_NV_vertex_array_range */ #ifdef WGL_NV_video_capture static GLboolean _glewInit_WGL_NV_video_capture (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBindVideoCaptureDeviceNV = (PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoCaptureDeviceNV")) == NULL) || r; r = ((wglEnumerateVideoCaptureDevicesNV = (PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumerateVideoCaptureDevicesNV")) == NULL) || r; r = ((wglLockVideoCaptureDeviceNV = (PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglLockVideoCaptureDeviceNV")) == NULL) || r; r = ((wglQueryVideoCaptureDeviceNV = (PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglQueryVideoCaptureDeviceNV")) == NULL) || r; r = ((wglReleaseVideoCaptureDeviceNV = (PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoCaptureDeviceNV")) == NULL) || r; return r; } #endif /* WGL_NV_video_capture */ #ifdef WGL_NV_video_output static GLboolean _glewInit_WGL_NV_video_output (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglBindVideoImageNV = (PFNWGLBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoImageNV")) == NULL) || r; r = ((wglGetVideoDeviceNV = (PFNWGLGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoDeviceNV")) == NULL) || r; r = ((wglGetVideoInfoNV = (PFNWGLGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoInfoNV")) == NULL) || r; r = ((wglReleaseVideoDeviceNV = (PFNWGLRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoDeviceNV")) == NULL) || r; r = ((wglReleaseVideoImageNV = (PFNWGLRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoImageNV")) == NULL) || r; r = ((wglSendPbufferToVideoNV = (PFNWGLSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"wglSendPbufferToVideoNV")) == NULL) || r; return r; } #endif /* WGL_NV_video_output */ #ifdef WGL_OML_sync_control static GLboolean _glewInit_WGL_OML_sync_control (WGLEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((wglGetMscRateOML = (PFNWGLGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetMscRateOML")) == NULL) || r; r = ((wglGetSyncValuesOML = (PFNWGLGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetSyncValuesOML")) == NULL) || r; r = ((wglSwapBuffersMscOML = (PFNWGLSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapBuffersMscOML")) == NULL) || r; r = ((wglSwapLayerBuffersMscOML = (PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapLayerBuffersMscOML")) == NULL) || r; r = ((wglWaitForMscOML = (PFNWGLWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForMscOML")) == NULL) || r; r = ((wglWaitForSbcOML = (PFNWGLWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForSbcOML")) == NULL) || r; return r; } #endif /* WGL_OML_sync_control */ /* ------------------------------------------------------------------------- */ static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; GLboolean GLEWAPIENTRY wglewGetExtension (const char* name) { const GLubyte* start; const GLubyte* end; if (_wglewGetExtensionsStringARB == NULL) if (_wglewGetExtensionsStringEXT == NULL) return GL_FALSE; else start = (const GLubyte*)_wglewGetExtensionsStringEXT(); else start = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); if (start == 0) return GL_FALSE; end = start + _glewStrLen(start); return _glewSearchExtension(name, start, end); } GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) { GLboolean crippled; const GLubyte* extStart; const GLubyte* extEnd; /* find wgl extension string query functions */ _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); /* query wgl extension string */ if (_wglewGetExtensionsStringARB == NULL) if (_wglewGetExtensionsStringEXT == NULL) extStart = (const GLubyte*)""; else extStart = (const GLubyte*)_wglewGetExtensionsStringEXT(); else extStart = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); extEnd = extStart + _glewStrLen(extStart); /* initialize extensions */ crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; #ifdef WGL_3DFX_multisample CONST_CAST(WGLEW_3DFX_multisample) = _glewSearchExtension("WGL_3DFX_multisample", extStart, extEnd); #endif /* WGL_3DFX_multisample */ #ifdef WGL_3DL_stereo_control CONST_CAST(WGLEW_3DL_stereo_control) = _glewSearchExtension("WGL_3DL_stereo_control", extStart, extEnd); if (glewExperimental || WGLEW_3DL_stereo_control|| crippled) CONST_CAST(WGLEW_3DL_stereo_control)= !_glewInit_WGL_3DL_stereo_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_3DL_stereo_control */ #ifdef WGL_AMD_gpu_association CONST_CAST(WGLEW_AMD_gpu_association) = _glewSearchExtension("WGL_AMD_gpu_association", extStart, extEnd); if (glewExperimental || WGLEW_AMD_gpu_association|| crippled) CONST_CAST(WGLEW_AMD_gpu_association)= !_glewInit_WGL_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_AMD_gpu_association */ #ifdef WGL_ARB_buffer_region CONST_CAST(WGLEW_ARB_buffer_region) = _glewSearchExtension("WGL_ARB_buffer_region", extStart, extEnd); if (glewExperimental || WGLEW_ARB_buffer_region|| crippled) CONST_CAST(WGLEW_ARB_buffer_region)= !_glewInit_WGL_ARB_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_buffer_region */ #ifdef WGL_ARB_create_context CONST_CAST(WGLEW_ARB_create_context) = _glewSearchExtension("WGL_ARB_create_context", extStart, extEnd); if (glewExperimental || WGLEW_ARB_create_context|| crippled) CONST_CAST(WGLEW_ARB_create_context)= !_glewInit_WGL_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_create_context */ #ifdef WGL_ARB_create_context_profile CONST_CAST(WGLEW_ARB_create_context_profile) = _glewSearchExtension("WGL_ARB_create_context_profile", extStart, extEnd); #endif /* WGL_ARB_create_context_profile */ #ifdef WGL_ARB_create_context_robustness CONST_CAST(WGLEW_ARB_create_context_robustness) = _glewSearchExtension("WGL_ARB_create_context_robustness", extStart, extEnd); #endif /* WGL_ARB_create_context_robustness */ #ifdef WGL_ARB_extensions_string CONST_CAST(WGLEW_ARB_extensions_string) = _glewSearchExtension("WGL_ARB_extensions_string", extStart, extEnd); if (glewExperimental || WGLEW_ARB_extensions_string|| crippled) CONST_CAST(WGLEW_ARB_extensions_string)= !_glewInit_WGL_ARB_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_extensions_string */ #ifdef WGL_ARB_framebuffer_sRGB CONST_CAST(WGLEW_ARB_framebuffer_sRGB) = _glewSearchExtension("WGL_ARB_framebuffer_sRGB", extStart, extEnd); #endif /* WGL_ARB_framebuffer_sRGB */ #ifdef WGL_ARB_make_current_read CONST_CAST(WGLEW_ARB_make_current_read) = _glewSearchExtension("WGL_ARB_make_current_read", extStart, extEnd); if (glewExperimental || WGLEW_ARB_make_current_read|| crippled) CONST_CAST(WGLEW_ARB_make_current_read)= !_glewInit_WGL_ARB_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_make_current_read */ #ifdef WGL_ARB_multisample CONST_CAST(WGLEW_ARB_multisample) = _glewSearchExtension("WGL_ARB_multisample", extStart, extEnd); #endif /* WGL_ARB_multisample */ #ifdef WGL_ARB_pbuffer CONST_CAST(WGLEW_ARB_pbuffer) = _glewSearchExtension("WGL_ARB_pbuffer", extStart, extEnd); if (glewExperimental || WGLEW_ARB_pbuffer|| crippled) CONST_CAST(WGLEW_ARB_pbuffer)= !_glewInit_WGL_ARB_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_pbuffer */ #ifdef WGL_ARB_pixel_format CONST_CAST(WGLEW_ARB_pixel_format) = _glewSearchExtension("WGL_ARB_pixel_format", extStart, extEnd); if (glewExperimental || WGLEW_ARB_pixel_format|| crippled) CONST_CAST(WGLEW_ARB_pixel_format)= !_glewInit_WGL_ARB_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_pixel_format */ #ifdef WGL_ARB_pixel_format_float CONST_CAST(WGLEW_ARB_pixel_format_float) = _glewSearchExtension("WGL_ARB_pixel_format_float", extStart, extEnd); #endif /* WGL_ARB_pixel_format_float */ #ifdef WGL_ARB_render_texture CONST_CAST(WGLEW_ARB_render_texture) = _glewSearchExtension("WGL_ARB_render_texture", extStart, extEnd); if (glewExperimental || WGLEW_ARB_render_texture|| crippled) CONST_CAST(WGLEW_ARB_render_texture)= !_glewInit_WGL_ARB_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_ARB_render_texture */ #ifdef WGL_ATI_pixel_format_float CONST_CAST(WGLEW_ATI_pixel_format_float) = _glewSearchExtension("WGL_ATI_pixel_format_float", extStart, extEnd); #endif /* WGL_ATI_pixel_format_float */ #ifdef WGL_ATI_render_texture_rectangle CONST_CAST(WGLEW_ATI_render_texture_rectangle) = _glewSearchExtension("WGL_ATI_render_texture_rectangle", extStart, extEnd); #endif /* WGL_ATI_render_texture_rectangle */ #ifdef WGL_EXT_create_context_es2_profile CONST_CAST(WGLEW_EXT_create_context_es2_profile) = _glewSearchExtension("WGL_EXT_create_context_es2_profile", extStart, extEnd); #endif /* WGL_EXT_create_context_es2_profile */ #ifdef WGL_EXT_create_context_es_profile CONST_CAST(WGLEW_EXT_create_context_es_profile) = _glewSearchExtension("WGL_EXT_create_context_es_profile", extStart, extEnd); #endif /* WGL_EXT_create_context_es_profile */ #ifdef WGL_EXT_depth_float CONST_CAST(WGLEW_EXT_depth_float) = _glewSearchExtension("WGL_EXT_depth_float", extStart, extEnd); #endif /* WGL_EXT_depth_float */ #ifdef WGL_EXT_display_color_table CONST_CAST(WGLEW_EXT_display_color_table) = _glewSearchExtension("WGL_EXT_display_color_table", extStart, extEnd); if (glewExperimental || WGLEW_EXT_display_color_table|| crippled) CONST_CAST(WGLEW_EXT_display_color_table)= !_glewInit_WGL_EXT_display_color_table(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_EXT_display_color_table */ #ifdef WGL_EXT_extensions_string CONST_CAST(WGLEW_EXT_extensions_string) = _glewSearchExtension("WGL_EXT_extensions_string", extStart, extEnd); if (glewExperimental || WGLEW_EXT_extensions_string|| crippled) CONST_CAST(WGLEW_EXT_extensions_string)= !_glewInit_WGL_EXT_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_EXT_extensions_string */ #ifdef WGL_EXT_framebuffer_sRGB CONST_CAST(WGLEW_EXT_framebuffer_sRGB) = _glewSearchExtension("WGL_EXT_framebuffer_sRGB", extStart, extEnd); #endif /* WGL_EXT_framebuffer_sRGB */ #ifdef WGL_EXT_make_current_read CONST_CAST(WGLEW_EXT_make_current_read) = _glewSearchExtension("WGL_EXT_make_current_read", extStart, extEnd); if (glewExperimental || WGLEW_EXT_make_current_read|| crippled) CONST_CAST(WGLEW_EXT_make_current_read)= !_glewInit_WGL_EXT_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_EXT_make_current_read */ #ifdef WGL_EXT_multisample CONST_CAST(WGLEW_EXT_multisample) = _glewSearchExtension("WGL_EXT_multisample", extStart, extEnd); #endif /* WGL_EXT_multisample */ #ifdef WGL_EXT_pbuffer CONST_CAST(WGLEW_EXT_pbuffer) = _glewSearchExtension("WGL_EXT_pbuffer", extStart, extEnd); if (glewExperimental || WGLEW_EXT_pbuffer|| crippled) CONST_CAST(WGLEW_EXT_pbuffer)= !_glewInit_WGL_EXT_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_EXT_pbuffer */ #ifdef WGL_EXT_pixel_format CONST_CAST(WGLEW_EXT_pixel_format) = _glewSearchExtension("WGL_EXT_pixel_format", extStart, extEnd); if (glewExperimental || WGLEW_EXT_pixel_format|| crippled) CONST_CAST(WGLEW_EXT_pixel_format)= !_glewInit_WGL_EXT_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_EXT_pixel_format */ #ifdef WGL_EXT_pixel_format_packed_float CONST_CAST(WGLEW_EXT_pixel_format_packed_float) = _glewSearchExtension("WGL_EXT_pixel_format_packed_float", extStart, extEnd); #endif /* WGL_EXT_pixel_format_packed_float */ #ifdef WGL_EXT_swap_control CONST_CAST(WGLEW_EXT_swap_control) = _glewSearchExtension("WGL_EXT_swap_control", extStart, extEnd); if (glewExperimental || WGLEW_EXT_swap_control|| crippled) CONST_CAST(WGLEW_EXT_swap_control)= !_glewInit_WGL_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_EXT_swap_control */ #ifdef WGL_EXT_swap_control_tear CONST_CAST(WGLEW_EXT_swap_control_tear) = _glewSearchExtension("WGL_EXT_swap_control_tear", extStart, extEnd); #endif /* WGL_EXT_swap_control_tear */ #ifdef WGL_I3D_digital_video_control CONST_CAST(WGLEW_I3D_digital_video_control) = _glewSearchExtension("WGL_I3D_digital_video_control", extStart, extEnd); if (glewExperimental || WGLEW_I3D_digital_video_control|| crippled) CONST_CAST(WGLEW_I3D_digital_video_control)= !_glewInit_WGL_I3D_digital_video_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_I3D_digital_video_control */ #ifdef WGL_I3D_gamma CONST_CAST(WGLEW_I3D_gamma) = _glewSearchExtension("WGL_I3D_gamma", extStart, extEnd); if (glewExperimental || WGLEW_I3D_gamma|| crippled) CONST_CAST(WGLEW_I3D_gamma)= !_glewInit_WGL_I3D_gamma(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_I3D_gamma */ #ifdef WGL_I3D_genlock CONST_CAST(WGLEW_I3D_genlock) = _glewSearchExtension("WGL_I3D_genlock", extStart, extEnd); if (glewExperimental || WGLEW_I3D_genlock|| crippled) CONST_CAST(WGLEW_I3D_genlock)= !_glewInit_WGL_I3D_genlock(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_I3D_genlock */ #ifdef WGL_I3D_image_buffer CONST_CAST(WGLEW_I3D_image_buffer) = _glewSearchExtension("WGL_I3D_image_buffer", extStart, extEnd); if (glewExperimental || WGLEW_I3D_image_buffer|| crippled) CONST_CAST(WGLEW_I3D_image_buffer)= !_glewInit_WGL_I3D_image_buffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_I3D_image_buffer */ #ifdef WGL_I3D_swap_frame_lock CONST_CAST(WGLEW_I3D_swap_frame_lock) = _glewSearchExtension("WGL_I3D_swap_frame_lock", extStart, extEnd); if (glewExperimental || WGLEW_I3D_swap_frame_lock|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_lock)= !_glewInit_WGL_I3D_swap_frame_lock(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_I3D_swap_frame_lock */ #ifdef WGL_I3D_swap_frame_usage CONST_CAST(WGLEW_I3D_swap_frame_usage) = _glewSearchExtension("WGL_I3D_swap_frame_usage", extStart, extEnd); if (glewExperimental || WGLEW_I3D_swap_frame_usage|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_usage)= !_glewInit_WGL_I3D_swap_frame_usage(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_I3D_swap_frame_usage */ #ifdef WGL_NV_DX_interop CONST_CAST(WGLEW_NV_DX_interop) = _glewSearchExtension("WGL_NV_DX_interop", extStart, extEnd); if (glewExperimental || WGLEW_NV_DX_interop|| crippled) CONST_CAST(WGLEW_NV_DX_interop)= !_glewInit_WGL_NV_DX_interop(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_DX_interop */ #ifdef WGL_NV_DX_interop2 CONST_CAST(WGLEW_NV_DX_interop2) = _glewSearchExtension("WGL_NV_DX_interop2", extStart, extEnd); #endif /* WGL_NV_DX_interop2 */ #ifdef WGL_NV_copy_image CONST_CAST(WGLEW_NV_copy_image) = _glewSearchExtension("WGL_NV_copy_image", extStart, extEnd); if (glewExperimental || WGLEW_NV_copy_image|| crippled) CONST_CAST(WGLEW_NV_copy_image)= !_glewInit_WGL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_copy_image */ #ifdef WGL_NV_float_buffer CONST_CAST(WGLEW_NV_float_buffer) = _glewSearchExtension("WGL_NV_float_buffer", extStart, extEnd); #endif /* WGL_NV_float_buffer */ #ifdef WGL_NV_gpu_affinity CONST_CAST(WGLEW_NV_gpu_affinity) = _glewSearchExtension("WGL_NV_gpu_affinity", extStart, extEnd); if (glewExperimental || WGLEW_NV_gpu_affinity|| crippled) CONST_CAST(WGLEW_NV_gpu_affinity)= !_glewInit_WGL_NV_gpu_affinity(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_gpu_affinity */ #ifdef WGL_NV_multisample_coverage CONST_CAST(WGLEW_NV_multisample_coverage) = _glewSearchExtension("WGL_NV_multisample_coverage", extStart, extEnd); #endif /* WGL_NV_multisample_coverage */ #ifdef WGL_NV_present_video CONST_CAST(WGLEW_NV_present_video) = _glewSearchExtension("WGL_NV_present_video", extStart, extEnd); if (glewExperimental || WGLEW_NV_present_video|| crippled) CONST_CAST(WGLEW_NV_present_video)= !_glewInit_WGL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_present_video */ #ifdef WGL_NV_render_depth_texture CONST_CAST(WGLEW_NV_render_depth_texture) = _glewSearchExtension("WGL_NV_render_depth_texture", extStart, extEnd); #endif /* WGL_NV_render_depth_texture */ #ifdef WGL_NV_render_texture_rectangle CONST_CAST(WGLEW_NV_render_texture_rectangle) = _glewSearchExtension("WGL_NV_render_texture_rectangle", extStart, extEnd); #endif /* WGL_NV_render_texture_rectangle */ #ifdef WGL_NV_swap_group CONST_CAST(WGLEW_NV_swap_group) = _glewSearchExtension("WGL_NV_swap_group", extStart, extEnd); if (glewExperimental || WGLEW_NV_swap_group|| crippled) CONST_CAST(WGLEW_NV_swap_group)= !_glewInit_WGL_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_swap_group */ #ifdef WGL_NV_vertex_array_range CONST_CAST(WGLEW_NV_vertex_array_range) = _glewSearchExtension("WGL_NV_vertex_array_range", extStart, extEnd); if (glewExperimental || WGLEW_NV_vertex_array_range|| crippled) CONST_CAST(WGLEW_NV_vertex_array_range)= !_glewInit_WGL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_vertex_array_range */ #ifdef WGL_NV_video_capture CONST_CAST(WGLEW_NV_video_capture) = _glewSearchExtension("WGL_NV_video_capture", extStart, extEnd); if (glewExperimental || WGLEW_NV_video_capture|| crippled) CONST_CAST(WGLEW_NV_video_capture)= !_glewInit_WGL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_video_capture */ #ifdef WGL_NV_video_output CONST_CAST(WGLEW_NV_video_output) = _glewSearchExtension("WGL_NV_video_output", extStart, extEnd); if (glewExperimental || WGLEW_NV_video_output|| crippled) CONST_CAST(WGLEW_NV_video_output)= !_glewInit_WGL_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_NV_video_output */ #ifdef WGL_OML_sync_control CONST_CAST(WGLEW_OML_sync_control) = _glewSearchExtension("WGL_OML_sync_control", extStart, extEnd); if (glewExperimental || WGLEW_OML_sync_control|| crippled) CONST_CAST(WGLEW_OML_sync_control)= !_glewInit_WGL_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* WGL_OML_sync_control */ return GLEW_OK; } #elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay = NULL; PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig = NULL; PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext = NULL; PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer = NULL; PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap = NULL; PFNGLXCREATEWINDOWPROC __glewXCreateWindow = NULL; PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer = NULL; PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap = NULL; PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow = NULL; PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable = NULL; PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib = NULL; PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs = NULL; PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent = NULL; PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig = NULL; PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent = NULL; PFNGLXQUERYCONTEXTPROC __glewXQueryContext = NULL; PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable = NULL; PFNGLXSELECTEVENTPROC __glewXSelectEvent = NULL; PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB = NULL; PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI = NULL; PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI = NULL; PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI = NULL; PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT = NULL; PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT = NULL; PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT = NULL; PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT = NULL; PFNGLXSWAPINTERVALEXTPROC __glewXSwapIntervalEXT = NULL; PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT = NULL; PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT = NULL; PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA = NULL; PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA = NULL; PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA = NULL; PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA = NULL; PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA = NULL; PFNGLXGETSWAPINTERVALMESAPROC __glewXGetSwapIntervalMESA = NULL; PFNGLXSWAPINTERVALMESAPROC __glewXSwapIntervalMESA = NULL; PFNGLXCOPYIMAGESUBDATANVPROC __glewXCopyImageSubDataNV = NULL; PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV = NULL; PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV = NULL; PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV = NULL; PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV = NULL; PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV = NULL; PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV = NULL; PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV = NULL; PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV = NULL; PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV = NULL; PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV = NULL; PFNGLXBINDVIDEOCAPTUREDEVICENVPROC __glewXBindVideoCaptureDeviceNV = NULL; PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC __glewXEnumerateVideoCaptureDevicesNV = NULL; PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC __glewXLockVideoCaptureDeviceNV = NULL; PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC __glewXQueryVideoCaptureDeviceNV = NULL; PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC __glewXReleaseVideoCaptureDeviceNV = NULL; PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV = NULL; PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV = NULL; PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV = NULL; PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV = NULL; PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV = NULL; PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV = NULL; PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML = NULL; PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML = NULL; PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML = NULL; PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML = NULL; PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML = NULL; PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX = NULL; PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX = NULL; PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX = NULL; PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX = NULL; PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX = NULL; PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX = NULL; PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX = NULL; PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX = NULL; PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX = NULL; PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX = NULL; PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX = NULL; PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX = NULL; PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX = NULL; PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX = NULL; PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX = NULL; PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX = NULL; PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX = NULL; PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX = NULL; PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX = NULL; PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX = NULL; PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX = NULL; PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX = NULL; PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX = NULL; PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX = NULL; PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX = NULL; PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX = NULL; PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX = NULL; PFNGLXCUSHIONSGIPROC __glewXCushionSGI = NULL; PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI = NULL; PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI = NULL; PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI = NULL; PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI = NULL; PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI = NULL; PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN = NULL; PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN = NULL; PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN = NULL; #if !defined(GLEW_MX) GLboolean __GLXEW_VERSION_1_0 = GL_FALSE; GLboolean __GLXEW_VERSION_1_1 = GL_FALSE; GLboolean __GLXEW_VERSION_1_2 = GL_FALSE; GLboolean __GLXEW_VERSION_1_3 = GL_FALSE; GLboolean __GLXEW_VERSION_1_4 = GL_FALSE; GLboolean __GLXEW_3DFX_multisample = GL_FALSE; GLboolean __GLXEW_AMD_gpu_association = GL_FALSE; GLboolean __GLXEW_ARB_create_context = GL_FALSE; GLboolean __GLXEW_ARB_create_context_profile = GL_FALSE; GLboolean __GLXEW_ARB_create_context_robustness = GL_FALSE; GLboolean __GLXEW_ARB_fbconfig_float = GL_FALSE; GLboolean __GLXEW_ARB_framebuffer_sRGB = GL_FALSE; GLboolean __GLXEW_ARB_get_proc_address = GL_FALSE; GLboolean __GLXEW_ARB_multisample = GL_FALSE; GLboolean __GLXEW_ARB_robustness_application_isolation = GL_FALSE; GLboolean __GLXEW_ARB_robustness_share_group_isolation = GL_FALSE; GLboolean __GLXEW_ARB_vertex_buffer_object = GL_FALSE; GLboolean __GLXEW_ATI_pixel_format_float = GL_FALSE; GLboolean __GLXEW_ATI_render_texture = GL_FALSE; GLboolean __GLXEW_EXT_create_context_es2_profile = GL_FALSE; GLboolean __GLXEW_EXT_create_context_es_profile = GL_FALSE; GLboolean __GLXEW_EXT_fbconfig_packed_float = GL_FALSE; GLboolean __GLXEW_EXT_framebuffer_sRGB = GL_FALSE; GLboolean __GLXEW_EXT_import_context = GL_FALSE; GLboolean __GLXEW_EXT_scene_marker = GL_FALSE; GLboolean __GLXEW_EXT_swap_control = GL_FALSE; GLboolean __GLXEW_EXT_swap_control_tear = GL_FALSE; GLboolean __GLXEW_EXT_texture_from_pixmap = GL_FALSE; GLboolean __GLXEW_EXT_visual_info = GL_FALSE; GLboolean __GLXEW_EXT_visual_rating = GL_FALSE; GLboolean __GLXEW_INTEL_swap_event = GL_FALSE; GLboolean __GLXEW_MESA_agp_offset = GL_FALSE; GLboolean __GLXEW_MESA_copy_sub_buffer = GL_FALSE; GLboolean __GLXEW_MESA_pixmap_colormap = GL_FALSE; GLboolean __GLXEW_MESA_release_buffers = GL_FALSE; GLboolean __GLXEW_MESA_set_3dfx_mode = GL_FALSE; GLboolean __GLXEW_MESA_swap_control = GL_FALSE; GLboolean __GLXEW_NV_copy_image = GL_FALSE; GLboolean __GLXEW_NV_float_buffer = GL_FALSE; GLboolean __GLXEW_NV_multisample_coverage = GL_FALSE; GLboolean __GLXEW_NV_present_video = GL_FALSE; GLboolean __GLXEW_NV_swap_group = GL_FALSE; GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE; GLboolean __GLXEW_NV_video_capture = GL_FALSE; GLboolean __GLXEW_NV_video_out = GL_FALSE; GLboolean __GLXEW_OML_swap_method = GL_FALSE; GLboolean __GLXEW_OML_sync_control = GL_FALSE; GLboolean __GLXEW_SGIS_blended_overlay = GL_FALSE; GLboolean __GLXEW_SGIS_color_range = GL_FALSE; GLboolean __GLXEW_SGIS_multisample = GL_FALSE; GLboolean __GLXEW_SGIS_shared_multisample = GL_FALSE; GLboolean __GLXEW_SGIX_fbconfig = GL_FALSE; GLboolean __GLXEW_SGIX_hyperpipe = GL_FALSE; GLboolean __GLXEW_SGIX_pbuffer = GL_FALSE; GLboolean __GLXEW_SGIX_swap_barrier = GL_FALSE; GLboolean __GLXEW_SGIX_swap_group = GL_FALSE; GLboolean __GLXEW_SGIX_video_resize = GL_FALSE; GLboolean __GLXEW_SGIX_visual_select_group = GL_FALSE; GLboolean __GLXEW_SGI_cushion = GL_FALSE; GLboolean __GLXEW_SGI_make_current_read = GL_FALSE; GLboolean __GLXEW_SGI_swap_control = GL_FALSE; GLboolean __GLXEW_SGI_video_sync = GL_FALSE; GLboolean __GLXEW_SUN_get_transparent_index = GL_FALSE; GLboolean __GLXEW_SUN_video_resize = GL_FALSE; #endif /* !GLEW_MX */ #ifdef GLX_VERSION_1_2 static GLboolean _glewInit_GLX_VERSION_1_2 (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentDisplay")) == NULL) || r; return r; } #endif /* GLX_VERSION_1_2 */ #ifdef GLX_VERSION_1_3 static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfig")) == NULL) || r; r = ((glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXCreateNewContext")) == NULL) || r; r = ((glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXCreatePbuffer")) == NULL) || r; r = ((glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXCreatePixmap")) == NULL) || r; r = ((glXCreateWindow = (PFNGLXCREATEWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXCreateWindow")) == NULL) || r; r = ((glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPbuffer")) == NULL) || r; r = ((glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPixmap")) == NULL) || r; r = ((glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXDestroyWindow")) == NULL) || r; r = ((glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawable")) == NULL) || r; r = ((glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttrib")) == NULL) || r; r = ((glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigs")) == NULL) || r; r = ((glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEvent")) == NULL) || r; r = ((glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfig")) == NULL) || r; r = ((glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)glewGetProcAddress((const GLubyte*)"glXMakeContextCurrent")) == NULL) || r; r = ((glXQueryContext = (PFNGLXQUERYCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContext")) == NULL) || r; r = ((glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXQueryDrawable")) == NULL) || r; r = ((glXSelectEvent = (PFNGLXSELECTEVENTPROC)glewGetProcAddress((const GLubyte*)"glXSelectEvent")) == NULL) || r; return r; } #endif /* GLX_VERSION_1_3 */ #ifdef GLX_VERSION_1_4 #endif /* GLX_VERSION_1_4 */ #ifdef GLX_3DFX_multisample #endif /* GLX_3DFX_multisample */ #ifdef GLX_AMD_gpu_association #endif /* GLX_AMD_gpu_association */ #ifdef GLX_ARB_create_context static GLboolean _glewInit_GLX_ARB_create_context (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextAttribsARB")) == NULL) || r; return r; } #endif /* GLX_ARB_create_context */ #ifdef GLX_ARB_create_context_profile #endif /* GLX_ARB_create_context_profile */ #ifdef GLX_ARB_create_context_robustness #endif /* GLX_ARB_create_context_robustness */ #ifdef GLX_ARB_fbconfig_float #endif /* GLX_ARB_fbconfig_float */ #ifdef GLX_ARB_framebuffer_sRGB #endif /* GLX_ARB_framebuffer_sRGB */ #ifdef GLX_ARB_get_proc_address #endif /* GLX_ARB_get_proc_address */ #ifdef GLX_ARB_multisample #endif /* GLX_ARB_multisample */ #ifdef GLX_ARB_robustness_application_isolation #endif /* GLX_ARB_robustness_application_isolation */ #ifdef GLX_ARB_robustness_share_group_isolation #endif /* GLX_ARB_robustness_share_group_isolation */ #ifdef GLX_ARB_vertex_buffer_object #endif /* GLX_ARB_vertex_buffer_object */ #ifdef GLX_ATI_pixel_format_float #endif /* GLX_ATI_pixel_format_float */ #ifdef GLX_ATI_render_texture static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindTexImageATI = (PFNGLXBINDTEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageATI")) == NULL) || r; r = ((glXDrawableAttribATI = (PFNGLXDRAWABLEATTRIBATIPROC)glewGetProcAddress((const GLubyte*)"glXDrawableAttribATI")) == NULL) || r; r = ((glXReleaseTexImageATI = (PFNGLXRELEASETEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageATI")) == NULL) || r; return r; } #endif /* GLX_ATI_render_texture */ #ifdef GLX_EXT_create_context_es2_profile #endif /* GLX_EXT_create_context_es2_profile */ #ifdef GLX_EXT_create_context_es_profile #endif /* GLX_EXT_create_context_es_profile */ #ifdef GLX_EXT_fbconfig_packed_float #endif /* GLX_EXT_fbconfig_packed_float */ #ifdef GLX_EXT_framebuffer_sRGB #endif /* GLX_EXT_framebuffer_sRGB */ #ifdef GLX_EXT_import_context static GLboolean _glewInit_GLX_EXT_import_context (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXFreeContextEXT")) == NULL) || r; r = ((glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)glewGetProcAddress((const GLubyte*)"glXGetContextIDEXT")) == NULL) || r; r = ((glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXImportContextEXT")) == NULL) || r; r = ((glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContextInfoEXT")) == NULL) || r; return r; } #endif /* GLX_EXT_import_context */ #ifdef GLX_EXT_scene_marker #endif /* GLX_EXT_scene_marker */ #ifdef GLX_EXT_swap_control static GLboolean _glewInit_GLX_EXT_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalEXT")) == NULL) || r; return r; } #endif /* GLX_EXT_swap_control */ #ifdef GLX_EXT_swap_control_tear #endif /* GLX_EXT_swap_control_tear */ #ifdef GLX_EXT_texture_from_pixmap static GLboolean _glewInit_GLX_EXT_texture_from_pixmap (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageEXT")) == NULL) || r; r = ((glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageEXT")) == NULL) || r; return r; } #endif /* GLX_EXT_texture_from_pixmap */ #ifdef GLX_EXT_visual_info #endif /* GLX_EXT_visual_info */ #ifdef GLX_EXT_visual_rating #endif /* GLX_EXT_visual_rating */ #ifdef GLX_INTEL_swap_event #endif /* GLX_INTEL_swap_event */ #ifdef GLX_MESA_agp_offset static GLboolean _glewInit_GLX_MESA_agp_offset (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetAGPOffsetMESA = (PFNGLXGETAGPOFFSETMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetAGPOffsetMESA")) == NULL) || r; return r; } #endif /* GLX_MESA_agp_offset */ #ifdef GLX_MESA_copy_sub_buffer static GLboolean _glewInit_GLX_MESA_copy_sub_buffer (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)glewGetProcAddress((const GLubyte*)"glXCopySubBufferMESA")) == NULL) || r; return r; } #endif /* GLX_MESA_copy_sub_buffer */ #ifdef GLX_MESA_pixmap_colormap static GLboolean _glewInit_GLX_MESA_pixmap_colormap (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapMESA")) == NULL) || r; return r; } #endif /* GLX_MESA_pixmap_colormap */ #ifdef GLX_MESA_release_buffers static GLboolean _glewInit_GLX_MESA_release_buffers (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glXReleaseBuffersMESA")) == NULL) || r; return r; } #endif /* GLX_MESA_release_buffers */ #ifdef GLX_MESA_set_3dfx_mode static GLboolean _glewInit_GLX_MESA_set_3dfx_mode (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)glewGetProcAddress((const GLubyte*)"glXSet3DfxModeMESA")) == NULL) || r; return r; } #endif /* GLX_MESA_set_3dfx_mode */ #ifdef GLX_MESA_swap_control static GLboolean _glewInit_GLX_MESA_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetSwapIntervalMESA = (PFNGLXGETSWAPINTERVALMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetSwapIntervalMESA")) == NULL) || r; r = ((glXSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalMESA")) == NULL) || r; return r; } #endif /* GLX_MESA_swap_control */ #ifdef GLX_NV_copy_image static GLboolean _glewInit_GLX_NV_copy_image (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXCopyImageSubDataNV = (PFNGLXCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glXCopyImageSubDataNV")) == NULL) || r; return r; } #endif /* GLX_NV_copy_image */ #ifdef GLX_NV_float_buffer #endif /* GLX_NV_float_buffer */ #ifdef GLX_NV_multisample_coverage #endif /* GLX_NV_multisample_coverage */ #ifdef GLX_NV_present_video static GLboolean _glewInit_GLX_NV_present_video (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindVideoDeviceNV = (PFNGLXBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoDeviceNV")) == NULL) || r; r = ((glXEnumerateVideoDevicesNV = (PFNGLXENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"glXEnumerateVideoDevicesNV")) == NULL) || r; return r; } #endif /* GLX_NV_present_video */ #ifdef GLX_NV_swap_group static GLboolean _glewInit_GLX_NV_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindSwapBarrierNV = (PFNGLXBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierNV")) == NULL) || r; r = ((glXJoinSwapGroupNV = (PFNGLXJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupNV")) == NULL) || r; r = ((glXQueryFrameCountNV = (PFNGLXQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryFrameCountNV")) == NULL) || r; r = ((glXQueryMaxSwapGroupsNV = (PFNGLXQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapGroupsNV")) == NULL) || r; r = ((glXQuerySwapGroupNV = (PFNGLXQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXQuerySwapGroupNV")) == NULL) || r; r = ((glXResetFrameCountNV = (PFNGLXRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXResetFrameCountNV")) == NULL) || r; return r; } #endif /* GLX_NV_swap_group */ #ifdef GLX_NV_vertex_array_range static GLboolean _glewInit_GLX_NV_vertex_array_range (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXAllocateMemoryNV = (PFNGLXALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXAllocateMemoryNV")) == NULL) || r; r = ((glXFreeMemoryNV = (PFNGLXFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXFreeMemoryNV")) == NULL) || r; return r; } #endif /* GLX_NV_vertex_array_range */ #ifdef GLX_NV_video_capture static GLboolean _glewInit_GLX_NV_video_capture (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindVideoCaptureDeviceNV = (PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoCaptureDeviceNV")) == NULL) || r; r = ((glXEnumerateVideoCaptureDevicesNV = (PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"glXEnumerateVideoCaptureDevicesNV")) == NULL) || r; r = ((glXLockVideoCaptureDeviceNV = (PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXLockVideoCaptureDeviceNV")) == NULL) || r; r = ((glXQueryVideoCaptureDeviceNV = (PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXQueryVideoCaptureDeviceNV")) == NULL) || r; r = ((glXReleaseVideoCaptureDeviceNV = (PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoCaptureDeviceNV")) == NULL) || r; return r; } #endif /* GLX_NV_video_capture */ #ifdef GLX_NV_video_out static GLboolean _glewInit_GLX_NV_video_out (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindVideoImageNV = (PFNGLXBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoImageNV")) == NULL) || r; r = ((glXGetVideoDeviceNV = (PFNGLXGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoDeviceNV")) == NULL) || r; r = ((glXGetVideoInfoNV = (PFNGLXGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoInfoNV")) == NULL) || r; r = ((glXReleaseVideoDeviceNV = (PFNGLXRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoDeviceNV")) == NULL) || r; r = ((glXReleaseVideoImageNV = (PFNGLXRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoImageNV")) == NULL) || r; r = ((glXSendPbufferToVideoNV = (PFNGLXSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"glXSendPbufferToVideoNV")) == NULL) || r; return r; } #endif /* GLX_NV_video_out */ #ifdef GLX_OML_swap_method #endif /* GLX_OML_swap_method */ #ifdef GLX_OML_sync_control static GLboolean _glewInit_GLX_OML_sync_control (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetMscRateOML")) == NULL) || r; r = ((glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetSyncValuesOML")) == NULL) || r; r = ((glXSwapBuffersMscOML = (PFNGLXSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXSwapBuffersMscOML")) == NULL) || r; r = ((glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForMscOML")) == NULL) || r; r = ((glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForSbcOML")) == NULL) || r; return r; } #endif /* GLX_OML_sync_control */ #ifdef GLX_SGIS_blended_overlay #endif /* GLX_SGIS_blended_overlay */ #ifdef GLX_SGIS_color_range #endif /* GLX_SGIS_color_range */ #ifdef GLX_SGIS_multisample #endif /* GLX_SGIS_multisample */ #ifdef GLX_SGIS_shared_multisample #endif /* GLX_SGIS_shared_multisample */ #ifdef GLX_SGIX_fbconfig static GLboolean _glewInit_GLX_SGIX_fbconfig (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfigSGIX")) == NULL) || r; r = ((glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextWithConfigSGIX")) == NULL) || r; r = ((glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapWithConfigSGIX")) == NULL) || r; r = ((glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttribSGIX")) == NULL) || r; r = ((glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigFromVisualSGIX")) == NULL) || r; r = ((glXGetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfigSGIX")) == NULL) || r; return r; } #endif /* GLX_SGIX_fbconfig */ #ifdef GLX_SGIX_hyperpipe static GLboolean _glewInit_GLX_SGIX_hyperpipe (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindHyperpipeSGIX = (PFNGLXBINDHYPERPIPESGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindHyperpipeSGIX")) == NULL) || r; r = ((glXDestroyHyperpipeConfigSGIX = (PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyHyperpipeConfigSGIX")) == NULL) || r; r = ((glXHyperpipeAttribSGIX = (PFNGLXHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeAttribSGIX")) == NULL) || r; r = ((glXHyperpipeConfigSGIX = (PFNGLXHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeConfigSGIX")) == NULL) || r; r = ((glXQueryHyperpipeAttribSGIX = (PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeAttribSGIX")) == NULL) || r; r = ((glXQueryHyperpipeBestAttribSGIX = (PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeBestAttribSGIX")) == NULL) || r; r = ((glXQueryHyperpipeConfigSGIX = (PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeConfigSGIX")) == NULL) || r; r = ((glXQueryHyperpipeNetworkSGIX = (PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeNetworkSGIX")) == NULL) || r; return r; } #endif /* GLX_SGIX_hyperpipe */ #ifdef GLX_SGIX_pbuffer static GLboolean _glewInit_GLX_SGIX_pbuffer (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPbufferSGIX")) == NULL) || r; r = ((glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyGLXPbufferSGIX")) == NULL) || r; r = ((glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEventSGIX")) == NULL) || r; r = ((glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryGLXPbufferSGIX")) == NULL) || r; r = ((glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXSelectEventSGIX")) == NULL) || r; return r; } #endif /* GLX_SGIX_pbuffer */ #ifdef GLX_SGIX_swap_barrier static GLboolean _glewInit_GLX_SGIX_swap_barrier (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierSGIX")) == NULL) || r; r = ((glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapBarriersSGIX")) == NULL) || r; return r; } #endif /* GLX_SGIX_swap_barrier */ #ifdef GLX_SGIX_swap_group static GLboolean _glewInit_GLX_SGIX_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupSGIX")) == NULL) || r; return r; } #endif /* GLX_SGIX_swap_group */ #ifdef GLX_SGIX_video_resize static GLboolean _glewInit_GLX_SGIX_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindChannelToWindowSGIX")) == NULL) || r; r = ((glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSGIX")) == NULL) || r; r = ((glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSyncSGIX")) == NULL) || r; r = ((glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelDeltasSGIX")) == NULL) || r; r = ((glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelRectSGIX")) == NULL) || r; return r; } #endif /* GLX_SGIX_video_resize */ #ifdef GLX_SGIX_visual_select_group #endif /* GLX_SGIX_visual_select_group */ #ifdef GLX_SGI_cushion static GLboolean _glewInit_GLX_SGI_cushion (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXCushionSGI = (PFNGLXCUSHIONSGIPROC)glewGetProcAddress((const GLubyte*)"glXCushionSGI")) == NULL) || r; return r; } #endif /* GLX_SGI_cushion */ #ifdef GLX_SGI_make_current_read static GLboolean _glewInit_GLX_SGI_make_current_read (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawableSGI")) == NULL) || r; r = ((glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)glewGetProcAddress((const GLubyte*)"glXMakeCurrentReadSGI")) == NULL) || r; return r; } #endif /* GLX_SGI_make_current_read */ #ifdef GLX_SGI_swap_control static GLboolean _glewInit_GLX_SGI_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalSGI")) == NULL) || r; return r; } #endif /* GLX_SGI_swap_control */ #ifdef GLX_SGI_video_sync static GLboolean _glewInit_GLX_SGI_video_sync (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoSyncSGI")) == NULL) || r; r = ((glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI")) == NULL) || r; return r; } #endif /* GLX_SGI_video_sync */ #ifdef GLX_SUN_get_transparent_index static GLboolean _glewInit_GLX_SUN_get_transparent_index (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)glewGetProcAddress((const GLubyte*)"glXGetTransparentIndexSUN")) == NULL) || r; return r; } #endif /* GLX_SUN_get_transparent_index */ #ifdef GLX_SUN_video_resize static GLboolean _glewInit_GLX_SUN_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) { GLboolean r = GL_FALSE; r = ((glXGetVideoResizeSUN = (PFNGLXGETVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoResizeSUN")) == NULL) || r; r = ((glXVideoResizeSUN = (PFNGLXVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXVideoResizeSUN")) == NULL) || r; return r; } #endif /* GLX_SUN_video_resize */ /* ------------------------------------------------------------------------ */ GLboolean glxewGetExtension (const char* name) { const GLubyte* start; const GLubyte* end; if (glXGetCurrentDisplay == NULL) return GL_FALSE; start = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); if (0 == start) return GL_FALSE; end = start + _glewStrLen(start); return _glewSearchExtension(name, start, end); } GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) { int major, minor; const GLubyte* extStart; const GLubyte* extEnd; /* initialize core GLX 1.2 */ if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; /* initialize flags */ CONST_CAST(GLXEW_VERSION_1_0) = GL_TRUE; CONST_CAST(GLXEW_VERSION_1_1) = GL_TRUE; CONST_CAST(GLXEW_VERSION_1_2) = GL_TRUE; CONST_CAST(GLXEW_VERSION_1_3) = GL_TRUE; CONST_CAST(GLXEW_VERSION_1_4) = GL_TRUE; /* query GLX version */ glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); if (major == 1 && minor <= 3) { switch (minor) { case 3: CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; break; case 2: CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; CONST_CAST(GLXEW_VERSION_1_3) = GL_FALSE; break; default: return GLEW_ERROR_GLX_VERSION_11_ONLY; break; } } /* query GLX extension string */ extStart = 0; if (glXGetCurrentDisplay != NULL) extStart = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); if (extStart == 0) extStart = (const GLubyte *)""; extEnd = extStart + _glewStrLen(extStart); /* initialize extensions */ #ifdef GLX_VERSION_1_3 if (glewExperimental || GLXEW_VERSION_1_3) CONST_CAST(GLXEW_VERSION_1_3) = !_glewInit_GLX_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_VERSION_1_3 */ #ifdef GLX_3DFX_multisample CONST_CAST(GLXEW_3DFX_multisample) = _glewSearchExtension("GLX_3DFX_multisample", extStart, extEnd); #endif /* GLX_3DFX_multisample */ #ifdef GLX_AMD_gpu_association CONST_CAST(GLXEW_AMD_gpu_association) = _glewSearchExtension("GLX_AMD_gpu_association", extStart, extEnd); #endif /* GLX_AMD_gpu_association */ #ifdef GLX_ARB_create_context CONST_CAST(GLXEW_ARB_create_context) = _glewSearchExtension("GLX_ARB_create_context", extStart, extEnd); if (glewExperimental || GLXEW_ARB_create_context) CONST_CAST(GLXEW_ARB_create_context) = !_glewInit_GLX_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_ARB_create_context */ #ifdef GLX_ARB_create_context_profile CONST_CAST(GLXEW_ARB_create_context_profile) = _glewSearchExtension("GLX_ARB_create_context_profile", extStart, extEnd); #endif /* GLX_ARB_create_context_profile */ #ifdef GLX_ARB_create_context_robustness CONST_CAST(GLXEW_ARB_create_context_robustness) = _glewSearchExtension("GLX_ARB_create_context_robustness", extStart, extEnd); #endif /* GLX_ARB_create_context_robustness */ #ifdef GLX_ARB_fbconfig_float CONST_CAST(GLXEW_ARB_fbconfig_float) = _glewSearchExtension("GLX_ARB_fbconfig_float", extStart, extEnd); #endif /* GLX_ARB_fbconfig_float */ #ifdef GLX_ARB_framebuffer_sRGB CONST_CAST(GLXEW_ARB_framebuffer_sRGB) = _glewSearchExtension("GLX_ARB_framebuffer_sRGB", extStart, extEnd); #endif /* GLX_ARB_framebuffer_sRGB */ #ifdef GLX_ARB_get_proc_address CONST_CAST(GLXEW_ARB_get_proc_address) = _glewSearchExtension("GLX_ARB_get_proc_address", extStart, extEnd); #endif /* GLX_ARB_get_proc_address */ #ifdef GLX_ARB_multisample CONST_CAST(GLXEW_ARB_multisample) = _glewSearchExtension("GLX_ARB_multisample", extStart, extEnd); #endif /* GLX_ARB_multisample */ #ifdef GLX_ARB_robustness_application_isolation CONST_CAST(GLXEW_ARB_robustness_application_isolation) = _glewSearchExtension("GLX_ARB_robustness_application_isolation", extStart, extEnd); #endif /* GLX_ARB_robustness_application_isolation */ #ifdef GLX_ARB_robustness_share_group_isolation CONST_CAST(GLXEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("GLX_ARB_robustness_share_group_isolation", extStart, extEnd); #endif /* GLX_ARB_robustness_share_group_isolation */ #ifdef GLX_ARB_vertex_buffer_object CONST_CAST(GLXEW_ARB_vertex_buffer_object) = _glewSearchExtension("GLX_ARB_vertex_buffer_object", extStart, extEnd); #endif /* GLX_ARB_vertex_buffer_object */ #ifdef GLX_ATI_pixel_format_float CONST_CAST(GLXEW_ATI_pixel_format_float) = _glewSearchExtension("GLX_ATI_pixel_format_float", extStart, extEnd); #endif /* GLX_ATI_pixel_format_float */ #ifdef GLX_ATI_render_texture CONST_CAST(GLXEW_ATI_render_texture) = _glewSearchExtension("GLX_ATI_render_texture", extStart, extEnd); if (glewExperimental || GLXEW_ATI_render_texture) CONST_CAST(GLXEW_ATI_render_texture) = !_glewInit_GLX_ATI_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_ATI_render_texture */ #ifdef GLX_EXT_create_context_es2_profile CONST_CAST(GLXEW_EXT_create_context_es2_profile) = _glewSearchExtension("GLX_EXT_create_context_es2_profile", extStart, extEnd); #endif /* GLX_EXT_create_context_es2_profile */ #ifdef GLX_EXT_create_context_es_profile CONST_CAST(GLXEW_EXT_create_context_es_profile) = _glewSearchExtension("GLX_EXT_create_context_es_profile", extStart, extEnd); #endif /* GLX_EXT_create_context_es_profile */ #ifdef GLX_EXT_fbconfig_packed_float CONST_CAST(GLXEW_EXT_fbconfig_packed_float) = _glewSearchExtension("GLX_EXT_fbconfig_packed_float", extStart, extEnd); #endif /* GLX_EXT_fbconfig_packed_float */ #ifdef GLX_EXT_framebuffer_sRGB CONST_CAST(GLXEW_EXT_framebuffer_sRGB) = _glewSearchExtension("GLX_EXT_framebuffer_sRGB", extStart, extEnd); #endif /* GLX_EXT_framebuffer_sRGB */ #ifdef GLX_EXT_import_context CONST_CAST(GLXEW_EXT_import_context) = _glewSearchExtension("GLX_EXT_import_context", extStart, extEnd); if (glewExperimental || GLXEW_EXT_import_context) CONST_CAST(GLXEW_EXT_import_context) = !_glewInit_GLX_EXT_import_context(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_EXT_import_context */ #ifdef GLX_EXT_scene_marker CONST_CAST(GLXEW_EXT_scene_marker) = _glewSearchExtension("GLX_EXT_scene_marker", extStart, extEnd); #endif /* GLX_EXT_scene_marker */ #ifdef GLX_EXT_swap_control CONST_CAST(GLXEW_EXT_swap_control) = _glewSearchExtension("GLX_EXT_swap_control", extStart, extEnd); if (glewExperimental || GLXEW_EXT_swap_control) CONST_CAST(GLXEW_EXT_swap_control) = !_glewInit_GLX_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_EXT_swap_control */ #ifdef GLX_EXT_swap_control_tear CONST_CAST(GLXEW_EXT_swap_control_tear) = _glewSearchExtension("GLX_EXT_swap_control_tear", extStart, extEnd); #endif /* GLX_EXT_swap_control_tear */ #ifdef GLX_EXT_texture_from_pixmap CONST_CAST(GLXEW_EXT_texture_from_pixmap) = _glewSearchExtension("GLX_EXT_texture_from_pixmap", extStart, extEnd); if (glewExperimental || GLXEW_EXT_texture_from_pixmap) CONST_CAST(GLXEW_EXT_texture_from_pixmap) = !_glewInit_GLX_EXT_texture_from_pixmap(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_EXT_texture_from_pixmap */ #ifdef GLX_EXT_visual_info CONST_CAST(GLXEW_EXT_visual_info) = _glewSearchExtension("GLX_EXT_visual_info", extStart, extEnd); #endif /* GLX_EXT_visual_info */ #ifdef GLX_EXT_visual_rating CONST_CAST(GLXEW_EXT_visual_rating) = _glewSearchExtension("GLX_EXT_visual_rating", extStart, extEnd); #endif /* GLX_EXT_visual_rating */ #ifdef GLX_INTEL_swap_event CONST_CAST(GLXEW_INTEL_swap_event) = _glewSearchExtension("GLX_INTEL_swap_event", extStart, extEnd); #endif /* GLX_INTEL_swap_event */ #ifdef GLX_MESA_agp_offset CONST_CAST(GLXEW_MESA_agp_offset) = _glewSearchExtension("GLX_MESA_agp_offset", extStart, extEnd); if (glewExperimental || GLXEW_MESA_agp_offset) CONST_CAST(GLXEW_MESA_agp_offset) = !_glewInit_GLX_MESA_agp_offset(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_MESA_agp_offset */ #ifdef GLX_MESA_copy_sub_buffer CONST_CAST(GLXEW_MESA_copy_sub_buffer) = _glewSearchExtension("GLX_MESA_copy_sub_buffer", extStart, extEnd); if (glewExperimental || GLXEW_MESA_copy_sub_buffer) CONST_CAST(GLXEW_MESA_copy_sub_buffer) = !_glewInit_GLX_MESA_copy_sub_buffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_MESA_copy_sub_buffer */ #ifdef GLX_MESA_pixmap_colormap CONST_CAST(GLXEW_MESA_pixmap_colormap) = _glewSearchExtension("GLX_MESA_pixmap_colormap", extStart, extEnd); if (glewExperimental || GLXEW_MESA_pixmap_colormap) CONST_CAST(GLXEW_MESA_pixmap_colormap) = !_glewInit_GLX_MESA_pixmap_colormap(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_MESA_pixmap_colormap */ #ifdef GLX_MESA_release_buffers CONST_CAST(GLXEW_MESA_release_buffers) = _glewSearchExtension("GLX_MESA_release_buffers", extStart, extEnd); if (glewExperimental || GLXEW_MESA_release_buffers) CONST_CAST(GLXEW_MESA_release_buffers) = !_glewInit_GLX_MESA_release_buffers(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_MESA_release_buffers */ #ifdef GLX_MESA_set_3dfx_mode CONST_CAST(GLXEW_MESA_set_3dfx_mode) = _glewSearchExtension("GLX_MESA_set_3dfx_mode", extStart, extEnd); if (glewExperimental || GLXEW_MESA_set_3dfx_mode) CONST_CAST(GLXEW_MESA_set_3dfx_mode) = !_glewInit_GLX_MESA_set_3dfx_mode(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_MESA_set_3dfx_mode */ #ifdef GLX_MESA_swap_control CONST_CAST(GLXEW_MESA_swap_control) = _glewSearchExtension("GLX_MESA_swap_control", extStart, extEnd); if (glewExperimental || GLXEW_MESA_swap_control) CONST_CAST(GLXEW_MESA_swap_control) = !_glewInit_GLX_MESA_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_MESA_swap_control */ #ifdef GLX_NV_copy_image CONST_CAST(GLXEW_NV_copy_image) = _glewSearchExtension("GLX_NV_copy_image", extStart, extEnd); if (glewExperimental || GLXEW_NV_copy_image) CONST_CAST(GLXEW_NV_copy_image) = !_glewInit_GLX_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_NV_copy_image */ #ifdef GLX_NV_float_buffer CONST_CAST(GLXEW_NV_float_buffer) = _glewSearchExtension("GLX_NV_float_buffer", extStart, extEnd); #endif /* GLX_NV_float_buffer */ #ifdef GLX_NV_multisample_coverage CONST_CAST(GLXEW_NV_multisample_coverage) = _glewSearchExtension("GLX_NV_multisample_coverage", extStart, extEnd); #endif /* GLX_NV_multisample_coverage */ #ifdef GLX_NV_present_video CONST_CAST(GLXEW_NV_present_video) = _glewSearchExtension("GLX_NV_present_video", extStart, extEnd); if (glewExperimental || GLXEW_NV_present_video) CONST_CAST(GLXEW_NV_present_video) = !_glewInit_GLX_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_NV_present_video */ #ifdef GLX_NV_swap_group CONST_CAST(GLXEW_NV_swap_group) = _glewSearchExtension("GLX_NV_swap_group", extStart, extEnd); if (glewExperimental || GLXEW_NV_swap_group) CONST_CAST(GLXEW_NV_swap_group) = !_glewInit_GLX_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_NV_swap_group */ #ifdef GLX_NV_vertex_array_range CONST_CAST(GLXEW_NV_vertex_array_range) = _glewSearchExtension("GLX_NV_vertex_array_range", extStart, extEnd); if (glewExperimental || GLXEW_NV_vertex_array_range) CONST_CAST(GLXEW_NV_vertex_array_range) = !_glewInit_GLX_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_NV_vertex_array_range */ #ifdef GLX_NV_video_capture CONST_CAST(GLXEW_NV_video_capture) = _glewSearchExtension("GLX_NV_video_capture", extStart, extEnd); if (glewExperimental || GLXEW_NV_video_capture) CONST_CAST(GLXEW_NV_video_capture) = !_glewInit_GLX_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_NV_video_capture */ #ifdef GLX_NV_video_out CONST_CAST(GLXEW_NV_video_out) = _glewSearchExtension("GLX_NV_video_out", extStart, extEnd); if (glewExperimental || GLXEW_NV_video_out) CONST_CAST(GLXEW_NV_video_out) = !_glewInit_GLX_NV_video_out(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_NV_video_out */ #ifdef GLX_OML_swap_method CONST_CAST(GLXEW_OML_swap_method) = _glewSearchExtension("GLX_OML_swap_method", extStart, extEnd); #endif /* GLX_OML_swap_method */ #ifdef GLX_OML_sync_control CONST_CAST(GLXEW_OML_sync_control) = _glewSearchExtension("GLX_OML_sync_control", extStart, extEnd); if (glewExperimental || GLXEW_OML_sync_control) CONST_CAST(GLXEW_OML_sync_control) = !_glewInit_GLX_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_OML_sync_control */ #ifdef GLX_SGIS_blended_overlay CONST_CAST(GLXEW_SGIS_blended_overlay) = _glewSearchExtension("GLX_SGIS_blended_overlay", extStart, extEnd); #endif /* GLX_SGIS_blended_overlay */ #ifdef GLX_SGIS_color_range CONST_CAST(GLXEW_SGIS_color_range) = _glewSearchExtension("GLX_SGIS_color_range", extStart, extEnd); #endif /* GLX_SGIS_color_range */ #ifdef GLX_SGIS_multisample CONST_CAST(GLXEW_SGIS_multisample) = _glewSearchExtension("GLX_SGIS_multisample", extStart, extEnd); #endif /* GLX_SGIS_multisample */ #ifdef GLX_SGIS_shared_multisample CONST_CAST(GLXEW_SGIS_shared_multisample) = _glewSearchExtension("GLX_SGIS_shared_multisample", extStart, extEnd); #endif /* GLX_SGIS_shared_multisample */ #ifdef GLX_SGIX_fbconfig CONST_CAST(GLXEW_SGIX_fbconfig) = _glewSearchExtension("GLX_SGIX_fbconfig", extStart, extEnd); if (glewExperimental || GLXEW_SGIX_fbconfig) CONST_CAST(GLXEW_SGIX_fbconfig) = !_glewInit_GLX_SGIX_fbconfig(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGIX_fbconfig */ #ifdef GLX_SGIX_hyperpipe CONST_CAST(GLXEW_SGIX_hyperpipe) = _glewSearchExtension("GLX_SGIX_hyperpipe", extStart, extEnd); if (glewExperimental || GLXEW_SGIX_hyperpipe) CONST_CAST(GLXEW_SGIX_hyperpipe) = !_glewInit_GLX_SGIX_hyperpipe(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGIX_hyperpipe */ #ifdef GLX_SGIX_pbuffer CONST_CAST(GLXEW_SGIX_pbuffer) = _glewSearchExtension("GLX_SGIX_pbuffer", extStart, extEnd); if (glewExperimental || GLXEW_SGIX_pbuffer) CONST_CAST(GLXEW_SGIX_pbuffer) = !_glewInit_GLX_SGIX_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGIX_pbuffer */ #ifdef GLX_SGIX_swap_barrier CONST_CAST(GLXEW_SGIX_swap_barrier) = _glewSearchExtension("GLX_SGIX_swap_barrier", extStart, extEnd); if (glewExperimental || GLXEW_SGIX_swap_barrier) CONST_CAST(GLXEW_SGIX_swap_barrier) = !_glewInit_GLX_SGIX_swap_barrier(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGIX_swap_barrier */ #ifdef GLX_SGIX_swap_group CONST_CAST(GLXEW_SGIX_swap_group) = _glewSearchExtension("GLX_SGIX_swap_group", extStart, extEnd); if (glewExperimental || GLXEW_SGIX_swap_group) CONST_CAST(GLXEW_SGIX_swap_group) = !_glewInit_GLX_SGIX_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGIX_swap_group */ #ifdef GLX_SGIX_video_resize CONST_CAST(GLXEW_SGIX_video_resize) = _glewSearchExtension("GLX_SGIX_video_resize", extStart, extEnd); if (glewExperimental || GLXEW_SGIX_video_resize) CONST_CAST(GLXEW_SGIX_video_resize) = !_glewInit_GLX_SGIX_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGIX_video_resize */ #ifdef GLX_SGIX_visual_select_group CONST_CAST(GLXEW_SGIX_visual_select_group) = _glewSearchExtension("GLX_SGIX_visual_select_group", extStart, extEnd); #endif /* GLX_SGIX_visual_select_group */ #ifdef GLX_SGI_cushion CONST_CAST(GLXEW_SGI_cushion) = _glewSearchExtension("GLX_SGI_cushion", extStart, extEnd); if (glewExperimental || GLXEW_SGI_cushion) CONST_CAST(GLXEW_SGI_cushion) = !_glewInit_GLX_SGI_cushion(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGI_cushion */ #ifdef GLX_SGI_make_current_read CONST_CAST(GLXEW_SGI_make_current_read) = _glewSearchExtension("GLX_SGI_make_current_read", extStart, extEnd); if (glewExperimental || GLXEW_SGI_make_current_read) CONST_CAST(GLXEW_SGI_make_current_read) = !_glewInit_GLX_SGI_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGI_make_current_read */ #ifdef GLX_SGI_swap_control CONST_CAST(GLXEW_SGI_swap_control) = _glewSearchExtension("GLX_SGI_swap_control", extStart, extEnd); if (glewExperimental || GLXEW_SGI_swap_control) CONST_CAST(GLXEW_SGI_swap_control) = !_glewInit_GLX_SGI_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGI_swap_control */ #ifdef GLX_SGI_video_sync CONST_CAST(GLXEW_SGI_video_sync) = _glewSearchExtension("GLX_SGI_video_sync", extStart, extEnd); if (glewExperimental || GLXEW_SGI_video_sync) CONST_CAST(GLXEW_SGI_video_sync) = !_glewInit_GLX_SGI_video_sync(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SGI_video_sync */ #ifdef GLX_SUN_get_transparent_index CONST_CAST(GLXEW_SUN_get_transparent_index) = _glewSearchExtension("GLX_SUN_get_transparent_index", extStart, extEnd); if (glewExperimental || GLXEW_SUN_get_transparent_index) CONST_CAST(GLXEW_SUN_get_transparent_index) = !_glewInit_GLX_SUN_get_transparent_index(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SUN_get_transparent_index */ #ifdef GLX_SUN_video_resize CONST_CAST(GLXEW_SUN_video_resize) = _glewSearchExtension("GLX_SUN_video_resize", extStart, extEnd); if (glewExperimental || GLXEW_SUN_video_resize) CONST_CAST(GLXEW_SUN_video_resize) = !_glewInit_GLX_SUN_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); #endif /* GLX_SUN_video_resize */ return GLEW_OK; } #endif /* !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */ /* ------------------------------------------------------------------------ */ const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error) { static const GLubyte* _glewErrorString[] = { (const GLubyte*)"No error", (const GLubyte*)"Missing GL version", (const GLubyte*)"GL 1.1 and up are not supported", (const GLubyte*)"GLX 1.2 and up are not supported", (const GLubyte*)"Unknown error" }; const int max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; return _glewErrorString[(int)error > max_error ? max_error : (int)error]; } const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) { static const GLubyte* _glewString[] = { (const GLubyte*)NULL, (const GLubyte*)"1.9.0", (const GLubyte*)"1", (const GLubyte*)"9", (const GLubyte*)"0" }; const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; return _glewString[(int)name > max_string ? 0 : (int)name]; } /* ------------------------------------------------------------------------ */ GLboolean glewExperimental = GL_FALSE; #if !defined(GLEW_MX) #if defined(_WIN32) extern GLenum GLEWAPIENTRY wglewContextInit (void); #elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) extern GLenum GLEWAPIENTRY glxewContextInit (void); #endif /* _WIN32 */ GLenum GLEWAPIENTRY glewInit (void) { GLenum r; r = glewContextInit(); if ( r != 0 ) return r; #if defined(_WIN32) return wglewContextInit(); #elif !defined(__ANDROID__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ return glxewContextInit(); #else return r; #endif /* _WIN32 */ } #endif /* !GLEW_MX */ #ifdef GLEW_MX GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext* ctx, const char* name) #else GLboolean GLEWAPIENTRY glewIsSupported (const char* name) #endif { GLubyte* pos = (GLubyte*)name; GLuint len = _glewStrLen(pos); GLboolean ret = GL_TRUE; while (ret && len > 0) { if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) { if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) { #ifdef GL_VERSION_1_2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) { ret = GLEW_VERSION_1_2; continue; } #endif #ifdef GL_VERSION_1_2_1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2_1", 5)) { ret = GLEW_VERSION_1_2_1; continue; } #endif #ifdef GL_VERSION_1_3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) { ret = GLEW_VERSION_1_3; continue; } #endif #ifdef GL_VERSION_1_4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) { ret = GLEW_VERSION_1_4; continue; } #endif #ifdef GL_VERSION_1_5 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_5", 3)) { ret = GLEW_VERSION_1_5; continue; } #endif #ifdef GL_VERSION_2_0 if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_0", 3)) { ret = GLEW_VERSION_2_0; continue; } #endif #ifdef GL_VERSION_2_1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_1", 3)) { ret = GLEW_VERSION_2_1; continue; } #endif #ifdef GL_VERSION_3_0 if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_0", 3)) { ret = GLEW_VERSION_3_0; continue; } #endif #ifdef GL_VERSION_3_1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_1", 3)) { ret = GLEW_VERSION_3_1; continue; } #endif #ifdef GL_VERSION_3_2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_2", 3)) { ret = GLEW_VERSION_3_2; continue; } #endif #ifdef GL_VERSION_3_3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_3", 3)) { ret = GLEW_VERSION_3_3; continue; } #endif #ifdef GL_VERSION_4_0 if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_0", 3)) { ret = GLEW_VERSION_4_0; continue; } #endif #ifdef GL_VERSION_4_1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_1", 3)) { ret = GLEW_VERSION_4_1; continue; } #endif #ifdef GL_VERSION_4_2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_2", 3)) { ret = GLEW_VERSION_4_2; continue; } #endif #ifdef GL_VERSION_4_3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_3", 3)) { ret = GLEW_VERSION_4_3; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) { #ifdef GL_3DFX_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = GLEW_3DFX_multisample; continue; } #endif #ifdef GL_3DFX_tbuffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"tbuffer", 7)) { ret = GLEW_3DFX_tbuffer; continue; } #endif #ifdef GL_3DFX_texture_compression_FXT1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_FXT1", 24)) { ret = GLEW_3DFX_texture_compression_FXT1; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) { #ifdef GL_AMD_blend_minmax_factor if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax_factor", 19)) { ret = GLEW_AMD_blend_minmax_factor; continue; } #endif #ifdef GL_AMD_conservative_depth if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_depth", 18)) { ret = GLEW_AMD_conservative_depth; continue; } #endif #ifdef GL_AMD_debug_output if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_output", 12)) { ret = GLEW_AMD_debug_output; continue; } #endif #ifdef GL_AMD_depth_clamp_separate if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp_separate", 20)) { ret = GLEW_AMD_depth_clamp_separate; continue; } #endif #ifdef GL_AMD_draw_buffers_blend if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers_blend", 18)) { ret = GLEW_AMD_draw_buffers_blend; continue; } #endif #ifdef GL_AMD_multi_draw_indirect if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) { ret = GLEW_AMD_multi_draw_indirect; continue; } #endif #ifdef GL_AMD_name_gen_delete if (_glewStrSame3(&pos, &len, (const GLubyte*)"name_gen_delete", 15)) { ret = GLEW_AMD_name_gen_delete; continue; } #endif #ifdef GL_AMD_performance_monitor if (_glewStrSame3(&pos, &len, (const GLubyte*)"performance_monitor", 19)) { ret = GLEW_AMD_performance_monitor; continue; } #endif #ifdef GL_AMD_pinned_memory if (_glewStrSame3(&pos, &len, (const GLubyte*)"pinned_memory", 13)) { ret = GLEW_AMD_pinned_memory; continue; } #endif #ifdef GL_AMD_query_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"query_buffer_object", 19)) { ret = GLEW_AMD_query_buffer_object; continue; } #endif #ifdef GL_AMD_sample_positions if (_glewStrSame3(&pos, &len, (const GLubyte*)"sample_positions", 16)) { ret = GLEW_AMD_sample_positions; continue; } #endif #ifdef GL_AMD_seamless_cubemap_per_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cubemap_per_texture", 28)) { ret = GLEW_AMD_seamless_cubemap_per_texture; continue; } #endif #ifdef GL_AMD_shader_stencil_export if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_stencil_export", 21)) { ret = GLEW_AMD_shader_stencil_export; continue; } #endif #ifdef GL_AMD_stencil_operation_extended if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_operation_extended", 26)) { ret = GLEW_AMD_stencil_operation_extended; continue; } #endif #ifdef GL_AMD_texture_texture4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_texture4", 16)) { ret = GLEW_AMD_texture_texture4; continue; } #endif #ifdef GL_AMD_transform_feedback3_lines_triangles if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback3_lines_triangles", 35)) { ret = GLEW_AMD_transform_feedback3_lines_triangles; continue; } #endif #ifdef GL_AMD_vertex_shader_layer if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_layer", 19)) { ret = GLEW_AMD_vertex_shader_layer; continue; } #endif #ifdef GL_AMD_vertex_shader_tessellator if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_tessellator", 25)) { ret = GLEW_AMD_vertex_shader_tessellator; continue; } #endif #ifdef GL_AMD_vertex_shader_viewport_index if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_viewport_index", 28)) { ret = GLEW_AMD_vertex_shader_viewport_index; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"APPLE_", 6)) { #ifdef GL_APPLE_aux_depth_stencil if (_glewStrSame3(&pos, &len, (const GLubyte*)"aux_depth_stencil", 17)) { ret = GLEW_APPLE_aux_depth_stencil; continue; } #endif #ifdef GL_APPLE_client_storage if (_glewStrSame3(&pos, &len, (const GLubyte*)"client_storage", 14)) { ret = GLEW_APPLE_client_storage; continue; } #endif #ifdef GL_APPLE_element_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) { ret = GLEW_APPLE_element_array; continue; } #endif #ifdef GL_APPLE_fence if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) { ret = GLEW_APPLE_fence; continue; } #endif #ifdef GL_APPLE_float_pixels if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_pixels", 12)) { ret = GLEW_APPLE_float_pixels; continue; } #endif #ifdef GL_APPLE_flush_buffer_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_buffer_range", 18)) { ret = GLEW_APPLE_flush_buffer_range; continue; } #endif #ifdef GL_APPLE_object_purgeable if (_glewStrSame3(&pos, &len, (const GLubyte*)"object_purgeable", 16)) { ret = GLEW_APPLE_object_purgeable; continue; } #endif #ifdef GL_APPLE_pixel_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer", 12)) { ret = GLEW_APPLE_pixel_buffer; continue; } #endif #ifdef GL_APPLE_rgb_422 if (_glewStrSame3(&pos, &len, (const GLubyte*)"rgb_422", 7)) { ret = GLEW_APPLE_rgb_422; continue; } #endif #ifdef GL_APPLE_row_bytes if (_glewStrSame3(&pos, &len, (const GLubyte*)"row_bytes", 9)) { ret = GLEW_APPLE_row_bytes; continue; } #endif #ifdef GL_APPLE_specular_vector if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_vector", 15)) { ret = GLEW_APPLE_specular_vector; continue; } #endif #ifdef GL_APPLE_texture_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) { ret = GLEW_APPLE_texture_range; continue; } #endif #ifdef GL_APPLE_transform_hint if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_hint", 14)) { ret = GLEW_APPLE_transform_hint; continue; } #endif #ifdef GL_APPLE_vertex_array_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) { ret = GLEW_APPLE_vertex_array_object; continue; } #endif #ifdef GL_APPLE_vertex_array_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) { ret = GLEW_APPLE_vertex_array_range; continue; } #endif #ifdef GL_APPLE_vertex_program_evaluators if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program_evaluators", 25)) { ret = GLEW_APPLE_vertex_program_evaluators; continue; } #endif #ifdef GL_APPLE_ycbcr_422 if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_422", 9)) { ret = GLEW_APPLE_ycbcr_422; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) { #ifdef GL_ARB_ES2_compatibility if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES2_compatibility", 17)) { ret = GLEW_ARB_ES2_compatibility; continue; } #endif #ifdef GL_ARB_ES3_compatibility if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES3_compatibility", 17)) { ret = GLEW_ARB_ES3_compatibility; continue; } #endif #ifdef GL_ARB_arrays_of_arrays if (_glewStrSame3(&pos, &len, (const GLubyte*)"arrays_of_arrays", 16)) { ret = GLEW_ARB_arrays_of_arrays; continue; } #endif #ifdef GL_ARB_base_instance if (_glewStrSame3(&pos, &len, (const GLubyte*)"base_instance", 13)) { ret = GLEW_ARB_base_instance; continue; } #endif #ifdef GL_ARB_blend_func_extended if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_extended", 19)) { ret = GLEW_ARB_blend_func_extended; continue; } #endif #ifdef GL_ARB_cl_event if (_glewStrSame3(&pos, &len, (const GLubyte*)"cl_event", 8)) { ret = GLEW_ARB_cl_event; continue; } #endif #ifdef GL_ARB_clear_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"clear_buffer_object", 19)) { ret = GLEW_ARB_clear_buffer_object; continue; } #endif #ifdef GL_ARB_color_buffer_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_buffer_float", 18)) { ret = GLEW_ARB_color_buffer_float; continue; } #endif #ifdef GL_ARB_compatibility if (_glewStrSame3(&pos, &len, (const GLubyte*)"compatibility", 13)) { ret = GLEW_ARB_compatibility; continue; } #endif #ifdef GL_ARB_compressed_texture_pixel_storage if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_texture_pixel_storage", 32)) { ret = GLEW_ARB_compressed_texture_pixel_storage; continue; } #endif #ifdef GL_ARB_compute_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_shader", 14)) { ret = GLEW_ARB_compute_shader; continue; } #endif #ifdef GL_ARB_conservative_depth if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_depth", 18)) { ret = GLEW_ARB_conservative_depth; continue; } #endif #ifdef GL_ARB_copy_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_buffer", 11)) { ret = GLEW_ARB_copy_buffer; continue; } #endif #ifdef GL_ARB_copy_image if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) { ret = GLEW_ARB_copy_image; continue; } #endif #ifdef GL_ARB_debug_output if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_output", 12)) { ret = GLEW_ARB_debug_output; continue; } #endif #ifdef GL_ARB_depth_buffer_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) { ret = GLEW_ARB_depth_buffer_float; continue; } #endif #ifdef GL_ARB_depth_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) { ret = GLEW_ARB_depth_clamp; continue; } #endif #ifdef GL_ARB_depth_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) { ret = GLEW_ARB_depth_texture; continue; } #endif #ifdef GL_ARB_draw_buffers if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) { ret = GLEW_ARB_draw_buffers; continue; } #endif #ifdef GL_ARB_draw_buffers_blend if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers_blend", 18)) { ret = GLEW_ARB_draw_buffers_blend; continue; } #endif #ifdef GL_ARB_draw_elements_base_vertex if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_elements_base_vertex", 25)) { ret = GLEW_ARB_draw_elements_base_vertex; continue; } #endif #ifdef GL_ARB_draw_indirect if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_indirect", 13)) { ret = GLEW_ARB_draw_indirect; continue; } #endif #ifdef GL_ARB_draw_instanced if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) { ret = GLEW_ARB_draw_instanced; continue; } #endif #ifdef GL_ARB_explicit_attrib_location if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_attrib_location", 24)) { ret = GLEW_ARB_explicit_attrib_location; continue; } #endif #ifdef GL_ARB_explicit_uniform_location if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_uniform_location", 25)) { ret = GLEW_ARB_explicit_uniform_location; continue; } #endif #ifdef GL_ARB_fragment_coord_conventions if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_coord_conventions", 26)) { ret = GLEW_ARB_fragment_coord_conventions; continue; } #endif #ifdef GL_ARB_fragment_layer_viewport if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_layer_viewport", 23)) { ret = GLEW_ARB_fragment_layer_viewport; continue; } #endif #ifdef GL_ARB_fragment_program if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) { ret = GLEW_ARB_fragment_program; continue; } #endif #ifdef GL_ARB_fragment_program_shadow if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_shadow", 23)) { ret = GLEW_ARB_fragment_program_shadow; continue; } #endif #ifdef GL_ARB_fragment_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) { ret = GLEW_ARB_fragment_shader; continue; } #endif #ifdef GL_ARB_framebuffer_no_attachments if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_no_attachments", 26)) { ret = GLEW_ARB_framebuffer_no_attachments; continue; } #endif #ifdef GL_ARB_framebuffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) { ret = GLEW_ARB_framebuffer_object; continue; } #endif #ifdef GL_ARB_framebuffer_sRGB if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) { ret = GLEW_ARB_framebuffer_sRGB; continue; } #endif #ifdef GL_ARB_geometry_shader4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) { ret = GLEW_ARB_geometry_shader4; continue; } #endif #ifdef GL_ARB_get_program_binary if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_program_binary", 18)) { ret = GLEW_ARB_get_program_binary; continue; } #endif #ifdef GL_ARB_gpu_shader5 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader5", 11)) { ret = GLEW_ARB_gpu_shader5; continue; } #endif #ifdef GL_ARB_gpu_shader_fp64 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader_fp64", 15)) { ret = GLEW_ARB_gpu_shader_fp64; continue; } #endif #ifdef GL_ARB_half_float_pixel if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_pixel", 16)) { ret = GLEW_ARB_half_float_pixel; continue; } #endif #ifdef GL_ARB_half_float_vertex if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_vertex", 17)) { ret = GLEW_ARB_half_float_vertex; continue; } #endif #ifdef GL_ARB_imaging if (_glewStrSame3(&pos, &len, (const GLubyte*)"imaging", 7)) { ret = GLEW_ARB_imaging; continue; } #endif #ifdef GL_ARB_instanced_arrays if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) { ret = GLEW_ARB_instanced_arrays; continue; } #endif #ifdef GL_ARB_internalformat_query if (_glewStrSame3(&pos, &len, (const GLubyte*)"internalformat_query", 20)) { ret = GLEW_ARB_internalformat_query; continue; } #endif #ifdef GL_ARB_internalformat_query2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"internalformat_query2", 21)) { ret = GLEW_ARB_internalformat_query2; continue; } #endif #ifdef GL_ARB_invalidate_subdata if (_glewStrSame3(&pos, &len, (const GLubyte*)"invalidate_subdata", 18)) { ret = GLEW_ARB_invalidate_subdata; continue; } #endif #ifdef GL_ARB_map_buffer_alignment if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_buffer_alignment", 20)) { ret = GLEW_ARB_map_buffer_alignment; continue; } #endif #ifdef GL_ARB_map_buffer_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_buffer_range", 16)) { ret = GLEW_ARB_map_buffer_range; continue; } #endif #ifdef GL_ARB_matrix_palette if (_glewStrSame3(&pos, &len, (const GLubyte*)"matrix_palette", 14)) { ret = GLEW_ARB_matrix_palette; continue; } #endif #ifdef GL_ARB_multi_draw_indirect if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) { ret = GLEW_ARB_multi_draw_indirect; continue; } #endif #ifdef GL_ARB_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = GLEW_ARB_multisample; continue; } #endif #ifdef GL_ARB_multitexture if (_glewStrSame3(&pos, &len, (const GLubyte*)"multitexture", 12)) { ret = GLEW_ARB_multitexture; continue; } #endif #ifdef GL_ARB_occlusion_query if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) { ret = GLEW_ARB_occlusion_query; continue; } #endif #ifdef GL_ARB_occlusion_query2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query2", 16)) { ret = GLEW_ARB_occlusion_query2; continue; } #endif #ifdef GL_ARB_pixel_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) { ret = GLEW_ARB_pixel_buffer_object; continue; } #endif #ifdef GL_ARB_point_parameters if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) { ret = GLEW_ARB_point_parameters; continue; } #endif #ifdef GL_ARB_point_sprite if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) { ret = GLEW_ARB_point_sprite; continue; } #endif #ifdef GL_ARB_program_interface_query if (_glewStrSame3(&pos, &len, (const GLubyte*)"program_interface_query", 23)) { ret = GLEW_ARB_program_interface_query; continue; } #endif #ifdef GL_ARB_provoking_vertex if (_glewStrSame3(&pos, &len, (const GLubyte*)"provoking_vertex", 16)) { ret = GLEW_ARB_provoking_vertex; continue; } #endif #ifdef GL_ARB_robust_buffer_access_behavior if (_glewStrSame3(&pos, &len, (const GLubyte*)"robust_buffer_access_behavior", 29)) { ret = GLEW_ARB_robust_buffer_access_behavior; continue; } #endif #ifdef GL_ARB_robustness if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness", 10)) { ret = GLEW_ARB_robustness; continue; } #endif #ifdef GL_ARB_robustness_application_isolation if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) { ret = GLEW_ARB_robustness_application_isolation; continue; } #endif #ifdef GL_ARB_robustness_share_group_isolation if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) { ret = GLEW_ARB_robustness_share_group_isolation; continue; } #endif #ifdef GL_ARB_sample_shading if (_glewStrSame3(&pos, &len, (const GLubyte*)"sample_shading", 14)) { ret = GLEW_ARB_sample_shading; continue; } #endif #ifdef GL_ARB_sampler_objects if (_glewStrSame3(&pos, &len, (const GLubyte*)"sampler_objects", 15)) { ret = GLEW_ARB_sampler_objects; continue; } #endif #ifdef GL_ARB_seamless_cube_map if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cube_map", 17)) { ret = GLEW_ARB_seamless_cube_map; continue; } #endif #ifdef GL_ARB_separate_shader_objects if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_shader_objects", 23)) { ret = GLEW_ARB_separate_shader_objects; continue; } #endif #ifdef GL_ARB_shader_atomic_counters if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_counters", 22)) { ret = GLEW_ARB_shader_atomic_counters; continue; } #endif #ifdef GL_ARB_shader_bit_encoding if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_bit_encoding", 19)) { ret = GLEW_ARB_shader_bit_encoding; continue; } #endif #ifdef GL_ARB_shader_image_load_store if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_load_store", 23)) { ret = GLEW_ARB_shader_image_load_store; continue; } #endif #ifdef GL_ARB_shader_image_size if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_size", 17)) { ret = GLEW_ARB_shader_image_size; continue; } #endif #ifdef GL_ARB_shader_objects if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_objects", 14)) { ret = GLEW_ARB_shader_objects; continue; } #endif #ifdef GL_ARB_shader_precision if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_precision", 16)) { ret = GLEW_ARB_shader_precision; continue; } #endif #ifdef GL_ARB_shader_stencil_export if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_stencil_export", 21)) { ret = GLEW_ARB_shader_stencil_export; continue; } #endif #ifdef GL_ARB_shader_storage_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_storage_buffer_object", 28)) { ret = GLEW_ARB_shader_storage_buffer_object; continue; } #endif #ifdef GL_ARB_shader_subroutine if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_subroutine", 17)) { ret = GLEW_ARB_shader_subroutine; continue; } #endif #ifdef GL_ARB_shader_texture_lod if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) { ret = GLEW_ARB_shader_texture_lod; continue; } #endif #ifdef GL_ARB_shading_language_100 if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_100", 20)) { ret = GLEW_ARB_shading_language_100; continue; } #endif #ifdef GL_ARB_shading_language_420pack if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_420pack", 24)) { ret = GLEW_ARB_shading_language_420pack; continue; } #endif #ifdef GL_ARB_shading_language_include if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_include", 24)) { ret = GLEW_ARB_shading_language_include; continue; } #endif #ifdef GL_ARB_shading_language_packing if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_packing", 24)) { ret = GLEW_ARB_shading_language_packing; continue; } #endif #ifdef GL_ARB_shadow if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) { ret = GLEW_ARB_shadow; continue; } #endif #ifdef GL_ARB_shadow_ambient if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) { ret = GLEW_ARB_shadow_ambient; continue; } #endif #ifdef GL_ARB_stencil_texturing if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_texturing", 17)) { ret = GLEW_ARB_stencil_texturing; continue; } #endif #ifdef GL_ARB_sync if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync", 4)) { ret = GLEW_ARB_sync; continue; } #endif #ifdef GL_ARB_tessellation_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_shader", 19)) { ret = GLEW_ARB_tessellation_shader; continue; } #endif #ifdef GL_ARB_texture_border_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) { ret = GLEW_ARB_texture_border_clamp; continue; } #endif #ifdef GL_ARB_texture_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) { ret = GLEW_ARB_texture_buffer_object; continue; } #endif #ifdef GL_ARB_texture_buffer_object_rgb32 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object_rgb32", 27)) { ret = GLEW_ARB_texture_buffer_object_rgb32; continue; } #endif #ifdef GL_ARB_texture_buffer_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_range", 20)) { ret = GLEW_ARB_texture_buffer_range; continue; } #endif #ifdef GL_ARB_texture_compression if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression", 19)) { ret = GLEW_ARB_texture_compression; continue; } #endif #ifdef GL_ARB_texture_compression_bptc if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_bptc", 24)) { ret = GLEW_ARB_texture_compression_bptc; continue; } #endif #ifdef GL_ARB_texture_compression_rgtc if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) { ret = GLEW_ARB_texture_compression_rgtc; continue; } #endif #ifdef GL_ARB_texture_cube_map if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) { ret = GLEW_ARB_texture_cube_map; continue; } #endif #ifdef GL_ARB_texture_cube_map_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map_array", 22)) { ret = GLEW_ARB_texture_cube_map_array; continue; } #endif #ifdef GL_ARB_texture_env_add if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) { ret = GLEW_ARB_texture_env_add; continue; } #endif #ifdef GL_ARB_texture_env_combine if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) { ret = GLEW_ARB_texture_env_combine; continue; } #endif #ifdef GL_ARB_texture_env_crossbar if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_crossbar", 20)) { ret = GLEW_ARB_texture_env_crossbar; continue; } #endif #ifdef GL_ARB_texture_env_dot3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) { ret = GLEW_ARB_texture_env_dot3; continue; } #endif #ifdef GL_ARB_texture_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) { ret = GLEW_ARB_texture_float; continue; } #endif #ifdef GL_ARB_texture_gather if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_gather", 14)) { ret = GLEW_ARB_texture_gather; continue; } #endif #ifdef GL_ARB_texture_mirrored_repeat if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) { ret = GLEW_ARB_texture_mirrored_repeat; continue; } #endif #ifdef GL_ARB_texture_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multisample", 19)) { ret = GLEW_ARB_texture_multisample; continue; } #endif #ifdef GL_ARB_texture_non_power_of_two if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_non_power_of_two", 24)) { ret = GLEW_ARB_texture_non_power_of_two; continue; } #endif #ifdef GL_ARB_texture_query_levels if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_query_levels", 20)) { ret = GLEW_ARB_texture_query_levels; continue; } #endif #ifdef GL_ARB_texture_query_lod if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_query_lod", 17)) { ret = GLEW_ARB_texture_query_lod; continue; } #endif #ifdef GL_ARB_texture_rectangle if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) { ret = GLEW_ARB_texture_rectangle; continue; } #endif #ifdef GL_ARB_texture_rg if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rg", 10)) { ret = GLEW_ARB_texture_rg; continue; } #endif #ifdef GL_ARB_texture_rgb10_a2ui if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rgb10_a2ui", 18)) { ret = GLEW_ARB_texture_rgb10_a2ui; continue; } #endif #ifdef GL_ARB_texture_storage if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_storage", 15)) { ret = GLEW_ARB_texture_storage; continue; } #endif #ifdef GL_ARB_texture_storage_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_storage_multisample", 27)) { ret = GLEW_ARB_texture_storage_multisample; continue; } #endif #ifdef GL_ARB_texture_swizzle if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_swizzle", 15)) { ret = GLEW_ARB_texture_swizzle; continue; } #endif #ifdef GL_ARB_texture_view if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_view", 12)) { ret = GLEW_ARB_texture_view; continue; } #endif #ifdef GL_ARB_timer_query if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) { ret = GLEW_ARB_timer_query; continue; } #endif #ifdef GL_ARB_transform_feedback2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback2", 19)) { ret = GLEW_ARB_transform_feedback2; continue; } #endif #ifdef GL_ARB_transform_feedback3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback3", 19)) { ret = GLEW_ARB_transform_feedback3; continue; } #endif #ifdef GL_ARB_transform_feedback_instanced if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback_instanced", 28)) { ret = GLEW_ARB_transform_feedback_instanced; continue; } #endif #ifdef GL_ARB_transpose_matrix if (_glewStrSame3(&pos, &len, (const GLubyte*)"transpose_matrix", 16)) { ret = GLEW_ARB_transpose_matrix; continue; } #endif #ifdef GL_ARB_uniform_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"uniform_buffer_object", 21)) { ret = GLEW_ARB_uniform_buffer_object; continue; } #endif #ifdef GL_ARB_vertex_array_bgra if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_bgra", 17)) { ret = GLEW_ARB_vertex_array_bgra; continue; } #endif #ifdef GL_ARB_vertex_array_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) { ret = GLEW_ARB_vertex_array_object; continue; } #endif #ifdef GL_ARB_vertex_attrib_64bit if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_64bit", 19)) { ret = GLEW_ARB_vertex_attrib_64bit; continue; } #endif #ifdef GL_ARB_vertex_attrib_binding if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_binding", 21)) { ret = GLEW_ARB_vertex_attrib_binding; continue; } #endif #ifdef GL_ARB_vertex_blend if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_blend", 12)) { ret = GLEW_ARB_vertex_blend; continue; } #endif #ifdef GL_ARB_vertex_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) { ret = GLEW_ARB_vertex_buffer_object; continue; } #endif #ifdef GL_ARB_vertex_program if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) { ret = GLEW_ARB_vertex_program; continue; } #endif #ifdef GL_ARB_vertex_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) { ret = GLEW_ARB_vertex_shader; continue; } #endif #ifdef GL_ARB_vertex_type_2_10_10_10_rev if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_type_2_10_10_10_rev", 26)) { ret = GLEW_ARB_vertex_type_2_10_10_10_rev; continue; } #endif #ifdef GL_ARB_viewport_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"viewport_array", 14)) { ret = GLEW_ARB_viewport_array; continue; } #endif #ifdef GL_ARB_window_pos if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) { ret = GLEW_ARB_window_pos; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATIX_", 5)) { #ifdef GL_ATIX_point_sprites if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprites", 13)) { ret = GLEW_ATIX_point_sprites; continue; } #endif #ifdef GL_ATIX_texture_env_combine3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) { ret = GLEW_ATIX_texture_env_combine3; continue; } #endif #ifdef GL_ATIX_texture_env_route if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_route", 17)) { ret = GLEW_ATIX_texture_env_route; continue; } #endif #ifdef GL_ATIX_vertex_shader_output_point_size if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_output_point_size", 31)) { ret = GLEW_ATIX_vertex_shader_output_point_size; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) { #ifdef GL_ATI_draw_buffers if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) { ret = GLEW_ATI_draw_buffers; continue; } #endif #ifdef GL_ATI_element_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) { ret = GLEW_ATI_element_array; continue; } #endif #ifdef GL_ATI_envmap_bumpmap if (_glewStrSame3(&pos, &len, (const GLubyte*)"envmap_bumpmap", 14)) { ret = GLEW_ATI_envmap_bumpmap; continue; } #endif #ifdef GL_ATI_fragment_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) { ret = GLEW_ATI_fragment_shader; continue; } #endif #ifdef GL_ATI_map_object_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_object_buffer", 17)) { ret = GLEW_ATI_map_object_buffer; continue; } #endif #ifdef GL_ATI_meminfo if (_glewStrSame3(&pos, &len, (const GLubyte*)"meminfo", 7)) { ret = GLEW_ATI_meminfo; continue; } #endif #ifdef GL_ATI_pn_triangles if (_glewStrSame3(&pos, &len, (const GLubyte*)"pn_triangles", 12)) { ret = GLEW_ATI_pn_triangles; continue; } #endif #ifdef GL_ATI_separate_stencil if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_stencil", 16)) { ret = GLEW_ATI_separate_stencil; continue; } #endif #ifdef GL_ATI_shader_texture_lod if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) { ret = GLEW_ATI_shader_texture_lod; continue; } #endif #ifdef GL_ATI_text_fragment_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"text_fragment_shader", 20)) { ret = GLEW_ATI_text_fragment_shader; continue; } #endif #ifdef GL_ATI_texture_compression_3dc if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_3dc", 23)) { ret = GLEW_ATI_texture_compression_3dc; continue; } #endif #ifdef GL_ATI_texture_env_combine3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) { ret = GLEW_ATI_texture_env_combine3; continue; } #endif #ifdef GL_ATI_texture_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) { ret = GLEW_ATI_texture_float; continue; } #endif #ifdef GL_ATI_texture_mirror_once if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_once", 19)) { ret = GLEW_ATI_texture_mirror_once; continue; } #endif #ifdef GL_ATI_vertex_array_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) { ret = GLEW_ATI_vertex_array_object; continue; } #endif #ifdef GL_ATI_vertex_attrib_array_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_array_object", 26)) { ret = GLEW_ATI_vertex_attrib_array_object; continue; } #endif #ifdef GL_ATI_vertex_streams if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_streams", 14)) { ret = GLEW_ATI_vertex_streams; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) { #ifdef GL_EXT_422_pixels if (_glewStrSame3(&pos, &len, (const GLubyte*)"422_pixels", 10)) { ret = GLEW_EXT_422_pixels; continue; } #endif #ifdef GL_EXT_Cg_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"Cg_shader", 9)) { ret = GLEW_EXT_Cg_shader; continue; } #endif #ifdef GL_EXT_abgr if (_glewStrSame3(&pos, &len, (const GLubyte*)"abgr", 4)) { ret = GLEW_EXT_abgr; continue; } #endif #ifdef GL_EXT_bgra if (_glewStrSame3(&pos, &len, (const GLubyte*)"bgra", 4)) { ret = GLEW_EXT_bgra; continue; } #endif #ifdef GL_EXT_bindable_uniform if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindable_uniform", 16)) { ret = GLEW_EXT_bindable_uniform; continue; } #endif #ifdef GL_EXT_blend_color if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_color", 11)) { ret = GLEW_EXT_blend_color; continue; } #endif #ifdef GL_EXT_blend_equation_separate if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_separate", 23)) { ret = GLEW_EXT_blend_equation_separate; continue; } #endif #ifdef GL_EXT_blend_func_separate if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_separate", 19)) { ret = GLEW_EXT_blend_func_separate; continue; } #endif #ifdef GL_EXT_blend_logic_op if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_logic_op", 14)) { ret = GLEW_EXT_blend_logic_op; continue; } #endif #ifdef GL_EXT_blend_minmax if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax", 12)) { ret = GLEW_EXT_blend_minmax; continue; } #endif #ifdef GL_EXT_blend_subtract if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_subtract", 14)) { ret = GLEW_EXT_blend_subtract; continue; } #endif #ifdef GL_EXT_clip_volume_hint if (_glewStrSame3(&pos, &len, (const GLubyte*)"clip_volume_hint", 16)) { ret = GLEW_EXT_clip_volume_hint; continue; } #endif #ifdef GL_EXT_cmyka if (_glewStrSame3(&pos, &len, (const GLubyte*)"cmyka", 5)) { ret = GLEW_EXT_cmyka; continue; } #endif #ifdef GL_EXT_color_subtable if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_subtable", 14)) { ret = GLEW_EXT_color_subtable; continue; } #endif #ifdef GL_EXT_compiled_vertex_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"compiled_vertex_array", 21)) { ret = GLEW_EXT_compiled_vertex_array; continue; } #endif #ifdef GL_EXT_convolution if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution", 11)) { ret = GLEW_EXT_convolution; continue; } #endif #ifdef GL_EXT_coordinate_frame if (_glewStrSame3(&pos, &len, (const GLubyte*)"coordinate_frame", 16)) { ret = GLEW_EXT_coordinate_frame; continue; } #endif #ifdef GL_EXT_copy_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_texture", 12)) { ret = GLEW_EXT_copy_texture; continue; } #endif #ifdef GL_EXT_cull_vertex if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) { ret = GLEW_EXT_cull_vertex; continue; } #endif #ifdef GL_EXT_debug_marker if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_marker", 12)) { ret = GLEW_EXT_debug_marker; continue; } #endif #ifdef GL_EXT_depth_bounds_test if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_bounds_test", 17)) { ret = GLEW_EXT_depth_bounds_test; continue; } #endif #ifdef GL_EXT_direct_state_access if (_glewStrSame3(&pos, &len, (const GLubyte*)"direct_state_access", 19)) { ret = GLEW_EXT_direct_state_access; continue; } #endif #ifdef GL_EXT_draw_buffers2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers2", 13)) { ret = GLEW_EXT_draw_buffers2; continue; } #endif #ifdef GL_EXT_draw_instanced if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) { ret = GLEW_EXT_draw_instanced; continue; } #endif #ifdef GL_EXT_draw_range_elements if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_range_elements", 19)) { ret = GLEW_EXT_draw_range_elements; continue; } #endif #ifdef GL_EXT_fog_coord if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_coord", 9)) { ret = GLEW_EXT_fog_coord; continue; } #endif #ifdef GL_EXT_fragment_lighting if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_lighting", 17)) { ret = GLEW_EXT_fragment_lighting; continue; } #endif #ifdef GL_EXT_framebuffer_blit if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) { ret = GLEW_EXT_framebuffer_blit; continue; } #endif #ifdef GL_EXT_framebuffer_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) { ret = GLEW_EXT_framebuffer_multisample; continue; } #endif #ifdef GL_EXT_framebuffer_multisample_blit_scaled if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_blit_scaled", 35)) { ret = GLEW_EXT_framebuffer_multisample_blit_scaled; continue; } #endif #ifdef GL_EXT_framebuffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) { ret = GLEW_EXT_framebuffer_object; continue; } #endif #ifdef GL_EXT_framebuffer_sRGB if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) { ret = GLEW_EXT_framebuffer_sRGB; continue; } #endif #ifdef GL_EXT_geometry_shader4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) { ret = GLEW_EXT_geometry_shader4; continue; } #endif #ifdef GL_EXT_gpu_program_parameters if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_parameters", 22)) { ret = GLEW_EXT_gpu_program_parameters; continue; } #endif #ifdef GL_EXT_gpu_shader4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader4", 11)) { ret = GLEW_EXT_gpu_shader4; continue; } #endif #ifdef GL_EXT_histogram if (_glewStrSame3(&pos, &len, (const GLubyte*)"histogram", 9)) { ret = GLEW_EXT_histogram; continue; } #endif #ifdef GL_EXT_index_array_formats if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_array_formats", 19)) { ret = GLEW_EXT_index_array_formats; continue; } #endif #ifdef GL_EXT_index_func if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_func", 10)) { ret = GLEW_EXT_index_func; continue; } #endif #ifdef GL_EXT_index_material if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_material", 14)) { ret = GLEW_EXT_index_material; continue; } #endif #ifdef GL_EXT_index_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_texture", 13)) { ret = GLEW_EXT_index_texture; continue; } #endif #ifdef GL_EXT_light_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_texture", 13)) { ret = GLEW_EXT_light_texture; continue; } #endif #ifdef GL_EXT_misc_attribute if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_attribute", 14)) { ret = GLEW_EXT_misc_attribute; continue; } #endif #ifdef GL_EXT_multi_draw_arrays if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_arrays", 17)) { ret = GLEW_EXT_multi_draw_arrays; continue; } #endif #ifdef GL_EXT_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = GLEW_EXT_multisample; continue; } #endif #ifdef GL_EXT_packed_depth_stencil if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) { ret = GLEW_EXT_packed_depth_stencil; continue; } #endif #ifdef GL_EXT_packed_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_float", 12)) { ret = GLEW_EXT_packed_float; continue; } #endif #ifdef GL_EXT_packed_pixels if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_pixels", 13)) { ret = GLEW_EXT_packed_pixels; continue; } #endif #ifdef GL_EXT_paletted_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"paletted_texture", 16)) { ret = GLEW_EXT_paletted_texture; continue; } #endif #ifdef GL_EXT_pixel_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) { ret = GLEW_EXT_pixel_buffer_object; continue; } #endif #ifdef GL_EXT_pixel_transform if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform", 15)) { ret = GLEW_EXT_pixel_transform; continue; } #endif #ifdef GL_EXT_pixel_transform_color_table if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform_color_table", 27)) { ret = GLEW_EXT_pixel_transform_color_table; continue; } #endif #ifdef GL_EXT_point_parameters if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) { ret = GLEW_EXT_point_parameters; continue; } #endif #ifdef GL_EXT_polygon_offset if (_glewStrSame3(&pos, &len, (const GLubyte*)"polygon_offset", 14)) { ret = GLEW_EXT_polygon_offset; continue; } #endif #ifdef GL_EXT_provoking_vertex if (_glewStrSame3(&pos, &len, (const GLubyte*)"provoking_vertex", 16)) { ret = GLEW_EXT_provoking_vertex; continue; } #endif #ifdef GL_EXT_rescale_normal if (_glewStrSame3(&pos, &len, (const GLubyte*)"rescale_normal", 14)) { ret = GLEW_EXT_rescale_normal; continue; } #endif #ifdef GL_EXT_scene_marker if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) { ret = GLEW_EXT_scene_marker; continue; } #endif #ifdef GL_EXT_secondary_color if (_glewStrSame3(&pos, &len, (const GLubyte*)"secondary_color", 15)) { ret = GLEW_EXT_secondary_color; continue; } #endif #ifdef GL_EXT_separate_shader_objects if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_shader_objects", 23)) { ret = GLEW_EXT_separate_shader_objects; continue; } #endif #ifdef GL_EXT_separate_specular_color if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_specular_color", 23)) { ret = GLEW_EXT_separate_specular_color; continue; } #endif #ifdef GL_EXT_shader_image_load_store if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_load_store", 23)) { ret = GLEW_EXT_shader_image_load_store; continue; } #endif #ifdef GL_EXT_shadow_funcs if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_funcs", 12)) { ret = GLEW_EXT_shadow_funcs; continue; } #endif #ifdef GL_EXT_shared_texture_palette if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_texture_palette", 22)) { ret = GLEW_EXT_shared_texture_palette; continue; } #endif #ifdef GL_EXT_stencil_clear_tag if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_clear_tag", 17)) { ret = GLEW_EXT_stencil_clear_tag; continue; } #endif #ifdef GL_EXT_stencil_two_side if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_two_side", 16)) { ret = GLEW_EXT_stencil_two_side; continue; } #endif #ifdef GL_EXT_stencil_wrap if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_wrap", 12)) { ret = GLEW_EXT_stencil_wrap; continue; } #endif #ifdef GL_EXT_subtexture if (_glewStrSame3(&pos, &len, (const GLubyte*)"subtexture", 10)) { ret = GLEW_EXT_subtexture; continue; } #endif #ifdef GL_EXT_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture", 7)) { ret = GLEW_EXT_texture; continue; } #endif #ifdef GL_EXT_texture3D if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture3D", 9)) { ret = GLEW_EXT_texture3D; continue; } #endif #ifdef GL_EXT_texture_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_array", 13)) { ret = GLEW_EXT_texture_array; continue; } #endif #ifdef GL_EXT_texture_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) { ret = GLEW_EXT_texture_buffer_object; continue; } #endif #ifdef GL_EXT_texture_compression_dxt1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) { ret = GLEW_EXT_texture_compression_dxt1; continue; } #endif #ifdef GL_EXT_texture_compression_latc if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_latc", 24)) { ret = GLEW_EXT_texture_compression_latc; continue; } #endif #ifdef GL_EXT_texture_compression_rgtc if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) { ret = GLEW_EXT_texture_compression_rgtc; continue; } #endif #ifdef GL_EXT_texture_compression_s3tc if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_s3tc", 24)) { ret = GLEW_EXT_texture_compression_s3tc; continue; } #endif #ifdef GL_EXT_texture_cube_map if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) { ret = GLEW_EXT_texture_cube_map; continue; } #endif #ifdef GL_EXT_texture_edge_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) { ret = GLEW_EXT_texture_edge_clamp; continue; } #endif #ifdef GL_EXT_texture_env if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env", 11)) { ret = GLEW_EXT_texture_env; continue; } #endif #ifdef GL_EXT_texture_env_add if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) { ret = GLEW_EXT_texture_env_add; continue; } #endif #ifdef GL_EXT_texture_env_combine if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) { ret = GLEW_EXT_texture_env_combine; continue; } #endif #ifdef GL_EXT_texture_env_dot3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) { ret = GLEW_EXT_texture_env_dot3; continue; } #endif #ifdef GL_EXT_texture_filter_anisotropic if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter_anisotropic", 26)) { ret = GLEW_EXT_texture_filter_anisotropic; continue; } #endif #ifdef GL_EXT_texture_integer if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_integer", 15)) { ret = GLEW_EXT_texture_integer; continue; } #endif #ifdef GL_EXT_texture_lod_bias if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) { ret = GLEW_EXT_texture_lod_bias; continue; } #endif #ifdef GL_EXT_texture_mirror_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp", 20)) { ret = GLEW_EXT_texture_mirror_clamp; continue; } #endif #ifdef GL_EXT_texture_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_object", 14)) { ret = GLEW_EXT_texture_object; continue; } #endif #ifdef GL_EXT_texture_perturb_normal if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_perturb_normal", 22)) { ret = GLEW_EXT_texture_perturb_normal; continue; } #endif #ifdef GL_EXT_texture_rectangle if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) { ret = GLEW_EXT_texture_rectangle; continue; } #endif #ifdef GL_EXT_texture_sRGB if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB", 12)) { ret = GLEW_EXT_texture_sRGB; continue; } #endif #ifdef GL_EXT_texture_sRGB_decode if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB_decode", 19)) { ret = GLEW_EXT_texture_sRGB_decode; continue; } #endif #ifdef GL_EXT_texture_shared_exponent if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shared_exponent", 23)) { ret = GLEW_EXT_texture_shared_exponent; continue; } #endif #ifdef GL_EXT_texture_snorm if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_snorm", 13)) { ret = GLEW_EXT_texture_snorm; continue; } #endif #ifdef GL_EXT_texture_swizzle if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_swizzle", 15)) { ret = GLEW_EXT_texture_swizzle; continue; } #endif #ifdef GL_EXT_timer_query if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) { ret = GLEW_EXT_timer_query; continue; } #endif #ifdef GL_EXT_transform_feedback if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) { ret = GLEW_EXT_transform_feedback; continue; } #endif #ifdef GL_EXT_vertex_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array", 12)) { ret = GLEW_EXT_vertex_array; continue; } #endif #ifdef GL_EXT_vertex_array_bgra if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_bgra", 17)) { ret = GLEW_EXT_vertex_array_bgra; continue; } #endif #ifdef GL_EXT_vertex_attrib_64bit if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_64bit", 19)) { ret = GLEW_EXT_vertex_attrib_64bit; continue; } #endif #ifdef GL_EXT_vertex_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) { ret = GLEW_EXT_vertex_shader; continue; } #endif #ifdef GL_EXT_vertex_weighting if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_weighting", 16)) { ret = GLEW_EXT_vertex_weighting; continue; } #endif #ifdef GL_EXT_x11_sync_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"x11_sync_object", 15)) { ret = GLEW_EXT_x11_sync_object; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"GREMEDY_", 8)) { #ifdef GL_GREMEDY_frame_terminator if (_glewStrSame3(&pos, &len, (const GLubyte*)"frame_terminator", 16)) { ret = GLEW_GREMEDY_frame_terminator; continue; } #endif #ifdef GL_GREMEDY_string_marker if (_glewStrSame3(&pos, &len, (const GLubyte*)"string_marker", 13)) { ret = GLEW_GREMEDY_string_marker; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"HP_", 3)) { #ifdef GL_HP_convolution_border_modes if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) { ret = GLEW_HP_convolution_border_modes; continue; } #endif #ifdef GL_HP_image_transform if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_transform", 15)) { ret = GLEW_HP_image_transform; continue; } #endif #ifdef GL_HP_occlusion_test if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_test", 14)) { ret = GLEW_HP_occlusion_test; continue; } #endif #ifdef GL_HP_texture_lighting if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lighting", 16)) { ret = GLEW_HP_texture_lighting; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"IBM_", 4)) { #ifdef GL_IBM_cull_vertex if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) { ret = GLEW_IBM_cull_vertex; continue; } #endif #ifdef GL_IBM_multimode_draw_arrays if (_glewStrSame3(&pos, &len, (const GLubyte*)"multimode_draw_arrays", 21)) { ret = GLEW_IBM_multimode_draw_arrays; continue; } #endif #ifdef GL_IBM_rasterpos_clip if (_glewStrSame3(&pos, &len, (const GLubyte*)"rasterpos_clip", 14)) { ret = GLEW_IBM_rasterpos_clip; continue; } #endif #ifdef GL_IBM_static_data if (_glewStrSame3(&pos, &len, (const GLubyte*)"static_data", 11)) { ret = GLEW_IBM_static_data; continue; } #endif #ifdef GL_IBM_texture_mirrored_repeat if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) { ret = GLEW_IBM_texture_mirrored_repeat; continue; } #endif #ifdef GL_IBM_vertex_array_lists if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_lists", 18)) { ret = GLEW_IBM_vertex_array_lists; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"INGR_", 5)) { #ifdef GL_INGR_color_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_clamp", 11)) { ret = GLEW_INGR_color_clamp; continue; } #endif #ifdef GL_INGR_interlace_read if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace_read", 14)) { ret = GLEW_INGR_interlace_read; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) { #ifdef GL_INTEL_parallel_arrays if (_glewStrSame3(&pos, &len, (const GLubyte*)"parallel_arrays", 15)) { ret = GLEW_INTEL_parallel_arrays; continue; } #endif #ifdef GL_INTEL_texture_scissor if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scissor", 15)) { ret = GLEW_INTEL_texture_scissor; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"KHR_", 4)) { #ifdef GL_KHR_debug if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug", 5)) { ret = GLEW_KHR_debug; continue; } #endif #ifdef GL_KHR_texture_compression_astc_ldr if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_astc_ldr", 28)) { ret = GLEW_KHR_texture_compression_astc_ldr; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"KTX_", 4)) { #ifdef GL_KTX_buffer_region if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) { ret = GLEW_KTX_buffer_region; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESAX_", 6)) { #ifdef GL_MESAX_texture_stack if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stack", 13)) { ret = GLEW_MESAX_texture_stack; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) { #ifdef GL_MESA_pack_invert if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_invert", 11)) { ret = GLEW_MESA_pack_invert; continue; } #endif #ifdef GL_MESA_resize_buffers if (_glewStrSame3(&pos, &len, (const GLubyte*)"resize_buffers", 14)) { ret = GLEW_MESA_resize_buffers; continue; } #endif #ifdef GL_MESA_window_pos if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) { ret = GLEW_MESA_window_pos; continue; } #endif #ifdef GL_MESA_ycbcr_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_texture", 13)) { ret = GLEW_MESA_ycbcr_texture; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"NVX_", 4)) { #ifdef GL_NVX_gpu_memory_info if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_memory_info", 15)) { ret = GLEW_NVX_gpu_memory_info; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) { #ifdef GL_NV_bindless_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_texture", 16)) { ret = GLEW_NV_bindless_texture; continue; } #endif #ifdef GL_NV_blend_square if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_square", 12)) { ret = GLEW_NV_blend_square; continue; } #endif #ifdef GL_NV_conditional_render if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) { ret = GLEW_NV_conditional_render; continue; } #endif #ifdef GL_NV_copy_depth_to_color if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_depth_to_color", 19)) { ret = GLEW_NV_copy_depth_to_color; continue; } #endif #ifdef GL_NV_copy_image if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) { ret = GLEW_NV_copy_image; continue; } #endif #ifdef GL_NV_depth_buffer_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) { ret = GLEW_NV_depth_buffer_float; continue; } #endif #ifdef GL_NV_depth_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) { ret = GLEW_NV_depth_clamp; continue; } #endif #ifdef GL_NV_depth_range_unclamped if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_range_unclamped", 21)) { ret = GLEW_NV_depth_range_unclamped; continue; } #endif #ifdef GL_NV_evaluators if (_glewStrSame3(&pos, &len, (const GLubyte*)"evaluators", 10)) { ret = GLEW_NV_evaluators; continue; } #endif #ifdef GL_NV_explicit_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_multisample", 20)) { ret = GLEW_NV_explicit_multisample; continue; } #endif #ifdef GL_NV_fence if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) { ret = GLEW_NV_fence; continue; } #endif #ifdef GL_NV_float_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) { ret = GLEW_NV_float_buffer; continue; } #endif #ifdef GL_NV_fog_distance if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_distance", 12)) { ret = GLEW_NV_fog_distance; continue; } #endif #ifdef GL_NV_fragment_program if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) { ret = GLEW_NV_fragment_program; continue; } #endif #ifdef GL_NV_fragment_program2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program2", 17)) { ret = GLEW_NV_fragment_program2; continue; } #endif #ifdef GL_NV_fragment_program4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program4", 17)) { ret = GLEW_NV_fragment_program4; continue; } #endif #ifdef GL_NV_fragment_program_option if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_option", 23)) { ret = GLEW_NV_fragment_program_option; continue; } #endif #ifdef GL_NV_framebuffer_multisample_coverage if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_coverage", 32)) { ret = GLEW_NV_framebuffer_multisample_coverage; continue; } #endif #ifdef GL_NV_geometry_program4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_program4", 17)) { ret = GLEW_NV_geometry_program4; continue; } #endif #ifdef GL_NV_geometry_shader4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) { ret = GLEW_NV_geometry_shader4; continue; } #endif #ifdef GL_NV_gpu_program4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program4", 12)) { ret = GLEW_NV_gpu_program4; continue; } #endif #ifdef GL_NV_gpu_program5 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program5", 12)) { ret = GLEW_NV_gpu_program5; continue; } #endif #ifdef GL_NV_gpu_program_fp64 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_fp64", 16)) { ret = GLEW_NV_gpu_program_fp64; continue; } #endif #ifdef GL_NV_gpu_shader5 if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader5", 11)) { ret = GLEW_NV_gpu_shader5; continue; } #endif #ifdef GL_NV_half_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float", 10)) { ret = GLEW_NV_half_float; continue; } #endif #ifdef GL_NV_light_max_exponent if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_max_exponent", 18)) { ret = GLEW_NV_light_max_exponent; continue; } #endif #ifdef GL_NV_multisample_coverage if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) { ret = GLEW_NV_multisample_coverage; continue; } #endif #ifdef GL_NV_multisample_filter_hint if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_filter_hint", 23)) { ret = GLEW_NV_multisample_filter_hint; continue; } #endif #ifdef GL_NV_occlusion_query if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) { ret = GLEW_NV_occlusion_query; continue; } #endif #ifdef GL_NV_packed_depth_stencil if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) { ret = GLEW_NV_packed_depth_stencil; continue; } #endif #ifdef GL_NV_parameter_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object", 23)) { ret = GLEW_NV_parameter_buffer_object; continue; } #endif #ifdef GL_NV_parameter_buffer_object2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object2", 24)) { ret = GLEW_NV_parameter_buffer_object2; continue; } #endif #ifdef GL_NV_path_rendering if (_glewStrSame3(&pos, &len, (const GLubyte*)"path_rendering", 14)) { ret = GLEW_NV_path_rendering; continue; } #endif #ifdef GL_NV_pixel_data_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_data_range", 16)) { ret = GLEW_NV_pixel_data_range; continue; } #endif #ifdef GL_NV_point_sprite if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) { ret = GLEW_NV_point_sprite; continue; } #endif #ifdef GL_NV_present_video if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) { ret = GLEW_NV_present_video; continue; } #endif #ifdef GL_NV_primitive_restart if (_glewStrSame3(&pos, &len, (const GLubyte*)"primitive_restart", 17)) { ret = GLEW_NV_primitive_restart; continue; } #endif #ifdef GL_NV_register_combiners if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners", 18)) { ret = GLEW_NV_register_combiners; continue; } #endif #ifdef GL_NV_register_combiners2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners2", 19)) { ret = GLEW_NV_register_combiners2; continue; } #endif #ifdef GL_NV_shader_atomic_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_float", 19)) { ret = GLEW_NV_shader_atomic_float; continue; } #endif #ifdef GL_NV_shader_buffer_load if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_buffer_load", 18)) { ret = GLEW_NV_shader_buffer_load; continue; } #endif #ifdef GL_NV_tessellation_program5 if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_program5", 21)) { ret = GLEW_NV_tessellation_program5; continue; } #endif #ifdef GL_NV_texgen_emboss if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_emboss", 13)) { ret = GLEW_NV_texgen_emboss; continue; } #endif #ifdef GL_NV_texgen_reflection if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_reflection", 17)) { ret = GLEW_NV_texgen_reflection; continue; } #endif #ifdef GL_NV_texture_barrier if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_barrier", 15)) { ret = GLEW_NV_texture_barrier; continue; } #endif #ifdef GL_NV_texture_compression_vtc if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_vtc", 23)) { ret = GLEW_NV_texture_compression_vtc; continue; } #endif #ifdef GL_NV_texture_env_combine4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine4", 20)) { ret = GLEW_NV_texture_env_combine4; continue; } #endif #ifdef GL_NV_texture_expand_normal if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_expand_normal", 21)) { ret = GLEW_NV_texture_expand_normal; continue; } #endif #ifdef GL_NV_texture_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multisample", 19)) { ret = GLEW_NV_texture_multisample; continue; } #endif #ifdef GL_NV_texture_rectangle if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) { ret = GLEW_NV_texture_rectangle; continue; } #endif #ifdef GL_NV_texture_shader if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader", 14)) { ret = GLEW_NV_texture_shader; continue; } #endif #ifdef GL_NV_texture_shader2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader2", 15)) { ret = GLEW_NV_texture_shader2; continue; } #endif #ifdef GL_NV_texture_shader3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader3", 15)) { ret = GLEW_NV_texture_shader3; continue; } #endif #ifdef GL_NV_transform_feedback if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) { ret = GLEW_NV_transform_feedback; continue; } #endif #ifdef GL_NV_transform_feedback2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback2", 19)) { ret = GLEW_NV_transform_feedback2; continue; } #endif #ifdef GL_NV_vdpau_interop if (_glewStrSame3(&pos, &len, (const GLubyte*)"vdpau_interop", 13)) { ret = GLEW_NV_vdpau_interop; continue; } #endif #ifdef GL_NV_vertex_array_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) { ret = GLEW_NV_vertex_array_range; continue; } #endif #ifdef GL_NV_vertex_array_range2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range2", 19)) { ret = GLEW_NV_vertex_array_range2; continue; } #endif #ifdef GL_NV_vertex_attrib_integer_64bit if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_integer_64bit", 27)) { ret = GLEW_NV_vertex_attrib_integer_64bit; continue; } #endif #ifdef GL_NV_vertex_buffer_unified_memory if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_unified_memory", 28)) { ret = GLEW_NV_vertex_buffer_unified_memory; continue; } #endif #ifdef GL_NV_vertex_program if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) { ret = GLEW_NV_vertex_program; continue; } #endif #ifdef GL_NV_vertex_program1_1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program1_1", 17)) { ret = GLEW_NV_vertex_program1_1; continue; } #endif #ifdef GL_NV_vertex_program2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2", 15)) { ret = GLEW_NV_vertex_program2; continue; } #endif #ifdef GL_NV_vertex_program2_option if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2_option", 22)) { ret = GLEW_NV_vertex_program2_option; continue; } #endif #ifdef GL_NV_vertex_program3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program3", 15)) { ret = GLEW_NV_vertex_program3; continue; } #endif #ifdef GL_NV_vertex_program4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program4", 15)) { ret = GLEW_NV_vertex_program4; continue; } #endif #ifdef GL_NV_video_capture if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) { ret = GLEW_NV_video_capture; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"OES_", 4)) { #ifdef GL_OES_byte_coordinates if (_glewStrSame3(&pos, &len, (const GLubyte*)"byte_coordinates", 16)) { ret = GLEW_OES_byte_coordinates; continue; } #endif #ifdef GL_OES_compressed_paletted_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_paletted_texture", 27)) { ret = GLEW_OES_compressed_paletted_texture; continue; } #endif #ifdef GL_OES_read_format if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_format", 11)) { ret = GLEW_OES_read_format; continue; } #endif #ifdef GL_OES_single_precision if (_glewStrSame3(&pos, &len, (const GLubyte*)"single_precision", 16)) { ret = GLEW_OES_single_precision; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) { #ifdef GL_OML_interlace if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) { ret = GLEW_OML_interlace; continue; } #endif #ifdef GL_OML_resample if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) { ret = GLEW_OML_resample; continue; } #endif #ifdef GL_OML_subsample if (_glewStrSame3(&pos, &len, (const GLubyte*)"subsample", 9)) { ret = GLEW_OML_subsample; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"PGI_", 4)) { #ifdef GL_PGI_misc_hints if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_hints", 10)) { ret = GLEW_PGI_misc_hints; continue; } #endif #ifdef GL_PGI_vertex_hints if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_hints", 12)) { ret = GLEW_PGI_vertex_hints; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"REGAL_", 6)) { #ifdef GL_REGAL_error_string if (_glewStrSame3(&pos, &len, (const GLubyte*)"error_string", 12)) { ret = GLEW_REGAL_error_string; continue; } #endif #ifdef GL_REGAL_extension_query if (_glewStrSame3(&pos, &len, (const GLubyte*)"extension_query", 15)) { ret = GLEW_REGAL_extension_query; continue; } #endif #ifdef GL_REGAL_log if (_glewStrSame3(&pos, &len, (const GLubyte*)"log", 3)) { ret = GLEW_REGAL_log; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"REND_", 5)) { #ifdef GL_REND_screen_coordinates if (_glewStrSame3(&pos, &len, (const GLubyte*)"screen_coordinates", 18)) { ret = GLEW_REND_screen_coordinates; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"S3_", 3)) { #ifdef GL_S3_s3tc if (_glewStrSame3(&pos, &len, (const GLubyte*)"s3tc", 4)) { ret = GLEW_S3_s3tc; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) { #ifdef GL_SGIS_color_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) { ret = GLEW_SGIS_color_range; continue; } #endif #ifdef GL_SGIS_detail_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"detail_texture", 14)) { ret = GLEW_SGIS_detail_texture; continue; } #endif #ifdef GL_SGIS_fog_function if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_function", 12)) { ret = GLEW_SGIS_fog_function; continue; } #endif #ifdef GL_SGIS_generate_mipmap if (_glewStrSame3(&pos, &len, (const GLubyte*)"generate_mipmap", 15)) { ret = GLEW_SGIS_generate_mipmap; continue; } #endif #ifdef GL_SGIS_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = GLEW_SGIS_multisample; continue; } #endif #ifdef GL_SGIS_pixel_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) { ret = GLEW_SGIS_pixel_texture; continue; } #endif #ifdef GL_SGIS_point_line_texgen if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_line_texgen", 17)) { ret = GLEW_SGIS_point_line_texgen; continue; } #endif #ifdef GL_SGIS_sharpen_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"sharpen_texture", 15)) { ret = GLEW_SGIS_sharpen_texture; continue; } #endif #ifdef GL_SGIS_texture4D if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture4D", 9)) { ret = GLEW_SGIS_texture4D; continue; } #endif #ifdef GL_SGIS_texture_border_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) { ret = GLEW_SGIS_texture_border_clamp; continue; } #endif #ifdef GL_SGIS_texture_edge_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) { ret = GLEW_SGIS_texture_edge_clamp; continue; } #endif #ifdef GL_SGIS_texture_filter4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter4", 15)) { ret = GLEW_SGIS_texture_filter4; continue; } #endif #ifdef GL_SGIS_texture_lod if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod", 11)) { ret = GLEW_SGIS_texture_lod; continue; } #endif #ifdef GL_SGIS_texture_select if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_select", 14)) { ret = GLEW_SGIS_texture_select; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) { #ifdef GL_SGIX_async if (_glewStrSame3(&pos, &len, (const GLubyte*)"async", 5)) { ret = GLEW_SGIX_async; continue; } #endif #ifdef GL_SGIX_async_histogram if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_histogram", 15)) { ret = GLEW_SGIX_async_histogram; continue; } #endif #ifdef GL_SGIX_async_pixel if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_pixel", 11)) { ret = GLEW_SGIX_async_pixel; continue; } #endif #ifdef GL_SGIX_blend_alpha_minmax if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_alpha_minmax", 18)) { ret = GLEW_SGIX_blend_alpha_minmax; continue; } #endif #ifdef GL_SGIX_clipmap if (_glewStrSame3(&pos, &len, (const GLubyte*)"clipmap", 7)) { ret = GLEW_SGIX_clipmap; continue; } #endif #ifdef GL_SGIX_convolution_accuracy if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_accuracy", 20)) { ret = GLEW_SGIX_convolution_accuracy; continue; } #endif #ifdef GL_SGIX_depth_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) { ret = GLEW_SGIX_depth_texture; continue; } #endif #ifdef GL_SGIX_flush_raster if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_raster", 12)) { ret = GLEW_SGIX_flush_raster; continue; } #endif #ifdef GL_SGIX_fog_offset if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_offset", 10)) { ret = GLEW_SGIX_fog_offset; continue; } #endif #ifdef GL_SGIX_fog_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_texture", 11)) { ret = GLEW_SGIX_fog_texture; continue; } #endif #ifdef GL_SGIX_fragment_specular_lighting if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_specular_lighting", 26)) { ret = GLEW_SGIX_fragment_specular_lighting; continue; } #endif #ifdef GL_SGIX_framezoom if (_glewStrSame3(&pos, &len, (const GLubyte*)"framezoom", 9)) { ret = GLEW_SGIX_framezoom; continue; } #endif #ifdef GL_SGIX_interlace if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) { ret = GLEW_SGIX_interlace; continue; } #endif #ifdef GL_SGIX_ir_instrument1 if (_glewStrSame3(&pos, &len, (const GLubyte*)"ir_instrument1", 14)) { ret = GLEW_SGIX_ir_instrument1; continue; } #endif #ifdef GL_SGIX_list_priority if (_glewStrSame3(&pos, &len, (const GLubyte*)"list_priority", 13)) { ret = GLEW_SGIX_list_priority; continue; } #endif #ifdef GL_SGIX_pixel_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) { ret = GLEW_SGIX_pixel_texture; continue; } #endif #ifdef GL_SGIX_pixel_texture_bits if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture_bits", 18)) { ret = GLEW_SGIX_pixel_texture_bits; continue; } #endif #ifdef GL_SGIX_reference_plane if (_glewStrSame3(&pos, &len, (const GLubyte*)"reference_plane", 15)) { ret = GLEW_SGIX_reference_plane; continue; } #endif #ifdef GL_SGIX_resample if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) { ret = GLEW_SGIX_resample; continue; } #endif #ifdef GL_SGIX_shadow if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) { ret = GLEW_SGIX_shadow; continue; } #endif #ifdef GL_SGIX_shadow_ambient if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) { ret = GLEW_SGIX_shadow_ambient; continue; } #endif #ifdef GL_SGIX_sprite if (_glewStrSame3(&pos, &len, (const GLubyte*)"sprite", 6)) { ret = GLEW_SGIX_sprite; continue; } #endif #ifdef GL_SGIX_tag_sample_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"tag_sample_buffer", 17)) { ret = GLEW_SGIX_tag_sample_buffer; continue; } #endif #ifdef GL_SGIX_texture_add_env if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_add_env", 15)) { ret = GLEW_SGIX_texture_add_env; continue; } #endif #ifdef GL_SGIX_texture_coordinate_clamp if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_coordinate_clamp", 24)) { ret = GLEW_SGIX_texture_coordinate_clamp; continue; } #endif #ifdef GL_SGIX_texture_lod_bias if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) { ret = GLEW_SGIX_texture_lod_bias; continue; } #endif #ifdef GL_SGIX_texture_multi_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multi_buffer", 20)) { ret = GLEW_SGIX_texture_multi_buffer; continue; } #endif #ifdef GL_SGIX_texture_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) { ret = GLEW_SGIX_texture_range; continue; } #endif #ifdef GL_SGIX_texture_scale_bias if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scale_bias", 18)) { ret = GLEW_SGIX_texture_scale_bias; continue; } #endif #ifdef GL_SGIX_vertex_preclip if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip", 14)) { ret = GLEW_SGIX_vertex_preclip; continue; } #endif #ifdef GL_SGIX_vertex_preclip_hint if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip_hint", 19)) { ret = GLEW_SGIX_vertex_preclip_hint; continue; } #endif #ifdef GL_SGIX_ycrcb if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycrcb", 5)) { ret = GLEW_SGIX_ycrcb; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) { #ifdef GL_SGI_color_matrix if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_matrix", 12)) { ret = GLEW_SGI_color_matrix; continue; } #endif #ifdef GL_SGI_color_table if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_table", 11)) { ret = GLEW_SGI_color_table; continue; } #endif #ifdef GL_SGI_texture_color_table if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_color_table", 19)) { ret = GLEW_SGI_texture_color_table; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUNX_", 5)) { #ifdef GL_SUNX_constant_data if (_glewStrSame3(&pos, &len, (const GLubyte*)"constant_data", 13)) { ret = GLEW_SUNX_constant_data; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) { #ifdef GL_SUN_convolution_border_modes if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) { ret = GLEW_SUN_convolution_border_modes; continue; } #endif #ifdef GL_SUN_global_alpha if (_glewStrSame3(&pos, &len, (const GLubyte*)"global_alpha", 12)) { ret = GLEW_SUN_global_alpha; continue; } #endif #ifdef GL_SUN_mesh_array if (_glewStrSame3(&pos, &len, (const GLubyte*)"mesh_array", 10)) { ret = GLEW_SUN_mesh_array; continue; } #endif #ifdef GL_SUN_read_video_pixels if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_video_pixels", 17)) { ret = GLEW_SUN_read_video_pixels; continue; } #endif #ifdef GL_SUN_slice_accum if (_glewStrSame3(&pos, &len, (const GLubyte*)"slice_accum", 11)) { ret = GLEW_SUN_slice_accum; continue; } #endif #ifdef GL_SUN_triangle_list if (_glewStrSame3(&pos, &len, (const GLubyte*)"triangle_list", 13)) { ret = GLEW_SUN_triangle_list; continue; } #endif #ifdef GL_SUN_vertex if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex", 6)) { ret = GLEW_SUN_vertex; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"WIN_", 4)) { #ifdef GL_WIN_phong_shading if (_glewStrSame3(&pos, &len, (const GLubyte*)"phong_shading", 13)) { ret = GLEW_WIN_phong_shading; continue; } #endif #ifdef GL_WIN_specular_fog if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_fog", 12)) { ret = GLEW_WIN_specular_fog; continue; } #endif #ifdef GL_WIN_swap_hint if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_hint", 9)) { ret = GLEW_WIN_swap_hint; continue; } #endif } } ret = (len == 0); } return ret; } #if defined(_WIN32) #if defined(GLEW_MX) GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) #else GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) #endif { GLubyte* pos = (GLubyte*)name; GLuint len = _glewStrLen(pos); GLboolean ret = GL_TRUE; while (ret && len > 0) { if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) { if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) { #ifdef WGL_3DFX_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = WGLEW_3DFX_multisample; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DL_", 4)) { #ifdef WGL_3DL_stereo_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"stereo_control", 14)) { ret = WGLEW_3DL_stereo_control; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) { #ifdef WGL_AMD_gpu_association if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_association", 15)) { ret = WGLEW_AMD_gpu_association; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) { #ifdef WGL_ARB_buffer_region if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) { ret = WGLEW_ARB_buffer_region; continue; } #endif #ifdef WGL_ARB_create_context if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) { ret = WGLEW_ARB_create_context; continue; } #endif #ifdef WGL_ARB_create_context_profile if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_profile", 22)) { ret = WGLEW_ARB_create_context_profile; continue; } #endif #ifdef WGL_ARB_create_context_robustness if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_robustness", 25)) { ret = WGLEW_ARB_create_context_robustness; continue; } #endif #ifdef WGL_ARB_extensions_string if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) { ret = WGLEW_ARB_extensions_string; continue; } #endif #ifdef WGL_ARB_framebuffer_sRGB if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) { ret = WGLEW_ARB_framebuffer_sRGB; continue; } #endif #ifdef WGL_ARB_make_current_read if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) { ret = WGLEW_ARB_make_current_read; continue; } #endif #ifdef WGL_ARB_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = WGLEW_ARB_multisample; continue; } #endif #ifdef WGL_ARB_pbuffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) { ret = WGLEW_ARB_pbuffer; continue; } #endif #ifdef WGL_ARB_pixel_format if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) { ret = WGLEW_ARB_pixel_format; continue; } #endif #ifdef WGL_ARB_pixel_format_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) { ret = WGLEW_ARB_pixel_format_float; continue; } #endif #ifdef WGL_ARB_render_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) { ret = WGLEW_ARB_render_texture; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) { #ifdef WGL_ATI_pixel_format_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) { ret = WGLEW_ATI_pixel_format_float; continue; } #endif #ifdef WGL_ATI_render_texture_rectangle if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) { ret = WGLEW_ATI_render_texture_rectangle; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) { #ifdef WGL_EXT_create_context_es2_profile if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es2_profile", 26)) { ret = WGLEW_EXT_create_context_es2_profile; continue; } #endif #ifdef WGL_EXT_create_context_es_profile if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es_profile", 25)) { ret = WGLEW_EXT_create_context_es_profile; continue; } #endif #ifdef WGL_EXT_depth_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_float", 11)) { ret = WGLEW_EXT_depth_float; continue; } #endif #ifdef WGL_EXT_display_color_table if (_glewStrSame3(&pos, &len, (const GLubyte*)"display_color_table", 19)) { ret = WGLEW_EXT_display_color_table; continue; } #endif #ifdef WGL_EXT_extensions_string if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) { ret = WGLEW_EXT_extensions_string; continue; } #endif #ifdef WGL_EXT_framebuffer_sRGB if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) { ret = WGLEW_EXT_framebuffer_sRGB; continue; } #endif #ifdef WGL_EXT_make_current_read if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) { ret = WGLEW_EXT_make_current_read; continue; } #endif #ifdef WGL_EXT_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = WGLEW_EXT_multisample; continue; } #endif #ifdef WGL_EXT_pbuffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) { ret = WGLEW_EXT_pbuffer; continue; } #endif #ifdef WGL_EXT_pixel_format if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) { ret = WGLEW_EXT_pixel_format; continue; } #endif #ifdef WGL_EXT_pixel_format_packed_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_packed_float", 25)) { ret = WGLEW_EXT_pixel_format_packed_float; continue; } #endif #ifdef WGL_EXT_swap_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) { ret = WGLEW_EXT_swap_control; continue; } #endif #ifdef WGL_EXT_swap_control_tear if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control_tear", 17)) { ret = WGLEW_EXT_swap_control_tear; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"I3D_", 4)) { #ifdef WGL_I3D_digital_video_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"digital_video_control", 21)) { ret = WGLEW_I3D_digital_video_control; continue; } #endif #ifdef WGL_I3D_gamma if (_glewStrSame3(&pos, &len, (const GLubyte*)"gamma", 5)) { ret = WGLEW_I3D_gamma; continue; } #endif #ifdef WGL_I3D_genlock if (_glewStrSame3(&pos, &len, (const GLubyte*)"genlock", 7)) { ret = WGLEW_I3D_genlock; continue; } #endif #ifdef WGL_I3D_image_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_buffer", 12)) { ret = WGLEW_I3D_image_buffer; continue; } #endif #ifdef WGL_I3D_swap_frame_lock if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_lock", 15)) { ret = WGLEW_I3D_swap_frame_lock; continue; } #endif #ifdef WGL_I3D_swap_frame_usage if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_usage", 16)) { ret = WGLEW_I3D_swap_frame_usage; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) { #ifdef WGL_NV_DX_interop if (_glewStrSame3(&pos, &len, (const GLubyte*)"DX_interop", 10)) { ret = WGLEW_NV_DX_interop; continue; } #endif #ifdef WGL_NV_DX_interop2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"DX_interop2", 11)) { ret = WGLEW_NV_DX_interop2; continue; } #endif #ifdef WGL_NV_copy_image if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) { ret = WGLEW_NV_copy_image; continue; } #endif #ifdef WGL_NV_float_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) { ret = WGLEW_NV_float_buffer; continue; } #endif #ifdef WGL_NV_gpu_affinity if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_affinity", 12)) { ret = WGLEW_NV_gpu_affinity; continue; } #endif #ifdef WGL_NV_multisample_coverage if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) { ret = WGLEW_NV_multisample_coverage; continue; } #endif #ifdef WGL_NV_present_video if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) { ret = WGLEW_NV_present_video; continue; } #endif #ifdef WGL_NV_render_depth_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_depth_texture", 20)) { ret = WGLEW_NV_render_depth_texture; continue; } #endif #ifdef WGL_NV_render_texture_rectangle if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) { ret = WGLEW_NV_render_texture_rectangle; continue; } #endif #ifdef WGL_NV_swap_group if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) { ret = WGLEW_NV_swap_group; continue; } #endif #ifdef WGL_NV_vertex_array_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) { ret = WGLEW_NV_vertex_array_range; continue; } #endif #ifdef WGL_NV_video_capture if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) { ret = WGLEW_NV_video_capture; continue; } #endif #ifdef WGL_NV_video_output if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) { ret = WGLEW_NV_video_output; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) { #ifdef WGL_OML_sync_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) { ret = WGLEW_OML_sync_control; continue; } #endif } } ret = (len == 0); } return ret; } #elif !defined(__ANDROID__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) #if defined(GLEW_MX) GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) #else GLboolean glxewIsSupported (const char* name) #endif { GLubyte* pos = (GLubyte*)name; GLuint len = _glewStrLen(pos); GLboolean ret = GL_TRUE; while (ret && len > 0) { if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) { if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) { #ifdef GLX_VERSION_1_2 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) { ret = GLXEW_VERSION_1_2; continue; } #endif #ifdef GLX_VERSION_1_3 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) { ret = GLXEW_VERSION_1_3; continue; } #endif #ifdef GLX_VERSION_1_4 if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) { ret = GLXEW_VERSION_1_4; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) { #ifdef GLX_3DFX_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = GLXEW_3DFX_multisample; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) { #ifdef GLX_AMD_gpu_association if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_association", 15)) { ret = GLXEW_AMD_gpu_association; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) { #ifdef GLX_ARB_create_context if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) { ret = GLXEW_ARB_create_context; continue; } #endif #ifdef GLX_ARB_create_context_profile if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_profile", 22)) { ret = GLXEW_ARB_create_context_profile; continue; } #endif #ifdef GLX_ARB_create_context_robustness if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_robustness", 25)) { ret = GLXEW_ARB_create_context_robustness; continue; } #endif #ifdef GLX_ARB_fbconfig_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_float", 14)) { ret = GLXEW_ARB_fbconfig_float; continue; } #endif #ifdef GLX_ARB_framebuffer_sRGB if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) { ret = GLXEW_ARB_framebuffer_sRGB; continue; } #endif #ifdef GLX_ARB_get_proc_address if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_proc_address", 16)) { ret = GLXEW_ARB_get_proc_address; continue; } #endif #ifdef GLX_ARB_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = GLXEW_ARB_multisample; continue; } #endif #ifdef GLX_ARB_robustness_application_isolation if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) { ret = GLXEW_ARB_robustness_application_isolation; continue; } #endif #ifdef GLX_ARB_robustness_share_group_isolation if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) { ret = GLXEW_ARB_robustness_share_group_isolation; continue; } #endif #ifdef GLX_ARB_vertex_buffer_object if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) { ret = GLXEW_ARB_vertex_buffer_object; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) { #ifdef GLX_ATI_pixel_format_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) { ret = GLXEW_ATI_pixel_format_float; continue; } #endif #ifdef GLX_ATI_render_texture if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) { ret = GLXEW_ATI_render_texture; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) { #ifdef GLX_EXT_create_context_es2_profile if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es2_profile", 26)) { ret = GLXEW_EXT_create_context_es2_profile; continue; } #endif #ifdef GLX_EXT_create_context_es_profile if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es_profile", 25)) { ret = GLXEW_EXT_create_context_es_profile; continue; } #endif #ifdef GLX_EXT_fbconfig_packed_float if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_packed_float", 21)) { ret = GLXEW_EXT_fbconfig_packed_float; continue; } #endif #ifdef GLX_EXT_framebuffer_sRGB if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) { ret = GLXEW_EXT_framebuffer_sRGB; continue; } #endif #ifdef GLX_EXT_import_context if (_glewStrSame3(&pos, &len, (const GLubyte*)"import_context", 14)) { ret = GLXEW_EXT_import_context; continue; } #endif #ifdef GLX_EXT_scene_marker if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) { ret = GLXEW_EXT_scene_marker; continue; } #endif #ifdef GLX_EXT_swap_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) { ret = GLXEW_EXT_swap_control; continue; } #endif #ifdef GLX_EXT_swap_control_tear if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control_tear", 17)) { ret = GLXEW_EXT_swap_control_tear; continue; } #endif #ifdef GLX_EXT_texture_from_pixmap if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_from_pixmap", 19)) { ret = GLXEW_EXT_texture_from_pixmap; continue; } #endif #ifdef GLX_EXT_visual_info if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_info", 11)) { ret = GLXEW_EXT_visual_info; continue; } #endif #ifdef GLX_EXT_visual_rating if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_rating", 13)) { ret = GLXEW_EXT_visual_rating; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) { #ifdef GLX_INTEL_swap_event if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_event", 10)) { ret = GLXEW_INTEL_swap_event; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) { #ifdef GLX_MESA_agp_offset if (_glewStrSame3(&pos, &len, (const GLubyte*)"agp_offset", 10)) { ret = GLXEW_MESA_agp_offset; continue; } #endif #ifdef GLX_MESA_copy_sub_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_sub_buffer", 15)) { ret = GLXEW_MESA_copy_sub_buffer; continue; } #endif #ifdef GLX_MESA_pixmap_colormap if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixmap_colormap", 15)) { ret = GLXEW_MESA_pixmap_colormap; continue; } #endif #ifdef GLX_MESA_release_buffers if (_glewStrSame3(&pos, &len, (const GLubyte*)"release_buffers", 15)) { ret = GLXEW_MESA_release_buffers; continue; } #endif #ifdef GLX_MESA_set_3dfx_mode if (_glewStrSame3(&pos, &len, (const GLubyte*)"set_3dfx_mode", 13)) { ret = GLXEW_MESA_set_3dfx_mode; continue; } #endif #ifdef GLX_MESA_swap_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) { ret = GLXEW_MESA_swap_control; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) { #ifdef GLX_NV_copy_image if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) { ret = GLXEW_NV_copy_image; continue; } #endif #ifdef GLX_NV_float_buffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) { ret = GLXEW_NV_float_buffer; continue; } #endif #ifdef GLX_NV_multisample_coverage if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) { ret = GLXEW_NV_multisample_coverage; continue; } #endif #ifdef GLX_NV_present_video if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) { ret = GLXEW_NV_present_video; continue; } #endif #ifdef GLX_NV_swap_group if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) { ret = GLXEW_NV_swap_group; continue; } #endif #ifdef GLX_NV_vertex_array_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) { ret = GLXEW_NV_vertex_array_range; continue; } #endif #ifdef GLX_NV_video_capture if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) { ret = GLXEW_NV_video_capture; continue; } #endif #ifdef GLX_NV_video_out if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_out", 9)) { ret = GLXEW_NV_video_out; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) { #ifdef GLX_OML_swap_method if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_method", 11)) { ret = GLXEW_OML_swap_method; continue; } #endif #ifdef GLX_OML_sync_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) { ret = GLXEW_OML_sync_control; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) { #ifdef GLX_SGIS_blended_overlay if (_glewStrSame3(&pos, &len, (const GLubyte*)"blended_overlay", 15)) { ret = GLXEW_SGIS_blended_overlay; continue; } #endif #ifdef GLX_SGIS_color_range if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) { ret = GLXEW_SGIS_color_range; continue; } #endif #ifdef GLX_SGIS_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) { ret = GLXEW_SGIS_multisample; continue; } #endif #ifdef GLX_SGIS_shared_multisample if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_multisample", 18)) { ret = GLXEW_SGIS_shared_multisample; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) { #ifdef GLX_SGIX_fbconfig if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig", 8)) { ret = GLXEW_SGIX_fbconfig; continue; } #endif #ifdef GLX_SGIX_hyperpipe if (_glewStrSame3(&pos, &len, (const GLubyte*)"hyperpipe", 9)) { ret = GLXEW_SGIX_hyperpipe; continue; } #endif #ifdef GLX_SGIX_pbuffer if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) { ret = GLXEW_SGIX_pbuffer; continue; } #endif #ifdef GLX_SGIX_swap_barrier if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_barrier", 12)) { ret = GLXEW_SGIX_swap_barrier; continue; } #endif #ifdef GLX_SGIX_swap_group if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) { ret = GLXEW_SGIX_swap_group; continue; } #endif #ifdef GLX_SGIX_video_resize if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) { ret = GLXEW_SGIX_video_resize; continue; } #endif #ifdef GLX_SGIX_visual_select_group if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_select_group", 19)) { ret = GLXEW_SGIX_visual_select_group; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) { #ifdef GLX_SGI_cushion if (_glewStrSame3(&pos, &len, (const GLubyte*)"cushion", 7)) { ret = GLXEW_SGI_cushion; continue; } #endif #ifdef GLX_SGI_make_current_read if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) { ret = GLXEW_SGI_make_current_read; continue; } #endif #ifdef GLX_SGI_swap_control if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) { ret = GLXEW_SGI_swap_control; continue; } #endif #ifdef GLX_SGI_video_sync if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_sync", 10)) { ret = GLXEW_SGI_video_sync; continue; } #endif } if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) { #ifdef GLX_SUN_get_transparent_index if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_transparent_index", 21)) { ret = GLXEW_SUN_get_transparent_index; continue; } #endif #ifdef GLX_SUN_video_resize if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) { ret = GLXEW_SUN_video_resize; continue; } #endif } } ret = (len == 0); } return ret; } #endif /* _WIN32 */ DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glew/glew.h000066400000000000000000033212621360473665400252370ustar00rootroot00000000000000/* ** The OpenGL Extension Wrangler Library ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** ** * Redistributions of source code must retain the above copyright notice, ** this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright notice, ** this list of conditions and the following disclaimer in the documentation ** and/or other materials provided with the distribution. ** * The name of the author may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF ** THE POSSIBILITY OF SUCH DAMAGE. */ /* * Mesa 3-D graphics library * Version: 7.0 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* ** Copyright (c) 2007 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. */ #ifndef __glew_h__ #define __glew_h__ #define __GLEW_H__ #if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H) #error gl.h included before glew.h #endif #if defined(__REGAL_H__) #error Regal.h included before glew.h #endif #if defined(__glext_h_) || defined(__GLEXT_H_) #error glext.h included before glew.h #endif #if defined(__gl_ATI_h_) #error glATI.h included before glew.h #endif #define __gl_h_ #define __GL_H__ #define __REGAL_H__ #define __X_GL_H #define __glext_h_ #define __GLEXT_H_ #define __gl_ATI_h_ #if defined(_WIN32) /* * GLEW does not include to avoid name space pollution. * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t * defined properly. */ /* */ #ifndef APIENTRY #define GLEW_APIENTRY_DEFINED #if defined(__MINGW32__) || defined(__CYGWIN__) #define APIENTRY __stdcall #elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) #define APIENTRY __stdcall #else #define APIENTRY #endif #endif #ifndef GLAPI #if defined(__MINGW32__) || defined(__CYGWIN__) #define GLAPI extern #endif #endif /* */ #ifndef CALLBACK #define GLEW_CALLBACK_DEFINED #if defined(__MINGW32__) || defined(__CYGWIN__) #define CALLBACK __attribute__((__stdcall__)) #elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) #define CALLBACK __stdcall #else #define CALLBACK #endif #endif /* and */ #ifndef WINGDIAPI #define GLEW_WINGDIAPI_DEFINED #define WINGDIAPI __declspec(dllimport) #endif /* */ #if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) typedef unsigned short wchar_t; #define _WCHAR_T_DEFINED #endif /* */ #if !defined(_W64) #if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && defined(_MSC_VER) && _MSC_VER >= 1300 #define _W64 __w64 #else #define _W64 #endif #endif #if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) && !defined(__MINGW64__) #ifdef _WIN64 typedef __int64 ptrdiff_t; #else typedef _W64 int ptrdiff_t; #endif #define _PTRDIFF_T_DEFINED #define _PTRDIFF_T_ #endif #ifndef GLAPI #if defined(__MINGW32__) || defined(__CYGWIN__) #define GLAPI extern #else #define GLAPI WINGDIAPI #endif #endif #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY #endif #ifndef GLEWAPIENTRY #define GLEWAPIENTRY APIENTRY #endif /* * GLEW_STATIC is defined for static library. * GLEW_BUILD is defined for building the DLL library. */ #ifdef GLEW_STATIC #define GLEWAPI extern #else #ifdef GLEW_BUILD #define GLEWAPI extern __declspec(dllexport) #else #define GLEWAPI extern __declspec(dllimport) #endif #endif #else /* _UNIX */ /* * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO * C. On my system, this amounts to _3 lines_ of included code, all of * them pretty much harmless. If you know of a way of detecting 32 vs * 64 _targets_ at compile time you are free to replace this with * something that's portable. For now, _this_ is the portable solution. * (mem, 2004-01-04) */ #include /* SGI MIPSPro doesn't like stdint.h in C++ mode */ /* ID: 3376260 Solaris 9 has inttypes.h, but not stdint.h */ #if (defined(__sgi) || defined(__sun)) && !defined(__GNUC__) #include #else #include #endif #define GLEW_APIENTRY_DEFINED #define APIENTRY /* * GLEW_STATIC is defined for static library. */ #ifdef GLEW_STATIC #define GLEWAPI extern #else #if defined(__GNUC__) && __GNUC__ >= 4 #define GLEWAPI extern __attribute__((visibility("default"))) #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) #define GLEWAPI extern __global #else #define GLEWAPI extern #endif #endif /* */ #ifndef GLAPI #define GLAPI extern #endif #ifndef GLAPIENTRY #define GLAPIENTRY #endif #ifndef GLEWAPIENTRY #define GLEWAPIENTRY #endif #endif /* _WIN32 */ #ifdef __cplusplus extern "C" { #endif /* ----------------------------- GL_VERSION_1_1 ---------------------------- */ #ifndef GL_VERSION_1_1 #define GL_VERSION_1_1 1 typedef unsigned int GLenum; typedef unsigned int GLbitfield; typedef unsigned int GLuint; typedef int GLint; typedef int GLsizei; typedef unsigned char GLboolean; typedef signed char GLbyte; typedef short GLshort; typedef unsigned char GLubyte; typedef unsigned short GLushort; typedef unsigned long GLulong; typedef float GLfloat; typedef float GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void GLvoid; #if defined(_MSC_VER) && _MSC_VER < 1400 typedef __int64 GLint64EXT; typedef unsigned __int64 GLuint64EXT; #elif defined(_MSC_VER) || defined(__BORLANDC__) typedef signed long long GLint64EXT; typedef unsigned long long GLuint64EXT; #else #if defined(__MINGW32__) || defined(__CYGWIN__) #include #endif typedef int64_t GLint64EXT; typedef uint64_t GLuint64EXT; #endif typedef GLint64EXT GLint64; typedef GLuint64EXT GLuint64; typedef struct __GLsync * GLsync; typedef char GLchar; #define GL_ZERO 0 #define GL_FALSE 0 #define GL_LOGIC_OP 0x0BF1 #define GL_NONE 0 #define GL_TEXTURE_COMPONENTS 0x1003 #define GL_NO_ERROR 0 #define GL_POINTS 0x0000 #define GL_CURRENT_BIT 0x00000001 #define GL_TRUE 1 #define GL_ONE 1 #define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_POINT_BIT 0x00000002 #define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 #define GL_LINE_STRIP 0x0003 #define GL_LINE_BIT 0x00000004 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_QUAD_STRIP 0x0008 #define GL_POLYGON_BIT 0x00000008 #define GL_POLYGON 0x0009 #define GL_POLYGON_STIPPLE_BIT 0x00000010 #define GL_PIXEL_MODE_BIT 0x00000020 #define GL_LIGHTING_BIT 0x00000040 #define GL_FOG_BIT 0x00000080 #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_ACCUM 0x0100 #define GL_LOAD 0x0101 #define GL_RETURN 0x0102 #define GL_MULT 0x0103 #define GL_ADD 0x0104 #define GL_NEVER 0x0200 #define GL_ACCUM_BUFFER_BIT 0x00000200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 #define GL_FRONT_AND_BACK 0x0408 #define GL_AUX0 0x0409 #define GL_AUX1 0x040A #define GL_AUX2 0x040B #define GL_AUX3 0x040C #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_OUT_OF_MEMORY 0x0505 #define GL_2D 0x0600 #define GL_3D 0x0601 #define GL_3D_COLOR 0x0602 #define GL_3D_COLOR_TEXTURE 0x0603 #define GL_4D_COLOR_TEXTURE 0x0604 #define GL_PASS_THROUGH_TOKEN 0x0700 #define GL_POINT_TOKEN 0x0701 #define GL_LINE_TOKEN 0x0702 #define GL_POLYGON_TOKEN 0x0703 #define GL_BITMAP_TOKEN 0x0704 #define GL_DRAW_PIXEL_TOKEN 0x0705 #define GL_COPY_PIXEL_TOKEN 0x0706 #define GL_LINE_RESET_TOKEN 0x0707 #define GL_EXP 0x0800 #define GL_VIEWPORT_BIT 0x00000800 #define GL_EXP2 0x0801 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_COEFF 0x0A00 #define GL_ORDER 0x0A01 #define GL_DOMAIN 0x0A02 #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_INDEX 0x0B01 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_CURRENT_RASTER_COLOR 0x0B04 #define GL_CURRENT_RASTER_INDEX 0x0B05 #define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 #define GL_CURRENT_RASTER_POSITION 0x0B07 #define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 #define GL_CURRENT_RASTER_DISTANCE 0x0B09 #define GL_POINT_SMOOTH 0x0B10 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_RANGE 0x0B12 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_RANGE 0x0B22 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_LINE_STIPPLE 0x0B24 #define GL_LINE_STIPPLE_PATTERN 0x0B25 #define GL_LINE_STIPPLE_REPEAT 0x0B26 #define GL_LIST_MODE 0x0B30 #define GL_MAX_LIST_NESTING 0x0B31 #define GL_LIST_BASE 0x0B32 #define GL_LIST_INDEX 0x0B33 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_STIPPLE 0x0B42 #define GL_EDGE_FLAG 0x0B43 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_LIGHTING 0x0B50 #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_SHADE_MODEL 0x0B54 #define GL_COLOR_MATERIAL_FACE 0x0B55 #define GL_COLOR_MATERIAL_PARAMETER 0x0B56 #define GL_COLOR_MATERIAL 0x0B57 #define GL_FOG 0x0B60 #define GL_FOG_INDEX 0x0B61 #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_FOG_MODE 0x0B65 #define GL_FOG_COLOR 0x0B66 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_ACCUM_CLEAR_VALUE 0x0B80 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_MATRIX_MODE 0x0BA0 #define GL_NORMALIZE 0x0BA1 #define GL_VIEWPORT 0x0BA2 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_ATTRIB_STACK_DEPTH 0x0BB0 #define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 #define GL_ALPHA_TEST 0x0BC0 #define GL_ALPHA_TEST_FUNC 0x0BC1 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_DITHER 0x0BD0 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND 0x0BE2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_INDEX_LOGIC_OP 0x0BF1 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_AUX_BUFFERS 0x0C00 #define GL_DRAW_BUFFER 0x0C01 #define GL_READ_BUFFER 0x0C02 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_INDEX_CLEAR_VALUE 0x0C20 #define GL_INDEX_WRITEMASK 0x0C21 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_INDEX_MODE 0x0C30 #define GL_RGBA_MODE 0x0C31 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_RENDER_MODE 0x0C40 #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_FOG_HINT 0x0C54 #define GL_TEXTURE_GEN_S 0x0C60 #define GL_TEXTURE_GEN_T 0x0C61 #define GL_TEXTURE_GEN_R 0x0C62 #define GL_TEXTURE_GEN_Q 0x0C63 #define GL_PIXEL_MAP_I_TO_I 0x0C70 #define GL_PIXEL_MAP_S_TO_S 0x0C71 #define GL_PIXEL_MAP_I_TO_R 0x0C72 #define GL_PIXEL_MAP_I_TO_G 0x0C73 #define GL_PIXEL_MAP_I_TO_B 0x0C74 #define GL_PIXEL_MAP_I_TO_A 0x0C75 #define GL_PIXEL_MAP_R_TO_R 0x0C76 #define GL_PIXEL_MAP_G_TO_G 0x0C77 #define GL_PIXEL_MAP_B_TO_B 0x0C78 #define GL_PIXEL_MAP_A_TO_A 0x0C79 #define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 #define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 #define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 #define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 #define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 #define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 #define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 #define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 #define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 #define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAP_COLOR 0x0D10 #define GL_MAP_STENCIL 0x0D11 #define GL_INDEX_SHIFT 0x0D12 #define GL_INDEX_OFFSET 0x0D13 #define GL_RED_SCALE 0x0D14 #define GL_RED_BIAS 0x0D15 #define GL_ZOOM_X 0x0D16 #define GL_ZOOM_Y 0x0D17 #define GL_GREEN_SCALE 0x0D18 #define GL_GREEN_BIAS 0x0D19 #define GL_BLUE_SCALE 0x0D1A #define GL_BLUE_BIAS 0x0D1B #define GL_ALPHA_SCALE 0x0D1C #define GL_ALPHA_BIAS 0x0D1D #define GL_DEPTH_SCALE 0x0D1E #define GL_DEPTH_BIAS 0x0D1F #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 #define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B #define GL_SUBPIXEL_BITS 0x0D50 #define GL_INDEX_BITS 0x0D51 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_ALPHA_BITS 0x0D55 #define GL_DEPTH_BITS 0x0D56 #define GL_STENCIL_BITS 0x0D57 #define GL_ACCUM_RED_BITS 0x0D58 #define GL_ACCUM_GREEN_BITS 0x0D59 #define GL_ACCUM_BLUE_BITS 0x0D5A #define GL_ACCUM_ALPHA_BITS 0x0D5B #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_AUTO_NORMAL 0x0D80 #define GL_MAP1_COLOR_4 0x0D90 #define GL_MAP1_INDEX 0x0D91 #define GL_MAP1_NORMAL 0x0D92 #define GL_MAP1_TEXTURE_COORD_1 0x0D93 #define GL_MAP1_TEXTURE_COORD_2 0x0D94 #define GL_MAP1_TEXTURE_COORD_3 0x0D95 #define GL_MAP1_TEXTURE_COORD_4 0x0D96 #define GL_MAP1_VERTEX_3 0x0D97 #define GL_MAP1_VERTEX_4 0x0D98 #define GL_MAP2_COLOR_4 0x0DB0 #define GL_MAP2_INDEX 0x0DB1 #define GL_MAP2_NORMAL 0x0DB2 #define GL_MAP2_TEXTURE_COORD_1 0x0DB3 #define GL_MAP2_TEXTURE_COORD_2 0x0DB4 #define GL_MAP2_TEXTURE_COORD_3 0x0DB5 #define GL_MAP2_TEXTURE_COORD_4 0x0DB6 #define GL_MAP2_VERTEX_3 0x0DB7 #define GL_MAP2_VERTEX_4 0x0DB8 #define GL_MAP1_GRID_DOMAIN 0x0DD0 #define GL_MAP1_GRID_SEGMENTS 0x0DD1 #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 #define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 #define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 #define GL_SELECTION_BUFFER_POINTER 0x0DF3 #define GL_SELECTION_BUFFER_SIZE 0x0DF4 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TRANSFORM_BIT 0x00001000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_TEXTURE_BORDER 0x1005 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 #define GL_AMBIENT 0x1200 #define GL_DIFFUSE 0x1201 #define GL_SPECULAR 0x1202 #define GL_POSITION 0x1203 #define GL_SPOT_DIRECTION 0x1204 #define GL_SPOT_EXPONENT 0x1205 #define GL_SPOT_CUTOFF 0x1206 #define GL_CONSTANT_ATTENUATION 0x1207 #define GL_LINEAR_ATTENUATION 0x1208 #define GL_QUADRATIC_ATTENUATION 0x1209 #define GL_COMPILE 0x1300 #define GL_COMPILE_AND_EXECUTE 0x1301 #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_2_BYTES 0x1407 #define GL_3_BYTES 0x1408 #define GL_4_BYTES 0x1409 #define GL_DOUBLE 0x140A #define GL_CLEAR 0x1500 #define GL_AND 0x1501 #define GL_AND_REVERSE 0x1502 #define GL_COPY 0x1503 #define GL_AND_INVERTED 0x1504 #define GL_NOOP 0x1505 #define GL_XOR 0x1506 #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_EQUIV 0x1509 #define GL_INVERT 0x150A #define GL_OR_REVERSE 0x150B #define GL_COPY_INVERTED 0x150C #define GL_OR_INVERTED 0x150D #define GL_NAND 0x150E #define GL_SET 0x150F #define GL_EMISSION 0x1600 #define GL_SHININESS 0x1601 #define GL_AMBIENT_AND_DIFFUSE 0x1602 #define GL_COLOR_INDEXES 0x1603 #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_TEXTURE 0x1702 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_COLOR_INDEX 0x1900 #define GL_STENCIL_INDEX 0x1901 #define GL_DEPTH_COMPONENT 0x1902 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_BITMAP 0x1A00 #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 #define GL_RENDER 0x1C00 #define GL_FEEDBACK 0x1C01 #define GL_SELECT 0x1C02 #define GL_FLAT 0x1D00 #define GL_SMOOTH 0x1D01 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 #define GL_S 0x2000 #define GL_ENABLE_BIT 0x00002000 #define GL_T 0x2001 #define GL_R 0x2002 #define GL_Q 0x2003 #define GL_MODULATE 0x2100 #define GL_DECAL 0x2101 #define GL_TEXTURE_ENV_MODE 0x2200 #define GL_TEXTURE_ENV_COLOR 0x2201 #define GL_TEXTURE_ENV 0x2300 #define GL_EYE_LINEAR 0x2400 #define GL_OBJECT_LINEAR 0x2401 #define GL_SPHERE_MAP 0x2402 #define GL_TEXTURE_GEN_MODE 0x2500 #define GL_OBJECT_PLANE 0x2501 #define GL_EYE_PLANE 0x2502 #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_CLAMP 0x2900 #define GL_REPEAT 0x2901 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_R3_G3_B2 0x2A10 #define GL_V2F 0x2A20 #define GL_V3F 0x2A21 #define GL_C4UB_V2F 0x2A22 #define GL_C4UB_V3F 0x2A23 #define GL_C3F_V3F 0x2A24 #define GL_N3F_V3F 0x2A25 #define GL_C4F_N3F_V3F 0x2A26 #define GL_T2F_V3F 0x2A27 #define GL_T4F_V4F 0x2A28 #define GL_T2F_C4UB_V3F 0x2A29 #define GL_T2F_C3F_V3F 0x2A2A #define GL_T2F_N3F_V3F 0x2A2B #define GL_T2F_C4F_N3F_V3F 0x2A2C #define GL_T4F_C4F_N3F_V4F 0x2A2D #define GL_CLIP_PLANE0 0x3000 #define GL_CLIP_PLANE1 0x3001 #define GL_CLIP_PLANE2 0x3002 #define GL_CLIP_PLANE3 0x3003 #define GL_CLIP_PLANE4 0x3004 #define GL_CLIP_PLANE5 0x3005 #define GL_LIGHT0 0x4000 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_LIGHT1 0x4001 #define GL_LIGHT2 0x4002 #define GL_LIGHT3 0x4003 #define GL_LIGHT4 0x4004 #define GL_LIGHT5 0x4005 #define GL_LIGHT6 0x4006 #define GL_LIGHT7 0x4007 #define GL_HINT_BIT 0x00008000 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_ALPHA4 0x803B #define GL_ALPHA8 0x803C #define GL_ALPHA12 0x803D #define GL_ALPHA16 0x803E #define GL_LUMINANCE4 0x803F #define GL_LUMINANCE8 0x8040 #define GL_LUMINANCE12 0x8041 #define GL_LUMINANCE16 0x8042 #define GL_LUMINANCE4_ALPHA4 0x8043 #define GL_LUMINANCE6_ALPHA2 0x8044 #define GL_LUMINANCE8_ALPHA8 0x8045 #define GL_LUMINANCE12_ALPHA4 0x8046 #define GL_LUMINANCE12_ALPHA12 0x8047 #define GL_LUMINANCE16_ALPHA16 0x8048 #define GL_INTENSITY 0x8049 #define GL_INTENSITY4 0x804A #define GL_INTENSITY8 0x804B #define GL_INTENSITY12 0x804C #define GL_INTENSITY16 0x804D #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_TEXTURE_LUMINANCE_SIZE 0x8060 #define GL_TEXTURE_INTENSITY_SIZE 0x8061 #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_TEXTURE_PRIORITY 0x8066 #define GL_TEXTURE_RESIDENT 0x8067 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 #define GL_COLOR_ARRAY 0x8076 #define GL_INDEX_ARRAY 0x8077 #define GL_TEXTURE_COORD_ARRAY 0x8078 #define GL_EDGE_FLAG_ARRAY 0x8079 #define GL_VERTEX_ARRAY_SIZE 0x807A #define GL_VERTEX_ARRAY_TYPE 0x807B #define GL_VERTEX_ARRAY_STRIDE 0x807C #define GL_NORMAL_ARRAY_TYPE 0x807E #define GL_NORMAL_ARRAY_STRIDE 0x807F #define GL_COLOR_ARRAY_SIZE 0x8081 #define GL_COLOR_ARRAY_TYPE 0x8082 #define GL_COLOR_ARRAY_STRIDE 0x8083 #define GL_INDEX_ARRAY_TYPE 0x8085 #define GL_INDEX_ARRAY_STRIDE 0x8086 #define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A #define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C #define GL_VERTEX_ARRAY_POINTER 0x808E #define GL_NORMAL_ARRAY_POINTER 0x808F #define GL_COLOR_ARRAY_POINTER 0x8090 #define GL_INDEX_ARRAY_POINTER 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_EVAL_BIT 0x00010000 #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 #define GL_ALL_ATTRIB_BITS 0x000fffff #define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff GLAPI void GLAPIENTRY glAccum(GLenum op, GLfloat value); GLAPI void GLAPIENTRY glAlphaFunc(GLenum func, GLclampf ref); GLAPI GLboolean GLAPIENTRY glAreTexturesResident(GLsizei n, const GLuint * textures, GLboolean * residences); GLAPI void GLAPIENTRY glArrayElement(GLint i); GLAPI void GLAPIENTRY glBegin(GLenum mode); GLAPI void GLAPIENTRY glBindTexture(GLenum target, GLuint texture); GLAPI void GLAPIENTRY glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); GLAPI void GLAPIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor); GLAPI void GLAPIENTRY glCallList(GLuint list); GLAPI void GLAPIENTRY glCallLists(GLsizei n, GLenum type, const GLvoid * lists); GLAPI void GLAPIENTRY glClear(GLbitfield mask); GLAPI void GLAPIENTRY glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void GLAPIENTRY glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); GLAPI void GLAPIENTRY glClearDepth(GLclampd depth); GLAPI void GLAPIENTRY glClearIndex(GLfloat c); GLAPI void GLAPIENTRY glClearStencil(GLint s); GLAPI void GLAPIENTRY glClipPlane(GLenum plane, const GLdouble * equation); GLAPI void GLAPIENTRY glColor3b(GLbyte red, GLbyte green, GLbyte blue); GLAPI void GLAPIENTRY glColor3bv(const GLbyte * v); GLAPI void GLAPIENTRY glColor3d(GLdouble red, GLdouble green, GLdouble blue); GLAPI void GLAPIENTRY glColor3dv(const GLdouble * v); GLAPI void GLAPIENTRY glColor3f(GLfloat red, GLfloat green, GLfloat blue); GLAPI void GLAPIENTRY glColor3fv(const GLfloat * v); GLAPI void GLAPIENTRY glColor3i(GLint red, GLint green, GLint blue); GLAPI void GLAPIENTRY glColor3iv(const GLint * v); GLAPI void GLAPIENTRY glColor3s(GLshort red, GLshort green, GLshort blue); GLAPI void GLAPIENTRY glColor3sv(const GLshort * v); GLAPI void GLAPIENTRY glColor3ub(GLubyte red, GLubyte green, GLubyte blue); GLAPI void GLAPIENTRY glColor3ubv(const GLubyte * v); GLAPI void GLAPIENTRY glColor3ui(GLuint red, GLuint green, GLuint blue); GLAPI void GLAPIENTRY glColor3uiv(const GLuint * v); GLAPI void GLAPIENTRY glColor3us(GLushort red, GLushort green, GLushort blue); GLAPI void GLAPIENTRY glColor3usv(const GLushort * v); GLAPI void GLAPIENTRY glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); GLAPI void GLAPIENTRY glColor4bv(const GLbyte * v); GLAPI void GLAPIENTRY glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); GLAPI void GLAPIENTRY glColor4dv(const GLdouble * v); GLAPI void GLAPIENTRY glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void GLAPIENTRY glColor4fv(const GLfloat * v); GLAPI void GLAPIENTRY glColor4i(GLint red, GLint green, GLint blue, GLint alpha); GLAPI void GLAPIENTRY glColor4iv(const GLint * v); GLAPI void GLAPIENTRY glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha); GLAPI void GLAPIENTRY glColor4sv(const GLshort * v); GLAPI void GLAPIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); GLAPI void GLAPIENTRY glColor4ubv(const GLubyte * v); GLAPI void GLAPIENTRY glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha); GLAPI void GLAPIENTRY glColor4uiv(const GLuint * v); GLAPI void GLAPIENTRY glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha); GLAPI void GLAPIENTRY glColor4usv(const GLushort * v); GLAPI void GLAPIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLAPI void GLAPIENTRY glColorMaterial(GLenum face, GLenum mode); GLAPI void GLAPIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLAPI void GLAPIENTRY glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); GLAPI void GLAPIENTRY glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void GLAPIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void GLAPIENTRY glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void GLAPIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void GLAPIENTRY glCullFace(GLenum mode); GLAPI void GLAPIENTRY glDeleteLists(GLuint list, GLsizei range); GLAPI void GLAPIENTRY glDeleteTextures(GLsizei n, const GLuint * textures); GLAPI void GLAPIENTRY glDepthFunc(GLenum func); GLAPI void GLAPIENTRY glDepthMask(GLboolean flag); GLAPI void GLAPIENTRY glDepthRange(GLclampd zNear, GLclampd zFar); GLAPI void GLAPIENTRY glDisable(GLenum cap); GLAPI void GLAPIENTRY glDisableClientState(GLenum array); GLAPI void GLAPIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count); GLAPI void GLAPIENTRY glDrawBuffer(GLenum mode); GLAPI void GLAPIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices); GLAPI void GLAPIENTRY glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLAPI void GLAPIENTRY glEdgeFlag(GLboolean flag); GLAPI void GLAPIENTRY glEdgeFlagPointer(GLsizei stride, const GLvoid * pointer); GLAPI void GLAPIENTRY glEdgeFlagv(const GLboolean * flag); GLAPI void GLAPIENTRY glEnable(GLenum cap); GLAPI void GLAPIENTRY glEnableClientState(GLenum array); GLAPI void GLAPIENTRY glEnd(void); GLAPI void GLAPIENTRY glEndList(void); GLAPI void GLAPIENTRY glEvalCoord1d(GLdouble u); GLAPI void GLAPIENTRY glEvalCoord1dv(const GLdouble * u); GLAPI void GLAPIENTRY glEvalCoord1f(GLfloat u); GLAPI void GLAPIENTRY glEvalCoord1fv(const GLfloat * u); GLAPI void GLAPIENTRY glEvalCoord2d(GLdouble u, GLdouble v); GLAPI void GLAPIENTRY glEvalCoord2dv(const GLdouble * u); GLAPI void GLAPIENTRY glEvalCoord2f(GLfloat u, GLfloat v); GLAPI void GLAPIENTRY glEvalCoord2fv(const GLfloat * u); GLAPI void GLAPIENTRY glEvalMesh1(GLenum mode, GLint i1, GLint i2); GLAPI void GLAPIENTRY glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); GLAPI void GLAPIENTRY glEvalPoint1(GLint i); GLAPI void GLAPIENTRY glEvalPoint2(GLint i, GLint j); GLAPI void GLAPIENTRY glFeedbackBuffer(GLsizei size, GLenum type, GLfloat * buffer); GLAPI void GLAPIENTRY glFinish(void); GLAPI void GLAPIENTRY glFlush(void); GLAPI void GLAPIENTRY glFogf(GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glFogfv(GLenum pname, const GLfloat * params); GLAPI void GLAPIENTRY glFogi(GLenum pname, GLint param); GLAPI void GLAPIENTRY glFogiv(GLenum pname, const GLint * params); GLAPI void GLAPIENTRY glFrontFace(GLenum mode); GLAPI void GLAPIENTRY glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI GLuint GLAPIENTRY glGenLists(GLsizei range); GLAPI void GLAPIENTRY glGenTextures(GLsizei n, GLuint * textures); GLAPI void GLAPIENTRY glGetBooleanv(GLenum pname, GLboolean * params); GLAPI void GLAPIENTRY glGetClipPlane(GLenum plane, GLdouble * equation); GLAPI void GLAPIENTRY glGetDoublev(GLenum pname, GLdouble * params); GLAPI GLenum GLAPIENTRY glGetError(void); GLAPI void GLAPIENTRY glGetFloatv(GLenum pname, GLfloat * params); GLAPI void GLAPIENTRY glGetIntegerv(GLenum pname, GLint * params); GLAPI void GLAPIENTRY glGetLightfv(GLenum light, GLenum pname, GLfloat * params); GLAPI void GLAPIENTRY glGetLightiv(GLenum light, GLenum pname, GLint * params); GLAPI void GLAPIENTRY glGetMapdv(GLenum target, GLenum query, GLdouble * v); GLAPI void GLAPIENTRY glGetMapfv(GLenum target, GLenum query, GLfloat * v); GLAPI void GLAPIENTRY glGetMapiv(GLenum target, GLenum query, GLint * v); GLAPI void GLAPIENTRY glGetMaterialfv(GLenum face, GLenum pname, GLfloat * params); GLAPI void GLAPIENTRY glGetMaterialiv(GLenum face, GLenum pname, GLint * params); GLAPI void GLAPIENTRY glGetPixelMapfv(GLenum map, GLfloat * values); GLAPI void GLAPIENTRY glGetPixelMapuiv(GLenum map, GLuint * values); GLAPI void GLAPIENTRY glGetPixelMapusv(GLenum map, GLushort * values); GLAPI void GLAPIENTRY glGetPointerv(GLenum pname, GLvoid ** params); GLAPI void GLAPIENTRY glGetPolygonStipple(GLubyte * mask); GLAPI const GLubyte * GLAPIENTRY glGetString(GLenum name); GLAPI void GLAPIENTRY glGetTexEnvfv(GLenum target, GLenum pname, GLfloat * params); GLAPI void GLAPIENTRY glGetTexEnviv(GLenum target, GLenum pname, GLint * params); GLAPI void GLAPIENTRY glGetTexGendv(GLenum coord, GLenum pname, GLdouble * params); GLAPI void GLAPIENTRY glGetTexGenfv(GLenum coord, GLenum pname, GLfloat * params); GLAPI void GLAPIENTRY glGetTexGeniv(GLenum coord, GLenum pname, GLint * params); GLAPI void GLAPIENTRY glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels); GLAPI void GLAPIENTRY glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat * params); GLAPI void GLAPIENTRY glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint * params); GLAPI void GLAPIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params); GLAPI void GLAPIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint * params); GLAPI void GLAPIENTRY glHint(GLenum target, GLenum mode); GLAPI void GLAPIENTRY glIndexMask(GLuint mask); GLAPI void GLAPIENTRY glIndexPointer(GLenum type, GLsizei stride, const GLvoid * pointer); GLAPI void GLAPIENTRY glIndexd(GLdouble c); GLAPI void GLAPIENTRY glIndexdv(const GLdouble * c); GLAPI void GLAPIENTRY glIndexf(GLfloat c); GLAPI void GLAPIENTRY glIndexfv(const GLfloat * c); GLAPI void GLAPIENTRY glIndexi(GLint c); GLAPI void GLAPIENTRY glIndexiv(const GLint * c); GLAPI void GLAPIENTRY glIndexs(GLshort c); GLAPI void GLAPIENTRY glIndexsv(const GLshort * c); GLAPI void GLAPIENTRY glIndexub(GLubyte c); GLAPI void GLAPIENTRY glIndexubv(const GLubyte * c); GLAPI void GLAPIENTRY glInitNames(void); GLAPI void GLAPIENTRY glInterleavedArrays(GLenum format, GLsizei stride, const GLvoid * pointer); GLAPI GLboolean GLAPIENTRY glIsEnabled(GLenum cap); GLAPI GLboolean GLAPIENTRY glIsList(GLuint list); GLAPI GLboolean GLAPIENTRY glIsTexture(GLuint texture); GLAPI void GLAPIENTRY glLightModelf(GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glLightModelfv(GLenum pname, const GLfloat * params); GLAPI void GLAPIENTRY glLightModeli(GLenum pname, GLint param); GLAPI void GLAPIENTRY glLightModeliv(GLenum pname, const GLint * params); GLAPI void GLAPIENTRY glLightf(GLenum light, GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat * params); GLAPI void GLAPIENTRY glLighti(GLenum light, GLenum pname, GLint param); GLAPI void GLAPIENTRY glLightiv(GLenum light, GLenum pname, const GLint * params); GLAPI void GLAPIENTRY glLineStipple(GLint factor, GLushort pattern); GLAPI void GLAPIENTRY glLineWidth(GLfloat width); GLAPI void GLAPIENTRY glListBase(GLuint base); GLAPI void GLAPIENTRY glLoadIdentity(void); GLAPI void GLAPIENTRY glLoadMatrixd(const GLdouble * m); GLAPI void GLAPIENTRY glLoadMatrixf(const GLfloat * m); GLAPI void GLAPIENTRY glLoadName(GLuint name); GLAPI void GLAPIENTRY glLogicOp(GLenum opcode); GLAPI void GLAPIENTRY glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); GLAPI void GLAPIENTRY glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); GLAPI void GLAPIENTRY glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); GLAPI void GLAPIENTRY glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); GLAPI void GLAPIENTRY glMapGrid1d(GLint un, GLdouble u1, GLdouble u2); GLAPI void GLAPIENTRY glMapGrid1f(GLint un, GLfloat u1, GLfloat u2); GLAPI void GLAPIENTRY glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); GLAPI void GLAPIENTRY glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); GLAPI void GLAPIENTRY glMaterialf(GLenum face, GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glMaterialfv(GLenum face, GLenum pname, const GLfloat * params); GLAPI void GLAPIENTRY glMateriali(GLenum face, GLenum pname, GLint param); GLAPI void GLAPIENTRY glMaterialiv(GLenum face, GLenum pname, const GLint * params); GLAPI void GLAPIENTRY glMatrixMode(GLenum mode); GLAPI void GLAPIENTRY glMultMatrixd(const GLdouble * m); GLAPI void GLAPIENTRY glMultMatrixf(const GLfloat * m); GLAPI void GLAPIENTRY glNewList(GLuint list, GLenum mode); GLAPI void GLAPIENTRY glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz); GLAPI void GLAPIENTRY glNormal3bv(const GLbyte * v); GLAPI void GLAPIENTRY glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz); GLAPI void GLAPIENTRY glNormal3dv(const GLdouble * v); GLAPI void GLAPIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz); GLAPI void GLAPIENTRY glNormal3fv(const GLfloat * v); GLAPI void GLAPIENTRY glNormal3i(GLint nx, GLint ny, GLint nz); GLAPI void GLAPIENTRY glNormal3iv(const GLint * v); GLAPI void GLAPIENTRY glNormal3s(GLshort nx, GLshort ny, GLshort nz); GLAPI void GLAPIENTRY glNormal3sv(const GLshort * v); GLAPI void GLAPIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid * pointer); GLAPI void GLAPIENTRY glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void GLAPIENTRY glPassThrough(GLfloat token); GLAPI void GLAPIENTRY glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat * values); GLAPI void GLAPIENTRY glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint * values); GLAPI void GLAPIENTRY glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort * values); GLAPI void GLAPIENTRY glPixelStoref(GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glPixelStorei(GLenum pname, GLint param); GLAPI void GLAPIENTRY glPixelTransferf(GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glPixelTransferi(GLenum pname, GLint param); GLAPI void GLAPIENTRY glPixelZoom(GLfloat xfactor, GLfloat yfactor); GLAPI void GLAPIENTRY glPointSize(GLfloat size); GLAPI void GLAPIENTRY glPolygonMode(GLenum face, GLenum mode); GLAPI void GLAPIENTRY glPolygonOffset(GLfloat factor, GLfloat units); GLAPI void GLAPIENTRY glPolygonStipple(const GLubyte * mask); GLAPI void GLAPIENTRY glPopAttrib(void); GLAPI void GLAPIENTRY glPopClientAttrib(void); GLAPI void GLAPIENTRY glPopMatrix(void); GLAPI void GLAPIENTRY glPopName(void); GLAPI void GLAPIENTRY glPrioritizeTextures(GLsizei n, const GLuint * textures, const GLclampf * priorities); GLAPI void GLAPIENTRY glPushAttrib(GLbitfield mask); GLAPI void GLAPIENTRY glPushClientAttrib(GLbitfield mask); GLAPI void GLAPIENTRY glPushMatrix(void); GLAPI void GLAPIENTRY glPushName(GLuint name); GLAPI void GLAPIENTRY glRasterPos2d(GLdouble x, GLdouble y); GLAPI void GLAPIENTRY glRasterPos2dv(const GLdouble * v); GLAPI void GLAPIENTRY glRasterPos2f(GLfloat x, GLfloat y); GLAPI void GLAPIENTRY glRasterPos2fv(const GLfloat * v); GLAPI void GLAPIENTRY glRasterPos2i(GLint x, GLint y); GLAPI void GLAPIENTRY glRasterPos2iv(const GLint * v); GLAPI void GLAPIENTRY glRasterPos2s(GLshort x, GLshort y); GLAPI void GLAPIENTRY glRasterPos2sv(const GLshort * v); GLAPI void GLAPIENTRY glRasterPos3d(GLdouble x, GLdouble y, GLdouble z); GLAPI void GLAPIENTRY glRasterPos3dv(const GLdouble * v); GLAPI void GLAPIENTRY glRasterPos3f(GLfloat x, GLfloat y, GLfloat z); GLAPI void GLAPIENTRY glRasterPos3fv(const GLfloat * v); GLAPI void GLAPIENTRY glRasterPos3i(GLint x, GLint y, GLint z); GLAPI void GLAPIENTRY glRasterPos3iv(const GLint * v); GLAPI void GLAPIENTRY glRasterPos3s(GLshort x, GLshort y, GLshort z); GLAPI void GLAPIENTRY glRasterPos3sv(const GLshort * v); GLAPI void GLAPIENTRY glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void GLAPIENTRY glRasterPos4dv(const GLdouble * v); GLAPI void GLAPIENTRY glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void GLAPIENTRY glRasterPos4fv(const GLfloat * v); GLAPI void GLAPIENTRY glRasterPos4i(GLint x, GLint y, GLint z, GLint w); GLAPI void GLAPIENTRY glRasterPos4iv(const GLint * v); GLAPI void GLAPIENTRY glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void GLAPIENTRY glRasterPos4sv(const GLshort * v); GLAPI void GLAPIENTRY glReadBuffer(GLenum mode); GLAPI void GLAPIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels); GLAPI void GLAPIENTRY glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); GLAPI void GLAPIENTRY glRectdv(const GLdouble * v1, const GLdouble * v2); GLAPI void GLAPIENTRY glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); GLAPI void GLAPIENTRY glRectfv(const GLfloat * v1, const GLfloat * v2); GLAPI void GLAPIENTRY glRecti(GLint x1, GLint y1, GLint x2, GLint y2); GLAPI void GLAPIENTRY glRectiv(const GLint * v1, const GLint * v2); GLAPI void GLAPIENTRY glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2); GLAPI void GLAPIENTRY glRectsv(const GLshort * v1, const GLshort * v2); GLAPI GLint GLAPIENTRY glRenderMode(GLenum mode); GLAPI void GLAPIENTRY glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLAPI void GLAPIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLAPI void GLAPIENTRY glScaled(GLdouble x, GLdouble y, GLdouble z); GLAPI void GLAPIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z); GLAPI void GLAPIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void GLAPIENTRY glSelectBuffer(GLsizei size, GLuint * buffer); GLAPI void GLAPIENTRY glShadeModel(GLenum mode); GLAPI void GLAPIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask); GLAPI void GLAPIENTRY glStencilMask(GLuint mask); GLAPI void GLAPIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); GLAPI void GLAPIENTRY glTexCoord1d(GLdouble s); GLAPI void GLAPIENTRY glTexCoord1dv(const GLdouble * v); GLAPI void GLAPIENTRY glTexCoord1f(GLfloat s); GLAPI void GLAPIENTRY glTexCoord1fv(const GLfloat * v); GLAPI void GLAPIENTRY glTexCoord1i(GLint s); GLAPI void GLAPIENTRY glTexCoord1iv(const GLint * v); GLAPI void GLAPIENTRY glTexCoord1s(GLshort s); GLAPI void GLAPIENTRY glTexCoord1sv(const GLshort * v); GLAPI void GLAPIENTRY glTexCoord2d(GLdouble s, GLdouble t); GLAPI void GLAPIENTRY glTexCoord2dv(const GLdouble * v); GLAPI void GLAPIENTRY glTexCoord2f(GLfloat s, GLfloat t); GLAPI void GLAPIENTRY glTexCoord2fv(const GLfloat * v); GLAPI void GLAPIENTRY glTexCoord2i(GLint s, GLint t); GLAPI void GLAPIENTRY glTexCoord2iv(const GLint * v); GLAPI void GLAPIENTRY glTexCoord2s(GLshort s, GLshort t); GLAPI void GLAPIENTRY glTexCoord2sv(const GLshort * v); GLAPI void GLAPIENTRY glTexCoord3d(GLdouble s, GLdouble t, GLdouble r); GLAPI void GLAPIENTRY glTexCoord3dv(const GLdouble * v); GLAPI void GLAPIENTRY glTexCoord3f(GLfloat s, GLfloat t, GLfloat r); GLAPI void GLAPIENTRY glTexCoord3fv(const GLfloat * v); GLAPI void GLAPIENTRY glTexCoord3i(GLint s, GLint t, GLint r); GLAPI void GLAPIENTRY glTexCoord3iv(const GLint * v); GLAPI void GLAPIENTRY glTexCoord3s(GLshort s, GLshort t, GLshort r); GLAPI void GLAPIENTRY glTexCoord3sv(const GLshort * v); GLAPI void GLAPIENTRY glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void GLAPIENTRY glTexCoord4dv(const GLdouble * v); GLAPI void GLAPIENTRY glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void GLAPIENTRY glTexCoord4fv(const GLfloat * v); GLAPI void GLAPIENTRY glTexCoord4i(GLint s, GLint t, GLint r, GLint q); GLAPI void GLAPIENTRY glTexCoord4iv(const GLint * v); GLAPI void GLAPIENTRY glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void GLAPIENTRY glTexCoord4sv(const GLshort * v); GLAPI void GLAPIENTRY glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLAPI void GLAPIENTRY glTexEnvf(GLenum target, GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glTexEnvfv(GLenum target, GLenum pname, const GLfloat * params); GLAPI void GLAPIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param); GLAPI void GLAPIENTRY glTexEnviv(GLenum target, GLenum pname, const GLint * params); GLAPI void GLAPIENTRY glTexGend(GLenum coord, GLenum pname, GLdouble param); GLAPI void GLAPIENTRY glTexGendv(GLenum coord, GLenum pname, const GLdouble * params); GLAPI void GLAPIENTRY glTexGenf(GLenum coord, GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glTexGenfv(GLenum coord, GLenum pname, const GLfloat * params); GLAPI void GLAPIENTRY glTexGeni(GLenum coord, GLenum pname, GLint param); GLAPI void GLAPIENTRY glTexGeniv(GLenum coord, GLenum pname, const GLint * params); GLAPI void GLAPIENTRY glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLAPI void GLAPIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLAPI void GLAPIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param); GLAPI void GLAPIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params); GLAPI void GLAPIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param); GLAPI void GLAPIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint * params); GLAPI void GLAPIENTRY glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); GLAPI void GLAPIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLAPI void GLAPIENTRY glTranslated(GLdouble x, GLdouble y, GLdouble z); GLAPI void GLAPIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z); GLAPI void GLAPIENTRY glVertex2d(GLdouble x, GLdouble y); GLAPI void GLAPIENTRY glVertex2dv(const GLdouble * v); GLAPI void GLAPIENTRY glVertex2f(GLfloat x, GLfloat y); GLAPI void GLAPIENTRY glVertex2fv(const GLfloat * v); GLAPI void GLAPIENTRY glVertex2i(GLint x, GLint y); GLAPI void GLAPIENTRY glVertex2iv(const GLint * v); GLAPI void GLAPIENTRY glVertex2s(GLshort x, GLshort y); GLAPI void GLAPIENTRY glVertex2sv(const GLshort * v); GLAPI void GLAPIENTRY glVertex3d(GLdouble x, GLdouble y, GLdouble z); GLAPI void GLAPIENTRY glVertex3dv(const GLdouble * v); GLAPI void GLAPIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z); GLAPI void GLAPIENTRY glVertex3fv(const GLfloat * v); GLAPI void GLAPIENTRY glVertex3i(GLint x, GLint y, GLint z); GLAPI void GLAPIENTRY glVertex3iv(const GLint * v); GLAPI void GLAPIENTRY glVertex3s(GLshort x, GLshort y, GLshort z); GLAPI void GLAPIENTRY glVertex3sv(const GLshort * v); GLAPI void GLAPIENTRY glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void GLAPIENTRY glVertex4dv(const GLdouble * v); GLAPI void GLAPIENTRY glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void GLAPIENTRY glVertex4fv(const GLfloat * v); GLAPI void GLAPIENTRY glVertex4i(GLint x, GLint y, GLint z, GLint w); GLAPI void GLAPIENTRY glVertex4iv(const GLint * v); GLAPI void GLAPIENTRY glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void GLAPIENTRY glVertex4sv(const GLshort * v); GLAPI void GLAPIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLAPI void GLAPIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height); #define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) #endif /* GL_VERSION_1_1 */ /* ---------------------------------- GLU ---------------------------------- */ #ifndef GLEW_NO_GLU /* this is where we can safely include GLU */ #if defined(__APPLE__) && defined(__MACH__) #include #else #include #endif #endif /* ----------------------------- GL_VERSION_1_2 ---------------------------- */ #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_RESCALE_NORMAL 0x803A #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E typedef void(GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); typedef void(GLAPIENTRY * PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); typedef void(GLAPIENTRY * PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); #define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D) #define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements) #define glTexImage3D GLEW_GET_FUN(__glewTexImage3D) #define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D) #define GLEW_VERSION_1_2 GLEW_GET_VAR(__GLEW_VERSION_1_2) #endif /* GL_VERSION_1_2 */ /* ---------------------------- GL_VERSION_1_2_1 --------------------------- */ #ifndef GL_VERSION_1_2_1 #define GL_VERSION_1_2_1 1 #define GLEW_VERSION_1_2_1 GLEW_GET_VAR(__GLEW_VERSION_1_2_1) #endif /* GL_VERSION_1_2_1 */ /* ----------------------------- GL_VERSION_1_3 ---------------------------- */ #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_CLAMP_TO_BORDER 0x812D #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #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_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_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_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_SUBTRACT 0x84E7 #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF #define GL_MULTISAMPLE_BIT 0x20000000 typedef void(GLAPIENTRY * PFNGLACTIVETEXTUREPROC)(GLenum texture); typedef void(GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint lod, GLvoid * img); typedef void(GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC)(const GLdouble m[16]); typedef void(GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC)(const GLfloat m[16]); typedef void(GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC)(const GLdouble m[16]); typedef void(GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC)(const GLfloat m[16]); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1DPROC)(GLenum target, GLdouble s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1DVPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1FPROC)(GLenum target, GLfloat s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1FVPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1IPROC)(GLenum target, GLint s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1IVPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1SPROC)(GLenum target, GLshort s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1SVPROC)(GLenum target, const GLshort * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2DPROC)(GLenum target, GLdouble s, GLdouble t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2DVPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2FPROC)(GLenum target, GLfloat s, GLfloat t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2FVPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2IPROC)(GLenum target, GLint s, GLint t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2IVPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2SPROC)(GLenum target, GLshort s, GLshort t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2SVPROC)(GLenum target, const GLshort * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3DVPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3FVPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3IPROC)(GLenum target, GLint s, GLint t, GLint r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3IVPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3SPROC)(GLenum target, GLshort s, GLshort t, GLshort r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3SVPROC)(GLenum target, const GLshort * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4DVPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4FVPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4IPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4IVPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4SPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4SVPROC)(GLenum target, const GLshort * v); typedef void(GLAPIENTRY * PFNGLSAMPLECOVERAGEPROC)(GLclampf value, GLboolean invert); #define glActiveTexture GLEW_GET_FUN(__glewActiveTexture) #define glClientActiveTexture GLEW_GET_FUN(__glewClientActiveTexture) #define glCompressedTexImage1D GLEW_GET_FUN(__glewCompressedTexImage1D) #define glCompressedTexImage2D GLEW_GET_FUN(__glewCompressedTexImage2D) #define glCompressedTexImage3D GLEW_GET_FUN(__glewCompressedTexImage3D) #define glCompressedTexSubImage1D GLEW_GET_FUN(__glewCompressedTexSubImage1D) #define glCompressedTexSubImage2D GLEW_GET_FUN(__glewCompressedTexSubImage2D) #define glCompressedTexSubImage3D GLEW_GET_FUN(__glewCompressedTexSubImage3D) #define glGetCompressedTexImage GLEW_GET_FUN(__glewGetCompressedTexImage) #define glLoadTransposeMatrixd GLEW_GET_FUN(__glewLoadTransposeMatrixd) #define glLoadTransposeMatrixf GLEW_GET_FUN(__glewLoadTransposeMatrixf) #define glMultTransposeMatrixd GLEW_GET_FUN(__glewMultTransposeMatrixd) #define glMultTransposeMatrixf GLEW_GET_FUN(__glewMultTransposeMatrixf) #define glMultiTexCoord1d GLEW_GET_FUN(__glewMultiTexCoord1d) #define glMultiTexCoord1dv GLEW_GET_FUN(__glewMultiTexCoord1dv) #define glMultiTexCoord1f GLEW_GET_FUN(__glewMultiTexCoord1f) #define glMultiTexCoord1fv GLEW_GET_FUN(__glewMultiTexCoord1fv) #define glMultiTexCoord1i GLEW_GET_FUN(__glewMultiTexCoord1i) #define glMultiTexCoord1iv GLEW_GET_FUN(__glewMultiTexCoord1iv) #define glMultiTexCoord1s GLEW_GET_FUN(__glewMultiTexCoord1s) #define glMultiTexCoord1sv GLEW_GET_FUN(__glewMultiTexCoord1sv) #define glMultiTexCoord2d GLEW_GET_FUN(__glewMultiTexCoord2d) #define glMultiTexCoord2dv GLEW_GET_FUN(__glewMultiTexCoord2dv) #define glMultiTexCoord2f GLEW_GET_FUN(__glewMultiTexCoord2f) #define glMultiTexCoord2fv GLEW_GET_FUN(__glewMultiTexCoord2fv) #define glMultiTexCoord2i GLEW_GET_FUN(__glewMultiTexCoord2i) #define glMultiTexCoord2iv GLEW_GET_FUN(__glewMultiTexCoord2iv) #define glMultiTexCoord2s GLEW_GET_FUN(__glewMultiTexCoord2s) #define glMultiTexCoord2sv GLEW_GET_FUN(__glewMultiTexCoord2sv) #define glMultiTexCoord3d GLEW_GET_FUN(__glewMultiTexCoord3d) #define glMultiTexCoord3dv GLEW_GET_FUN(__glewMultiTexCoord3dv) #define glMultiTexCoord3f GLEW_GET_FUN(__glewMultiTexCoord3f) #define glMultiTexCoord3fv GLEW_GET_FUN(__glewMultiTexCoord3fv) #define glMultiTexCoord3i GLEW_GET_FUN(__glewMultiTexCoord3i) #define glMultiTexCoord3iv GLEW_GET_FUN(__glewMultiTexCoord3iv) #define glMultiTexCoord3s GLEW_GET_FUN(__glewMultiTexCoord3s) #define glMultiTexCoord3sv GLEW_GET_FUN(__glewMultiTexCoord3sv) #define glMultiTexCoord4d GLEW_GET_FUN(__glewMultiTexCoord4d) #define glMultiTexCoord4dv GLEW_GET_FUN(__glewMultiTexCoord4dv) #define glMultiTexCoord4f GLEW_GET_FUN(__glewMultiTexCoord4f) #define glMultiTexCoord4fv GLEW_GET_FUN(__glewMultiTexCoord4fv) #define glMultiTexCoord4i GLEW_GET_FUN(__glewMultiTexCoord4i) #define glMultiTexCoord4iv GLEW_GET_FUN(__glewMultiTexCoord4iv) #define glMultiTexCoord4s GLEW_GET_FUN(__glewMultiTexCoord4s) #define glMultiTexCoord4sv GLEW_GET_FUN(__glewMultiTexCoord4sv) #define glSampleCoverage GLEW_GET_FUN(__glewSampleCoverage) #define GLEW_VERSION_1_3 GLEW_GET_VAR(__GLEW_VERSION_1_3) #endif /* GL_VERSION_1_3 */ /* ----------------------------- GL_VERSION_1_4 ---------------------------- */ #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_GENERATE_MIPMAP 0x8191 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 #define GL_CURRENT_FOG_COORDINATE 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 #define GL_FOG_COORDINATE_ARRAY 0x8457 #define GL_COLOR_SUM 0x8458 #define GL_CURRENT_SECONDARY_COLOR 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_FILTER_CONTROL 0x8500 #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_DEPTH_TEXTURE_MODE 0x884B #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_COMPARE_R_TO_TEXTURE 0x884E typedef void(GLAPIENTRY * PFNGLBLENDCOLORPROC)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONPROC)(GLenum mode); typedef void(GLAPIENTRY * PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void(GLAPIENTRY * PFNGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const GLvoid * pointer); typedef void(GLAPIENTRY * PFNGLFOGCOORDDPROC)(GLdouble coord); typedef void(GLAPIENTRY * PFNGLFOGCOORDDVPROC)(const GLdouble * coord); typedef void(GLAPIENTRY * PFNGLFOGCOORDFPROC)(GLfloat coord); typedef void(GLAPIENTRY * PFNGLFOGCOORDFVPROC)(const GLfloat * coord); typedef void(GLAPIENTRY * PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); typedef void(GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei drawcount); typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3BVPROC)(const GLbyte * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3DVPROC)(const GLdouble * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3FVPROC)(const GLfloat * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3IPROC)(GLint red, GLint green, GLint blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3IVPROC)(const GLint * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3SVPROC)(const GLshort * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVPROC)(const GLubyte * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVPROC)(const GLuint * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3USVPROC)(const GLushort * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2DPROC)(GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2DVPROC)(const GLdouble * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2FPROC)(GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2FVPROC)(const GLfloat * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2IPROC)(GLint x, GLint y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2IVPROC)(const GLint * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2SPROC)(GLshort x, GLshort y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2SVPROC)(const GLshort * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3DVPROC)(const GLdouble * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3FVPROC)(const GLfloat * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3IPROC)(GLint x, GLint y, GLint z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3IVPROC)(const GLint * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3SPROC)(GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3SVPROC)(const GLshort * p); #define glBlendColor GLEW_GET_FUN(__glewBlendColor) #define glBlendEquation GLEW_GET_FUN(__glewBlendEquation) #define glBlendFuncSeparate GLEW_GET_FUN(__glewBlendFuncSeparate) #define glFogCoordPointer GLEW_GET_FUN(__glewFogCoordPointer) #define glFogCoordd GLEW_GET_FUN(__glewFogCoordd) #define glFogCoorddv GLEW_GET_FUN(__glewFogCoorddv) #define glFogCoordf GLEW_GET_FUN(__glewFogCoordf) #define glFogCoordfv GLEW_GET_FUN(__glewFogCoordfv) #define glMultiDrawArrays GLEW_GET_FUN(__glewMultiDrawArrays) #define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements) #define glPointParameterf GLEW_GET_FUN(__glewPointParameterf) #define glPointParameterfv GLEW_GET_FUN(__glewPointParameterfv) #define glPointParameteri GLEW_GET_FUN(__glewPointParameteri) #define glPointParameteriv GLEW_GET_FUN(__glewPointParameteriv) #define glSecondaryColor3b GLEW_GET_FUN(__glewSecondaryColor3b) #define glSecondaryColor3bv GLEW_GET_FUN(__glewSecondaryColor3bv) #define glSecondaryColor3d GLEW_GET_FUN(__glewSecondaryColor3d) #define glSecondaryColor3dv GLEW_GET_FUN(__glewSecondaryColor3dv) #define glSecondaryColor3f GLEW_GET_FUN(__glewSecondaryColor3f) #define glSecondaryColor3fv GLEW_GET_FUN(__glewSecondaryColor3fv) #define glSecondaryColor3i GLEW_GET_FUN(__glewSecondaryColor3i) #define glSecondaryColor3iv GLEW_GET_FUN(__glewSecondaryColor3iv) #define glSecondaryColor3s GLEW_GET_FUN(__glewSecondaryColor3s) #define glSecondaryColor3sv GLEW_GET_FUN(__glewSecondaryColor3sv) #define glSecondaryColor3ub GLEW_GET_FUN(__glewSecondaryColor3ub) #define glSecondaryColor3ubv GLEW_GET_FUN(__glewSecondaryColor3ubv) #define glSecondaryColor3ui GLEW_GET_FUN(__glewSecondaryColor3ui) #define glSecondaryColor3uiv GLEW_GET_FUN(__glewSecondaryColor3uiv) #define glSecondaryColor3us GLEW_GET_FUN(__glewSecondaryColor3us) #define glSecondaryColor3usv GLEW_GET_FUN(__glewSecondaryColor3usv) #define glSecondaryColorPointer GLEW_GET_FUN(__glewSecondaryColorPointer) #define glWindowPos2d GLEW_GET_FUN(__glewWindowPos2d) #define glWindowPos2dv GLEW_GET_FUN(__glewWindowPos2dv) #define glWindowPos2f GLEW_GET_FUN(__glewWindowPos2f) #define glWindowPos2fv GLEW_GET_FUN(__glewWindowPos2fv) #define glWindowPos2i GLEW_GET_FUN(__glewWindowPos2i) #define glWindowPos2iv GLEW_GET_FUN(__glewWindowPos2iv) #define glWindowPos2s GLEW_GET_FUN(__glewWindowPos2s) #define glWindowPos2sv GLEW_GET_FUN(__glewWindowPos2sv) #define glWindowPos3d GLEW_GET_FUN(__glewWindowPos3d) #define glWindowPos3dv GLEW_GET_FUN(__glewWindowPos3dv) #define glWindowPos3f GLEW_GET_FUN(__glewWindowPos3f) #define glWindowPos3fv GLEW_GET_FUN(__glewWindowPos3fv) #define glWindowPos3i GLEW_GET_FUN(__glewWindowPos3i) #define glWindowPos3iv GLEW_GET_FUN(__glewWindowPos3iv) #define glWindowPos3s GLEW_GET_FUN(__glewWindowPos3s) #define glWindowPos3sv GLEW_GET_FUN(__glewWindowPos3sv) #define GLEW_VERSION_1_4 GLEW_GET_VAR(__GLEW_VERSION_1_4) #endif /* GL_VERSION_1_4 */ /* ----------------------------- GL_VERSION_1_5 ---------------------------- */ #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 #define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE #define GL_FOG_COORD GL_FOG_COORDINATE #define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY #define GL_SRC0_RGB GL_SOURCE0_RGB #define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER #define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE #define GL_SRC1_ALPHA GL_SOURCE1_ALPHA #define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE #define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE #define GL_SRC0_ALPHA GL_SOURCE0_ALPHA #define GL_SRC1_RGB GL_SOURCE1_RGB #define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING #define GL_SRC2_ALPHA GL_SOURCE2_ALPHA #define GL_SRC2_RGB GL_SOURCE2_RGB #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 typedef ptrdiff_t GLintptr; typedef ptrdiff_t GLsizeiptr; typedef void(GLAPIENTRY * PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); typedef void(GLAPIENTRY * PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); typedef void(GLAPIENTRY * PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage); typedef void(GLAPIENTRY * PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint * buffers); typedef void(GLAPIENTRY * PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint * ids); typedef void(GLAPIENTRY * PFNGLENDQUERYPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLGENBUFFERSPROC)(GLsizei n, GLuint * buffers); typedef void(GLAPIENTRY * PFNGLGENQUERIESPROC)(GLsizei n, GLuint * ids); typedef void(GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, GLvoid ** params); typedef void(GLAPIENTRY * PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data); typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISBUFFERPROC)(GLuint buffer); typedef GLboolean(GLAPIENTRY * PFNGLISQUERYPROC)(GLuint id); typedef GLvoid *(GLAPIENTRY * PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); typedef GLboolean(GLAPIENTRY * PFNGLUNMAPBUFFERPROC)(GLenum target); #define glBeginQuery GLEW_GET_FUN(__glewBeginQuery) #define glBindBuffer GLEW_GET_FUN(__glewBindBuffer) #define glBufferData GLEW_GET_FUN(__glewBufferData) #define glBufferSubData GLEW_GET_FUN(__glewBufferSubData) #define glDeleteBuffers GLEW_GET_FUN(__glewDeleteBuffers) #define glDeleteQueries GLEW_GET_FUN(__glewDeleteQueries) #define glEndQuery GLEW_GET_FUN(__glewEndQuery) #define glGenBuffers GLEW_GET_FUN(__glewGenBuffers) #define glGenQueries GLEW_GET_FUN(__glewGenQueries) #define glGetBufferParameteriv GLEW_GET_FUN(__glewGetBufferParameteriv) #define glGetBufferPointerv GLEW_GET_FUN(__glewGetBufferPointerv) #define glGetBufferSubData GLEW_GET_FUN(__glewGetBufferSubData) #define glGetQueryObjectiv GLEW_GET_FUN(__glewGetQueryObjectiv) #define glGetQueryObjectuiv GLEW_GET_FUN(__glewGetQueryObjectuiv) #define glGetQueryiv GLEW_GET_FUN(__glewGetQueryiv) #define glIsBuffer GLEW_GET_FUN(__glewIsBuffer) #define glIsQuery GLEW_GET_FUN(__glewIsQuery) #define glMapBuffer GLEW_GET_FUN(__glewMapBuffer) #define glUnmapBuffer GLEW_GET_FUN(__glewUnmapBuffer) #define GLEW_VERSION_1_5 GLEW_GET_VAR(__GLEW_VERSION_1_5) #endif /* GL_VERSION_1_5 */ /* ----------------------------- GL_VERSION_2_0 ---------------------------- */ #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 #define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #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_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_BLEND_EQUATION_ALPHA 0x883D #define GL_POINT_SPRITE 0x8861 #define GL_COORD_REPLACE 0x8862 #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_COORDS 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 typedef void(GLAPIENTRY * PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); typedef void(GLAPIENTRY * PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar * name); typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum, GLenum); typedef void(GLAPIENTRY * PFNGLCOMPILESHADERPROC)(GLuint shader); typedef GLuint(GLAPIENTRY * PFNGLCREATEPROGRAMPROC)(void); typedef GLuint(GLAPIENTRY * PFNGLCREATESHADERPROC)(GLenum type); typedef void(GLAPIENTRY * PFNGLDELETEPROGRAMPROC)(GLuint program); typedef void(GLAPIENTRY * PFNGLDELETESHADERPROC)(GLuint shader); typedef void(GLAPIENTRY * PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); typedef void(GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint); typedef void(GLAPIENTRY * PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum * bufs); typedef void(GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint); typedef void(GLAPIENTRY * PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLchar * name); typedef void(GLAPIENTRY * PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLchar * name); typedef void(GLAPIENTRY * PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); typedef GLint(GLAPIENTRY * PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar * name); typedef void(GLAPIENTRY * PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); typedef void(GLAPIENTRY * PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint * param); typedef void(GLAPIENTRY * PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); typedef void(GLAPIENTRY * PFNGLGETSHADERSOURCEPROC)(GLuint obj, GLsizei maxLength, GLsizei * length, GLchar * source); typedef void(GLAPIENTRY * PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint * param); typedef GLint(GLAPIENTRY * PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar * name); typedef void(GLAPIENTRY * PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint, GLenum, GLvoid **); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBDVPROC)(GLuint, GLenum, GLdouble *); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBFVPROC)(GLuint, GLenum, GLfloat *); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBIVPROC)(GLuint, GLenum, GLint *); typedef GLboolean(GLAPIENTRY * PFNGLISPROGRAMPROC)(GLuint program); typedef GLboolean(GLAPIENTRY * PFNGLISSHADERPROC)(GLuint shader); typedef void(GLAPIENTRY * PFNGLLINKPROGRAMPROC)(GLuint program); typedef void(GLAPIENTRY * PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar ** strings, const GLint * lengths); typedef void(GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); typedef void(GLAPIENTRY * PFNGLSTENCILMASKSEPARATEPROC)(GLenum, GLuint); typedef void(GLAPIENTRY * PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void(GLAPIENTRY * PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); typedef void(GLAPIENTRY * PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM1IPROC)(GLint location, GLint v0); typedef void(GLAPIENTRY * PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); typedef void(GLAPIENTRY * PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); typedef void(GLAPIENTRY * PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void(GLAPIENTRY * PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); typedef void(GLAPIENTRY * PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void(GLAPIENTRY * PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void(GLAPIENTRY * PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUSEPROGRAMPROC)(GLuint program); typedef void(GLAPIENTRY * PFNGLVALIDATEPROGRAMPROC)(GLuint program); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); #define glAttachShader GLEW_GET_FUN(__glewAttachShader) #define glBindAttribLocation GLEW_GET_FUN(__glewBindAttribLocation) #define glBlendEquationSeparate GLEW_GET_FUN(__glewBlendEquationSeparate) #define glCompileShader GLEW_GET_FUN(__glewCompileShader) #define glCreateProgram GLEW_GET_FUN(__glewCreateProgram) #define glCreateShader GLEW_GET_FUN(__glewCreateShader) #define glDeleteProgram GLEW_GET_FUN(__glewDeleteProgram) #define glDeleteShader GLEW_GET_FUN(__glewDeleteShader) #define glDetachShader GLEW_GET_FUN(__glewDetachShader) #define glDisableVertexAttribArray GLEW_GET_FUN(__glewDisableVertexAttribArray) #define glDrawBuffers GLEW_GET_FUN(__glewDrawBuffers) #define glEnableVertexAttribArray GLEW_GET_FUN(__glewEnableVertexAttribArray) #define glGetActiveAttrib GLEW_GET_FUN(__glewGetActiveAttrib) #define glGetActiveUniform GLEW_GET_FUN(__glewGetActiveUniform) #define glGetAttachedShaders GLEW_GET_FUN(__glewGetAttachedShaders) #define glGetAttribLocation GLEW_GET_FUN(__glewGetAttribLocation) #define glGetProgramInfoLog GLEW_GET_FUN(__glewGetProgramInfoLog) #define glGetProgramiv GLEW_GET_FUN(__glewGetProgramiv) #define glGetShaderInfoLog GLEW_GET_FUN(__glewGetShaderInfoLog) #define glGetShaderSource GLEW_GET_FUN(__glewGetShaderSource) #define glGetShaderiv GLEW_GET_FUN(__glewGetShaderiv) #define glGetUniformLocation GLEW_GET_FUN(__glewGetUniformLocation) #define glGetUniformfv GLEW_GET_FUN(__glewGetUniformfv) #define glGetUniformiv GLEW_GET_FUN(__glewGetUniformiv) #define glGetVertexAttribPointerv GLEW_GET_FUN(__glewGetVertexAttribPointerv) #define glGetVertexAttribdv GLEW_GET_FUN(__glewGetVertexAttribdv) #define glGetVertexAttribfv GLEW_GET_FUN(__glewGetVertexAttribfv) #define glGetVertexAttribiv GLEW_GET_FUN(__glewGetVertexAttribiv) #define glIsProgram GLEW_GET_FUN(__glewIsProgram) #define glIsShader GLEW_GET_FUN(__glewIsShader) #define glLinkProgram GLEW_GET_FUN(__glewLinkProgram) #define glShaderSource GLEW_GET_FUN(__glewShaderSource) #define glStencilFuncSeparate GLEW_GET_FUN(__glewStencilFuncSeparate) #define glStencilMaskSeparate GLEW_GET_FUN(__glewStencilMaskSeparate) #define glStencilOpSeparate GLEW_GET_FUN(__glewStencilOpSeparate) #define glUniform1f GLEW_GET_FUN(__glewUniform1f) #define glUniform1fv GLEW_GET_FUN(__glewUniform1fv) #define glUniform1i GLEW_GET_FUN(__glewUniform1i) #define glUniform1iv GLEW_GET_FUN(__glewUniform1iv) #define glUniform2f GLEW_GET_FUN(__glewUniform2f) #define glUniform2fv GLEW_GET_FUN(__glewUniform2fv) #define glUniform2i GLEW_GET_FUN(__glewUniform2i) #define glUniform2iv GLEW_GET_FUN(__glewUniform2iv) #define glUniform3f GLEW_GET_FUN(__glewUniform3f) #define glUniform3fv GLEW_GET_FUN(__glewUniform3fv) #define glUniform3i GLEW_GET_FUN(__glewUniform3i) #define glUniform3iv GLEW_GET_FUN(__glewUniform3iv) #define glUniform4f GLEW_GET_FUN(__glewUniform4f) #define glUniform4fv GLEW_GET_FUN(__glewUniform4fv) #define glUniform4i GLEW_GET_FUN(__glewUniform4i) #define glUniform4iv GLEW_GET_FUN(__glewUniform4iv) #define glUniformMatrix2fv GLEW_GET_FUN(__glewUniformMatrix2fv) #define glUniformMatrix3fv GLEW_GET_FUN(__glewUniformMatrix3fv) #define glUniformMatrix4fv GLEW_GET_FUN(__glewUniformMatrix4fv) #define glUseProgram GLEW_GET_FUN(__glewUseProgram) #define glValidateProgram GLEW_GET_FUN(__glewValidateProgram) #define glVertexAttrib1d GLEW_GET_FUN(__glewVertexAttrib1d) #define glVertexAttrib1dv GLEW_GET_FUN(__glewVertexAttrib1dv) #define glVertexAttrib1f GLEW_GET_FUN(__glewVertexAttrib1f) #define glVertexAttrib1fv GLEW_GET_FUN(__glewVertexAttrib1fv) #define glVertexAttrib1s GLEW_GET_FUN(__glewVertexAttrib1s) #define glVertexAttrib1sv GLEW_GET_FUN(__glewVertexAttrib1sv) #define glVertexAttrib2d GLEW_GET_FUN(__glewVertexAttrib2d) #define glVertexAttrib2dv GLEW_GET_FUN(__glewVertexAttrib2dv) #define glVertexAttrib2f GLEW_GET_FUN(__glewVertexAttrib2f) #define glVertexAttrib2fv GLEW_GET_FUN(__glewVertexAttrib2fv) #define glVertexAttrib2s GLEW_GET_FUN(__glewVertexAttrib2s) #define glVertexAttrib2sv GLEW_GET_FUN(__glewVertexAttrib2sv) #define glVertexAttrib3d GLEW_GET_FUN(__glewVertexAttrib3d) #define glVertexAttrib3dv GLEW_GET_FUN(__glewVertexAttrib3dv) #define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f) #define glVertexAttrib3fv GLEW_GET_FUN(__glewVertexAttrib3fv) #define glVertexAttrib3s GLEW_GET_FUN(__glewVertexAttrib3s) #define glVertexAttrib3sv GLEW_GET_FUN(__glewVertexAttrib3sv) #define glVertexAttrib4Nbv GLEW_GET_FUN(__glewVertexAttrib4Nbv) #define glVertexAttrib4Niv GLEW_GET_FUN(__glewVertexAttrib4Niv) #define glVertexAttrib4Nsv GLEW_GET_FUN(__glewVertexAttrib4Nsv) #define glVertexAttrib4Nub GLEW_GET_FUN(__glewVertexAttrib4Nub) #define glVertexAttrib4Nubv GLEW_GET_FUN(__glewVertexAttrib4Nubv) #define glVertexAttrib4Nuiv GLEW_GET_FUN(__glewVertexAttrib4Nuiv) #define glVertexAttrib4Nusv GLEW_GET_FUN(__glewVertexAttrib4Nusv) #define glVertexAttrib4bv GLEW_GET_FUN(__glewVertexAttrib4bv) #define glVertexAttrib4d GLEW_GET_FUN(__glewVertexAttrib4d) #define glVertexAttrib4dv GLEW_GET_FUN(__glewVertexAttrib4dv) #define glVertexAttrib4f GLEW_GET_FUN(__glewVertexAttrib4f) #define glVertexAttrib4fv GLEW_GET_FUN(__glewVertexAttrib4fv) #define glVertexAttrib4iv GLEW_GET_FUN(__glewVertexAttrib4iv) #define glVertexAttrib4s GLEW_GET_FUN(__glewVertexAttrib4s) #define glVertexAttrib4sv GLEW_GET_FUN(__glewVertexAttrib4sv) #define glVertexAttrib4ubv GLEW_GET_FUN(__glewVertexAttrib4ubv) #define glVertexAttrib4uiv GLEW_GET_FUN(__glewVertexAttrib4uiv) #define glVertexAttrib4usv GLEW_GET_FUN(__glewVertexAttrib4usv) #define glVertexAttribPointer GLEW_GET_FUN(__glewVertexAttribPointer) #define GLEW_VERSION_2_0 GLEW_GET_VAR(__GLEW_VERSION_2_0) #endif /* GL_VERSION_2_0 */ /* ----------------------------- GL_VERSION_2_1 ---------------------------- */ #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); #define glUniformMatrix2x3fv GLEW_GET_FUN(__glewUniformMatrix2x3fv) #define glUniformMatrix2x4fv GLEW_GET_FUN(__glewUniformMatrix2x4fv) #define glUniformMatrix3x2fv GLEW_GET_FUN(__glewUniformMatrix3x2fv) #define glUniformMatrix3x4fv GLEW_GET_FUN(__glewUniformMatrix3x4fv) #define glUniformMatrix4x2fv GLEW_GET_FUN(__glewUniformMatrix4x2fv) #define glUniformMatrix4x3fv GLEW_GET_FUN(__glewUniformMatrix4x3fv) #define GLEW_VERSION_2_1 GLEW_GET_VAR(__GLEW_VERSION_2_1) #endif /* GL_VERSION_2_1 */ /* ----------------------------- GL_VERSION_3_0 ---------------------------- */ #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 #define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES #define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 #define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 #define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 #define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB #define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 #define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 #define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 #define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_DEPTH_BUFFER 0x8223 #define GL_STENCIL_BUFFER 0x8224 #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_VERTEX_COLOR 0x891A #define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE 0x8C15 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_ALPHA_INTEGER 0x8D97 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 typedef void(GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERPROC)(GLuint, GLenum); typedef void(GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum); typedef void(GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONPROC)(GLuint, GLuint, const GLchar *); typedef void(GLAPIENTRY * PFNGLCLAMPCOLORPROC)(GLenum, GLenum); typedef void(GLAPIENTRY * PFNGLCLEARBUFFERFIPROC)(GLenum, GLint, GLfloat, GLint); typedef void(GLAPIENTRY * PFNGLCLEARBUFFERFVPROC)(GLenum, GLint, const GLfloat *); typedef void(GLAPIENTRY * PFNGLCLEARBUFFERIVPROC)(GLenum, GLint, const GLint *); typedef void(GLAPIENTRY * PFNGLCLEARBUFFERUIVPROC)(GLenum, GLint, const GLuint *); typedef void(GLAPIENTRY * PFNGLCOLORMASKIPROC)(GLuint, GLboolean, GLboolean, GLboolean, GLboolean); typedef void(GLAPIENTRY * PFNGLDISABLEIPROC)(GLenum, GLuint); typedef void(GLAPIENTRY * PFNGLENABLEIPROC)(GLenum, GLuint); typedef void(GLAPIENTRY * PFNGLENDCONDITIONALRENDERPROC)(void); typedef void(GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKPROC)(void); typedef void(GLAPIENTRY * PFNGLGETBOOLEANI_VPROC)(GLenum, GLuint, GLboolean *); typedef GLint(GLAPIENTRY * PFNGLGETFRAGDATALOCATIONPROC)(GLuint, const GLchar *); typedef const GLubyte *(GLAPIENTRY * PFNGLGETSTRINGIPROC)(GLenum, GLuint); typedef void(GLAPIENTRY * PFNGLGETTEXPARAMETERIIVPROC)(GLenum, GLenum, GLint *); typedef void(GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVPROC)(GLenum, GLenum, GLuint *); typedef void(GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *); typedef void(GLAPIENTRY * PFNGLGETUNIFORMUIVPROC)(GLuint, GLint, GLuint *); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVPROC)(GLuint, GLenum, GLint *); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint, GLenum, GLuint *); typedef GLboolean(GLAPIENTRY * PFNGLISENABLEDIPROC)(GLenum, GLuint); typedef void(GLAPIENTRY * PFNGLTEXPARAMETERIIVPROC)(GLenum, GLenum, const GLint *); typedef void(GLAPIENTRY * PFNGLTEXPARAMETERIUIVPROC)(GLenum, GLenum, const GLuint *); typedef void(GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint, GLsizei, const GLchar **, GLenum); typedef void(GLAPIENTRY * PFNGLUNIFORM1UIPROC)(GLint, GLuint); typedef void(GLAPIENTRY * PFNGLUNIFORM1UIVPROC)(GLint, GLsizei, const GLuint *); typedef void(GLAPIENTRY * PFNGLUNIFORM2UIPROC)(GLint, GLuint, GLuint); typedef void(GLAPIENTRY * PFNGLUNIFORM2UIVPROC)(GLint, GLsizei, const GLuint *); typedef void(GLAPIENTRY * PFNGLUNIFORM3UIPROC)(GLint, GLuint, GLuint, GLuint); typedef void(GLAPIENTRY * PFNGLUNIFORM3UIVPROC)(GLint, GLsizei, const GLuint *); typedef void(GLAPIENTRY * PFNGLUNIFORM4UIPROC)(GLint, GLuint, GLuint, GLuint, GLuint); typedef void(GLAPIENTRY * PFNGLUNIFORM4UIVPROC)(GLint, GLsizei, const GLuint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1IPROC)(GLuint, GLint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1IVPROC)(GLuint, const GLint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1UIPROC)(GLuint, GLuint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVPROC)(GLuint, const GLuint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2IPROC)(GLuint, GLint, GLint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2IVPROC)(GLuint, const GLint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2UIPROC)(GLuint, GLuint, GLuint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVPROC)(GLuint, const GLuint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3IPROC)(GLuint, GLint, GLint, GLint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3IVPROC)(GLuint, const GLint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3UIPROC)(GLuint, GLuint, GLuint, GLuint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVPROC)(GLuint, const GLuint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4BVPROC)(GLuint, const GLbyte *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4IPROC)(GLuint, GLint, GLint, GLint, GLint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4IVPROC)(GLuint, const GLint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4SVPROC)(GLuint, const GLshort *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVPROC)(GLuint, const GLubyte *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4UIPROC)(GLuint, GLuint, GLuint, GLuint, GLuint); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVPROC)(GLuint, const GLuint *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4USVPROC)(GLuint, const GLushort *); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint, GLint, GLenum, GLsizei, const GLvoid *); #define glBeginConditionalRender GLEW_GET_FUN(__glewBeginConditionalRender) #define glBeginTransformFeedback GLEW_GET_FUN(__glewBeginTransformFeedback) #define glBindFragDataLocation GLEW_GET_FUN(__glewBindFragDataLocation) #define glClampColor GLEW_GET_FUN(__glewClampColor) #define glClearBufferfi GLEW_GET_FUN(__glewClearBufferfi) #define glClearBufferfv GLEW_GET_FUN(__glewClearBufferfv) #define glClearBufferiv GLEW_GET_FUN(__glewClearBufferiv) #define glClearBufferuiv GLEW_GET_FUN(__glewClearBufferuiv) #define glColorMaski GLEW_GET_FUN(__glewColorMaski) #define glDisablei GLEW_GET_FUN(__glewDisablei) #define glEnablei GLEW_GET_FUN(__glewEnablei) #define glEndConditionalRender GLEW_GET_FUN(__glewEndConditionalRender) #define glEndTransformFeedback GLEW_GET_FUN(__glewEndTransformFeedback) #define glGetBooleani_v GLEW_GET_FUN(__glewGetBooleani_v) #define glGetFragDataLocation GLEW_GET_FUN(__glewGetFragDataLocation) #define glGetStringi GLEW_GET_FUN(__glewGetStringi) #define glGetTexParameterIiv GLEW_GET_FUN(__glewGetTexParameterIiv) #define glGetTexParameterIuiv GLEW_GET_FUN(__glewGetTexParameterIuiv) #define glGetTransformFeedbackVarying GLEW_GET_FUN(__glewGetTransformFeedbackVarying) #define glGetUniformuiv GLEW_GET_FUN(__glewGetUniformuiv) #define glGetVertexAttribIiv GLEW_GET_FUN(__glewGetVertexAttribIiv) #define glGetVertexAttribIuiv GLEW_GET_FUN(__glewGetVertexAttribIuiv) #define glIsEnabledi GLEW_GET_FUN(__glewIsEnabledi) #define glTexParameterIiv GLEW_GET_FUN(__glewTexParameterIiv) #define glTexParameterIuiv GLEW_GET_FUN(__glewTexParameterIuiv) #define glTransformFeedbackVaryings GLEW_GET_FUN(__glewTransformFeedbackVaryings) #define glUniform1ui GLEW_GET_FUN(__glewUniform1ui) #define glUniform1uiv GLEW_GET_FUN(__glewUniform1uiv) #define glUniform2ui GLEW_GET_FUN(__glewUniform2ui) #define glUniform2uiv GLEW_GET_FUN(__glewUniform2uiv) #define glUniform3ui GLEW_GET_FUN(__glewUniform3ui) #define glUniform3uiv GLEW_GET_FUN(__glewUniform3uiv) #define glUniform4ui GLEW_GET_FUN(__glewUniform4ui) #define glUniform4uiv GLEW_GET_FUN(__glewUniform4uiv) #define glVertexAttribI1i GLEW_GET_FUN(__glewVertexAttribI1i) #define glVertexAttribI1iv GLEW_GET_FUN(__glewVertexAttribI1iv) #define glVertexAttribI1ui GLEW_GET_FUN(__glewVertexAttribI1ui) #define glVertexAttribI1uiv GLEW_GET_FUN(__glewVertexAttribI1uiv) #define glVertexAttribI2i GLEW_GET_FUN(__glewVertexAttribI2i) #define glVertexAttribI2iv GLEW_GET_FUN(__glewVertexAttribI2iv) #define glVertexAttribI2ui GLEW_GET_FUN(__glewVertexAttribI2ui) #define glVertexAttribI2uiv GLEW_GET_FUN(__glewVertexAttribI2uiv) #define glVertexAttribI3i GLEW_GET_FUN(__glewVertexAttribI3i) #define glVertexAttribI3iv GLEW_GET_FUN(__glewVertexAttribI3iv) #define glVertexAttribI3ui GLEW_GET_FUN(__glewVertexAttribI3ui) #define glVertexAttribI3uiv GLEW_GET_FUN(__glewVertexAttribI3uiv) #define glVertexAttribI4bv GLEW_GET_FUN(__glewVertexAttribI4bv) #define glVertexAttribI4i GLEW_GET_FUN(__glewVertexAttribI4i) #define glVertexAttribI4iv GLEW_GET_FUN(__glewVertexAttribI4iv) #define glVertexAttribI4sv GLEW_GET_FUN(__glewVertexAttribI4sv) #define glVertexAttribI4ubv GLEW_GET_FUN(__glewVertexAttribI4ubv) #define glVertexAttribI4ui GLEW_GET_FUN(__glewVertexAttribI4ui) #define glVertexAttribI4uiv GLEW_GET_FUN(__glewVertexAttribI4uiv) #define glVertexAttribI4usv GLEW_GET_FUN(__glewVertexAttribI4usv) #define glVertexAttribIPointer GLEW_GET_FUN(__glewVertexAttribIPointer) #define GLEW_VERSION_3_0 GLEW_GET_VAR(__GLEW_VERSION_3_0) #endif /* GL_VERSION_3_0 */ /* ----------------------------- GL_VERSION_3_1 ---------------------------- */ #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT 0x8C2E #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_RED_SNORM 0x8F90 #define GL_RG_SNORM 0x8F91 #define GL_RGB_SNORM 0x8F92 #define GL_RGBA_SNORM 0x8F93 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 typedef void(GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum, GLint, GLsizei, GLsizei); typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei); typedef void(GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint); typedef void(GLAPIENTRY * PFNGLTEXBUFFERPROC)(GLenum, GLenum, GLuint); #define glDrawArraysInstanced GLEW_GET_FUN(__glewDrawArraysInstanced) #define glDrawElementsInstanced GLEW_GET_FUN(__glewDrawElementsInstanced) #define glPrimitiveRestartIndex GLEW_GET_FUN(__glewPrimitiveRestartIndex) #define glTexBuffer GLEW_GET_FUN(__glewTexBuffer) #define GLEW_VERSION_3_1 GLEW_GET_VAR(__GLEW_VERSION_3_1) #endif /* GL_VERSION_3_1 */ /* ----------------------------- GL_VERSION_3_2 ---------------------------- */ #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_CONTEXT_PROFILE_MASK 0x9126 typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum, GLenum, GLuint, GLint); typedef void(GLAPIENTRY * PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum, GLenum, GLint64 *); typedef void(GLAPIENTRY * PFNGLGETINTEGER64I_VPROC)(GLenum, GLuint, GLint64 *); #define glFramebufferTexture GLEW_GET_FUN(__glewFramebufferTexture) #define glGetBufferParameteri64v GLEW_GET_FUN(__glewGetBufferParameteri64v) #define glGetInteger64i_v GLEW_GET_FUN(__glewGetInteger64i_v) #define GLEW_VERSION_3_2 GLEW_GET_VAR(__GLEW_VERSION_3_2) #endif /* GL_VERSION_3_2 */ /* ----------------------------- GL_VERSION_3_3 ---------------------------- */ #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GL_RGB10_A2UI 0x906F typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); #define glVertexAttribDivisor GLEW_GET_FUN(__glewVertexAttribDivisor) #define GLEW_VERSION_3_3 GLEW_GET_VAR(__GLEW_VERSION_3_3) #endif /* GL_VERSION_3_3 */ /* ----------------------------- GL_VERSION_4_0 ---------------------------- */ #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 #define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_SAMPLE_SHADING 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F #define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F #define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); typedef void(GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void(GLAPIENTRY * PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); typedef void(GLAPIENTRY * PFNGLMINSAMPLESHADINGPROC)(GLclampf value); #define glBlendEquationSeparatei GLEW_GET_FUN(__glewBlendEquationSeparatei) #define glBlendEquationi GLEW_GET_FUN(__glewBlendEquationi) #define glBlendFuncSeparatei GLEW_GET_FUN(__glewBlendFuncSeparatei) #define glBlendFunci GLEW_GET_FUN(__glewBlendFunci) #define glMinSampleShading GLEW_GET_FUN(__glewMinSampleShading) #define GLEW_VERSION_4_0 GLEW_GET_VAR(__GLEW_VERSION_4_0) #endif /* GL_VERSION_4_0 */ /* ----------------------------- GL_VERSION_4_1 ---------------------------- */ #ifndef GL_VERSION_4_1 #define GL_VERSION_4_1 1 #define GLEW_VERSION_4_1 GLEW_GET_VAR(__GLEW_VERSION_4_1) #endif /* GL_VERSION_4_1 */ /* ----------------------------- GL_VERSION_4_2 ---------------------------- */ #ifndef GL_VERSION_4_2 #define GL_VERSION_4_2 1 #define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F #define GLEW_VERSION_4_2 GLEW_GET_VAR(__GLEW_VERSION_4_2) #endif /* GL_VERSION_4_2 */ /* ----------------------------- GL_VERSION_4_3 ---------------------------- */ #ifndef GL_VERSION_4_3 #define GL_VERSION_4_3 1 #define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 #define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E #define GLEW_VERSION_4_3 GLEW_GET_VAR(__GLEW_VERSION_4_3) #endif /* GL_VERSION_4_3 */ /* -------------------------- GL_3DFX_multisample -------------------------- */ #ifndef GL_3DFX_multisample #define GL_3DFX_multisample 1 #define GL_MULTISAMPLE_3DFX 0x86B2 #define GL_SAMPLE_BUFFERS_3DFX 0x86B3 #define GL_SAMPLES_3DFX 0x86B4 #define GL_MULTISAMPLE_BIT_3DFX 0x20000000 #define GLEW_3DFX_multisample GLEW_GET_VAR(__GLEW_3DFX_multisample) #endif /* GL_3DFX_multisample */ /* ---------------------------- GL_3DFX_tbuffer ---------------------------- */ #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 typedef void(GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC)(GLuint mask); #define glTbufferMask3DFX GLEW_GET_FUN(__glewTbufferMask3DFX) #define GLEW_3DFX_tbuffer GLEW_GET_VAR(__GLEW_3DFX_tbuffer) #endif /* GL_3DFX_tbuffer */ /* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */ #ifndef GL_3DFX_texture_compression_FXT1 #define GL_3DFX_texture_compression_FXT1 1 #define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 #define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 #define GLEW_3DFX_texture_compression_FXT1 GLEW_GET_VAR(__GLEW_3DFX_texture_compression_FXT1) #endif /* GL_3DFX_texture_compression_FXT1 */ /* ----------------------- GL_AMD_blend_minmax_factor ---------------------- */ #ifndef GL_AMD_blend_minmax_factor #define GL_AMD_blend_minmax_factor 1 #define GL_FACTOR_MIN_AMD 0x901C #define GL_FACTOR_MAX_AMD 0x901D #define GLEW_AMD_blend_minmax_factor GLEW_GET_VAR(__GLEW_AMD_blend_minmax_factor) #endif /* GL_AMD_blend_minmax_factor */ /* ----------------------- GL_AMD_conservative_depth ----------------------- */ #ifndef GL_AMD_conservative_depth #define GL_AMD_conservative_depth 1 #define GLEW_AMD_conservative_depth GLEW_GET_VAR(__GLEW_AMD_conservative_depth) #endif /* GL_AMD_conservative_depth */ /* -------------------------- GL_AMD_debug_output -------------------------- */ #ifndef GL_AMD_debug_output #define GL_AMD_debug_output 1 #define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 #define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 #define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 #define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 #define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A #define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B #define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C #define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D #define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E #define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F #define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 typedef void(APIENTRY * GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar * message, GLvoid * userParam); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, void * userParam); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf); typedef GLuint(GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message); #define glDebugMessageCallbackAMD GLEW_GET_FUN(__glewDebugMessageCallbackAMD) #define glDebugMessageEnableAMD GLEW_GET_FUN(__glewDebugMessageEnableAMD) #define glDebugMessageInsertAMD GLEW_GET_FUN(__glewDebugMessageInsertAMD) #define glGetDebugMessageLogAMD GLEW_GET_FUN(__glewGetDebugMessageLogAMD) #define GLEW_AMD_debug_output GLEW_GET_VAR(__GLEW_AMD_debug_output) #endif /* GL_AMD_debug_output */ /* ---------------------- GL_AMD_depth_clamp_separate ---------------------- */ #ifndef GL_AMD_depth_clamp_separate #define GL_AMD_depth_clamp_separate 1 #define GL_DEPTH_CLAMP_NEAR_AMD 0x901E #define GL_DEPTH_CLAMP_FAR_AMD 0x901F #define GLEW_AMD_depth_clamp_separate GLEW_GET_VAR(__GLEW_AMD_depth_clamp_separate) #endif /* GL_AMD_depth_clamp_separate */ /* ----------------------- GL_AMD_draw_buffers_blend ----------------------- */ #ifndef GL_AMD_draw_buffers_blend #define GL_AMD_draw_buffers_blend 1 typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONINDEXEDAMDPROC)(GLuint buf, GLenum mode); typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void(GLAPIENTRY * PFNGLBLENDFUNCINDEXEDAMDPROC)(GLuint buf, GLenum src, GLenum dst); typedef void(GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #define glBlendEquationIndexedAMD GLEW_GET_FUN(__glewBlendEquationIndexedAMD) #define glBlendEquationSeparateIndexedAMD GLEW_GET_FUN(__glewBlendEquationSeparateIndexedAMD) #define glBlendFuncIndexedAMD GLEW_GET_FUN(__glewBlendFuncIndexedAMD) #define glBlendFuncSeparateIndexedAMD GLEW_GET_FUN(__glewBlendFuncSeparateIndexedAMD) #define GLEW_AMD_draw_buffers_blend GLEW_GET_VAR(__GLEW_AMD_draw_buffers_blend) #endif /* GL_AMD_draw_buffers_blend */ /* ----------------------- GL_AMD_multi_draw_indirect ---------------------- */ #ifndef GL_AMD_multi_draw_indirect #define GL_AMD_multi_draw_indirect 1 typedef void(GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)(GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride); typedef void(GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride); #define glMultiDrawArraysIndirectAMD GLEW_GET_FUN(__glewMultiDrawArraysIndirectAMD) #define glMultiDrawElementsIndirectAMD GLEW_GET_FUN(__glewMultiDrawElementsIndirectAMD) #define GLEW_AMD_multi_draw_indirect GLEW_GET_VAR(__GLEW_AMD_multi_draw_indirect) #endif /* GL_AMD_multi_draw_indirect */ /* ------------------------- GL_AMD_name_gen_delete ------------------------ */ #ifndef GL_AMD_name_gen_delete #define GL_AMD_name_gen_delete 1 #define GL_DATA_BUFFER_AMD 0x9151 #define GL_PERFORMANCE_MONITOR_AMD 0x9152 #define GL_QUERY_OBJECT_AMD 0x9153 #define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 #define GL_SAMPLER_OBJECT_AMD 0x9155 typedef void(GLAPIENTRY * PFNGLDELETENAMESAMDPROC)(GLenum identifier, GLuint num, const GLuint * names); typedef void(GLAPIENTRY * PFNGLGENNAMESAMDPROC)(GLenum identifier, GLuint num, GLuint * names); typedef GLboolean(GLAPIENTRY * PFNGLISNAMEAMDPROC)(GLenum identifier, GLuint name); #define glDeleteNamesAMD GLEW_GET_FUN(__glewDeleteNamesAMD) #define glGenNamesAMD GLEW_GET_FUN(__glewGenNamesAMD) #define glIsNameAMD GLEW_GET_FUN(__glewIsNameAMD) #define GLEW_AMD_name_gen_delete GLEW_GET_VAR(__GLEW_AMD_name_gen_delete) #endif /* GL_AMD_name_gen_delete */ /* ----------------------- GL_AMD_performance_monitor ---------------------- */ #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #define GL_COUNTER_TYPE_AMD 0x8BC0 #define GL_COUNTER_RANGE_AMD 0x8BC1 #define GL_UNSIGNED_INT64_AMD 0x8BC2 #define GL_PERCENTAGE_AMD 0x8BC3 #define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 #define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 #define GL_PERFMON_RESULT_AMD 0x8BC6 typedef void(GLAPIENTRY * PFNGLBEGINPERFMONITORAMDPROC)(GLuint monitor); typedef void(GLAPIENTRY * PFNGLDELETEPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); typedef void(GLAPIENTRY * PFNGLENDPERFMONITORAMDPROC)(GLuint monitor); typedef void(GLAPIENTRY * PFNGLGENPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); typedef void(GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); typedef void(GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)(GLuint group, GLuint counter, GLenum pname, void * data); typedef void(GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); typedef void(GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSAMDPROC)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei countersSize, GLuint * counters); typedef void(GLAPIENTRY * PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); typedef void(GLAPIENTRY * PFNGLGETPERFMONITORGROUPSAMDPROC)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); typedef void(GLAPIENTRY * PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); #define glBeginPerfMonitorAMD GLEW_GET_FUN(__glewBeginPerfMonitorAMD) #define glDeletePerfMonitorsAMD GLEW_GET_FUN(__glewDeletePerfMonitorsAMD) #define glEndPerfMonitorAMD GLEW_GET_FUN(__glewEndPerfMonitorAMD) #define glGenPerfMonitorsAMD GLEW_GET_FUN(__glewGenPerfMonitorsAMD) #define glGetPerfMonitorCounterDataAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterDataAMD) #define glGetPerfMonitorCounterInfoAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterInfoAMD) #define glGetPerfMonitorCounterStringAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterStringAMD) #define glGetPerfMonitorCountersAMD GLEW_GET_FUN(__glewGetPerfMonitorCountersAMD) #define glGetPerfMonitorGroupStringAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupStringAMD) #define glGetPerfMonitorGroupsAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupsAMD) #define glSelectPerfMonitorCountersAMD GLEW_GET_FUN(__glewSelectPerfMonitorCountersAMD) #define GLEW_AMD_performance_monitor GLEW_GET_VAR(__GLEW_AMD_performance_monitor) #endif /* GL_AMD_performance_monitor */ /* -------------------------- GL_AMD_pinned_memory ------------------------- */ #ifndef GL_AMD_pinned_memory #define GL_AMD_pinned_memory 1 #define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 #define GLEW_AMD_pinned_memory GLEW_GET_VAR(__GLEW_AMD_pinned_memory) #endif /* GL_AMD_pinned_memory */ /* ----------------------- GL_AMD_query_buffer_object ---------------------- */ #ifndef GL_AMD_query_buffer_object #define GL_AMD_query_buffer_object 1 #define GL_QUERY_BUFFER_AMD 0x9192 #define GL_QUERY_BUFFER_BINDING_AMD 0x9193 #define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 #define GLEW_AMD_query_buffer_object GLEW_GET_VAR(__GLEW_AMD_query_buffer_object) #endif /* GL_AMD_query_buffer_object */ /* ------------------------ GL_AMD_sample_positions ------------------------ */ #ifndef GL_AMD_sample_positions #define GL_AMD_sample_positions 1 #define GL_SUBSAMPLE_DISTANCE_AMD 0x883F typedef void(GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC)(GLenum pname, GLuint index, const GLfloat * val); #define glSetMultisamplefvAMD GLEW_GET_FUN(__glewSetMultisamplefvAMD) #define GLEW_AMD_sample_positions GLEW_GET_VAR(__GLEW_AMD_sample_positions) #endif /* GL_AMD_sample_positions */ /* ------------------ GL_AMD_seamless_cubemap_per_texture ------------------ */ #ifndef GL_AMD_seamless_cubemap_per_texture #define GL_AMD_seamless_cubemap_per_texture 1 #define GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F #define GLEW_AMD_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_AMD_seamless_cubemap_per_texture) #endif /* GL_AMD_seamless_cubemap_per_texture */ /* ---------------------- GL_AMD_shader_stencil_export --------------------- */ #ifndef GL_AMD_shader_stencil_export #define GL_AMD_shader_stencil_export 1 #define GLEW_AMD_shader_stencil_export GLEW_GET_VAR(__GLEW_AMD_shader_stencil_export) #endif /* GL_AMD_shader_stencil_export */ /* ------------------- GL_AMD_stencil_operation_extended ------------------- */ #ifndef GL_AMD_stencil_operation_extended #define GL_AMD_stencil_operation_extended 1 #define GL_SET_AMD 0x874A #define GL_REPLACE_VALUE_AMD 0x874B #define GL_STENCIL_OP_VALUE_AMD 0x874C #define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D typedef void(GLAPIENTRY * PFNGLSTENCILOPVALUEAMDPROC)(GLenum face, GLuint value); #define glStencilOpValueAMD GLEW_GET_FUN(__glewStencilOpValueAMD) #define GLEW_AMD_stencil_operation_extended GLEW_GET_VAR(__GLEW_AMD_stencil_operation_extended) #endif /* GL_AMD_stencil_operation_extended */ /* ------------------------ GL_AMD_texture_texture4 ------------------------ */ #ifndef GL_AMD_texture_texture4 #define GL_AMD_texture_texture4 1 #define GLEW_AMD_texture_texture4 GLEW_GET_VAR(__GLEW_AMD_texture_texture4) #endif /* GL_AMD_texture_texture4 */ /* --------------- GL_AMD_transform_feedback3_lines_triangles -------------- */ #ifndef GL_AMD_transform_feedback3_lines_triangles #define GL_AMD_transform_feedback3_lines_triangles 1 #define GLEW_AMD_transform_feedback3_lines_triangles GLEW_GET_VAR(__GLEW_AMD_transform_feedback3_lines_triangles) #endif /* GL_AMD_transform_feedback3_lines_triangles */ /* ----------------------- GL_AMD_vertex_shader_layer ---------------------- */ #ifndef GL_AMD_vertex_shader_layer #define GL_AMD_vertex_shader_layer 1 #define GLEW_AMD_vertex_shader_layer GLEW_GET_VAR(__GLEW_AMD_vertex_shader_layer) #endif /* GL_AMD_vertex_shader_layer */ /* -------------------- GL_AMD_vertex_shader_tessellator ------------------- */ #ifndef GL_AMD_vertex_shader_tessellator #define GL_AMD_vertex_shader_tessellator 1 #define GL_SAMPLER_BUFFER_AMD 0x9001 #define GL_INT_SAMPLER_BUFFER_AMD 0x9002 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 #define GL_TESSELLATION_MODE_AMD 0x9004 #define GL_TESSELLATION_FACTOR_AMD 0x9005 #define GL_DISCRETE_AMD 0x9006 #define GL_CONTINUOUS_AMD 0x9007 typedef void(GLAPIENTRY * PFNGLTESSELLATIONFACTORAMDPROC)(GLfloat factor); typedef void(GLAPIENTRY * PFNGLTESSELLATIONMODEAMDPROC)(GLenum mode); #define glTessellationFactorAMD GLEW_GET_FUN(__glewTessellationFactorAMD) #define glTessellationModeAMD GLEW_GET_FUN(__glewTessellationModeAMD) #define GLEW_AMD_vertex_shader_tessellator GLEW_GET_VAR(__GLEW_AMD_vertex_shader_tessellator) #endif /* GL_AMD_vertex_shader_tessellator */ /* ------------------ GL_AMD_vertex_shader_viewport_index ------------------ */ #ifndef GL_AMD_vertex_shader_viewport_index #define GL_AMD_vertex_shader_viewport_index 1 #define GLEW_AMD_vertex_shader_viewport_index GLEW_GET_VAR(__GLEW_AMD_vertex_shader_viewport_index) #endif /* GL_AMD_vertex_shader_viewport_index */ /* ----------------------- GL_APPLE_aux_depth_stencil ---------------------- */ #ifndef GL_APPLE_aux_depth_stencil #define GL_APPLE_aux_depth_stencil 1 #define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 #define GLEW_APPLE_aux_depth_stencil GLEW_GET_VAR(__GLEW_APPLE_aux_depth_stencil) #endif /* GL_APPLE_aux_depth_stencil */ /* ------------------------ GL_APPLE_client_storage ------------------------ */ #ifndef GL_APPLE_client_storage #define GL_APPLE_client_storage 1 #define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 #define GLEW_APPLE_client_storage GLEW_GET_VAR(__GLEW_APPLE_client_storage) #endif /* GL_APPLE_client_storage */ /* ------------------------- GL_APPLE_element_array ------------------------ */ #ifndef GL_APPLE_element_array #define GL_APPLE_element_array 1 #define GL_ELEMENT_ARRAY_APPLE 0x8A0C #define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D #define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E typedef void(GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, GLint first, GLsizei count); typedef void(GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); typedef void(GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC)(GLenum type, const void * pointer); typedef void(GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); typedef void(GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); #define glDrawElementArrayAPPLE GLEW_GET_FUN(__glewDrawElementArrayAPPLE) #define glDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewDrawRangeElementArrayAPPLE) #define glElementPointerAPPLE GLEW_GET_FUN(__glewElementPointerAPPLE) #define glMultiDrawElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawElementArrayAPPLE) #define glMultiDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawRangeElementArrayAPPLE) #define GLEW_APPLE_element_array GLEW_GET_VAR(__GLEW_APPLE_element_array) #endif /* GL_APPLE_element_array */ /* ----------------------------- GL_APPLE_fence ---------------------------- */ #ifndef GL_APPLE_fence #define GL_APPLE_fence 1 #define GL_DRAW_PIXELS_APPLE 0x8A0A #define GL_FENCE_APPLE 0x8A0B typedef void(GLAPIENTRY * PFNGLDELETEFENCESAPPLEPROC)(GLsizei n, const GLuint * fences); typedef void(GLAPIENTRY * PFNGLFINISHFENCEAPPLEPROC)(GLuint fence); typedef void(GLAPIENTRY * PFNGLFINISHOBJECTAPPLEPROC)(GLenum object, GLint name); typedef void(GLAPIENTRY * PFNGLGENFENCESAPPLEPROC)(GLsizei n, GLuint * fences); typedef GLboolean(GLAPIENTRY * PFNGLISFENCEAPPLEPROC)(GLuint fence); typedef void(GLAPIENTRY * PFNGLSETFENCEAPPLEPROC)(GLuint fence); typedef GLboolean(GLAPIENTRY * PFNGLTESTFENCEAPPLEPROC)(GLuint fence); typedef GLboolean(GLAPIENTRY * PFNGLTESTOBJECTAPPLEPROC)(GLenum object, GLuint name); #define glDeleteFencesAPPLE GLEW_GET_FUN(__glewDeleteFencesAPPLE) #define glFinishFenceAPPLE GLEW_GET_FUN(__glewFinishFenceAPPLE) #define glFinishObjectAPPLE GLEW_GET_FUN(__glewFinishObjectAPPLE) #define glGenFencesAPPLE GLEW_GET_FUN(__glewGenFencesAPPLE) #define glIsFenceAPPLE GLEW_GET_FUN(__glewIsFenceAPPLE) #define glSetFenceAPPLE GLEW_GET_FUN(__glewSetFenceAPPLE) #define glTestFenceAPPLE GLEW_GET_FUN(__glewTestFenceAPPLE) #define glTestObjectAPPLE GLEW_GET_FUN(__glewTestObjectAPPLE) #define GLEW_APPLE_fence GLEW_GET_VAR(__GLEW_APPLE_fence) #endif /* GL_APPLE_fence */ /* ------------------------- GL_APPLE_float_pixels ------------------------- */ #ifndef GL_APPLE_float_pixels #define GL_APPLE_float_pixels 1 #define GL_HALF_APPLE 0x140B #define GL_RGBA_FLOAT32_APPLE 0x8814 #define GL_RGB_FLOAT32_APPLE 0x8815 #define GL_ALPHA_FLOAT32_APPLE 0x8816 #define GL_INTENSITY_FLOAT32_APPLE 0x8817 #define GL_LUMINANCE_FLOAT32_APPLE 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 #define GL_RGBA_FLOAT16_APPLE 0x881A #define GL_RGB_FLOAT16_APPLE 0x881B #define GL_ALPHA_FLOAT16_APPLE 0x881C #define GL_INTENSITY_FLOAT16_APPLE 0x881D #define GL_LUMINANCE_FLOAT16_APPLE 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F #define GL_COLOR_FLOAT_APPLE 0x8A0F #define GLEW_APPLE_float_pixels GLEW_GET_VAR(__GLEW_APPLE_float_pixels) #endif /* GL_APPLE_float_pixels */ /* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */ #ifndef GL_APPLE_flush_buffer_range #define GL_APPLE_flush_buffer_range 1 #define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 #define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 typedef void(GLAPIENTRY * PFNGLBUFFERPARAMETERIAPPLEPROC)(GLenum target, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)(GLenum target, GLintptr offset, GLsizeiptr size); #define glBufferParameteriAPPLE GLEW_GET_FUN(__glewBufferParameteriAPPLE) #define glFlushMappedBufferRangeAPPLE GLEW_GET_FUN(__glewFlushMappedBufferRangeAPPLE) #define GLEW_APPLE_flush_buffer_range GLEW_GET_VAR(__GLEW_APPLE_flush_buffer_range) #endif /* GL_APPLE_flush_buffer_range */ /* ----------------------- GL_APPLE_object_purgeable ----------------------- */ #ifndef GL_APPLE_object_purgeable #define GL_APPLE_object_purgeable 1 #define GL_BUFFER_OBJECT_APPLE 0x85B3 #define GL_RELEASED_APPLE 0x8A19 #define GL_VOLATILE_APPLE 0x8A1A #define GL_RETAINED_APPLE 0x8A1B #define GL_UNDEFINED_APPLE 0x8A1C #define GL_PURGEABLE_APPLE 0x8A1D typedef void(GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVAPPLEPROC)(GLenum objectType, GLuint name, GLenum pname, GLint * params); typedef GLenum(GLAPIENTRY * PFNGLOBJECTPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); typedef GLenum(GLAPIENTRY * PFNGLOBJECTUNPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); #define glGetObjectParameterivAPPLE GLEW_GET_FUN(__glewGetObjectParameterivAPPLE) #define glObjectPurgeableAPPLE GLEW_GET_FUN(__glewObjectPurgeableAPPLE) #define glObjectUnpurgeableAPPLE GLEW_GET_FUN(__glewObjectUnpurgeableAPPLE) #define GLEW_APPLE_object_purgeable GLEW_GET_VAR(__GLEW_APPLE_object_purgeable) #endif /* GL_APPLE_object_purgeable */ /* ------------------------- GL_APPLE_pixel_buffer ------------------------- */ #ifndef GL_APPLE_pixel_buffer #define GL_APPLE_pixel_buffer 1 #define GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 #define GLEW_APPLE_pixel_buffer GLEW_GET_VAR(__GLEW_APPLE_pixel_buffer) #endif /* GL_APPLE_pixel_buffer */ /* ---------------------------- GL_APPLE_rgb_422 --------------------------- */ #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #define GL_RGB_422_APPLE 0x8A1F #define GLEW_APPLE_rgb_422 GLEW_GET_VAR(__GLEW_APPLE_rgb_422) #endif /* GL_APPLE_rgb_422 */ /* --------------------------- GL_APPLE_row_bytes -------------------------- */ #ifndef GL_APPLE_row_bytes #define GL_APPLE_row_bytes 1 #define GL_PACK_ROW_BYTES_APPLE 0x8A15 #define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 #define GLEW_APPLE_row_bytes GLEW_GET_VAR(__GLEW_APPLE_row_bytes) #endif /* GL_APPLE_row_bytes */ /* ------------------------ GL_APPLE_specular_vector ----------------------- */ #ifndef GL_APPLE_specular_vector #define GL_APPLE_specular_vector 1 #define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 #define GLEW_APPLE_specular_vector GLEW_GET_VAR(__GLEW_APPLE_specular_vector) #endif /* GL_APPLE_specular_vector */ /* ------------------------- GL_APPLE_texture_range ------------------------ */ #ifndef GL_APPLE_texture_range #define GL_APPLE_texture_range 1 #define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 #define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 #define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC #define GL_STORAGE_PRIVATE_APPLE 0x85BD #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF typedef void(GLAPIENTRY * PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)(GLenum target, GLenum pname, GLvoid ** params); typedef void(GLAPIENTRY * PFNGLTEXTURERANGEAPPLEPROC)(GLenum target, GLsizei length, GLvoid * pointer); #define glGetTexParameterPointervAPPLE GLEW_GET_FUN(__glewGetTexParameterPointervAPPLE) #define glTextureRangeAPPLE GLEW_GET_FUN(__glewTextureRangeAPPLE) #define GLEW_APPLE_texture_range GLEW_GET_VAR(__GLEW_APPLE_texture_range) #endif /* GL_APPLE_texture_range */ /* ------------------------ GL_APPLE_transform_hint ------------------------ */ #ifndef GL_APPLE_transform_hint #define GL_APPLE_transform_hint 1 #define GL_TRANSFORM_HINT_APPLE 0x85B1 #define GLEW_APPLE_transform_hint GLEW_GET_VAR(__GLEW_APPLE_transform_hint) #endif /* GL_APPLE_transform_hint */ /* ---------------------- GL_APPLE_vertex_array_object --------------------- */ #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 #define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 typedef void(GLAPIENTRY * PFNGLBINDVERTEXARRAYAPPLEPROC)(GLuint array); typedef void(GLAPIENTRY * PFNGLDELETEVERTEXARRAYSAPPLEPROC)(GLsizei n, const GLuint * arrays); typedef void(GLAPIENTRY * PFNGLGENVERTEXARRAYSAPPLEPROC)(GLsizei n, const GLuint * arrays); typedef GLboolean(GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC)(GLuint array); #define glBindVertexArrayAPPLE GLEW_GET_FUN(__glewBindVertexArrayAPPLE) #define glDeleteVertexArraysAPPLE GLEW_GET_FUN(__glewDeleteVertexArraysAPPLE) #define glGenVertexArraysAPPLE GLEW_GET_FUN(__glewGenVertexArraysAPPLE) #define glIsVertexArrayAPPLE GLEW_GET_FUN(__glewIsVertexArrayAPPLE) #define GLEW_APPLE_vertex_array_object GLEW_GET_VAR(__GLEW_APPLE_vertex_array_object) #endif /* GL_APPLE_vertex_array_object */ /* ---------------------- GL_APPLE_vertex_array_range ---------------------- */ #ifndef GL_APPLE_vertex_array_range #define GL_APPLE_vertex_array_range 1 #define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E #define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 #define GL_STORAGE_CLIENT_APPLE 0x85B4 #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF typedef void(GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); #define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE) #define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE) #define glVertexArrayRangeAPPLE GLEW_GET_FUN(__glewVertexArrayRangeAPPLE) #define GLEW_APPLE_vertex_array_range GLEW_GET_VAR(__GLEW_APPLE_vertex_array_range) #endif /* GL_APPLE_vertex_array_range */ /* ------------------- GL_APPLE_vertex_program_evaluators ------------------ */ #ifndef GL_APPLE_vertex_program_evaluators #define GL_APPLE_vertex_program_evaluators 1 #define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 #define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 #define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 #define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 #define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 #define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 #define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 #define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 #define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 #define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 typedef void(GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); typedef void(GLAPIENTRY * PFNGLENABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); typedef GLboolean(GLAPIENTRY * PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)(GLuint index, GLenum pname); typedef void(GLAPIENTRY * PFNGLMAPVERTEXATTRIB1DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); typedef void(GLAPIENTRY * PFNGLMAPVERTEXATTRIB1FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); typedef void(GLAPIENTRY * PFNGLMAPVERTEXATTRIB2DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); typedef void(GLAPIENTRY * PFNGLMAPVERTEXATTRIB2FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); #define glDisableVertexAttribAPPLE GLEW_GET_FUN(__glewDisableVertexAttribAPPLE) #define glEnableVertexAttribAPPLE GLEW_GET_FUN(__glewEnableVertexAttribAPPLE) #define glIsVertexAttribEnabledAPPLE GLEW_GET_FUN(__glewIsVertexAttribEnabledAPPLE) #define glMapVertexAttrib1dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1dAPPLE) #define glMapVertexAttrib1fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1fAPPLE) #define glMapVertexAttrib2dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2dAPPLE) #define glMapVertexAttrib2fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2fAPPLE) #define GLEW_APPLE_vertex_program_evaluators GLEW_GET_VAR(__GLEW_APPLE_vertex_program_evaluators) #endif /* GL_APPLE_vertex_program_evaluators */ /* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */ #ifndef GL_APPLE_ycbcr_422 #define GL_APPLE_ycbcr_422 1 #define GL_YCBCR_422_APPLE 0x85B9 #define GLEW_APPLE_ycbcr_422 GLEW_GET_VAR(__GLEW_APPLE_ycbcr_422) #endif /* GL_APPLE_ycbcr_422 */ /* ------------------------ GL_ARB_ES2_compatibility ----------------------- */ #ifndef GL_ARB_ES2_compatibility #define GL_ARB_ES2_compatibility 1 #define GL_FIXED 0x140C #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_RGB565 0x8D62 #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_SHADER_COMPILER 0x8DFA #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD typedef void(GLAPIENTRY * PFNGLCLEARDEPTHFPROC)(GLclampf d); typedef void(GLAPIENTRY * PFNGLDEPTHRANGEFPROC)(GLclampf n, GLclampf f); typedef void(GLAPIENTRY * PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); typedef void(GLAPIENTRY * PFNGLRELEASESHADERCOMPILERPROC)(void); typedef void(GLAPIENTRY * PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); #define glClearDepthf GLEW_GET_FUN(__glewClearDepthf) #define glDepthRangef GLEW_GET_FUN(__glewDepthRangef) #define glGetShaderPrecisionFormat GLEW_GET_FUN(__glewGetShaderPrecisionFormat) #define glReleaseShaderCompiler GLEW_GET_FUN(__glewReleaseShaderCompiler) #define glShaderBinary GLEW_GET_FUN(__glewShaderBinary) #define GLEW_ARB_ES2_compatibility GLEW_GET_VAR(__GLEW_ARB_ES2_compatibility) #endif /* GL_ARB_ES2_compatibility */ /* ------------------------ GL_ARB_ES3_compatibility ----------------------- */ #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 #define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A #define GL_MAX_ELEMENT_INDEX 0x8D6B #define GL_COMPRESSED_R11_EAC 0x9270 #define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 #define GL_COMPRESSED_RG11_EAC 0x9272 #define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 #define GL_COMPRESSED_RGB8_ETC2 0x9274 #define GL_COMPRESSED_SRGB8_ETC2 0x9275 #define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 #define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 #define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 #define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 #define GLEW_ARB_ES3_compatibility GLEW_GET_VAR(__GLEW_ARB_ES3_compatibility) #endif /* GL_ARB_ES3_compatibility */ /* ------------------------ GL_ARB_arrays_of_arrays ------------------------ */ #ifndef GL_ARB_arrays_of_arrays #define GL_ARB_arrays_of_arrays 1 #define GLEW_ARB_arrays_of_arrays GLEW_GET_VAR(__GLEW_ARB_arrays_of_arrays) #endif /* GL_ARB_arrays_of_arrays */ /* -------------------------- GL_ARB_base_instance ------------------------- */ #ifndef GL_ARB_base_instance #define GL_ARB_base_instance 1 typedef void(GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount, GLuint baseinstance); typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); #define glDrawArraysInstancedBaseInstance GLEW_GET_FUN(__glewDrawArraysInstancedBaseInstance) #define glDrawElementsInstancedBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseInstance) #define glDrawElementsInstancedBaseVertexBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertexBaseInstance) #define GLEW_ARB_base_instance GLEW_GET_VAR(__GLEW_ARB_base_instance) #endif /* GL_ARB_base_instance */ /* ----------------------- GL_ARB_blend_func_extended ---------------------- */ #ifndef GL_ARB_blend_func_extended #define GL_ARB_blend_func_extended 1 #define GL_SRC1_COLOR 0x88F9 #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC typedef void(GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); typedef GLint(GLAPIENTRY * PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar * name); #define glBindFragDataLocationIndexed GLEW_GET_FUN(__glewBindFragDataLocationIndexed) #define glGetFragDataIndex GLEW_GET_FUN(__glewGetFragDataIndex) #define GLEW_ARB_blend_func_extended GLEW_GET_VAR(__GLEW_ARB_blend_func_extended) #endif /* GL_ARB_blend_func_extended */ /* ---------------------------- GL_ARB_cl_event ---------------------------- */ #ifndef GL_ARB_cl_event #define GL_ARB_cl_event 1 #define GL_SYNC_CL_EVENT_ARB 0x8240 #define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 typedef struct _cl_context * cl_context; typedef struct _cl_event * cl_event; typedef GLsync(GLAPIENTRY * PFNGLCREATESYNCFROMCLEVENTARBPROC)(cl_context context, cl_event event, GLbitfield flags); #define glCreateSyncFromCLeventARB GLEW_GET_FUN(__glewCreateSyncFromCLeventARB) #define GLEW_ARB_cl_event GLEW_GET_VAR(__GLEW_ARB_cl_event) #endif /* GL_ARB_cl_event */ /* ----------------------- GL_ARB_clear_buffer_object ---------------------- */ #ifndef GL_ARB_clear_buffer_object #define GL_ARB_clear_buffer_object 1 typedef void(GLAPIENTRY * PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCLEARNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid * data); #define glClearBufferData GLEW_GET_FUN(__glewClearBufferData) #define glClearBufferSubData GLEW_GET_FUN(__glewClearBufferSubData) #define glClearNamedBufferDataEXT GLEW_GET_FUN(__glewClearNamedBufferDataEXT) #define glClearNamedBufferSubDataEXT GLEW_GET_FUN(__glewClearNamedBufferSubDataEXT) #define GLEW_ARB_clear_buffer_object GLEW_GET_VAR(__GLEW_ARB_clear_buffer_object) #endif /* GL_ARB_clear_buffer_object */ /* ----------------------- GL_ARB_color_buffer_float ----------------------- */ #ifndef GL_ARB_color_buffer_float #define GL_ARB_color_buffer_float 1 #define GL_RGBA_FLOAT_MODE_ARB 0x8820 #define GL_CLAMP_VERTEX_COLOR_ARB 0x891A #define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B #define GL_CLAMP_READ_COLOR_ARB 0x891C #define GL_FIXED_ONLY_ARB 0x891D typedef void(GLAPIENTRY * PFNGLCLAMPCOLORARBPROC)(GLenum target, GLenum clamp); #define glClampColorARB GLEW_GET_FUN(__glewClampColorARB) #define GLEW_ARB_color_buffer_float GLEW_GET_VAR(__GLEW_ARB_color_buffer_float) #endif /* GL_ARB_color_buffer_float */ /* -------------------------- GL_ARB_compatibility ------------------------- */ #ifndef GL_ARB_compatibility #define GL_ARB_compatibility 1 #define GLEW_ARB_compatibility GLEW_GET_VAR(__GLEW_ARB_compatibility) #endif /* GL_ARB_compatibility */ /* ---------------- GL_ARB_compressed_texture_pixel_storage ---------------- */ #ifndef GL_ARB_compressed_texture_pixel_storage #define GL_ARB_compressed_texture_pixel_storage 1 #define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 #define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 #define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 #define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A #define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B #define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C #define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D #define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E #define GLEW_ARB_compressed_texture_pixel_storage GLEW_GET_VAR(__GLEW_ARB_compressed_texture_pixel_storage) #endif /* GL_ARB_compressed_texture_pixel_storage */ /* ------------------------- GL_ARB_compute_shader ------------------------- */ #ifndef GL_ARB_compute_shader #define GL_ARB_compute_shader 1 #define GL_COMPUTE_SHADER_BIT 0x00000020 #define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 #define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 #define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 #define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 #define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 #define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 #define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB #define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED #define GL_DISPATCH_INDIRECT_BUFFER 0x90EE #define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF #define GL_COMPUTE_SHADER 0x91B9 #define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB #define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC #define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD #define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE #define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF typedef void(GLAPIENTRY * PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); typedef void(GLAPIENTRY * PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); #define glDispatchCompute GLEW_GET_FUN(__glewDispatchCompute) #define glDispatchComputeIndirect GLEW_GET_FUN(__glewDispatchComputeIndirect) #define GLEW_ARB_compute_shader GLEW_GET_VAR(__GLEW_ARB_compute_shader) #endif /* GL_ARB_compute_shader */ /* ----------------------- GL_ARB_conservative_depth ----------------------- */ #ifndef GL_ARB_conservative_depth #define GL_ARB_conservative_depth 1 #define GLEW_ARB_conservative_depth GLEW_GET_VAR(__GLEW_ARB_conservative_depth) #endif /* GL_ARB_conservative_depth */ /* --------------------------- GL_ARB_copy_buffer -------------------------- */ #ifndef GL_ARB_copy_buffer #define GL_ARB_copy_buffer 1 #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 typedef void(GLAPIENTRY * PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size); #define glCopyBufferSubData GLEW_GET_FUN(__glewCopyBufferSubData) #define GLEW_ARB_copy_buffer GLEW_GET_VAR(__GLEW_ARB_copy_buffer) #endif /* GL_ARB_copy_buffer */ /* --------------------------- GL_ARB_copy_image --------------------------- */ #ifndef GL_ARB_copy_image #define GL_ARB_copy_image 1 typedef void(GLAPIENTRY * 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); #define glCopyImageSubData GLEW_GET_FUN(__glewCopyImageSubData) #define GLEW_ARB_copy_image GLEW_GET_VAR(__GLEW_ARB_copy_image) #endif /* GL_ARB_copy_image */ /* -------------------------- GL_ARB_debug_output -------------------------- */ #ifndef GL_ARB_debug_output #define GL_ARB_debug_output 1 #define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 #define GL_DEBUG_SOURCE_API_ARB 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A #define GL_DEBUG_SOURCE_OTHER_ARB 0x824B #define GL_DEBUG_TYPE_ERROR_ARB 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E #define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 #define GL_DEBUG_TYPE_OTHER_ARB 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 #define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 #define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 typedef void(APIENTRY * GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * message, GLvoid * userParam); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, void * userParam); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); typedef GLuint(GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); #define glDebugMessageCallbackARB GLEW_GET_FUN(__glewDebugMessageCallbackARB) #define glDebugMessageControlARB GLEW_GET_FUN(__glewDebugMessageControlARB) #define glDebugMessageInsertARB GLEW_GET_FUN(__glewDebugMessageInsertARB) #define glGetDebugMessageLogARB GLEW_GET_FUN(__glewGetDebugMessageLogARB) #define GLEW_ARB_debug_output GLEW_GET_VAR(__GLEW_ARB_debug_output) #endif /* GL_ARB_debug_output */ /* ----------------------- GL_ARB_depth_buffer_float ----------------------- */ #ifndef GL_ARB_depth_buffer_float #define GL_ARB_depth_buffer_float 1 #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #define GLEW_ARB_depth_buffer_float GLEW_GET_VAR(__GLEW_ARB_depth_buffer_float) #endif /* GL_ARB_depth_buffer_float */ /* --------------------------- GL_ARB_depth_clamp -------------------------- */ #ifndef GL_ARB_depth_clamp #define GL_ARB_depth_clamp 1 #define GL_DEPTH_CLAMP 0x864F #define GLEW_ARB_depth_clamp GLEW_GET_VAR(__GLEW_ARB_depth_clamp) #endif /* GL_ARB_depth_clamp */ /* -------------------------- GL_ARB_depth_texture ------------------------- */ #ifndef GL_ARB_depth_texture #define GL_ARB_depth_texture 1 #define GL_DEPTH_COMPONENT16_ARB 0x81A5 #define GL_DEPTH_COMPONENT24_ARB 0x81A6 #define GL_DEPTH_COMPONENT32_ARB 0x81A7 #define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A #define GL_DEPTH_TEXTURE_MODE_ARB 0x884B #define GLEW_ARB_depth_texture GLEW_GET_VAR(__GLEW_ARB_depth_texture) #endif /* GL_ARB_depth_texture */ /* -------------------------- GL_ARB_draw_buffers -------------------------- */ #ifndef GL_ARB_draw_buffers #define GL_ARB_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_ARB 0x8824 #define GL_DRAW_BUFFER0_ARB 0x8825 #define GL_DRAW_BUFFER1_ARB 0x8826 #define GL_DRAW_BUFFER2_ARB 0x8827 #define GL_DRAW_BUFFER3_ARB 0x8828 #define GL_DRAW_BUFFER4_ARB 0x8829 #define GL_DRAW_BUFFER5_ARB 0x882A #define GL_DRAW_BUFFER6_ARB 0x882B #define GL_DRAW_BUFFER7_ARB 0x882C #define GL_DRAW_BUFFER8_ARB 0x882D #define GL_DRAW_BUFFER9_ARB 0x882E #define GL_DRAW_BUFFER10_ARB 0x882F #define GL_DRAW_BUFFER11_ARB 0x8830 #define GL_DRAW_BUFFER12_ARB 0x8831 #define GL_DRAW_BUFFER13_ARB 0x8832 #define GL_DRAW_BUFFER14_ARB 0x8833 #define GL_DRAW_BUFFER15_ARB 0x8834 typedef void(GLAPIENTRY * PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum * bufs); #define glDrawBuffersARB GLEW_GET_FUN(__glewDrawBuffersARB) #define GLEW_ARB_draw_buffers GLEW_GET_VAR(__GLEW_ARB_draw_buffers) #endif /* GL_ARB_draw_buffers */ /* ----------------------- GL_ARB_draw_buffers_blend ----------------------- */ #ifndef GL_ARB_draw_buffers_blend #define GL_ARB_draw_buffers_blend 1 typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); typedef void(GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void(GLAPIENTRY * PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); #define glBlendEquationSeparateiARB GLEW_GET_FUN(__glewBlendEquationSeparateiARB) #define glBlendEquationiARB GLEW_GET_FUN(__glewBlendEquationiARB) #define glBlendFuncSeparateiARB GLEW_GET_FUN(__glewBlendFuncSeparateiARB) #define glBlendFunciARB GLEW_GET_FUN(__glewBlendFunciARB) #define GLEW_ARB_draw_buffers_blend GLEW_GET_VAR(__GLEW_ARB_draw_buffers_blend) #endif /* GL_ARB_draw_buffers_blend */ /* -------------------- GL_ARB_draw_elements_base_vertex ------------------- */ #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, void * indices, GLint basevertex); typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount, GLint basevertex); typedef void(GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void * indices, GLint basevertex); typedef void(GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei * count, GLenum type, GLvoid ** indices, GLsizei primcount, GLint * basevertex); #define glDrawElementsBaseVertex GLEW_GET_FUN(__glewDrawElementsBaseVertex) #define glDrawElementsInstancedBaseVertex GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertex) #define glDrawRangeElementsBaseVertex GLEW_GET_FUN(__glewDrawRangeElementsBaseVertex) #define glMultiDrawElementsBaseVertex GLEW_GET_FUN(__glewMultiDrawElementsBaseVertex) #define GLEW_ARB_draw_elements_base_vertex GLEW_GET_VAR(__GLEW_ARB_draw_elements_base_vertex) #endif /* GL_ARB_draw_elements_base_vertex */ /* -------------------------- GL_ARB_draw_indirect ------------------------- */ #ifndef GL_ARB_draw_indirect #define GL_ARB_draw_indirect 1 #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 typedef void(GLAPIENTRY * PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect); typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect); #define glDrawArraysIndirect GLEW_GET_FUN(__glewDrawArraysIndirect) #define glDrawElementsIndirect GLEW_GET_FUN(__glewDrawElementsIndirect) #define GLEW_ARB_draw_indirect GLEW_GET_VAR(__GLEW_ARB_draw_indirect) #endif /* GL_ARB_draw_indirect */ /* ------------------------- GL_ARB_draw_instanced ------------------------- */ #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 #define GLEW_ARB_draw_instanced GLEW_GET_VAR(__GLEW_ARB_draw_instanced) #endif /* GL_ARB_draw_instanced */ /* -------------------- GL_ARB_explicit_attrib_location -------------------- */ #ifndef GL_ARB_explicit_attrib_location #define GL_ARB_explicit_attrib_location 1 #define GLEW_ARB_explicit_attrib_location GLEW_GET_VAR(__GLEW_ARB_explicit_attrib_location) #endif /* GL_ARB_explicit_attrib_location */ /* -------------------- GL_ARB_explicit_uniform_location ------------------- */ #ifndef GL_ARB_explicit_uniform_location #define GL_ARB_explicit_uniform_location 1 #define GL_MAX_UNIFORM_LOCATIONS 0x826E #define GLEW_ARB_explicit_uniform_location GLEW_GET_VAR(__GLEW_ARB_explicit_uniform_location) #endif /* GL_ARB_explicit_uniform_location */ /* ------------------- GL_ARB_fragment_coord_conventions ------------------- */ #ifndef GL_ARB_fragment_coord_conventions #define GL_ARB_fragment_coord_conventions 1 #define GLEW_ARB_fragment_coord_conventions GLEW_GET_VAR(__GLEW_ARB_fragment_coord_conventions) #endif /* GL_ARB_fragment_coord_conventions */ /* --------------------- GL_ARB_fragment_layer_viewport -------------------- */ #ifndef GL_ARB_fragment_layer_viewport #define GL_ARB_fragment_layer_viewport 1 #define GLEW_ARB_fragment_layer_viewport GLEW_GET_VAR(__GLEW_ARB_fragment_layer_viewport) #endif /* GL_ARB_fragment_layer_viewport */ /* ------------------------ GL_ARB_fragment_program ------------------------ */ #ifndef GL_ARB_fragment_program #define GL_ARB_fragment_program 1 #define GL_FRAGMENT_PROGRAM_ARB 0x8804 #define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 #define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 #define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 #define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 #define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 #define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A #define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B #define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C #define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D #define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E #define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F #define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 #define GL_MAX_TEXTURE_COORDS_ARB 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 #define GLEW_ARB_fragment_program GLEW_GET_VAR(__GLEW_ARB_fragment_program) #endif /* GL_ARB_fragment_program */ /* --------------------- GL_ARB_fragment_program_shadow -------------------- */ #ifndef GL_ARB_fragment_program_shadow #define GL_ARB_fragment_program_shadow 1 #define GLEW_ARB_fragment_program_shadow GLEW_GET_VAR(__GLEW_ARB_fragment_program_shadow) #endif /* GL_ARB_fragment_program_shadow */ /* ------------------------- GL_ARB_fragment_shader ------------------------ */ #ifndef GL_ARB_fragment_shader #define GL_ARB_fragment_shader 1 #define GL_FRAGMENT_SHADER_ARB 0x8B30 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B #define GLEW_ARB_fragment_shader GLEW_GET_VAR(__GLEW_ARB_fragment_shader) #endif /* GL_ARB_fragment_shader */ /* ------------------- GL_ARB_framebuffer_no_attachments ------------------- */ #ifndef GL_ARB_framebuffer_no_attachments #define GL_ARB_framebuffer_no_attachments 1 #define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 #define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 #define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 #define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 #define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 #define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 #define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 #define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 #define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)(GLuint framebuffer, GLenum pname, GLint param); #define glFramebufferParameteri GLEW_GET_FUN(__glewFramebufferParameteri) #define glGetFramebufferParameteriv GLEW_GET_FUN(__glewGetFramebufferParameteriv) #define glGetNamedFramebufferParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferParameterivEXT) #define glNamedFramebufferParameteriEXT GLEW_GET_FUN(__glewNamedFramebufferParameteriEXT) #define GLEW_ARB_framebuffer_no_attachments GLEW_GET_VAR(__GLEW_ARB_framebuffer_no_attachments) #endif /* GL_ARB_framebuffer_no_attachments */ /* ----------------------- GL_ARB_framebuffer_object ----------------------- */ #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_INDEX 0x8222 #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_SRGB 0x8C40 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #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_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_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 typedef void(GLAPIENTRY * PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); typedef void(GLAPIENTRY * PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef GLenum(GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint * framebuffers); typedef void(GLAPIENTRY * PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint * renderbuffers); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void(GLAPIENTRY * PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); typedef void(GLAPIENTRY * PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); typedef void(GLAPIENTRY * PFNGLGENERATEMIPMAPPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); typedef GLboolean(GLAPIENTRY * PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #define glBindFramebuffer GLEW_GET_FUN(__glewBindFramebuffer) #define glBindRenderbuffer GLEW_GET_FUN(__glewBindRenderbuffer) #define glBlitFramebuffer GLEW_GET_FUN(__glewBlitFramebuffer) #define glCheckFramebufferStatus GLEW_GET_FUN(__glewCheckFramebufferStatus) #define glDeleteFramebuffers GLEW_GET_FUN(__glewDeleteFramebuffers) #define glDeleteRenderbuffers GLEW_GET_FUN(__glewDeleteRenderbuffers) #define glFramebufferRenderbuffer GLEW_GET_FUN(__glewFramebufferRenderbuffer) #define glFramebufferTexture1D GLEW_GET_FUN(__glewFramebufferTexture1D) #define glFramebufferTexture2D GLEW_GET_FUN(__glewFramebufferTexture2D) #define glFramebufferTexture3D GLEW_GET_FUN(__glewFramebufferTexture3D) #define glFramebufferTextureLayer GLEW_GET_FUN(__glewFramebufferTextureLayer) #define glGenFramebuffers GLEW_GET_FUN(__glewGenFramebuffers) #define glGenRenderbuffers GLEW_GET_FUN(__glewGenRenderbuffers) #define glGenerateMipmap GLEW_GET_FUN(__glewGenerateMipmap) #define glGetFramebufferAttachmentParameteriv GLEW_GET_FUN(__glewGetFramebufferAttachmentParameteriv) #define glGetRenderbufferParameteriv GLEW_GET_FUN(__glewGetRenderbufferParameteriv) #define glIsFramebuffer GLEW_GET_FUN(__glewIsFramebuffer) #define glIsRenderbuffer GLEW_GET_FUN(__glewIsRenderbuffer) #define glRenderbufferStorage GLEW_GET_FUN(__glewRenderbufferStorage) #define glRenderbufferStorageMultisample GLEW_GET_FUN(__glewRenderbufferStorageMultisample) #define GLEW_ARB_framebuffer_object GLEW_GET_VAR(__GLEW_ARB_framebuffer_object) #endif /* GL_ARB_framebuffer_object */ /* ------------------------ GL_ARB_framebuffer_sRGB ------------------------ */ #ifndef GL_ARB_framebuffer_sRGB #define GL_ARB_framebuffer_sRGB 1 #define GL_FRAMEBUFFER_SRGB 0x8DB9 #define GLEW_ARB_framebuffer_sRGB GLEW_GET_VAR(__GLEW_ARB_framebuffer_sRGB) #endif /* GL_ARB_framebuffer_sRGB */ /* ------------------------ GL_ARB_geometry_shader4 ------------------------ */ #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #define GL_LINES_ADJACENCY_ARB 0xA #define GL_LINE_STRIP_ADJACENCY_ARB 0xB #define GL_TRIANGLES_ADJACENCY_ARB 0xC #define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0xD #define GL_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 #define GL_GEOMETRY_SHADER_ARB 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value); #define glFramebufferTextureARB GLEW_GET_FUN(__glewFramebufferTextureARB) #define glFramebufferTextureFaceARB GLEW_GET_FUN(__glewFramebufferTextureFaceARB) #define glFramebufferTextureLayerARB GLEW_GET_FUN(__glewFramebufferTextureLayerARB) #define glProgramParameteriARB GLEW_GET_FUN(__glewProgramParameteriARB) #define GLEW_ARB_geometry_shader4 GLEW_GET_VAR(__GLEW_ARB_geometry_shader4) #endif /* GL_ARB_geometry_shader4 */ /* ----------------------- GL_ARB_get_program_binary ----------------------- */ #ifndef GL_ARB_get_program_binary #define GL_ARB_get_program_binary 1 #define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 #define GL_PROGRAM_BINARY_LENGTH 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE #define GL_PROGRAM_BINARY_FORMATS 0x87FF typedef void(GLAPIENTRY * PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, GLvoid * binary); typedef void(GLAPIENTRY * PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); #define glGetProgramBinary GLEW_GET_FUN(__glewGetProgramBinary) #define glProgramBinary GLEW_GET_FUN(__glewProgramBinary) #define glProgramParameteri GLEW_GET_FUN(__glewProgramParameteri) #define GLEW_ARB_get_program_binary GLEW_GET_VAR(__GLEW_ARB_get_program_binary) #endif /* GL_ARB_get_program_binary */ /* --------------------------- GL_ARB_gpu_shader5 -------------------------- */ #ifndef GL_ARB_gpu_shader5 #define GL_ARB_gpu_shader5 1 #define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D #define GL_MAX_VERTEX_STREAMS 0x8E71 #define GLEW_ARB_gpu_shader5 GLEW_GET_VAR(__GLEW_ARB_gpu_shader5) #endif /* GL_ARB_gpu_shader5 */ /* ------------------------- GL_ARB_gpu_shader_fp64 ------------------------ */ #ifndef GL_ARB_gpu_shader_fp64 #define GL_ARB_gpu_shader_fp64 1 #define GL_DOUBLE_MAT2 0x8F46 #define GL_DOUBLE_MAT3 0x8F47 #define GL_DOUBLE_MAT4 0x8F48 #define GL_DOUBLE_MAT2x3 0x8F49 #define GL_DOUBLE_MAT2x4 0x8F4A #define GL_DOUBLE_MAT3x2 0x8F4B #define GL_DOUBLE_MAT3x4 0x8F4C #define GL_DOUBLE_MAT4x2 0x8F4D #define GL_DOUBLE_MAT4x3 0x8F4E #define GL_DOUBLE_VEC2 0x8FFC #define GL_DOUBLE_VEC3 0x8FFD #define GL_DOUBLE_VEC4 0x8FFE typedef void(GLAPIENTRY * PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble * params); typedef void(GLAPIENTRY * PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); typedef void(GLAPIENTRY * PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); #define glGetUniformdv GLEW_GET_FUN(__glewGetUniformdv) #define glUniform1d GLEW_GET_FUN(__glewUniform1d) #define glUniform1dv GLEW_GET_FUN(__glewUniform1dv) #define glUniform2d GLEW_GET_FUN(__glewUniform2d) #define glUniform2dv GLEW_GET_FUN(__glewUniform2dv) #define glUniform3d GLEW_GET_FUN(__glewUniform3d) #define glUniform3dv GLEW_GET_FUN(__glewUniform3dv) #define glUniform4d GLEW_GET_FUN(__glewUniform4d) #define glUniform4dv GLEW_GET_FUN(__glewUniform4dv) #define glUniformMatrix2dv GLEW_GET_FUN(__glewUniformMatrix2dv) #define glUniformMatrix2x3dv GLEW_GET_FUN(__glewUniformMatrix2x3dv) #define glUniformMatrix2x4dv GLEW_GET_FUN(__glewUniformMatrix2x4dv) #define glUniformMatrix3dv GLEW_GET_FUN(__glewUniformMatrix3dv) #define glUniformMatrix3x2dv GLEW_GET_FUN(__glewUniformMatrix3x2dv) #define glUniformMatrix3x4dv GLEW_GET_FUN(__glewUniformMatrix3x4dv) #define glUniformMatrix4dv GLEW_GET_FUN(__glewUniformMatrix4dv) #define glUniformMatrix4x2dv GLEW_GET_FUN(__glewUniformMatrix4x2dv) #define glUniformMatrix4x3dv GLEW_GET_FUN(__glewUniformMatrix4x3dv) #define GLEW_ARB_gpu_shader_fp64 GLEW_GET_VAR(__GLEW_ARB_gpu_shader_fp64) #endif /* GL_ARB_gpu_shader_fp64 */ /* ------------------------ GL_ARB_half_float_pixel ------------------------ */ #ifndef GL_ARB_half_float_pixel #define GL_ARB_half_float_pixel 1 #define GL_HALF_FLOAT_ARB 0x140B #define GLEW_ARB_half_float_pixel GLEW_GET_VAR(__GLEW_ARB_half_float_pixel) #endif /* GL_ARB_half_float_pixel */ /* ------------------------ GL_ARB_half_float_vertex ----------------------- */ #ifndef GL_ARB_half_float_vertex #define GL_ARB_half_float_vertex 1 #define GL_HALF_FLOAT 0x140B #define GLEW_ARB_half_float_vertex GLEW_GET_VAR(__GLEW_ARB_half_float_vertex) #endif /* GL_ARB_half_float_vertex */ /* ----------------------------- GL_ARB_imaging ---------------------------- */ #ifndef GL_ARB_imaging #define GL_ARB_imaging 1 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_FUNC_ADD 0x8006 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BLEND_EQUATION 0x8009 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_IGNORE_BORDER 0x8150 #define GL_CONSTANT_BORDER 0x8151 #define GL_WRAP_BORDER 0x8152 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 typedef void(GLAPIENTRY * PFNGLCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); typedef void(GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat params); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC)(GLenum target, GLenum pname, GLint params); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLCOPYCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, GLvoid * table); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, GLvoid * image); typedef void(GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); typedef void(GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid * values); typedef void(GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); typedef void(GLAPIENTRY * PFNGLHISTOGRAMPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void(GLAPIENTRY * PFNGLMINMAXPROC)(GLenum target, GLenum internalformat, GLboolean sink); typedef void(GLAPIENTRY * PFNGLRESETHISTOGRAMPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLRESETMINMAXPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); #define glColorSubTable GLEW_GET_FUN(__glewColorSubTable) #define glColorTable GLEW_GET_FUN(__glewColorTable) #define glColorTableParameterfv GLEW_GET_FUN(__glewColorTableParameterfv) #define glColorTableParameteriv GLEW_GET_FUN(__glewColorTableParameteriv) #define glConvolutionFilter1D GLEW_GET_FUN(__glewConvolutionFilter1D) #define glConvolutionFilter2D GLEW_GET_FUN(__glewConvolutionFilter2D) #define glConvolutionParameterf GLEW_GET_FUN(__glewConvolutionParameterf) #define glConvolutionParameterfv GLEW_GET_FUN(__glewConvolutionParameterfv) #define glConvolutionParameteri GLEW_GET_FUN(__glewConvolutionParameteri) #define glConvolutionParameteriv GLEW_GET_FUN(__glewConvolutionParameteriv) #define glCopyColorSubTable GLEW_GET_FUN(__glewCopyColorSubTable) #define glCopyColorTable GLEW_GET_FUN(__glewCopyColorTable) #define glCopyConvolutionFilter1D GLEW_GET_FUN(__glewCopyConvolutionFilter1D) #define glCopyConvolutionFilter2D GLEW_GET_FUN(__glewCopyConvolutionFilter2D) #define glGetColorTable GLEW_GET_FUN(__glewGetColorTable) #define glGetColorTableParameterfv GLEW_GET_FUN(__glewGetColorTableParameterfv) #define glGetColorTableParameteriv GLEW_GET_FUN(__glewGetColorTableParameteriv) #define glGetConvolutionFilter GLEW_GET_FUN(__glewGetConvolutionFilter) #define glGetConvolutionParameterfv GLEW_GET_FUN(__glewGetConvolutionParameterfv) #define glGetConvolutionParameteriv GLEW_GET_FUN(__glewGetConvolutionParameteriv) #define glGetHistogram GLEW_GET_FUN(__glewGetHistogram) #define glGetHistogramParameterfv GLEW_GET_FUN(__glewGetHistogramParameterfv) #define glGetHistogramParameteriv GLEW_GET_FUN(__glewGetHistogramParameteriv) #define glGetMinmax GLEW_GET_FUN(__glewGetMinmax) #define glGetMinmaxParameterfv GLEW_GET_FUN(__glewGetMinmaxParameterfv) #define glGetMinmaxParameteriv GLEW_GET_FUN(__glewGetMinmaxParameteriv) #define glGetSeparableFilter GLEW_GET_FUN(__glewGetSeparableFilter) #define glHistogram GLEW_GET_FUN(__glewHistogram) #define glMinmax GLEW_GET_FUN(__glewMinmax) #define glResetHistogram GLEW_GET_FUN(__glewResetHistogram) #define glResetMinmax GLEW_GET_FUN(__glewResetMinmax) #define glSeparableFilter2D GLEW_GET_FUN(__glewSeparableFilter2D) #define GLEW_ARB_imaging GLEW_GET_VAR(__GLEW_ARB_imaging) #endif /* GL_ARB_imaging */ /* ------------------------ GL_ARB_instanced_arrays ------------------------ */ #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE typedef void(GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDARBPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDARBPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORARBPROC)(GLuint index, GLuint divisor); #define glDrawArraysInstancedARB GLEW_GET_FUN(__glewDrawArraysInstancedARB) #define glDrawElementsInstancedARB GLEW_GET_FUN(__glewDrawElementsInstancedARB) #define glVertexAttribDivisorARB GLEW_GET_FUN(__glewVertexAttribDivisorARB) #define GLEW_ARB_instanced_arrays GLEW_GET_VAR(__GLEW_ARB_instanced_arrays) #endif /* GL_ARB_instanced_arrays */ /* ---------------------- GL_ARB_internalformat_query ---------------------- */ #ifndef GL_ARB_internalformat_query #define GL_ARB_internalformat_query 1 #define GL_NUM_SAMPLE_COUNTS 0x9380 typedef void(GLAPIENTRY * PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); #define glGetInternalformativ GLEW_GET_FUN(__glewGetInternalformativ) #define GLEW_ARB_internalformat_query GLEW_GET_VAR(__GLEW_ARB_internalformat_query) #endif /* GL_ARB_internalformat_query */ /* ---------------------- GL_ARB_internalformat_query2 --------------------- */ #ifndef GL_ARB_internalformat_query2 #define GL_ARB_internalformat_query2 1 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_3D 0x806F #define GL_SAMPLES 0x80A9 #define GL_INTERNALFORMAT_SUPPORTED 0x826F #define GL_INTERNALFORMAT_PREFERRED 0x8270 #define GL_INTERNALFORMAT_RED_SIZE 0x8271 #define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 #define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 #define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 #define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 #define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 #define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 #define GL_INTERNALFORMAT_RED_TYPE 0x8278 #define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 #define GL_INTERNALFORMAT_BLUE_TYPE 0x827A #define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B #define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C #define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D #define GL_MAX_WIDTH 0x827E #define GL_MAX_HEIGHT 0x827F #define GL_MAX_DEPTH 0x8280 #define GL_MAX_LAYERS 0x8281 #define GL_MAX_COMBINED_DIMENSIONS 0x8282 #define GL_COLOR_COMPONENTS 0x8283 #define GL_DEPTH_COMPONENTS 0x8284 #define GL_STENCIL_COMPONENTS 0x8285 #define GL_COLOR_RENDERABLE 0x8286 #define GL_DEPTH_RENDERABLE 0x8287 #define GL_STENCIL_RENDERABLE 0x8288 #define GL_FRAMEBUFFER_RENDERABLE 0x8289 #define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A #define GL_FRAMEBUFFER_BLEND 0x828B #define GL_READ_PIXELS 0x828C #define GL_READ_PIXELS_FORMAT 0x828D #define GL_READ_PIXELS_TYPE 0x828E #define GL_TEXTURE_IMAGE_FORMAT 0x828F #define GL_TEXTURE_IMAGE_TYPE 0x8290 #define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 #define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 #define GL_MIPMAP 0x8293 #define GL_MANUAL_GENERATE_MIPMAP 0x8294 #define GL_AUTO_GENERATE_MIPMAP 0x8295 #define GL_COLOR_ENCODING 0x8296 #define GL_SRGB_READ 0x8297 #define GL_SRGB_WRITE 0x8298 #define GL_SRGB_DECODE_ARB 0x8299 #define GL_FILTER 0x829A #define GL_VERTEX_TEXTURE 0x829B #define GL_TESS_CONTROL_TEXTURE 0x829C #define GL_TESS_EVALUATION_TEXTURE 0x829D #define GL_GEOMETRY_TEXTURE 0x829E #define GL_FRAGMENT_TEXTURE 0x829F #define GL_COMPUTE_TEXTURE 0x82A0 #define GL_TEXTURE_SHADOW 0x82A1 #define GL_TEXTURE_GATHER 0x82A2 #define GL_TEXTURE_GATHER_SHADOW 0x82A3 #define GL_SHADER_IMAGE_LOAD 0x82A4 #define GL_SHADER_IMAGE_STORE 0x82A5 #define GL_SHADER_IMAGE_ATOMIC 0x82A6 #define GL_IMAGE_TEXEL_SIZE 0x82A7 #define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 #define GL_IMAGE_PIXEL_FORMAT 0x82A9 #define GL_IMAGE_PIXEL_TYPE 0x82AA #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF #define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 #define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 #define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 #define GL_CLEAR_BUFFER 0x82B4 #define GL_TEXTURE_VIEW 0x82B5 #define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 #define GL_FULL_SUPPORT 0x82B7 #define GL_CAVEAT_SUPPORT 0x82B8 #define GL_IMAGE_CLASS_4_X_32 0x82B9 #define GL_IMAGE_CLASS_2_X_32 0x82BA #define GL_IMAGE_CLASS_1_X_32 0x82BB #define GL_IMAGE_CLASS_4_X_16 0x82BC #define GL_IMAGE_CLASS_2_X_16 0x82BD #define GL_IMAGE_CLASS_1_X_16 0x82BE #define GL_IMAGE_CLASS_4_X_8 0x82BF #define GL_IMAGE_CLASS_2_X_8 0x82C0 #define GL_IMAGE_CLASS_1_X_8 0x82C1 #define GL_IMAGE_CLASS_11_11_10 0x82C2 #define GL_IMAGE_CLASS_10_10_10_2 0x82C3 #define GL_VIEW_CLASS_128_BITS 0x82C4 #define GL_VIEW_CLASS_96_BITS 0x82C5 #define GL_VIEW_CLASS_64_BITS 0x82C6 #define GL_VIEW_CLASS_48_BITS 0x82C7 #define GL_VIEW_CLASS_32_BITS 0x82C8 #define GL_VIEW_CLASS_24_BITS 0x82C9 #define GL_VIEW_CLASS_16_BITS 0x82CA #define GL_VIEW_CLASS_8_BITS 0x82CB #define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC #define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD #define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE #define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF #define GL_VIEW_CLASS_RGTC1_RED 0x82D0 #define GL_VIEW_CLASS_RGTC2_RG 0x82D1 #define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 #define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_TEXTURE_BUFFER 0x8C2A #define GL_RENDERBUFFER 0x8D41 #define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_NUM_SAMPLE_COUNTS 0x9380 typedef void(GLAPIENTRY * PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params); #define glGetInternalformati64v GLEW_GET_FUN(__glewGetInternalformati64v) #define GLEW_ARB_internalformat_query2 GLEW_GET_VAR(__GLEW_ARB_internalformat_query2) #endif /* GL_ARB_internalformat_query2 */ /* ----------------------- GL_ARB_invalidate_subdata ----------------------- */ #ifndef GL_ARB_invalidate_subdata #define GL_ARB_invalidate_subdata 1 typedef void(GLAPIENTRY * PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer); typedef void(GLAPIENTRY * PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void(GLAPIENTRY * PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments); typedef void(GLAPIENTRY * PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); #define glInvalidateBufferData GLEW_GET_FUN(__glewInvalidateBufferData) #define glInvalidateBufferSubData GLEW_GET_FUN(__glewInvalidateBufferSubData) #define glInvalidateFramebuffer GLEW_GET_FUN(__glewInvalidateFramebuffer) #define glInvalidateSubFramebuffer GLEW_GET_FUN(__glewInvalidateSubFramebuffer) #define glInvalidateTexImage GLEW_GET_FUN(__glewInvalidateTexImage) #define glInvalidateTexSubImage GLEW_GET_FUN(__glewInvalidateTexSubImage) #define GLEW_ARB_invalidate_subdata GLEW_GET_VAR(__GLEW_ARB_invalidate_subdata) #endif /* GL_ARB_invalidate_subdata */ /* ---------------------- GL_ARB_map_buffer_alignment ---------------------- */ #ifndef GL_ARB_map_buffer_alignment #define GL_ARB_map_buffer_alignment 1 #define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC #define GLEW_ARB_map_buffer_alignment GLEW_GET_VAR(__GLEW_ARB_map_buffer_alignment) #endif /* GL_ARB_map_buffer_alignment */ /* ------------------------ GL_ARB_map_buffer_range ------------------------ */ #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 typedef void(GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); typedef GLvoid *(GLAPIENTRY * PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); #define glFlushMappedBufferRange GLEW_GET_FUN(__glewFlushMappedBufferRange) #define glMapBufferRange GLEW_GET_FUN(__glewMapBufferRange) #define GLEW_ARB_map_buffer_range GLEW_GET_VAR(__GLEW_ARB_map_buffer_range) #endif /* GL_ARB_map_buffer_range */ /* ------------------------- GL_ARB_matrix_palette ------------------------- */ #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #define GL_MATRIX_PALETTE_ARB 0x8840 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 #define GL_MAX_PALETTE_MATRICES_ARB 0x8842 #define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 #define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 #define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 #define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 typedef void(GLAPIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC)(GLint index); typedef void(GLAPIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, GLvoid * pointer); typedef void(GLAPIENTRY * PFNGLMATRIXINDEXUBVARBPROC)(GLint size, GLubyte * indices); typedef void(GLAPIENTRY * PFNGLMATRIXINDEXUIVARBPROC)(GLint size, GLuint * indices); typedef void(GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC)(GLint size, GLushort * indices); #define glCurrentPaletteMatrixARB GLEW_GET_FUN(__glewCurrentPaletteMatrixARB) #define glMatrixIndexPointerARB GLEW_GET_FUN(__glewMatrixIndexPointerARB) #define glMatrixIndexubvARB GLEW_GET_FUN(__glewMatrixIndexubvARB) #define glMatrixIndexuivARB GLEW_GET_FUN(__glewMatrixIndexuivARB) #define glMatrixIndexusvARB GLEW_GET_FUN(__glewMatrixIndexusvARB) #define GLEW_ARB_matrix_palette GLEW_GET_VAR(__GLEW_ARB_matrix_palette) #endif /* GL_ARB_matrix_palette */ /* ----------------------- GL_ARB_multi_draw_indirect ---------------------- */ #ifndef GL_ARB_multi_draw_indirect #define GL_ARB_multi_draw_indirect 1 typedef void(GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride); typedef void(GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride); #define glMultiDrawArraysIndirect GLEW_GET_FUN(__glewMultiDrawArraysIndirect) #define glMultiDrawElementsIndirect GLEW_GET_FUN(__glewMultiDrawElementsIndirect) #define GLEW_ARB_multi_draw_indirect GLEW_GET_VAR(__GLEW_ARB_multi_draw_indirect) #endif /* GL_ARB_multi_draw_indirect */ /* --------------------------- GL_ARB_multisample -------------------------- */ #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #define GL_MULTISAMPLE_ARB 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_MULTISAMPLE_BIT_ARB 0x20000000 typedef void(GLAPIENTRY * PFNGLSAMPLECOVERAGEARBPROC)(GLclampf value, GLboolean invert); #define glSampleCoverageARB GLEW_GET_FUN(__glewSampleCoverageARB) #define GLEW_ARB_multisample GLEW_GET_VAR(__GLEW_ARB_multisample) #endif /* GL_ARB_multisample */ /* -------------------------- GL_ARB_multitexture -------------------------- */ #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 typedef void(GLAPIENTRY * PFNGLACTIVETEXTUREARBPROC)(GLenum texture); typedef void(GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1DARBPROC)(GLenum target, GLdouble s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1DVARBPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1IARBPROC)(GLenum target, GLint s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1IVARBPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1SARBPROC)(GLenum target, GLshort s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1SVARBPROC)(GLenum target, const GLshort * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2DARBPROC)(GLenum target, GLdouble s, GLdouble t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2DVARBPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2IARBPROC)(GLenum target, GLint s, GLint t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2IVARBPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2SARBPROC)(GLenum target, GLshort s, GLshort t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3DVARBPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3IARBPROC)(GLenum target, GLint s, GLint t, GLint r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3IVARBPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3SVARBPROC)(GLenum target, const GLshort * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4DVARBPROC)(GLenum target, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4IARBPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4IVARBPROC)(GLenum target, const GLint * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort * v); #define glActiveTextureARB GLEW_GET_FUN(__glewActiveTextureARB) #define glClientActiveTextureARB GLEW_GET_FUN(__glewClientActiveTextureARB) #define glMultiTexCoord1dARB GLEW_GET_FUN(__glewMultiTexCoord1dARB) #define glMultiTexCoord1dvARB GLEW_GET_FUN(__glewMultiTexCoord1dvARB) #define glMultiTexCoord1fARB GLEW_GET_FUN(__glewMultiTexCoord1fARB) #define glMultiTexCoord1fvARB GLEW_GET_FUN(__glewMultiTexCoord1fvARB) #define glMultiTexCoord1iARB GLEW_GET_FUN(__glewMultiTexCoord1iARB) #define glMultiTexCoord1ivARB GLEW_GET_FUN(__glewMultiTexCoord1ivARB) #define glMultiTexCoord1sARB GLEW_GET_FUN(__glewMultiTexCoord1sARB) #define glMultiTexCoord1svARB GLEW_GET_FUN(__glewMultiTexCoord1svARB) #define glMultiTexCoord2dARB GLEW_GET_FUN(__glewMultiTexCoord2dARB) #define glMultiTexCoord2dvARB GLEW_GET_FUN(__glewMultiTexCoord2dvARB) #define glMultiTexCoord2fARB GLEW_GET_FUN(__glewMultiTexCoord2fARB) #define glMultiTexCoord2fvARB GLEW_GET_FUN(__glewMultiTexCoord2fvARB) #define glMultiTexCoord2iARB GLEW_GET_FUN(__glewMultiTexCoord2iARB) #define glMultiTexCoord2ivARB GLEW_GET_FUN(__glewMultiTexCoord2ivARB) #define glMultiTexCoord2sARB GLEW_GET_FUN(__glewMultiTexCoord2sARB) #define glMultiTexCoord2svARB GLEW_GET_FUN(__glewMultiTexCoord2svARB) #define glMultiTexCoord3dARB GLEW_GET_FUN(__glewMultiTexCoord3dARB) #define glMultiTexCoord3dvARB GLEW_GET_FUN(__glewMultiTexCoord3dvARB) #define glMultiTexCoord3fARB GLEW_GET_FUN(__glewMultiTexCoord3fARB) #define glMultiTexCoord3fvARB GLEW_GET_FUN(__glewMultiTexCoord3fvARB) #define glMultiTexCoord3iARB GLEW_GET_FUN(__glewMultiTexCoord3iARB) #define glMultiTexCoord3ivARB GLEW_GET_FUN(__glewMultiTexCoord3ivARB) #define glMultiTexCoord3sARB GLEW_GET_FUN(__glewMultiTexCoord3sARB) #define glMultiTexCoord3svARB GLEW_GET_FUN(__glewMultiTexCoord3svARB) #define glMultiTexCoord4dARB GLEW_GET_FUN(__glewMultiTexCoord4dARB) #define glMultiTexCoord4dvARB GLEW_GET_FUN(__glewMultiTexCoord4dvARB) #define glMultiTexCoord4fARB GLEW_GET_FUN(__glewMultiTexCoord4fARB) #define glMultiTexCoord4fvARB GLEW_GET_FUN(__glewMultiTexCoord4fvARB) #define glMultiTexCoord4iARB GLEW_GET_FUN(__glewMultiTexCoord4iARB) #define glMultiTexCoord4ivARB GLEW_GET_FUN(__glewMultiTexCoord4ivARB) #define glMultiTexCoord4sARB GLEW_GET_FUN(__glewMultiTexCoord4sARB) #define glMultiTexCoord4svARB GLEW_GET_FUN(__glewMultiTexCoord4svARB) #define GLEW_ARB_multitexture GLEW_GET_VAR(__GLEW_ARB_multitexture) #endif /* GL_ARB_multitexture */ /* ------------------------- GL_ARB_occlusion_query ------------------------ */ #ifndef GL_ARB_occlusion_query #define GL_ARB_occlusion_query 1 #define GL_QUERY_COUNTER_BITS_ARB 0x8864 #define GL_CURRENT_QUERY_ARB 0x8865 #define GL_QUERY_RESULT_ARB 0x8866 #define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 #define GL_SAMPLES_PASSED_ARB 0x8914 typedef void(GLAPIENTRY * PFNGLBEGINQUERYARBPROC)(GLenum target, GLuint id); typedef void(GLAPIENTRY * PFNGLDELETEQUERIESARBPROC)(GLsizei n, const GLuint * ids); typedef void(GLAPIENTRY * PFNGLENDQUERYARBPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLGENQUERIESARBPROC)(GLsizei n, GLuint * ids); typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTIVARBPROC)(GLuint id, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTUIVARBPROC)(GLuint id, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISQUERYARBPROC)(GLuint id); #define glBeginQueryARB GLEW_GET_FUN(__glewBeginQueryARB) #define glDeleteQueriesARB GLEW_GET_FUN(__glewDeleteQueriesARB) #define glEndQueryARB GLEW_GET_FUN(__glewEndQueryARB) #define glGenQueriesARB GLEW_GET_FUN(__glewGenQueriesARB) #define glGetQueryObjectivARB GLEW_GET_FUN(__glewGetQueryObjectivARB) #define glGetQueryObjectuivARB GLEW_GET_FUN(__glewGetQueryObjectuivARB) #define glGetQueryivARB GLEW_GET_FUN(__glewGetQueryivARB) #define glIsQueryARB GLEW_GET_FUN(__glewIsQueryARB) #define GLEW_ARB_occlusion_query GLEW_GET_VAR(__GLEW_ARB_occlusion_query) #endif /* GL_ARB_occlusion_query */ /* ------------------------ GL_ARB_occlusion_query2 ------------------------ */ #ifndef GL_ARB_occlusion_query2 #define GL_ARB_occlusion_query2 1 #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GLEW_ARB_occlusion_query2 GLEW_GET_VAR(__GLEW_ARB_occlusion_query2) #endif /* GL_ARB_occlusion_query2 */ /* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */ #ifndef GL_ARB_pixel_buffer_object #define GL_ARB_pixel_buffer_object 1 #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF #define GLEW_ARB_pixel_buffer_object GLEW_GET_VAR(__GLEW_ARB_pixel_buffer_object) #endif /* GL_ARB_pixel_buffer_object */ /* ------------------------ GL_ARB_point_parameters ------------------------ */ #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #define GL_POINT_SIZE_MIN_ARB 0x8126 #define GL_POINT_SIZE_MAX_ARB 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 #define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat * params); #define glPointParameterfARB GLEW_GET_FUN(__glewPointParameterfARB) #define glPointParameterfvARB GLEW_GET_FUN(__glewPointParameterfvARB) #define GLEW_ARB_point_parameters GLEW_GET_VAR(__GLEW_ARB_point_parameters) #endif /* GL_ARB_point_parameters */ /* -------------------------- GL_ARB_point_sprite -------------------------- */ #ifndef GL_ARB_point_sprite #define GL_ARB_point_sprite 1 #define GL_POINT_SPRITE_ARB 0x8861 #define GL_COORD_REPLACE_ARB 0x8862 #define GLEW_ARB_point_sprite GLEW_GET_VAR(__GLEW_ARB_point_sprite) #endif /* GL_ARB_point_sprite */ /* --------------------- GL_ARB_program_interface_query -------------------- */ #ifndef GL_ARB_program_interface_query #define GL_ARB_program_interface_query 1 #define GL_UNIFORM 0x92E1 #define GL_UNIFORM_BLOCK 0x92E2 #define GL_PROGRAM_INPUT 0x92E3 #define GL_PROGRAM_OUTPUT 0x92E4 #define GL_BUFFER_VARIABLE 0x92E5 #define GL_SHADER_STORAGE_BLOCK 0x92E6 #define GL_IS_PER_PATCH 0x92E7 #define GL_VERTEX_SUBROUTINE 0x92E8 #define GL_TESS_CONTROL_SUBROUTINE 0x92E9 #define GL_TESS_EVALUATION_SUBROUTINE 0x92EA #define GL_GEOMETRY_SUBROUTINE 0x92EB #define GL_FRAGMENT_SUBROUTINE 0x92EC #define GL_COMPUTE_SUBROUTINE 0x92ED #define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE #define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF #define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 #define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 #define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 #define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 #define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 #define GL_ACTIVE_RESOURCES 0x92F5 #define GL_MAX_NAME_LENGTH 0x92F6 #define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 #define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 #define GL_NAME_LENGTH 0x92F9 #define GL_TYPE 0x92FA #define GL_ARRAY_SIZE 0x92FB #define GL_OFFSET 0x92FC #define GL_BLOCK_INDEX 0x92FD #define GL_ARRAY_STRIDE 0x92FE #define GL_MATRIX_STRIDE 0x92FF #define GL_IS_ROW_MAJOR 0x9300 #define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 #define GL_BUFFER_BINDING 0x9302 #define GL_BUFFER_DATA_SIZE 0x9303 #define GL_NUM_ACTIVE_VARIABLES 0x9304 #define GL_ACTIVE_VARIABLES 0x9305 #define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 #define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 #define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A #define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B #define GL_TOP_LEVEL_ARRAY_SIZE 0x930C #define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D #define GL_LOCATION 0x930E #define GL_LOCATION_INDEX 0x930F typedef void(GLAPIENTRY * PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); typedef GLuint(GLAPIENTRY * PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); typedef GLint(GLAPIENTRY * PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar * name); typedef GLint(GLAPIENTRY * PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); typedef void(GLAPIENTRY * PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); typedef void(GLAPIENTRY * PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); #define glGetProgramInterfaceiv GLEW_GET_FUN(__glewGetProgramInterfaceiv) #define glGetProgramResourceIndex GLEW_GET_FUN(__glewGetProgramResourceIndex) #define glGetProgramResourceLocation GLEW_GET_FUN(__glewGetProgramResourceLocation) #define glGetProgramResourceLocationIndex GLEW_GET_FUN(__glewGetProgramResourceLocationIndex) #define glGetProgramResourceName GLEW_GET_FUN(__glewGetProgramResourceName) #define glGetProgramResourceiv GLEW_GET_FUN(__glewGetProgramResourceiv) #define GLEW_ARB_program_interface_query GLEW_GET_VAR(__GLEW_ARB_program_interface_query) #endif /* GL_ARB_program_interface_query */ /* ------------------------ GL_ARB_provoking_vertex ------------------------ */ #ifndef GL_ARB_provoking_vertex #define GL_ARB_provoking_vertex 1 #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F typedef void(GLAPIENTRY * PFNGLPROVOKINGVERTEXPROC)(GLenum mode); #define glProvokingVertex GLEW_GET_FUN(__glewProvokingVertex) #define GLEW_ARB_provoking_vertex GLEW_GET_VAR(__GLEW_ARB_provoking_vertex) #endif /* GL_ARB_provoking_vertex */ /* ------------------ GL_ARB_robust_buffer_access_behavior ----------------- */ #ifndef GL_ARB_robust_buffer_access_behavior #define GL_ARB_robust_buffer_access_behavior 1 #define GLEW_ARB_robust_buffer_access_behavior GLEW_GET_VAR(__GLEW_ARB_robust_buffer_access_behavior) #endif /* GL_ARB_robust_buffer_access_behavior */ /* --------------------------- GL_ARB_robustness --------------------------- */ #ifndef GL_ARB_robustness #define GL_ARB_robustness 1 #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 #define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 typedef GLenum(GLAPIENTRY * PFNGLGETGRAPHICSRESETSTATUSARBPROC)(void); typedef void(GLAPIENTRY * PFNGLGETNCOLORTABLEARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); typedef void(GLAPIENTRY * PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, GLsizei bufSize, void * img); typedef void(GLAPIENTRY * PFNGLGETNCONVOLUTIONFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); typedef void(GLAPIENTRY * PFNGLGETNHISTOGRAMARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); typedef void(GLAPIENTRY * PFNGLGETNMAPDVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); typedef void(GLAPIENTRY * PFNGLGETNMAPFVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); typedef void(GLAPIENTRY * PFNGLGETNMAPIVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); typedef void(GLAPIENTRY * PFNGLGETNMINMAXARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); typedef void(GLAPIENTRY * PFNGLGETNPIXELMAPFVARBPROC)(GLenum map, GLsizei bufSize, GLfloat * values); typedef void(GLAPIENTRY * PFNGLGETNPIXELMAPUIVARBPROC)(GLenum map, GLsizei bufSize, GLuint * values); typedef void(GLAPIENTRY * PFNGLGETNPIXELMAPUSVARBPROC)(GLenum map, GLsizei bufSize, GLushort * values); typedef void(GLAPIENTRY * PFNGLGETNPOLYGONSTIPPLEARBPROC)(GLsizei bufSize, GLubyte * pattern); typedef void(GLAPIENTRY * PFNGLGETNSEPARABLEFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, GLvoid * column, GLvoid * span); typedef void(GLAPIENTRY * PFNGLGETNTEXIMAGEARBPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img); typedef void(GLAPIENTRY * PFNGLGETNUNIFORMDVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETNUNIFORMFVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETNUNIFORMIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); typedef void(GLAPIENTRY * PFNGLGETNUNIFORMUIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); typedef void(GLAPIENTRY * PFNGLREADNPIXELSARBPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); #define glGetGraphicsResetStatusARB GLEW_GET_FUN(__glewGetGraphicsResetStatusARB) #define glGetnColorTableARB GLEW_GET_FUN(__glewGetnColorTableARB) #define glGetnCompressedTexImageARB GLEW_GET_FUN(__glewGetnCompressedTexImageARB) #define glGetnConvolutionFilterARB GLEW_GET_FUN(__glewGetnConvolutionFilterARB) #define glGetnHistogramARB GLEW_GET_FUN(__glewGetnHistogramARB) #define glGetnMapdvARB GLEW_GET_FUN(__glewGetnMapdvARB) #define glGetnMapfvARB GLEW_GET_FUN(__glewGetnMapfvARB) #define glGetnMapivARB GLEW_GET_FUN(__glewGetnMapivARB) #define glGetnMinmaxARB GLEW_GET_FUN(__glewGetnMinmaxARB) #define glGetnPixelMapfvARB GLEW_GET_FUN(__glewGetnPixelMapfvARB) #define glGetnPixelMapuivARB GLEW_GET_FUN(__glewGetnPixelMapuivARB) #define glGetnPixelMapusvARB GLEW_GET_FUN(__glewGetnPixelMapusvARB) #define glGetnPolygonStippleARB GLEW_GET_FUN(__glewGetnPolygonStippleARB) #define glGetnSeparableFilterARB GLEW_GET_FUN(__glewGetnSeparableFilterARB) #define glGetnTexImageARB GLEW_GET_FUN(__glewGetnTexImageARB) #define glGetnUniformdvARB GLEW_GET_FUN(__glewGetnUniformdvARB) #define glGetnUniformfvARB GLEW_GET_FUN(__glewGetnUniformfvARB) #define glGetnUniformivARB GLEW_GET_FUN(__glewGetnUniformivARB) #define glGetnUniformuivARB GLEW_GET_FUN(__glewGetnUniformuivARB) #define glReadnPixelsARB GLEW_GET_FUN(__glewReadnPixelsARB) #define GLEW_ARB_robustness GLEW_GET_VAR(__GLEW_ARB_robustness) #endif /* GL_ARB_robustness */ /* ---------------- GL_ARB_robustness_application_isolation ---------------- */ #ifndef GL_ARB_robustness_application_isolation #define GL_ARB_robustness_application_isolation 1 #define GLEW_ARB_robustness_application_isolation GLEW_GET_VAR(__GLEW_ARB_robustness_application_isolation) #endif /* GL_ARB_robustness_application_isolation */ /* ---------------- GL_ARB_robustness_share_group_isolation ---------------- */ #ifndef GL_ARB_robustness_share_group_isolation #define GL_ARB_robustness_share_group_isolation 1 #define GLEW_ARB_robustness_share_group_isolation GLEW_GET_VAR(__GLEW_ARB_robustness_share_group_isolation) #endif /* GL_ARB_robustness_share_group_isolation */ /* ------------------------- GL_ARB_sample_shading ------------------------- */ #ifndef GL_ARB_sample_shading #define GL_ARB_sample_shading 1 #define GL_SAMPLE_SHADING_ARB 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 typedef void(GLAPIENTRY * PFNGLMINSAMPLESHADINGARBPROC)(GLclampf value); #define glMinSampleShadingARB GLEW_GET_FUN(__glewMinSampleShadingARB) #define GLEW_ARB_sample_shading GLEW_GET_VAR(__GLEW_ARB_sample_shading) #endif /* GL_ARB_sample_shading */ /* ------------------------- GL_ARB_sampler_objects ------------------------ */ #ifndef GL_ARB_sampler_objects #define GL_ARB_sampler_objects 1 #define GL_SAMPLER_BINDING 0x8919 typedef void(GLAPIENTRY * PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); typedef void(GLAPIENTRY * PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint * samplers); typedef void(GLAPIENTRY * PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint * samplers); typedef void(GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISSAMPLERPROC)(GLuint sampler); typedef void(GLAPIENTRY * PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint * params); typedef void(GLAPIENTRY * PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint * params); #define glBindSampler GLEW_GET_FUN(__glewBindSampler) #define glDeleteSamplers GLEW_GET_FUN(__glewDeleteSamplers) #define glGenSamplers GLEW_GET_FUN(__glewGenSamplers) #define glGetSamplerParameterIiv GLEW_GET_FUN(__glewGetSamplerParameterIiv) #define glGetSamplerParameterIuiv GLEW_GET_FUN(__glewGetSamplerParameterIuiv) #define glGetSamplerParameterfv GLEW_GET_FUN(__glewGetSamplerParameterfv) #define glGetSamplerParameteriv GLEW_GET_FUN(__glewGetSamplerParameteriv) #define glIsSampler GLEW_GET_FUN(__glewIsSampler) #define glSamplerParameterIiv GLEW_GET_FUN(__glewSamplerParameterIiv) #define glSamplerParameterIuiv GLEW_GET_FUN(__glewSamplerParameterIuiv) #define glSamplerParameterf GLEW_GET_FUN(__glewSamplerParameterf) #define glSamplerParameterfv GLEW_GET_FUN(__glewSamplerParameterfv) #define glSamplerParameteri GLEW_GET_FUN(__glewSamplerParameteri) #define glSamplerParameteriv GLEW_GET_FUN(__glewSamplerParameteriv) #define GLEW_ARB_sampler_objects GLEW_GET_VAR(__GLEW_ARB_sampler_objects) #endif /* GL_ARB_sampler_objects */ /* ------------------------ GL_ARB_seamless_cube_map ----------------------- */ #ifndef GL_ARB_seamless_cube_map #define GL_ARB_seamless_cube_map 1 #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #define GLEW_ARB_seamless_cube_map GLEW_GET_VAR(__GLEW_ARB_seamless_cube_map) #endif /* GL_ARB_seamless_cube_map */ /* --------------------- GL_ARB_separate_shader_objects -------------------- */ #ifndef GL_ARB_separate_shader_objects #define GL_ARB_separate_shader_objects 1 #define GL_VERTEX_SHADER_BIT 0x00000001 #define GL_FRAGMENT_SHADER_BIT 0x00000002 #define GL_GEOMETRY_SHADER_BIT 0x00000004 #define GL_TESS_CONTROL_SHADER_BIT 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 #define GL_PROGRAM_SEPARABLE 0x8258 #define GL_ACTIVE_PROGRAM 0x8259 #define GL_PROGRAM_PIPELINE_BINDING 0x825A #define GL_ALL_SHADER_BITS 0xFFFFFFFF typedef void(GLAPIENTRY * PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); typedef void(GLAPIENTRY * PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); typedef GLuint(GLAPIENTRY * PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar ** strings); typedef void(GLAPIENTRY * PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint * pipelines); typedef void(GLAPIENTRY * PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint * pipelines); typedef void(GLAPIENTRY * PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); typedef void(GLAPIENTRY * PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble x); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat x); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint x); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint x); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint x, GLint y); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint x, GLuint y); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint x, GLint y, GLint z); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint x, GLuint y, GLuint z); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program); typedef void(GLAPIENTRY * PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); #define glActiveShaderProgram GLEW_GET_FUN(__glewActiveShaderProgram) #define glBindProgramPipeline GLEW_GET_FUN(__glewBindProgramPipeline) #define glCreateShaderProgramv GLEW_GET_FUN(__glewCreateShaderProgramv) #define glDeleteProgramPipelines GLEW_GET_FUN(__glewDeleteProgramPipelines) #define glGenProgramPipelines GLEW_GET_FUN(__glewGenProgramPipelines) #define glGetProgramPipelineInfoLog GLEW_GET_FUN(__glewGetProgramPipelineInfoLog) #define glGetProgramPipelineiv GLEW_GET_FUN(__glewGetProgramPipelineiv) #define glIsProgramPipeline GLEW_GET_FUN(__glewIsProgramPipeline) #define glProgramUniform1d GLEW_GET_FUN(__glewProgramUniform1d) #define glProgramUniform1dv GLEW_GET_FUN(__glewProgramUniform1dv) #define glProgramUniform1f GLEW_GET_FUN(__glewProgramUniform1f) #define glProgramUniform1fv GLEW_GET_FUN(__glewProgramUniform1fv) #define glProgramUniform1i GLEW_GET_FUN(__glewProgramUniform1i) #define glProgramUniform1iv GLEW_GET_FUN(__glewProgramUniform1iv) #define glProgramUniform1ui GLEW_GET_FUN(__glewProgramUniform1ui) #define glProgramUniform1uiv GLEW_GET_FUN(__glewProgramUniform1uiv) #define glProgramUniform2d GLEW_GET_FUN(__glewProgramUniform2d) #define glProgramUniform2dv GLEW_GET_FUN(__glewProgramUniform2dv) #define glProgramUniform2f GLEW_GET_FUN(__glewProgramUniform2f) #define glProgramUniform2fv GLEW_GET_FUN(__glewProgramUniform2fv) #define glProgramUniform2i GLEW_GET_FUN(__glewProgramUniform2i) #define glProgramUniform2iv GLEW_GET_FUN(__glewProgramUniform2iv) #define glProgramUniform2ui GLEW_GET_FUN(__glewProgramUniform2ui) #define glProgramUniform2uiv GLEW_GET_FUN(__glewProgramUniform2uiv) #define glProgramUniform3d GLEW_GET_FUN(__glewProgramUniform3d) #define glProgramUniform3dv GLEW_GET_FUN(__glewProgramUniform3dv) #define glProgramUniform3f GLEW_GET_FUN(__glewProgramUniform3f) #define glProgramUniform3fv GLEW_GET_FUN(__glewProgramUniform3fv) #define glProgramUniform3i GLEW_GET_FUN(__glewProgramUniform3i) #define glProgramUniform3iv GLEW_GET_FUN(__glewProgramUniform3iv) #define glProgramUniform3ui GLEW_GET_FUN(__glewProgramUniform3ui) #define glProgramUniform3uiv GLEW_GET_FUN(__glewProgramUniform3uiv) #define glProgramUniform4d GLEW_GET_FUN(__glewProgramUniform4d) #define glProgramUniform4dv GLEW_GET_FUN(__glewProgramUniform4dv) #define glProgramUniform4f GLEW_GET_FUN(__glewProgramUniform4f) #define glProgramUniform4fv GLEW_GET_FUN(__glewProgramUniform4fv) #define glProgramUniform4i GLEW_GET_FUN(__glewProgramUniform4i) #define glProgramUniform4iv GLEW_GET_FUN(__glewProgramUniform4iv) #define glProgramUniform4ui GLEW_GET_FUN(__glewProgramUniform4ui) #define glProgramUniform4uiv GLEW_GET_FUN(__glewProgramUniform4uiv) #define glProgramUniformMatrix2dv GLEW_GET_FUN(__glewProgramUniformMatrix2dv) #define glProgramUniformMatrix2fv GLEW_GET_FUN(__glewProgramUniformMatrix2fv) #define glProgramUniformMatrix2x3dv GLEW_GET_FUN(__glewProgramUniformMatrix2x3dv) #define glProgramUniformMatrix2x3fv GLEW_GET_FUN(__glewProgramUniformMatrix2x3fv) #define glProgramUniformMatrix2x4dv GLEW_GET_FUN(__glewProgramUniformMatrix2x4dv) #define glProgramUniformMatrix2x4fv GLEW_GET_FUN(__glewProgramUniformMatrix2x4fv) #define glProgramUniformMatrix3dv GLEW_GET_FUN(__glewProgramUniformMatrix3dv) #define glProgramUniformMatrix3fv GLEW_GET_FUN(__glewProgramUniformMatrix3fv) #define glProgramUniformMatrix3x2dv GLEW_GET_FUN(__glewProgramUniformMatrix3x2dv) #define glProgramUniformMatrix3x2fv GLEW_GET_FUN(__glewProgramUniformMatrix3x2fv) #define glProgramUniformMatrix3x4dv GLEW_GET_FUN(__glewProgramUniformMatrix3x4dv) #define glProgramUniformMatrix3x4fv GLEW_GET_FUN(__glewProgramUniformMatrix3x4fv) #define glProgramUniformMatrix4dv GLEW_GET_FUN(__glewProgramUniformMatrix4dv) #define glProgramUniformMatrix4fv GLEW_GET_FUN(__glewProgramUniformMatrix4fv) #define glProgramUniformMatrix4x2dv GLEW_GET_FUN(__glewProgramUniformMatrix4x2dv) #define glProgramUniformMatrix4x2fv GLEW_GET_FUN(__glewProgramUniformMatrix4x2fv) #define glProgramUniformMatrix4x3dv GLEW_GET_FUN(__glewProgramUniformMatrix4x3dv) #define glProgramUniformMatrix4x3fv GLEW_GET_FUN(__glewProgramUniformMatrix4x3fv) #define glUseProgramStages GLEW_GET_FUN(__glewUseProgramStages) #define glValidateProgramPipeline GLEW_GET_FUN(__glewValidateProgramPipeline) #define GLEW_ARB_separate_shader_objects GLEW_GET_VAR(__GLEW_ARB_separate_shader_objects) #endif /* GL_ARB_separate_shader_objects */ /* --------------------- GL_ARB_shader_atomic_counters --------------------- */ #ifndef GL_ARB_shader_atomic_counters #define GL_ARB_shader_atomic_counters 1 #define GL_ATOMIC_COUNTER_BUFFER 0x92C0 #define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 #define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 #define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 #define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB #define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF #define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 #define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 #define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 #define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 #define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 #define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 #define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 #define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA #define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB #define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC typedef void(GLAPIENTRY * PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); #define glGetActiveAtomicCounterBufferiv GLEW_GET_FUN(__glewGetActiveAtomicCounterBufferiv) #define GLEW_ARB_shader_atomic_counters GLEW_GET_VAR(__GLEW_ARB_shader_atomic_counters) #endif /* GL_ARB_shader_atomic_counters */ /* ----------------------- GL_ARB_shader_bit_encoding ---------------------- */ #ifndef GL_ARB_shader_bit_encoding #define GL_ARB_shader_bit_encoding 1 #define GLEW_ARB_shader_bit_encoding GLEW_GET_VAR(__GLEW_ARB_shader_bit_encoding) #endif /* GL_ARB_shader_bit_encoding */ /* --------------------- GL_ARB_shader_image_load_store -------------------- */ #ifndef GL_ARB_shader_image_load_store #define GL_ARB_shader_image_load_store 1 #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 #define GL_UNIFORM_BARRIER_BIT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 #define GL_COMMAND_BARRIER_BIT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 #define GL_MAX_IMAGE_UNITS 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 #define GL_IMAGE_BINDING_NAME 0x8F3A #define GL_IMAGE_BINDING_LEVEL 0x8F3B #define GL_IMAGE_BINDING_LAYERED 0x8F3C #define GL_IMAGE_BINDING_LAYER 0x8F3D #define GL_IMAGE_BINDING_ACCESS 0x8F3E #define GL_IMAGE_1D 0x904C #define GL_IMAGE_2D 0x904D #define GL_IMAGE_3D 0x904E #define GL_IMAGE_2D_RECT 0x904F #define GL_IMAGE_CUBE 0x9050 #define GL_IMAGE_BUFFER 0x9051 #define GL_IMAGE_1D_ARRAY 0x9052 #define GL_IMAGE_2D_ARRAY 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 #define GL_IMAGE_2D_MULTISAMPLE 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 #define GL_INT_IMAGE_1D 0x9057 #define GL_INT_IMAGE_2D 0x9058 #define GL_INT_IMAGE_3D 0x9059 #define GL_INT_IMAGE_2D_RECT 0x905A #define GL_INT_IMAGE_CUBE 0x905B #define GL_INT_IMAGE_BUFFER 0x905C #define GL_INT_IMAGE_1D_ARRAY 0x905D #define GL_INT_IMAGE_2D_ARRAY 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C #define GL_MAX_IMAGE_SAMPLES 0x906D #define GL_IMAGE_BINDING_FORMAT 0x906E #define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 #define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD #define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE #define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF #define GL_ALL_BARRIER_BITS 0xFFFFFFFF typedef void(GLAPIENTRY * PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); typedef void(GLAPIENTRY * PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); #define glBindImageTexture GLEW_GET_FUN(__glewBindImageTexture) #define glMemoryBarrier GLEW_GET_FUN(__glewMemoryBarrier) #define GLEW_ARB_shader_image_load_store GLEW_GET_VAR(__GLEW_ARB_shader_image_load_store) #endif /* GL_ARB_shader_image_load_store */ /* ------------------------ GL_ARB_shader_image_size ----------------------- */ #ifndef GL_ARB_shader_image_size #define GL_ARB_shader_image_size 1 #define GLEW_ARB_shader_image_size GLEW_GET_VAR(__GLEW_ARB_shader_image_size) #endif /* GL_ARB_shader_image_size */ /* ------------------------- GL_ARB_shader_objects ------------------------- */ #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #define GL_PROGRAM_OBJECT_ARB 0x8B40 #define GL_SHADER_OBJECT_ARB 0x8B48 #define GL_OBJECT_TYPE_ARB 0x8B4E #define GL_OBJECT_SUBTYPE_ARB 0x8B4F #define GL_FLOAT_VEC2_ARB 0x8B50 #define GL_FLOAT_VEC3_ARB 0x8B51 #define GL_FLOAT_VEC4_ARB 0x8B52 #define GL_INT_VEC2_ARB 0x8B53 #define GL_INT_VEC3_ARB 0x8B54 #define GL_INT_VEC4_ARB 0x8B55 #define GL_BOOL_ARB 0x8B56 #define GL_BOOL_VEC2_ARB 0x8B57 #define GL_BOOL_VEC3_ARB 0x8B58 #define GL_BOOL_VEC4_ARB 0x8B59 #define GL_FLOAT_MAT2_ARB 0x8B5A #define GL_FLOAT_MAT3_ARB 0x8B5B #define GL_FLOAT_MAT4_ARB 0x8B5C #define GL_SAMPLER_1D_ARB 0x8B5D #define GL_SAMPLER_2D_ARB 0x8B5E #define GL_SAMPLER_3D_ARB 0x8B5F #define GL_SAMPLER_CUBE_ARB 0x8B60 #define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 #define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 #define GL_SAMPLER_2D_RECT_ARB 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82 #define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 #define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 #define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 #define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 #define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 #define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 typedef char GLcharARB; typedef unsigned int GLhandleARB; typedef void(GLAPIENTRY * PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj); typedef void(GLAPIENTRY * PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj); typedef GLhandleARB(GLAPIENTRY * PFNGLCREATEPROGRAMOBJECTARBPROC)(void); typedef GLhandleARB(GLAPIENTRY * PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType); typedef void(GLAPIENTRY * PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj); typedef void(GLAPIENTRY * PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj); typedef void(GLAPIENTRY * PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); typedef void(GLAPIENTRY * PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); typedef GLhandleARB(GLAPIENTRY * PFNGLGETHANDLEARBPROC)(GLenum pname); typedef void(GLAPIENTRY * PFNGLGETINFOLOGARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); typedef void(GLAPIENTRY * PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); typedef GLint(GLAPIENTRY * PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); typedef void(GLAPIENTRY * PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint * params); typedef void(GLAPIENTRY * PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj); typedef void(GLAPIENTRY * PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); typedef void(GLAPIENTRY * PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0); typedef void(GLAPIENTRY * PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0); typedef void(GLAPIENTRY * PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1); typedef void(GLAPIENTRY * PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1); typedef void(GLAPIENTRY * PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void(GLAPIENTRY * PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2); typedef void(GLAPIENTRY * PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void(GLAPIENTRY * PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void(GLAPIENTRY * PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj); typedef void(GLAPIENTRY * PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj); #define glAttachObjectARB GLEW_GET_FUN(__glewAttachObjectARB) #define glCompileShaderARB GLEW_GET_FUN(__glewCompileShaderARB) #define glCreateProgramObjectARB GLEW_GET_FUN(__glewCreateProgramObjectARB) #define glCreateShaderObjectARB GLEW_GET_FUN(__glewCreateShaderObjectARB) #define glDeleteObjectARB GLEW_GET_FUN(__glewDeleteObjectARB) #define glDetachObjectARB GLEW_GET_FUN(__glewDetachObjectARB) #define glGetActiveUniformARB GLEW_GET_FUN(__glewGetActiveUniformARB) #define glGetAttachedObjectsARB GLEW_GET_FUN(__glewGetAttachedObjectsARB) #define glGetHandleARB GLEW_GET_FUN(__glewGetHandleARB) #define glGetInfoLogARB GLEW_GET_FUN(__glewGetInfoLogARB) #define glGetObjectParameterfvARB GLEW_GET_FUN(__glewGetObjectParameterfvARB) #define glGetObjectParameterivARB GLEW_GET_FUN(__glewGetObjectParameterivARB) #define glGetShaderSourceARB GLEW_GET_FUN(__glewGetShaderSourceARB) #define glGetUniformLocationARB GLEW_GET_FUN(__glewGetUniformLocationARB) #define glGetUniformfvARB GLEW_GET_FUN(__glewGetUniformfvARB) #define glGetUniformivARB GLEW_GET_FUN(__glewGetUniformivARB) #define glLinkProgramARB GLEW_GET_FUN(__glewLinkProgramARB) #define glShaderSourceARB GLEW_GET_FUN(__glewShaderSourceARB) #define glUniform1fARB GLEW_GET_FUN(__glewUniform1fARB) #define glUniform1fvARB GLEW_GET_FUN(__glewUniform1fvARB) #define glUniform1iARB GLEW_GET_FUN(__glewUniform1iARB) #define glUniform1ivARB GLEW_GET_FUN(__glewUniform1ivARB) #define glUniform2fARB GLEW_GET_FUN(__glewUniform2fARB) #define glUniform2fvARB GLEW_GET_FUN(__glewUniform2fvARB) #define glUniform2iARB GLEW_GET_FUN(__glewUniform2iARB) #define glUniform2ivARB GLEW_GET_FUN(__glewUniform2ivARB) #define glUniform3fARB GLEW_GET_FUN(__glewUniform3fARB) #define glUniform3fvARB GLEW_GET_FUN(__glewUniform3fvARB) #define glUniform3iARB GLEW_GET_FUN(__glewUniform3iARB) #define glUniform3ivARB GLEW_GET_FUN(__glewUniform3ivARB) #define glUniform4fARB GLEW_GET_FUN(__glewUniform4fARB) #define glUniform4fvARB GLEW_GET_FUN(__glewUniform4fvARB) #define glUniform4iARB GLEW_GET_FUN(__glewUniform4iARB) #define glUniform4ivARB GLEW_GET_FUN(__glewUniform4ivARB) #define glUniformMatrix2fvARB GLEW_GET_FUN(__glewUniformMatrix2fvARB) #define glUniformMatrix3fvARB GLEW_GET_FUN(__glewUniformMatrix3fvARB) #define glUniformMatrix4fvARB GLEW_GET_FUN(__glewUniformMatrix4fvARB) #define glUseProgramObjectARB GLEW_GET_FUN(__glewUseProgramObjectARB) #define glValidateProgramARB GLEW_GET_FUN(__glewValidateProgramARB) #define GLEW_ARB_shader_objects GLEW_GET_VAR(__GLEW_ARB_shader_objects) #endif /* GL_ARB_shader_objects */ /* ------------------------ GL_ARB_shader_precision ------------------------ */ #ifndef GL_ARB_shader_precision #define GL_ARB_shader_precision 1 #define GLEW_ARB_shader_precision GLEW_GET_VAR(__GLEW_ARB_shader_precision) #endif /* GL_ARB_shader_precision */ /* ---------------------- GL_ARB_shader_stencil_export --------------------- */ #ifndef GL_ARB_shader_stencil_export #define GL_ARB_shader_stencil_export 1 #define GLEW_ARB_shader_stencil_export GLEW_GET_VAR(__GLEW_ARB_shader_stencil_export) #endif /* GL_ARB_shader_stencil_export */ /* ------------------ GL_ARB_shader_storage_buffer_object ------------------ */ #ifndef GL_ARB_shader_storage_buffer_object #define GL_ARB_shader_storage_buffer_object 1 #define GL_SHADER_STORAGE_BARRIER_BIT 0x2000 #define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 #define GL_SHADER_STORAGE_BUFFER 0x90D2 #define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 #define GL_SHADER_STORAGE_BUFFER_START 0x90D4 #define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 #define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 #define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA #define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB #define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC #define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD #define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE #define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF typedef void(GLAPIENTRY * PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); #define glShaderStorageBlockBinding GLEW_GET_FUN(__glewShaderStorageBlockBinding) #define GLEW_ARB_shader_storage_buffer_object GLEW_GET_VAR(__GLEW_ARB_shader_storage_buffer_object) #endif /* GL_ARB_shader_storage_buffer_object */ /* ------------------------ GL_ARB_shader_subroutine ----------------------- */ #ifndef GL_ARB_shader_subroutine #define GL_ARB_shader_subroutine 1 #define GL_ACTIVE_SUBROUTINES 0x8DE5 #define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 #define GL_MAX_SUBROUTINES 0x8DE7 #define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 #define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 #define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 #define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 #define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A #define GL_COMPATIBLE_SUBROUTINES 0x8E4B typedef void(GLAPIENTRY * PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); typedef void(GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); typedef void(GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values); typedef void(GLAPIENTRY * PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint * values); typedef GLuint(GLAPIENTRY * PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar * name); typedef GLint(GLAPIENTRY * PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar * name); typedef void(GLAPIENTRY * PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint * params); typedef void(GLAPIENTRY * PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint * indices); #define glGetActiveSubroutineName GLEW_GET_FUN(__glewGetActiveSubroutineName) #define glGetActiveSubroutineUniformName GLEW_GET_FUN(__glewGetActiveSubroutineUniformName) #define glGetActiveSubroutineUniformiv GLEW_GET_FUN(__glewGetActiveSubroutineUniformiv) #define glGetProgramStageiv GLEW_GET_FUN(__glewGetProgramStageiv) #define glGetSubroutineIndex GLEW_GET_FUN(__glewGetSubroutineIndex) #define glGetSubroutineUniformLocation GLEW_GET_FUN(__glewGetSubroutineUniformLocation) #define glGetUniformSubroutineuiv GLEW_GET_FUN(__glewGetUniformSubroutineuiv) #define glUniformSubroutinesuiv GLEW_GET_FUN(__glewUniformSubroutinesuiv) #define GLEW_ARB_shader_subroutine GLEW_GET_VAR(__GLEW_ARB_shader_subroutine) #endif /* GL_ARB_shader_subroutine */ /* ----------------------- GL_ARB_shader_texture_lod ----------------------- */ #ifndef GL_ARB_shader_texture_lod #define GL_ARB_shader_texture_lod 1 #define GLEW_ARB_shader_texture_lod GLEW_GET_VAR(__GLEW_ARB_shader_texture_lod) #endif /* GL_ARB_shader_texture_lod */ /* ---------------------- GL_ARB_shading_language_100 ---------------------- */ #ifndef GL_ARB_shading_language_100 #define GL_ARB_shading_language_100 1 #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #define GLEW_ARB_shading_language_100 GLEW_GET_VAR(__GLEW_ARB_shading_language_100) #endif /* GL_ARB_shading_language_100 */ /* -------------------- GL_ARB_shading_language_420pack -------------------- */ #ifndef GL_ARB_shading_language_420pack #define GL_ARB_shading_language_420pack 1 #define GLEW_ARB_shading_language_420pack GLEW_GET_VAR(__GLEW_ARB_shading_language_420pack) #endif /* GL_ARB_shading_language_420pack */ /* -------------------- GL_ARB_shading_language_include -------------------- */ #ifndef GL_ARB_shading_language_include #define GL_ARB_shading_language_include 1 #define GL_SHADER_INCLUDE_ARB 0x8DAE #define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 #define GL_NAMED_STRING_TYPE_ARB 0x8DEA typedef void(GLAPIENTRY * PFNGLCOMPILESHADERINCLUDEARBPROC)(GLuint shader, GLsizei count, const GLchar ** path, const GLint * length); typedef void(GLAPIENTRY * PFNGLDELETENAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); typedef void(GLAPIENTRY * PFNGLGETNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string); typedef void(GLAPIENTRY * PFNGLGETNAMEDSTRINGIVARBPROC)(GLint namelen, const GLchar * name, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); typedef void(GLAPIENTRY * PFNGLNAMEDSTRINGARBPROC)(GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string); #define glCompileShaderIncludeARB GLEW_GET_FUN(__glewCompileShaderIncludeARB) #define glDeleteNamedStringARB GLEW_GET_FUN(__glewDeleteNamedStringARB) #define glGetNamedStringARB GLEW_GET_FUN(__glewGetNamedStringARB) #define glGetNamedStringivARB GLEW_GET_FUN(__glewGetNamedStringivARB) #define glIsNamedStringARB GLEW_GET_FUN(__glewIsNamedStringARB) #define glNamedStringARB GLEW_GET_FUN(__glewNamedStringARB) #define GLEW_ARB_shading_language_include GLEW_GET_VAR(__GLEW_ARB_shading_language_include) #endif /* GL_ARB_shading_language_include */ /* -------------------- GL_ARB_shading_language_packing -------------------- */ #ifndef GL_ARB_shading_language_packing #define GL_ARB_shading_language_packing 1 #define GLEW_ARB_shading_language_packing GLEW_GET_VAR(__GLEW_ARB_shading_language_packing) #endif /* GL_ARB_shading_language_packing */ /* ----------------------------- GL_ARB_shadow ----------------------------- */ #ifndef GL_ARB_shadow #define GL_ARB_shadow 1 #define GL_TEXTURE_COMPARE_MODE_ARB 0x884C #define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D #define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E #define GLEW_ARB_shadow GLEW_GET_VAR(__GLEW_ARB_shadow) #endif /* GL_ARB_shadow */ /* ------------------------- GL_ARB_shadow_ambient ------------------------- */ #ifndef GL_ARB_shadow_ambient #define GL_ARB_shadow_ambient 1 #define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF #define GLEW_ARB_shadow_ambient GLEW_GET_VAR(__GLEW_ARB_shadow_ambient) #endif /* GL_ARB_shadow_ambient */ /* ------------------------ GL_ARB_stencil_texturing ----------------------- */ #ifndef GL_ARB_stencil_texturing #define GL_ARB_stencil_texturing 1 #define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA #define GLEW_ARB_stencil_texturing GLEW_GET_VAR(__GLEW_ARB_stencil_texturing) #endif /* GL_ARB_stencil_texturing */ /* ------------------------------ GL_ARB_sync ------------------------------ */ #ifndef GL_ARB_sync #define GL_ARB_sync 1 #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF typedef GLenum(GLAPIENTRY * PFNGLCLIENTWAITSYNCPROC)(GLsync GLsync, GLbitfield flags, GLuint64 timeout); typedef void(GLAPIENTRY * PFNGLDELETESYNCPROC)(GLsync GLsync); typedef GLsync(GLAPIENTRY * PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); typedef void(GLAPIENTRY * PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 * params); typedef void(GLAPIENTRY * PFNGLGETSYNCIVPROC)(GLsync GLsync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); typedef GLboolean(GLAPIENTRY * PFNGLISSYNCPROC)(GLsync GLsync); typedef void(GLAPIENTRY * PFNGLWAITSYNCPROC)(GLsync GLsync, GLbitfield flags, GLuint64 timeout); #define glClientWaitSync GLEW_GET_FUN(__glewClientWaitSync) #define glDeleteSync GLEW_GET_FUN(__glewDeleteSync) #define glFenceSync GLEW_GET_FUN(__glewFenceSync) #define glGetInteger64v GLEW_GET_FUN(__glewGetInteger64v) #define glGetSynciv GLEW_GET_FUN(__glewGetSynciv) #define glIsSync GLEW_GET_FUN(__glewIsSync) #define glWaitSync GLEW_GET_FUN(__glewWaitSync) #define GLEW_ARB_sync GLEW_GET_VAR(__GLEW_ARB_sync) #endif /* GL_ARB_sync */ /* ----------------------- GL_ARB_tessellation_shader ---------------------- */ #ifndef GL_ARB_tessellation_shader #define GL_ARB_tessellation_shader 1 #define GL_PATCHES 0xE #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F #define GL_PATCH_VERTICES 0x8E72 #define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 #define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 #define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 #define GL_TESS_GEN_MODE 0x8E76 #define GL_TESS_GEN_SPACING 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER 0x8E78 #define GL_TESS_GEN_POINT_MODE 0x8E79 #define GL_ISOLINES 0x8E7A #define GL_FRACTIONAL_ODD 0x8E7B #define GL_FRACTIONAL_EVEN 0x8E7C #define GL_MAX_PATCH_VERTICES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 #define GL_TESS_EVALUATION_SHADER 0x8E87 #define GL_TESS_CONTROL_SHADER 0x8E88 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A typedef void(GLAPIENTRY * PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat * values); typedef void(GLAPIENTRY * PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); #define glPatchParameterfv GLEW_GET_FUN(__glewPatchParameterfv) #define glPatchParameteri GLEW_GET_FUN(__glewPatchParameteri) #define GLEW_ARB_tessellation_shader GLEW_GET_VAR(__GLEW_ARB_tessellation_shader) #endif /* GL_ARB_tessellation_shader */ /* ---------------------- GL_ARB_texture_border_clamp ---------------------- */ #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #define GL_CLAMP_TO_BORDER_ARB 0x812D #define GLEW_ARB_texture_border_clamp GLEW_GET_VAR(__GLEW_ARB_texture_border_clamp) #endif /* GL_ARB_texture_border_clamp */ /* ---------------------- GL_ARB_texture_buffer_object --------------------- */ #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #define GL_TEXTURE_BUFFER_ARB 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E typedef void(GLAPIENTRY * PFNGLTEXBUFFERARBPROC)(GLenum target, GLenum internalformat, GLuint buffer); #define glTexBufferARB GLEW_GET_FUN(__glewTexBufferARB) #define GLEW_ARB_texture_buffer_object GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object) #endif /* GL_ARB_texture_buffer_object */ /* ------------------- GL_ARB_texture_buffer_object_rgb32 ------------------ */ #ifndef GL_ARB_texture_buffer_object_rgb32 #define GL_ARB_texture_buffer_object_rgb32 1 #define GLEW_ARB_texture_buffer_object_rgb32 GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object_rgb32) #endif /* GL_ARB_texture_buffer_object_rgb32 */ /* ---------------------- GL_ARB_texture_buffer_range ---------------------- */ #ifndef GL_ARB_texture_buffer_range #define GL_ARB_texture_buffer_range 1 #define GL_TEXTURE_BUFFER_OFFSET 0x919D #define GL_TEXTURE_BUFFER_SIZE 0x919E #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F typedef void(GLAPIENTRY * PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void(GLAPIENTRY * PFNGLTEXTUREBUFFERRANGEEXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #define glTexBufferRange GLEW_GET_FUN(__glewTexBufferRange) #define glTextureBufferRangeEXT GLEW_GET_FUN(__glewTextureBufferRangeEXT) #define GLEW_ARB_texture_buffer_range GLEW_GET_VAR(__GLEW_ARB_texture_buffer_range) #endif /* GL_ARB_texture_buffer_range */ /* ----------------------- GL_ARB_texture_compression ---------------------- */ #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #define GL_COMPRESSED_ALPHA_ARB 0x84E9 #define GL_COMPRESSED_LUMINANCE_ARB 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB #define GL_COMPRESSED_INTENSITY_ARB 0x84EC #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)(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(GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, void * img); #define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB) #define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB) #define glCompressedTexImage3DARB GLEW_GET_FUN(__glewCompressedTexImage3DARB) #define glCompressedTexSubImage1DARB GLEW_GET_FUN(__glewCompressedTexSubImage1DARB) #define glCompressedTexSubImage2DARB GLEW_GET_FUN(__glewCompressedTexSubImage2DARB) #define glCompressedTexSubImage3DARB GLEW_GET_FUN(__glewCompressedTexSubImage3DARB) #define glGetCompressedTexImageARB GLEW_GET_FUN(__glewGetCompressedTexImageARB) #define GLEW_ARB_texture_compression GLEW_GET_VAR(__GLEW_ARB_texture_compression) #endif /* GL_ARB_texture_compression */ /* -------------------- GL_ARB_texture_compression_bptc -------------------- */ #ifndef GL_ARB_texture_compression_bptc #define GL_ARB_texture_compression_bptc 1 #define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F #define GLEW_ARB_texture_compression_bptc GLEW_GET_VAR(__GLEW_ARB_texture_compression_bptc) #endif /* GL_ARB_texture_compression_bptc */ /* -------------------- GL_ARB_texture_compression_rgtc -------------------- */ #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc 1 #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #define GLEW_ARB_texture_compression_rgtc GLEW_GET_VAR(__GLEW_ARB_texture_compression_rgtc) #endif /* GL_ARB_texture_compression_rgtc */ /* ------------------------ GL_ARB_texture_cube_map ------------------------ */ #ifndef GL_ARB_texture_cube_map #define GL_ARB_texture_cube_map 1 #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C #define GLEW_ARB_texture_cube_map GLEW_GET_VAR(__GLEW_ARB_texture_cube_map) #endif /* GL_ARB_texture_cube_map */ /* --------------------- GL_ARB_texture_cube_map_array --------------------- */ #ifndef GL_ARB_texture_cube_map_array #define GL_ARB_texture_cube_map_array 1 #define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F #define GLEW_ARB_texture_cube_map_array GLEW_GET_VAR(__GLEW_ARB_texture_cube_map_array) #endif /* GL_ARB_texture_cube_map_array */ /* ------------------------- GL_ARB_texture_env_add ------------------------ */ #ifndef GL_ARB_texture_env_add #define GL_ARB_texture_env_add 1 #define GLEW_ARB_texture_env_add GLEW_GET_VAR(__GLEW_ARB_texture_env_add) #endif /* GL_ARB_texture_env_add */ /* ----------------------- GL_ARB_texture_env_combine ---------------------- */ #ifndef GL_ARB_texture_env_combine #define GL_ARB_texture_env_combine 1 #define GL_SUBTRACT_ARB 0x84E7 #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 #define GL_RGB_SCALE_ARB 0x8573 #define GL_ADD_SIGNED_ARB 0x8574 #define GL_INTERPOLATE_ARB 0x8575 #define GL_CONSTANT_ARB 0x8576 #define GL_PRIMARY_COLOR_ARB 0x8577 #define GL_PREVIOUS_ARB 0x8578 #define GL_SOURCE0_RGB_ARB 0x8580 #define GL_SOURCE1_RGB_ARB 0x8581 #define GL_SOURCE2_RGB_ARB 0x8582 #define GL_SOURCE0_ALPHA_ARB 0x8588 #define GL_SOURCE1_ALPHA_ARB 0x8589 #define GL_SOURCE2_ALPHA_ARB 0x858A #define GL_OPERAND0_RGB_ARB 0x8590 #define GL_OPERAND1_RGB_ARB 0x8591 #define GL_OPERAND2_RGB_ARB 0x8592 #define GL_OPERAND0_ALPHA_ARB 0x8598 #define GL_OPERAND1_ALPHA_ARB 0x8599 #define GL_OPERAND2_ALPHA_ARB 0x859A #define GLEW_ARB_texture_env_combine GLEW_GET_VAR(__GLEW_ARB_texture_env_combine) #endif /* GL_ARB_texture_env_combine */ /* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */ #ifndef GL_ARB_texture_env_crossbar #define GL_ARB_texture_env_crossbar 1 #define GLEW_ARB_texture_env_crossbar GLEW_GET_VAR(__GLEW_ARB_texture_env_crossbar) #endif /* GL_ARB_texture_env_crossbar */ /* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */ #ifndef GL_ARB_texture_env_dot3 #define GL_ARB_texture_env_dot3 1 #define GL_DOT3_RGB_ARB 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF #define GLEW_ARB_texture_env_dot3 GLEW_GET_VAR(__GLEW_ARB_texture_env_dot3) #endif /* GL_ARB_texture_env_dot3 */ /* -------------------------- GL_ARB_texture_float ------------------------- */ #ifndef GL_ARB_texture_float #define GL_ARB_texture_float 1 #define GL_RGBA32F_ARB 0x8814 #define GL_RGB32F_ARB 0x8815 #define GL_ALPHA32F_ARB 0x8816 #define GL_INTENSITY32F_ARB 0x8817 #define GL_LUMINANCE32F_ARB 0x8818 #define GL_LUMINANCE_ALPHA32F_ARB 0x8819 #define GL_RGBA16F_ARB 0x881A #define GL_RGB16F_ARB 0x881B #define GL_ALPHA16F_ARB 0x881C #define GL_INTENSITY16F_ARB 0x881D #define GL_LUMINANCE16F_ARB 0x881E #define GL_LUMINANCE_ALPHA16F_ARB 0x881F #define GL_TEXTURE_RED_TYPE_ARB 0x8C10 #define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 #define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 #define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 #define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 #define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 #define GLEW_ARB_texture_float GLEW_GET_VAR(__GLEW_ARB_texture_float) #endif /* GL_ARB_texture_float */ /* ------------------------- GL_ARB_texture_gather ------------------------- */ #ifndef GL_ARB_texture_gather #define GL_ARB_texture_gather 1 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F #define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F #define GLEW_ARB_texture_gather GLEW_GET_VAR(__GLEW_ARB_texture_gather) #endif /* GL_ARB_texture_gather */ /* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ #ifndef GL_ARB_texture_mirrored_repeat #define GL_ARB_texture_mirrored_repeat 1 #define GL_MIRRORED_REPEAT_ARB 0x8370 #define GLEW_ARB_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_ARB_texture_mirrored_repeat) #endif /* GL_ARB_texture_mirrored_repeat */ /* ----------------------- GL_ARB_texture_multisample ---------------------- */ #ifndef GL_ARB_texture_multisample #define GL_ARB_texture_multisample 1 #define GL_SAMPLE_POSITION 0x8E50 #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 typedef void(GLAPIENTRY * PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat * val); typedef void(GLAPIENTRY * PFNGLSAMPLEMASKIPROC)(GLuint index, GLbitfield mask); typedef void(GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void(GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #define glGetMultisamplefv GLEW_GET_FUN(__glewGetMultisamplefv) #define glSampleMaski GLEW_GET_FUN(__glewSampleMaski) #define glTexImage2DMultisample GLEW_GET_FUN(__glewTexImage2DMultisample) #define glTexImage3DMultisample GLEW_GET_FUN(__glewTexImage3DMultisample) #define GLEW_ARB_texture_multisample GLEW_GET_VAR(__GLEW_ARB_texture_multisample) #endif /* GL_ARB_texture_multisample */ /* -------------------- GL_ARB_texture_non_power_of_two -------------------- */ #ifndef GL_ARB_texture_non_power_of_two #define GL_ARB_texture_non_power_of_two 1 #define GLEW_ARB_texture_non_power_of_two GLEW_GET_VAR(__GLEW_ARB_texture_non_power_of_two) #endif /* GL_ARB_texture_non_power_of_two */ /* ---------------------- GL_ARB_texture_query_levels ---------------------- */ #ifndef GL_ARB_texture_query_levels #define GL_ARB_texture_query_levels 1 #define GLEW_ARB_texture_query_levels GLEW_GET_VAR(__GLEW_ARB_texture_query_levels) #endif /* GL_ARB_texture_query_levels */ /* ------------------------ GL_ARB_texture_query_lod ----------------------- */ #ifndef GL_ARB_texture_query_lod #define GL_ARB_texture_query_lod 1 #define GLEW_ARB_texture_query_lod GLEW_GET_VAR(__GLEW_ARB_texture_query_lod) #endif /* GL_ARB_texture_query_lod */ /* ------------------------ GL_ARB_texture_rectangle ----------------------- */ #ifndef GL_ARB_texture_rectangle #define GL_ARB_texture_rectangle 1 #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 #define GL_SAMPLER_2D_RECT_ARB 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GLEW_ARB_texture_rectangle GLEW_GET_VAR(__GLEW_ARB_texture_rectangle) #endif /* GL_ARB_texture_rectangle */ /* --------------------------- GL_ARB_texture_rg --------------------------- */ #ifndef GL_ARB_texture_rg #define GL_ARB_texture_rg 1 #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #define GLEW_ARB_texture_rg GLEW_GET_VAR(__GLEW_ARB_texture_rg) #endif /* GL_ARB_texture_rg */ /* ----------------------- GL_ARB_texture_rgb10_a2ui ----------------------- */ #ifndef GL_ARB_texture_rgb10_a2ui #define GL_ARB_texture_rgb10_a2ui 1 #define GL_RGB10_A2UI 0x906F #define GLEW_ARB_texture_rgb10_a2ui GLEW_GET_VAR(__GLEW_ARB_texture_rgb10_a2ui) #endif /* GL_ARB_texture_rgb10_a2ui */ /* ------------------------- GL_ARB_texture_storage ------------------------ */ #ifndef GL_ARB_texture_storage #define GL_ARB_texture_storage 1 #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F typedef void(GLAPIENTRY * PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void(GLAPIENTRY * PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void(GLAPIENTRY * PFNGLTEXTURESTORAGE1DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void(GLAPIENTRY * PFNGLTEXTURESTORAGE2DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLTEXTURESTORAGE3DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #define glTexStorage1D GLEW_GET_FUN(__glewTexStorage1D) #define glTexStorage2D GLEW_GET_FUN(__glewTexStorage2D) #define glTexStorage3D GLEW_GET_FUN(__glewTexStorage3D) #define glTextureStorage1DEXT GLEW_GET_FUN(__glewTextureStorage1DEXT) #define glTextureStorage2DEXT GLEW_GET_FUN(__glewTextureStorage2DEXT) #define glTextureStorage3DEXT GLEW_GET_FUN(__glewTextureStorage3DEXT) #define GLEW_ARB_texture_storage GLEW_GET_VAR(__GLEW_ARB_texture_storage) #endif /* GL_ARB_texture_storage */ /* ------------------- GL_ARB_texture_storage_multisample ------------------ */ #ifndef GL_ARB_texture_storage_multisample #define GL_ARB_texture_storage_multisample 1 typedef void(GLAPIENTRY * PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void(GLAPIENTRY * PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void(GLAPIENTRY * PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void(GLAPIENTRY * PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #define glTexStorage2DMultisample GLEW_GET_FUN(__glewTexStorage2DMultisample) #define glTexStorage3DMultisample GLEW_GET_FUN(__glewTexStorage3DMultisample) #define glTextureStorage2DMultisampleEXT GLEW_GET_FUN(__glewTextureStorage2DMultisampleEXT) #define glTextureStorage3DMultisampleEXT GLEW_GET_FUN(__glewTextureStorage3DMultisampleEXT) #define GLEW_ARB_texture_storage_multisample GLEW_GET_VAR(__GLEW_ARB_texture_storage_multisample) #endif /* GL_ARB_texture_storage_multisample */ /* ------------------------- GL_ARB_texture_swizzle ------------------------ */ #ifndef GL_ARB_texture_swizzle #define GL_ARB_texture_swizzle 1 #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #define GLEW_ARB_texture_swizzle GLEW_GET_VAR(__GLEW_ARB_texture_swizzle) #endif /* GL_ARB_texture_swizzle */ /* -------------------------- GL_ARB_texture_view -------------------------- */ #ifndef GL_ARB_texture_view #define GL_ARB_texture_view 1 #define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF typedef void(GLAPIENTRY * PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #define glTextureView GLEW_GET_FUN(__glewTextureView) #define GLEW_ARB_texture_view GLEW_GET_VAR(__GLEW_ARB_texture_view) #endif /* GL_ARB_texture_view */ /* --------------------------- GL_ARB_timer_query -------------------------- */ #ifndef GL_ARB_timer_query #define GL_ARB_timer_query 1 #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 * params); typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 * params); typedef void(GLAPIENTRY * PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); #define glGetQueryObjecti64v GLEW_GET_FUN(__glewGetQueryObjecti64v) #define glGetQueryObjectui64v GLEW_GET_FUN(__glewGetQueryObjectui64v) #define glQueryCounter GLEW_GET_FUN(__glewQueryCounter) #define GLEW_ARB_timer_query GLEW_GET_VAR(__GLEW_ARB_timer_query) #endif /* GL_ARB_timer_query */ /* ----------------------- GL_ARB_transform_feedback2 ---------------------- */ #ifndef GL_ARB_transform_feedback2 #define GL_ARB_transform_feedback2 1 #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 typedef void(GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); typedef void(GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint * ids); typedef void(GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); typedef void(GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint * ids); typedef GLboolean(GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); typedef void(GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); #define glBindTransformFeedback GLEW_GET_FUN(__glewBindTransformFeedback) #define glDeleteTransformFeedbacks GLEW_GET_FUN(__glewDeleteTransformFeedbacks) #define glDrawTransformFeedback GLEW_GET_FUN(__glewDrawTransformFeedback) #define glGenTransformFeedbacks GLEW_GET_FUN(__glewGenTransformFeedbacks) #define glIsTransformFeedback GLEW_GET_FUN(__glewIsTransformFeedback) #define glPauseTransformFeedback GLEW_GET_FUN(__glewPauseTransformFeedback) #define glResumeTransformFeedback GLEW_GET_FUN(__glewResumeTransformFeedback) #define GLEW_ARB_transform_feedback2 GLEW_GET_VAR(__GLEW_ARB_transform_feedback2) #endif /* GL_ARB_transform_feedback2 */ /* ----------------------- GL_ARB_transform_feedback3 ---------------------- */ #ifndef GL_ARB_transform_feedback3 #define GL_ARB_transform_feedback3 1 #define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 #define GL_MAX_VERTEX_STREAMS 0x8E71 typedef void(GLAPIENTRY * PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); typedef void(GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream); typedef void(GLAPIENTRY * PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); typedef void(GLAPIENTRY * PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); #define glBeginQueryIndexed GLEW_GET_FUN(__glewBeginQueryIndexed) #define glDrawTransformFeedbackStream GLEW_GET_FUN(__glewDrawTransformFeedbackStream) #define glEndQueryIndexed GLEW_GET_FUN(__glewEndQueryIndexed) #define glGetQueryIndexediv GLEW_GET_FUN(__glewGetQueryIndexediv) #define GLEW_ARB_transform_feedback3 GLEW_GET_VAR(__GLEW_ARB_transform_feedback3) #endif /* GL_ARB_transform_feedback3 */ /* ------------------ GL_ARB_transform_feedback_instanced ------------------ */ #ifndef GL_ARB_transform_feedback_instanced #define GL_ARB_transform_feedback_instanced 1 typedef void(GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, GLsizei primcount); typedef void(GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, GLuint stream, GLsizei primcount); #define glDrawTransformFeedbackInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackInstanced) #define glDrawTransformFeedbackStreamInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackStreamInstanced) #define GLEW_ARB_transform_feedback_instanced GLEW_GET_VAR(__GLEW_ARB_transform_feedback_instanced) #endif /* GL_ARB_transform_feedback_instanced */ /* ------------------------ GL_ARB_transpose_matrix ------------------------ */ #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 typedef void(GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC)(GLdouble m[16]); typedef void(GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC)(GLfloat m[16]); typedef void(GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC)(GLdouble m[16]); typedef void(GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC)(GLfloat m[16]); #define glLoadTransposeMatrixdARB GLEW_GET_FUN(__glewLoadTransposeMatrixdARB) #define glLoadTransposeMatrixfARB GLEW_GET_FUN(__glewLoadTransposeMatrixfARB) #define glMultTransposeMatrixdARB GLEW_GET_FUN(__glewMultTransposeMatrixdARB) #define glMultTransposeMatrixfARB GLEW_GET_FUN(__glewMultTransposeMatrixfARB) #define GLEW_ARB_transpose_matrix GLEW_GET_VAR(__GLEW_ARB_transpose_matrix) #endif /* GL_ARB_transpose_matrix */ /* ---------------------- GL_ARB_uniform_buffer_object --------------------- */ #ifndef GL_ARB_uniform_buffer_object #define GL_ARB_uniform_buffer_object 1 #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFF typedef void(GLAPIENTRY * PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); typedef void(GLAPIENTRY * PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void(GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); typedef void(GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); typedef void(GLAPIENTRY * PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint * data); typedef GLuint(GLAPIENTRY * PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar * uniformBlockName); typedef void(GLAPIENTRY * PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar ** uniformNames, GLuint * uniformIndices); typedef void(GLAPIENTRY * PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #define glBindBufferBase GLEW_GET_FUN(__glewBindBufferBase) #define glBindBufferRange GLEW_GET_FUN(__glewBindBufferRange) #define glGetActiveUniformBlockName GLEW_GET_FUN(__glewGetActiveUniformBlockName) #define glGetActiveUniformBlockiv GLEW_GET_FUN(__glewGetActiveUniformBlockiv) #define glGetActiveUniformName GLEW_GET_FUN(__glewGetActiveUniformName) #define glGetActiveUniformsiv GLEW_GET_FUN(__glewGetActiveUniformsiv) #define glGetIntegeri_v GLEW_GET_FUN(__glewGetIntegeri_v) #define glGetUniformBlockIndex GLEW_GET_FUN(__glewGetUniformBlockIndex) #define glGetUniformIndices GLEW_GET_FUN(__glewGetUniformIndices) #define glUniformBlockBinding GLEW_GET_FUN(__glewUniformBlockBinding) #define GLEW_ARB_uniform_buffer_object GLEW_GET_VAR(__GLEW_ARB_uniform_buffer_object) #endif /* GL_ARB_uniform_buffer_object */ /* ------------------------ GL_ARB_vertex_array_bgra ----------------------- */ #ifndef GL_ARB_vertex_array_bgra #define GL_ARB_vertex_array_bgra 1 #define GL_BGRA 0x80E1 #define GLEW_ARB_vertex_array_bgra GLEW_GET_VAR(__GLEW_ARB_vertex_array_bgra) #endif /* GL_ARB_vertex_array_bgra */ /* ----------------------- GL_ARB_vertex_array_object ---------------------- */ #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #define GL_VERTEX_ARRAY_BINDING 0x85B5 typedef void(GLAPIENTRY * PFNGLBINDVERTEXARRAYPROC)(GLuint array); typedef void(GLAPIENTRY * PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint * arrays); typedef void(GLAPIENTRY * PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); typedef GLboolean(GLAPIENTRY * PFNGLISVERTEXARRAYPROC)(GLuint array); #define glBindVertexArray GLEW_GET_FUN(__glewBindVertexArray) #define glDeleteVertexArrays GLEW_GET_FUN(__glewDeleteVertexArrays) #define glGenVertexArrays GLEW_GET_FUN(__glewGenVertexArrays) #define glIsVertexArray GLEW_GET_FUN(__glewIsVertexArray) #define GLEW_ARB_vertex_array_object GLEW_GET_VAR(__GLEW_ARB_vertex_array_object) #endif /* GL_ARB_vertex_array_object */ /* ----------------------- GL_ARB_vertex_attrib_64bit ---------------------- */ #ifndef GL_ARB_vertex_attrib_64bit #define GL_ARB_vertex_attrib_64bit 1 #define GL_DOUBLE_MAT2 0x8F46 #define GL_DOUBLE_MAT3 0x8F47 #define GL_DOUBLE_MAT4 0x8F48 #define GL_DOUBLE_VEC2 0x8FFC #define GL_DOUBLE_VEC3 0x8FFD #define GL_DOUBLE_VEC4 0x8FFE typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); #define glGetVertexAttribLdv GLEW_GET_FUN(__glewGetVertexAttribLdv) #define glVertexAttribL1d GLEW_GET_FUN(__glewVertexAttribL1d) #define glVertexAttribL1dv GLEW_GET_FUN(__glewVertexAttribL1dv) #define glVertexAttribL2d GLEW_GET_FUN(__glewVertexAttribL2d) #define glVertexAttribL2dv GLEW_GET_FUN(__glewVertexAttribL2dv) #define glVertexAttribL3d GLEW_GET_FUN(__glewVertexAttribL3d) #define glVertexAttribL3dv GLEW_GET_FUN(__glewVertexAttribL3dv) #define glVertexAttribL4d GLEW_GET_FUN(__glewVertexAttribL4d) #define glVertexAttribL4dv GLEW_GET_FUN(__glewVertexAttribL4dv) #define glVertexAttribLPointer GLEW_GET_FUN(__glewVertexAttribLPointer) #define GLEW_ARB_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_ARB_vertex_attrib_64bit) #endif /* GL_ARB_vertex_attrib_64bit */ /* ---------------------- GL_ARB_vertex_attrib_binding --------------------- */ #ifndef GL_ARB_vertex_attrib_binding #define GL_ARB_vertex_attrib_binding 1 #define GL_VERTEX_ATTRIB_BINDING 0x82D4 #define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 #define GL_VERTEX_BINDING_DIVISOR 0x82D6 #define GL_VERTEX_BINDING_OFFSET 0x82D7 #define GL_VERTEX_BINDING_STRIDE 0x82D8 #define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 #define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA typedef void(GLAPIENTRY * PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void(GLAPIENTRY * PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); #define glBindVertexBuffer GLEW_GET_FUN(__glewBindVertexBuffer) #define glVertexAttribBinding GLEW_GET_FUN(__glewVertexAttribBinding) #define glVertexAttribFormat GLEW_GET_FUN(__glewVertexAttribFormat) #define glVertexAttribIFormat GLEW_GET_FUN(__glewVertexAttribIFormat) #define glVertexAttribLFormat GLEW_GET_FUN(__glewVertexAttribLFormat) #define glVertexBindingDivisor GLEW_GET_FUN(__glewVertexBindingDivisor) #define GLEW_ARB_vertex_attrib_binding GLEW_GET_VAR(__GLEW_ARB_vertex_attrib_binding) #endif /* GL_ARB_vertex_attrib_binding */ /* -------------------------- GL_ARB_vertex_blend -------------------------- */ #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #define GL_MODELVIEW0_ARB 0x1700 #define GL_MODELVIEW1_ARB 0x850A #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 #define GL_CURRENT_WEIGHT_ARB 0x86A8 #define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB #define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC #define GL_WEIGHT_ARRAY_ARB 0x86AD #define GL_MODELVIEW2_ARB 0x8722 #define GL_MODELVIEW3_ARB 0x8723 #define GL_MODELVIEW4_ARB 0x8724 #define GL_MODELVIEW5_ARB 0x8725 #define GL_MODELVIEW6_ARB 0x8726 #define GL_MODELVIEW7_ARB 0x8727 #define GL_MODELVIEW8_ARB 0x8728 #define GL_MODELVIEW9_ARB 0x8729 #define GL_MODELVIEW10_ARB 0x872A #define GL_MODELVIEW11_ARB 0x872B #define GL_MODELVIEW12_ARB 0x872C #define GL_MODELVIEW13_ARB 0x872D #define GL_MODELVIEW14_ARB 0x872E #define GL_MODELVIEW15_ARB 0x872F #define GL_MODELVIEW16_ARB 0x8730 #define GL_MODELVIEW17_ARB 0x8731 #define GL_MODELVIEW18_ARB 0x8732 #define GL_MODELVIEW19_ARB 0x8733 #define GL_MODELVIEW20_ARB 0x8734 #define GL_MODELVIEW21_ARB 0x8735 #define GL_MODELVIEW22_ARB 0x8736 #define GL_MODELVIEW23_ARB 0x8737 #define GL_MODELVIEW24_ARB 0x8738 #define GL_MODELVIEW25_ARB 0x8739 #define GL_MODELVIEW26_ARB 0x873A #define GL_MODELVIEW27_ARB 0x873B #define GL_MODELVIEW28_ARB 0x873C #define GL_MODELVIEW29_ARB 0x873D #define GL_MODELVIEW30_ARB 0x873E #define GL_MODELVIEW31_ARB 0x873F typedef void(GLAPIENTRY * PFNGLVERTEXBLENDARBPROC)(GLint count); typedef void(GLAPIENTRY * PFNGLWEIGHTPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, GLvoid * pointer); typedef void(GLAPIENTRY * PFNGLWEIGHTBVARBPROC)(GLint size, GLbyte * weights); typedef void(GLAPIENTRY * PFNGLWEIGHTDVARBPROC)(GLint size, GLdouble * weights); typedef void(GLAPIENTRY * PFNGLWEIGHTFVARBPROC)(GLint size, GLfloat * weights); typedef void(GLAPIENTRY * PFNGLWEIGHTIVARBPROC)(GLint size, GLint * weights); typedef void(GLAPIENTRY * PFNGLWEIGHTSVARBPROC)(GLint size, GLshort * weights); typedef void(GLAPIENTRY * PFNGLWEIGHTUBVARBPROC)(GLint size, GLubyte * weights); typedef void(GLAPIENTRY * PFNGLWEIGHTUIVARBPROC)(GLint size, GLuint * weights); typedef void(GLAPIENTRY * PFNGLWEIGHTUSVARBPROC)(GLint size, GLushort * weights); #define glVertexBlendARB GLEW_GET_FUN(__glewVertexBlendARB) #define glWeightPointerARB GLEW_GET_FUN(__glewWeightPointerARB) #define glWeightbvARB GLEW_GET_FUN(__glewWeightbvARB) #define glWeightdvARB GLEW_GET_FUN(__glewWeightdvARB) #define glWeightfvARB GLEW_GET_FUN(__glewWeightfvARB) #define glWeightivARB GLEW_GET_FUN(__glewWeightivARB) #define glWeightsvARB GLEW_GET_FUN(__glewWeightsvARB) #define glWeightubvARB GLEW_GET_FUN(__glewWeightubvARB) #define glWeightuivARB GLEW_GET_FUN(__glewWeightuivARB) #define glWeightusvARB GLEW_GET_FUN(__glewWeightusvARB) #define GLEW_ARB_vertex_blend GLEW_GET_VAR(__GLEW_ARB_vertex_blend) #endif /* GL_ARB_vertex_blend */ /* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */ #ifndef GL_ARB_vertex_buffer_object #define GL_ARB_vertex_buffer_object 1 #define GL_BUFFER_SIZE_ARB 0x8764 #define GL_BUFFER_USAGE_ARB 0x8765 #define GL_ARRAY_BUFFER_ARB 0x8892 #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 #define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F #define GL_READ_ONLY_ARB 0x88B8 #define GL_WRITE_ONLY_ARB 0x88B9 #define GL_READ_WRITE_ARB 0x88BA #define GL_BUFFER_ACCESS_ARB 0x88BB #define GL_BUFFER_MAPPED_ARB 0x88BC #define GL_BUFFER_MAP_POINTER_ARB 0x88BD #define GL_STREAM_DRAW_ARB 0x88E0 #define GL_STREAM_READ_ARB 0x88E1 #define GL_STREAM_COPY_ARB 0x88E2 #define GL_STATIC_DRAW_ARB 0x88E4 #define GL_STATIC_READ_ARB 0x88E5 #define GL_STATIC_COPY_ARB 0x88E6 #define GL_DYNAMIC_DRAW_ARB 0x88E8 #define GL_DYNAMIC_READ_ARB 0x88E9 #define GL_DYNAMIC_COPY_ARB 0x88EA typedef ptrdiff_t GLintptrARB; typedef ptrdiff_t GLsizeiptrARB; typedef void(GLAPIENTRY * PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); typedef void(GLAPIENTRY * PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); typedef void(GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); typedef void(GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint * buffers); typedef void(GLAPIENTRY * PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint * buffers); typedef void(GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, GLvoid ** params); typedef void(GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); typedef GLboolean(GLAPIENTRY * PFNGLISBUFFERARBPROC)(GLuint buffer); typedef GLvoid *(GLAPIENTRY * PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); typedef GLboolean(GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC)(GLenum target); #define glBindBufferARB GLEW_GET_FUN(__glewBindBufferARB) #define glBufferDataARB GLEW_GET_FUN(__glewBufferDataARB) #define glBufferSubDataARB GLEW_GET_FUN(__glewBufferSubDataARB) #define glDeleteBuffersARB GLEW_GET_FUN(__glewDeleteBuffersARB) #define glGenBuffersARB GLEW_GET_FUN(__glewGenBuffersARB) #define glGetBufferParameterivARB GLEW_GET_FUN(__glewGetBufferParameterivARB) #define glGetBufferPointervARB GLEW_GET_FUN(__glewGetBufferPointervARB) #define glGetBufferSubDataARB GLEW_GET_FUN(__glewGetBufferSubDataARB) #define glIsBufferARB GLEW_GET_FUN(__glewIsBufferARB) #define glMapBufferARB GLEW_GET_FUN(__glewMapBufferARB) #define glUnmapBufferARB GLEW_GET_FUN(__glewUnmapBufferARB) #define GLEW_ARB_vertex_buffer_object GLEW_GET_VAR(__GLEW_ARB_vertex_buffer_object) #endif /* GL_ARB_vertex_buffer_object */ /* ------------------------- GL_ARB_vertex_program ------------------------- */ #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 #define GL_COLOR_SUM_ARB 0x8458 #define GL_VERTEX_PROGRAM_ARB 0x8620 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 #define GL_PROGRAM_LENGTH_ARB 0x8627 #define GL_PROGRAM_STRING_ARB 0x8628 #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 #define GL_CURRENT_MATRIX_ARB 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B #define GL_PROGRAM_BINDING_ARB 0x8677 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A #define GL_PROGRAM_ERROR_STRING_ARB 0x8874 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 #define GL_PROGRAM_FORMAT_ARB 0x8876 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB #define GL_PROGRAM_ATTRIBS_ARB 0x88AC #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 #define GL_MATRIX0_ARB 0x88C0 #define GL_MATRIX1_ARB 0x88C1 #define GL_MATRIX2_ARB 0x88C2 #define GL_MATRIX3_ARB 0x88C3 #define GL_MATRIX4_ARB 0x88C4 #define GL_MATRIX5_ARB 0x88C5 #define GL_MATRIX6_ARB 0x88C6 #define GL_MATRIX7_ARB 0x88C7 #define GL_MATRIX8_ARB 0x88C8 #define GL_MATRIX9_ARB 0x88C9 #define GL_MATRIX10_ARB 0x88CA #define GL_MATRIX11_ARB 0x88CB #define GL_MATRIX12_ARB 0x88CC #define GL_MATRIX13_ARB 0x88CD #define GL_MATRIX14_ARB 0x88CE #define GL_MATRIX15_ARB 0x88CF #define GL_MATRIX16_ARB 0x88D0 #define GL_MATRIX17_ARB 0x88D1 #define GL_MATRIX18_ARB 0x88D2 #define GL_MATRIX19_ARB 0x88D3 #define GL_MATRIX20_ARB 0x88D4 #define GL_MATRIX21_ARB 0x88D5 #define GL_MATRIX22_ARB 0x88D6 #define GL_MATRIX23_ARB 0x88D7 #define GL_MATRIX24_ARB 0x88D8 #define GL_MATRIX25_ARB 0x88D9 #define GL_MATRIX26_ARB 0x88DA #define GL_MATRIX27_ARB 0x88DB #define GL_MATRIX28_ARB 0x88DC #define GL_MATRIX29_ARB 0x88DD #define GL_MATRIX30_ARB 0x88DE #define GL_MATRIX31_ARB 0x88DF typedef void(GLAPIENTRY * PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); typedef void(GLAPIENTRY * PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint * programs); typedef void(GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); typedef void(GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); typedef void(GLAPIENTRY * PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint * programs); typedef void(GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void * string); typedef void(GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, GLvoid ** pointer); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISPROGRAMARBPROC)(GLuint program); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const void * string); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); #define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB) #define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB) #define glDisableVertexAttribArrayARB GLEW_GET_FUN(__glewDisableVertexAttribArrayARB) #define glEnableVertexAttribArrayARB GLEW_GET_FUN(__glewEnableVertexAttribArrayARB) #define glGenProgramsARB GLEW_GET_FUN(__glewGenProgramsARB) #define glGetProgramEnvParameterdvARB GLEW_GET_FUN(__glewGetProgramEnvParameterdvARB) #define glGetProgramEnvParameterfvARB GLEW_GET_FUN(__glewGetProgramEnvParameterfvARB) #define glGetProgramLocalParameterdvARB GLEW_GET_FUN(__glewGetProgramLocalParameterdvARB) #define glGetProgramLocalParameterfvARB GLEW_GET_FUN(__glewGetProgramLocalParameterfvARB) #define glGetProgramStringARB GLEW_GET_FUN(__glewGetProgramStringARB) #define glGetProgramivARB GLEW_GET_FUN(__glewGetProgramivARB) #define glGetVertexAttribPointervARB GLEW_GET_FUN(__glewGetVertexAttribPointervARB) #define glGetVertexAttribdvARB GLEW_GET_FUN(__glewGetVertexAttribdvARB) #define glGetVertexAttribfvARB GLEW_GET_FUN(__glewGetVertexAttribfvARB) #define glGetVertexAttribivARB GLEW_GET_FUN(__glewGetVertexAttribivARB) #define glIsProgramARB GLEW_GET_FUN(__glewIsProgramARB) #define glProgramEnvParameter4dARB GLEW_GET_FUN(__glewProgramEnvParameter4dARB) #define glProgramEnvParameter4dvARB GLEW_GET_FUN(__glewProgramEnvParameter4dvARB) #define glProgramEnvParameter4fARB GLEW_GET_FUN(__glewProgramEnvParameter4fARB) #define glProgramEnvParameter4fvARB GLEW_GET_FUN(__glewProgramEnvParameter4fvARB) #define glProgramLocalParameter4dARB GLEW_GET_FUN(__glewProgramLocalParameter4dARB) #define glProgramLocalParameter4dvARB GLEW_GET_FUN(__glewProgramLocalParameter4dvARB) #define glProgramLocalParameter4fARB GLEW_GET_FUN(__glewProgramLocalParameter4fARB) #define glProgramLocalParameter4fvARB GLEW_GET_FUN(__glewProgramLocalParameter4fvARB) #define glProgramStringARB GLEW_GET_FUN(__glewProgramStringARB) #define glVertexAttrib1dARB GLEW_GET_FUN(__glewVertexAttrib1dARB) #define glVertexAttrib1dvARB GLEW_GET_FUN(__glewVertexAttrib1dvARB) #define glVertexAttrib1fARB GLEW_GET_FUN(__glewVertexAttrib1fARB) #define glVertexAttrib1fvARB GLEW_GET_FUN(__glewVertexAttrib1fvARB) #define glVertexAttrib1sARB GLEW_GET_FUN(__glewVertexAttrib1sARB) #define glVertexAttrib1svARB GLEW_GET_FUN(__glewVertexAttrib1svARB) #define glVertexAttrib2dARB GLEW_GET_FUN(__glewVertexAttrib2dARB) #define glVertexAttrib2dvARB GLEW_GET_FUN(__glewVertexAttrib2dvARB) #define glVertexAttrib2fARB GLEW_GET_FUN(__glewVertexAttrib2fARB) #define glVertexAttrib2fvARB GLEW_GET_FUN(__glewVertexAttrib2fvARB) #define glVertexAttrib2sARB GLEW_GET_FUN(__glewVertexAttrib2sARB) #define glVertexAttrib2svARB GLEW_GET_FUN(__glewVertexAttrib2svARB) #define glVertexAttrib3dARB GLEW_GET_FUN(__glewVertexAttrib3dARB) #define glVertexAttrib3dvARB GLEW_GET_FUN(__glewVertexAttrib3dvARB) #define glVertexAttrib3fARB GLEW_GET_FUN(__glewVertexAttrib3fARB) #define glVertexAttrib3fvARB GLEW_GET_FUN(__glewVertexAttrib3fvARB) #define glVertexAttrib3sARB GLEW_GET_FUN(__glewVertexAttrib3sARB) #define glVertexAttrib3svARB GLEW_GET_FUN(__glewVertexAttrib3svARB) #define glVertexAttrib4NbvARB GLEW_GET_FUN(__glewVertexAttrib4NbvARB) #define glVertexAttrib4NivARB GLEW_GET_FUN(__glewVertexAttrib4NivARB) #define glVertexAttrib4NsvARB GLEW_GET_FUN(__glewVertexAttrib4NsvARB) #define glVertexAttrib4NubARB GLEW_GET_FUN(__glewVertexAttrib4NubARB) #define glVertexAttrib4NubvARB GLEW_GET_FUN(__glewVertexAttrib4NubvARB) #define glVertexAttrib4NuivARB GLEW_GET_FUN(__glewVertexAttrib4NuivARB) #define glVertexAttrib4NusvARB GLEW_GET_FUN(__glewVertexAttrib4NusvARB) #define glVertexAttrib4bvARB GLEW_GET_FUN(__glewVertexAttrib4bvARB) #define glVertexAttrib4dARB GLEW_GET_FUN(__glewVertexAttrib4dARB) #define glVertexAttrib4dvARB GLEW_GET_FUN(__glewVertexAttrib4dvARB) #define glVertexAttrib4fARB GLEW_GET_FUN(__glewVertexAttrib4fARB) #define glVertexAttrib4fvARB GLEW_GET_FUN(__glewVertexAttrib4fvARB) #define glVertexAttrib4ivARB GLEW_GET_FUN(__glewVertexAttrib4ivARB) #define glVertexAttrib4sARB GLEW_GET_FUN(__glewVertexAttrib4sARB) #define glVertexAttrib4svARB GLEW_GET_FUN(__glewVertexAttrib4svARB) #define glVertexAttrib4ubvARB GLEW_GET_FUN(__glewVertexAttrib4ubvARB) #define glVertexAttrib4uivARB GLEW_GET_FUN(__glewVertexAttrib4uivARB) #define glVertexAttrib4usvARB GLEW_GET_FUN(__glewVertexAttrib4usvARB) #define glVertexAttribPointerARB GLEW_GET_FUN(__glewVertexAttribPointerARB) #define GLEW_ARB_vertex_program GLEW_GET_VAR(__GLEW_ARB_vertex_program) #endif /* GL_ARB_vertex_program */ /* -------------------------- GL_ARB_vertex_shader ------------------------- */ #ifndef GL_ARB_vertex_shader #define GL_ARB_vertex_shader 1 #define GL_VERTEX_SHADER_ARB 0x8B31 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A #define GL_MAX_VARYING_FLOATS_ARB 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D #define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 #define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A typedef void(GLAPIENTRY * PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, const GLcharARB * name); typedef void(GLAPIENTRY * PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); typedef GLint(GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); #define glBindAttribLocationARB GLEW_GET_FUN(__glewBindAttribLocationARB) #define glGetActiveAttribARB GLEW_GET_FUN(__glewGetActiveAttribARB) #define glGetAttribLocationARB GLEW_GET_FUN(__glewGetAttribLocationARB) #define GLEW_ARB_vertex_shader GLEW_GET_VAR(__GLEW_ARB_vertex_shader) #endif /* GL_ARB_vertex_shader */ /* ------------------- GL_ARB_vertex_type_2_10_10_10_rev ------------------- */ #ifndef GL_ARB_vertex_type_2_10_10_10_rev #define GL_ARB_vertex_type_2_10_10_10_rev 1 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_INT_2_10_10_10_REV 0x8D9F typedef void(GLAPIENTRY * PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); typedef void(GLAPIENTRY * PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint * color); typedef void(GLAPIENTRY * PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); typedef void(GLAPIENTRY * PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint * color); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint * color); typedef void(GLAPIENTRY * PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); typedef void(GLAPIENTRY * PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint * coords); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); typedef void(GLAPIENTRY * PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); typedef void(GLAPIENTRY * PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint * value); typedef void(GLAPIENTRY * PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); typedef void(GLAPIENTRY * PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint * value); typedef void(GLAPIENTRY * PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); typedef void(GLAPIENTRY * PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint * value); #define glColorP3ui GLEW_GET_FUN(__glewColorP3ui) #define glColorP3uiv GLEW_GET_FUN(__glewColorP3uiv) #define glColorP4ui GLEW_GET_FUN(__glewColorP4ui) #define glColorP4uiv GLEW_GET_FUN(__glewColorP4uiv) #define glMultiTexCoordP1ui GLEW_GET_FUN(__glewMultiTexCoordP1ui) #define glMultiTexCoordP1uiv GLEW_GET_FUN(__glewMultiTexCoordP1uiv) #define glMultiTexCoordP2ui GLEW_GET_FUN(__glewMultiTexCoordP2ui) #define glMultiTexCoordP2uiv GLEW_GET_FUN(__glewMultiTexCoordP2uiv) #define glMultiTexCoordP3ui GLEW_GET_FUN(__glewMultiTexCoordP3ui) #define glMultiTexCoordP3uiv GLEW_GET_FUN(__glewMultiTexCoordP3uiv) #define glMultiTexCoordP4ui GLEW_GET_FUN(__glewMultiTexCoordP4ui) #define glMultiTexCoordP4uiv GLEW_GET_FUN(__glewMultiTexCoordP4uiv) #define glNormalP3ui GLEW_GET_FUN(__glewNormalP3ui) #define glNormalP3uiv GLEW_GET_FUN(__glewNormalP3uiv) #define glSecondaryColorP3ui GLEW_GET_FUN(__glewSecondaryColorP3ui) #define glSecondaryColorP3uiv GLEW_GET_FUN(__glewSecondaryColorP3uiv) #define glTexCoordP1ui GLEW_GET_FUN(__glewTexCoordP1ui) #define glTexCoordP1uiv GLEW_GET_FUN(__glewTexCoordP1uiv) #define glTexCoordP2ui GLEW_GET_FUN(__glewTexCoordP2ui) #define glTexCoordP2uiv GLEW_GET_FUN(__glewTexCoordP2uiv) #define glTexCoordP3ui GLEW_GET_FUN(__glewTexCoordP3ui) #define glTexCoordP3uiv GLEW_GET_FUN(__glewTexCoordP3uiv) #define glTexCoordP4ui GLEW_GET_FUN(__glewTexCoordP4ui) #define glTexCoordP4uiv GLEW_GET_FUN(__glewTexCoordP4uiv) #define glVertexAttribP1ui GLEW_GET_FUN(__glewVertexAttribP1ui) #define glVertexAttribP1uiv GLEW_GET_FUN(__glewVertexAttribP1uiv) #define glVertexAttribP2ui GLEW_GET_FUN(__glewVertexAttribP2ui) #define glVertexAttribP2uiv GLEW_GET_FUN(__glewVertexAttribP2uiv) #define glVertexAttribP3ui GLEW_GET_FUN(__glewVertexAttribP3ui) #define glVertexAttribP3uiv GLEW_GET_FUN(__glewVertexAttribP3uiv) #define glVertexAttribP4ui GLEW_GET_FUN(__glewVertexAttribP4ui) #define glVertexAttribP4uiv GLEW_GET_FUN(__glewVertexAttribP4uiv) #define glVertexP2ui GLEW_GET_FUN(__glewVertexP2ui) #define glVertexP2uiv GLEW_GET_FUN(__glewVertexP2uiv) #define glVertexP3ui GLEW_GET_FUN(__glewVertexP3ui) #define glVertexP3uiv GLEW_GET_FUN(__glewVertexP3uiv) #define glVertexP4ui GLEW_GET_FUN(__glewVertexP4ui) #define glVertexP4uiv GLEW_GET_FUN(__glewVertexP4uiv) #define GLEW_ARB_vertex_type_2_10_10_10_rev GLEW_GET_VAR(__GLEW_ARB_vertex_type_2_10_10_10_rev) #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ /* ------------------------- GL_ARB_viewport_array ------------------------- */ #ifndef GL_ARB_viewport_array #define GL_ARB_viewport_array 1 #define GL_DEPTH_RANGE 0x0B70 #define GL_VIEWPORT 0x0BA2 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_MAX_VIEWPORTS 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS 0x825C #define GL_VIEWPORT_BOUNDS_RANGE 0x825D #define GL_LAYER_PROVOKING_VERTEX 0x825E #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F #define GL_UNDEFINED_VERTEX 0x8260 #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F typedef void(GLAPIENTRY * PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLclampd * v); typedef void(GLAPIENTRY * PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLclampd n, GLclampd f); typedef void(GLAPIENTRY * PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble * data); typedef void(GLAPIENTRY * PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat * data); typedef void(GLAPIENTRY * PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint * v); typedef void(GLAPIENTRY * PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void(GLAPIENTRY * PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat * v); #define glDepthRangeArrayv GLEW_GET_FUN(__glewDepthRangeArrayv) #define glDepthRangeIndexed GLEW_GET_FUN(__glewDepthRangeIndexed) #define glGetDoublei_v GLEW_GET_FUN(__glewGetDoublei_v) #define glGetFloati_v GLEW_GET_FUN(__glewGetFloati_v) #define glScissorArrayv GLEW_GET_FUN(__glewScissorArrayv) #define glScissorIndexed GLEW_GET_FUN(__glewScissorIndexed) #define glScissorIndexedv GLEW_GET_FUN(__glewScissorIndexedv) #define glViewportArrayv GLEW_GET_FUN(__glewViewportArrayv) #define glViewportIndexedf GLEW_GET_FUN(__glewViewportIndexedf) #define glViewportIndexedfv GLEW_GET_FUN(__glewViewportIndexedfv) #define GLEW_ARB_viewport_array GLEW_GET_VAR(__GLEW_ARB_viewport_array) #endif /* GL_ARB_viewport_array */ /* --------------------------- GL_ARB_window_pos --------------------------- */ #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 typedef void(GLAPIENTRY * PFNGLWINDOWPOS2DARBPROC)(GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2DVARBPROC)(const GLdouble * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2FARBPROC)(GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2FVARBPROC)(const GLfloat * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2IARBPROC)(GLint x, GLint y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2IVARBPROC)(const GLint * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2SARBPROC)(GLshort x, GLshort y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2SVARBPROC)(const GLshort * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3DARBPROC)(GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3DVARBPROC)(const GLdouble * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3FARBPROC)(GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3FVARBPROC)(const GLfloat * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3IARBPROC)(GLint x, GLint y, GLint z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3IVARBPROC)(const GLint * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3SARBPROC)(GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC)(const GLshort * p); #define glWindowPos2dARB GLEW_GET_FUN(__glewWindowPos2dARB) #define glWindowPos2dvARB GLEW_GET_FUN(__glewWindowPos2dvARB) #define glWindowPos2fARB GLEW_GET_FUN(__glewWindowPos2fARB) #define glWindowPos2fvARB GLEW_GET_FUN(__glewWindowPos2fvARB) #define glWindowPos2iARB GLEW_GET_FUN(__glewWindowPos2iARB) #define glWindowPos2ivARB GLEW_GET_FUN(__glewWindowPos2ivARB) #define glWindowPos2sARB GLEW_GET_FUN(__glewWindowPos2sARB) #define glWindowPos2svARB GLEW_GET_FUN(__glewWindowPos2svARB) #define glWindowPos3dARB GLEW_GET_FUN(__glewWindowPos3dARB) #define glWindowPos3dvARB GLEW_GET_FUN(__glewWindowPos3dvARB) #define glWindowPos3fARB GLEW_GET_FUN(__glewWindowPos3fARB) #define glWindowPos3fvARB GLEW_GET_FUN(__glewWindowPos3fvARB) #define glWindowPos3iARB GLEW_GET_FUN(__glewWindowPos3iARB) #define glWindowPos3ivARB GLEW_GET_FUN(__glewWindowPos3ivARB) #define glWindowPos3sARB GLEW_GET_FUN(__glewWindowPos3sARB) #define glWindowPos3svARB GLEW_GET_FUN(__glewWindowPos3svARB) #define GLEW_ARB_window_pos GLEW_GET_VAR(__GLEW_ARB_window_pos) #endif /* GL_ARB_window_pos */ /* ------------------------- GL_ATIX_point_sprites ------------------------- */ #ifndef GL_ATIX_point_sprites #define GL_ATIX_point_sprites 1 #define GL_TEXTURE_POINT_MODE_ATIX 0x60B0 #define GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 #define GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 #define GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 #define GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 #define GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 #define GLEW_ATIX_point_sprites GLEW_GET_VAR(__GLEW_ATIX_point_sprites) #endif /* GL_ATIX_point_sprites */ /* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */ #ifndef GL_ATIX_texture_env_combine3 #define GL_ATIX_texture_env_combine3 1 #define GL_MODULATE_ADD_ATIX 0x8744 #define GL_MODULATE_SIGNED_ADD_ATIX 0x8745 #define GL_MODULATE_SUBTRACT_ATIX 0x8746 #define GLEW_ATIX_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATIX_texture_env_combine3) #endif /* GL_ATIX_texture_env_combine3 */ /* ----------------------- GL_ATIX_texture_env_route ----------------------- */ #ifndef GL_ATIX_texture_env_route #define GL_ATIX_texture_env_route 1 #define GL_SECONDARY_COLOR_ATIX 0x8747 #define GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 #define GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 #define GLEW_ATIX_texture_env_route GLEW_GET_VAR(__GLEW_ATIX_texture_env_route) #endif /* GL_ATIX_texture_env_route */ /* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */ #ifndef GL_ATIX_vertex_shader_output_point_size #define GL_ATIX_vertex_shader_output_point_size 1 #define GL_OUTPUT_POINT_SIZE_ATIX 0x610E #define GLEW_ATIX_vertex_shader_output_point_size GLEW_GET_VAR(__GLEW_ATIX_vertex_shader_output_point_size) #endif /* GL_ATIX_vertex_shader_output_point_size */ /* -------------------------- GL_ATI_draw_buffers -------------------------- */ #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 #define GL_MAX_DRAW_BUFFERS_ATI 0x8824 #define GL_DRAW_BUFFER0_ATI 0x8825 #define GL_DRAW_BUFFER1_ATI 0x8826 #define GL_DRAW_BUFFER2_ATI 0x8827 #define GL_DRAW_BUFFER3_ATI 0x8828 #define GL_DRAW_BUFFER4_ATI 0x8829 #define GL_DRAW_BUFFER5_ATI 0x882A #define GL_DRAW_BUFFER6_ATI 0x882B #define GL_DRAW_BUFFER7_ATI 0x882C #define GL_DRAW_BUFFER8_ATI 0x882D #define GL_DRAW_BUFFER9_ATI 0x882E #define GL_DRAW_BUFFER10_ATI 0x882F #define GL_DRAW_BUFFER11_ATI 0x8830 #define GL_DRAW_BUFFER12_ATI 0x8831 #define GL_DRAW_BUFFER13_ATI 0x8832 #define GL_DRAW_BUFFER14_ATI 0x8833 #define GL_DRAW_BUFFER15_ATI 0x8834 typedef void(GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC)(GLsizei n, const GLenum * bufs); #define glDrawBuffersATI GLEW_GET_FUN(__glewDrawBuffersATI) #define GLEW_ATI_draw_buffers GLEW_GET_VAR(__GLEW_ATI_draw_buffers) #endif /* GL_ATI_draw_buffers */ /* -------------------------- GL_ATI_element_array ------------------------- */ #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #define GL_ELEMENT_ARRAY_ATI 0x8768 #define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 #define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A typedef void(GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); typedef void(GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count); typedef void(GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void * pointer); #define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI) #define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI) #define glElementPointerATI GLEW_GET_FUN(__glewElementPointerATI) #define GLEW_ATI_element_array GLEW_GET_VAR(__GLEW_ATI_element_array) #endif /* GL_ATI_element_array */ /* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */ #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #define GL_BUMP_ROT_MATRIX_ATI 0x8775 #define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 #define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 #define GL_BUMP_TEX_UNITS_ATI 0x8778 #define GL_DUDV_ATI 0x8779 #define GL_DU8DV8_ATI 0x877A #define GL_BUMP_ENVMAP_ATI 0x877B #define GL_BUMP_TARGET_ATI 0x877C typedef void(GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC)(GLenum pname, GLfloat * param); typedef void(GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC)(GLenum pname, GLint * param); typedef void(GLAPIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC)(GLenum pname, GLfloat * param); typedef void(GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC)(GLenum pname, GLint * param); #define glGetTexBumpParameterfvATI GLEW_GET_FUN(__glewGetTexBumpParameterfvATI) #define glGetTexBumpParameterivATI GLEW_GET_FUN(__glewGetTexBumpParameterivATI) #define glTexBumpParameterfvATI GLEW_GET_FUN(__glewTexBumpParameterfvATI) #define glTexBumpParameterivATI GLEW_GET_FUN(__glewTexBumpParameterivATI) #define GLEW_ATI_envmap_bumpmap GLEW_GET_VAR(__GLEW_ATI_envmap_bumpmap) #endif /* GL_ATI_envmap_bumpmap */ /* ------------------------- GL_ATI_fragment_shader ------------------------ */ #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #define GL_RED_BIT_ATI 0x00000001 #define GL_2X_BIT_ATI 0x00000001 #define GL_4X_BIT_ATI 0x00000002 #define GL_GREEN_BIT_ATI 0x00000002 #define GL_COMP_BIT_ATI 0x00000002 #define GL_BLUE_BIT_ATI 0x00000004 #define GL_8X_BIT_ATI 0x00000004 #define GL_NEGATE_BIT_ATI 0x00000004 #define GL_BIAS_BIT_ATI 0x00000008 #define GL_HALF_BIT_ATI 0x00000008 #define GL_QUARTER_BIT_ATI 0x00000010 #define GL_EIGHTH_BIT_ATI 0x00000020 #define GL_SATURATE_BIT_ATI 0x00000040 #define GL_FRAGMENT_SHADER_ATI 0x8920 #define GL_REG_0_ATI 0x8921 #define GL_REG_1_ATI 0x8922 #define GL_REG_2_ATI 0x8923 #define GL_REG_3_ATI 0x8924 #define GL_REG_4_ATI 0x8925 #define GL_REG_5_ATI 0x8926 #define GL_CON_0_ATI 0x8941 #define GL_CON_1_ATI 0x8942 #define GL_CON_2_ATI 0x8943 #define GL_CON_3_ATI 0x8944 #define GL_CON_4_ATI 0x8945 #define GL_CON_5_ATI 0x8946 #define GL_CON_6_ATI 0x8947 #define GL_CON_7_ATI 0x8948 #define GL_MOV_ATI 0x8961 #define GL_ADD_ATI 0x8963 #define GL_MUL_ATI 0x8964 #define GL_SUB_ATI 0x8965 #define GL_DOT3_ATI 0x8966 #define GL_DOT4_ATI 0x8967 #define GL_MAD_ATI 0x8968 #define GL_LERP_ATI 0x8969 #define GL_CND_ATI 0x896A #define GL_CND0_ATI 0x896B #define GL_DOT2_ADD_ATI 0x896C #define GL_SECONDARY_INTERPOLATOR_ATI 0x896D #define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E #define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F #define GL_NUM_PASSES_ATI 0x8970 #define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 #define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 #define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 #define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 #define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 #define GL_SWIZZLE_STR_ATI 0x8976 #define GL_SWIZZLE_STQ_ATI 0x8977 #define GL_SWIZZLE_STR_DR_ATI 0x8978 #define GL_SWIZZLE_STQ_DQ_ATI 0x8979 #define GL_SWIZZLE_STRQ_ATI 0x897A #define GL_SWIZZLE_STRQ_DQ_ATI 0x897B typedef void(GLAPIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void(GLAPIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void(GLAPIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void(GLAPIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC)(void); typedef void(GLAPIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void(GLAPIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void(GLAPIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void(GLAPIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLENDFRAGMENTSHADERATIPROC)(void); typedef GLuint(GLAPIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); typedef void(GLAPIENTRY * PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); typedef void(GLAPIENTRY * PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); typedef void(GLAPIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat * value); #define glAlphaFragmentOp1ATI GLEW_GET_FUN(__glewAlphaFragmentOp1ATI) #define glAlphaFragmentOp2ATI GLEW_GET_FUN(__glewAlphaFragmentOp2ATI) #define glAlphaFragmentOp3ATI GLEW_GET_FUN(__glewAlphaFragmentOp3ATI) #define glBeginFragmentShaderATI GLEW_GET_FUN(__glewBeginFragmentShaderATI) #define glBindFragmentShaderATI GLEW_GET_FUN(__glewBindFragmentShaderATI) #define glColorFragmentOp1ATI GLEW_GET_FUN(__glewColorFragmentOp1ATI) #define glColorFragmentOp2ATI GLEW_GET_FUN(__glewColorFragmentOp2ATI) #define glColorFragmentOp3ATI GLEW_GET_FUN(__glewColorFragmentOp3ATI) #define glDeleteFragmentShaderATI GLEW_GET_FUN(__glewDeleteFragmentShaderATI) #define glEndFragmentShaderATI GLEW_GET_FUN(__glewEndFragmentShaderATI) #define glGenFragmentShadersATI GLEW_GET_FUN(__glewGenFragmentShadersATI) #define glPassTexCoordATI GLEW_GET_FUN(__glewPassTexCoordATI) #define glSampleMapATI GLEW_GET_FUN(__glewSampleMapATI) #define glSetFragmentShaderConstantATI GLEW_GET_FUN(__glewSetFragmentShaderConstantATI) #define GLEW_ATI_fragment_shader GLEW_GET_VAR(__GLEW_ATI_fragment_shader) #endif /* GL_ATI_fragment_shader */ /* ------------------------ GL_ATI_map_object_buffer ----------------------- */ #ifndef GL_ATI_map_object_buffer #define GL_ATI_map_object_buffer 1 typedef GLvoid *(GLAPIENTRY * PFNGLMAPOBJECTBUFFERATIPROC)(GLuint buffer); typedef void(GLAPIENTRY * PFNGLUNMAPOBJECTBUFFERATIPROC)(GLuint buffer); #define glMapObjectBufferATI GLEW_GET_FUN(__glewMapObjectBufferATI) #define glUnmapObjectBufferATI GLEW_GET_FUN(__glewUnmapObjectBufferATI) #define GLEW_ATI_map_object_buffer GLEW_GET_VAR(__GLEW_ATI_map_object_buffer) #endif /* GL_ATI_map_object_buffer */ /* ----------------------------- GL_ATI_meminfo ---------------------------- */ #ifndef GL_ATI_meminfo #define GL_ATI_meminfo 1 #define GL_VBO_FREE_MEMORY_ATI 0x87FB #define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC #define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD #define GLEW_ATI_meminfo GLEW_GET_VAR(__GLEW_ATI_meminfo) #endif /* GL_ATI_meminfo */ /* -------------------------- GL_ATI_pn_triangles -------------------------- */ #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #define GL_PN_TRIANGLES_ATI 0x87F0 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 #define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 #define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 #define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 #define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 #define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 #define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 #define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 typedef void(GLAPIENTRY * PFNGLPNTRIANGLESFATIPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLPNTRIANGLESIATIPROC)(GLenum pname, GLint param); #define glPNTrianglesfATI GLEW_GET_FUN(__glewPNTrianglesfATI) #define glPNTrianglesiATI GLEW_GET_FUN(__glewPNTrianglesiATI) #define GLEW_ATI_pn_triangles GLEW_GET_VAR(__GLEW_ATI_pn_triangles) #endif /* GL_ATI_pn_triangles */ /* ------------------------ GL_ATI_separate_stencil ------------------------ */ #ifndef GL_ATI_separate_stencil #define GL_ATI_separate_stencil 1 #define GL_STENCIL_BACK_FUNC_ATI 0x8800 #define GL_STENCIL_BACK_FAIL_ATI 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 typedef void(GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); typedef void(GLAPIENTRY * PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); #define glStencilFuncSeparateATI GLEW_GET_FUN(__glewStencilFuncSeparateATI) #define glStencilOpSeparateATI GLEW_GET_FUN(__glewStencilOpSeparateATI) #define GLEW_ATI_separate_stencil GLEW_GET_VAR(__GLEW_ATI_separate_stencil) #endif /* GL_ATI_separate_stencil */ /* ----------------------- GL_ATI_shader_texture_lod ----------------------- */ #ifndef GL_ATI_shader_texture_lod #define GL_ATI_shader_texture_lod 1 #define GLEW_ATI_shader_texture_lod GLEW_GET_VAR(__GLEW_ATI_shader_texture_lod) #endif /* GL_ATI_shader_texture_lod */ /* ---------------------- GL_ATI_text_fragment_shader ---------------------- */ #ifndef GL_ATI_text_fragment_shader #define GL_ATI_text_fragment_shader 1 #define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 #define GLEW_ATI_text_fragment_shader GLEW_GET_VAR(__GLEW_ATI_text_fragment_shader) #endif /* GL_ATI_text_fragment_shader */ /* --------------------- GL_ATI_texture_compression_3dc -------------------- */ #ifndef GL_ATI_texture_compression_3dc #define GL_ATI_texture_compression_3dc 1 #define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 #define GLEW_ATI_texture_compression_3dc GLEW_GET_VAR(__GLEW_ATI_texture_compression_3dc) #endif /* GL_ATI_texture_compression_3dc */ /* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */ #ifndef GL_ATI_texture_env_combine3 #define GL_ATI_texture_env_combine3 1 #define GL_MODULATE_ADD_ATI 0x8744 #define GL_MODULATE_SIGNED_ADD_ATI 0x8745 #define GL_MODULATE_SUBTRACT_ATI 0x8746 #define GLEW_ATI_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATI_texture_env_combine3) #endif /* GL_ATI_texture_env_combine3 */ /* -------------------------- GL_ATI_texture_float ------------------------- */ #ifndef GL_ATI_texture_float #define GL_ATI_texture_float 1 #define GL_RGBA_FLOAT32_ATI 0x8814 #define GL_RGB_FLOAT32_ATI 0x8815 #define GL_ALPHA_FLOAT32_ATI 0x8816 #define GL_INTENSITY_FLOAT32_ATI 0x8817 #define GL_LUMINANCE_FLOAT32_ATI 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 #define GL_RGBA_FLOAT16_ATI 0x881A #define GL_RGB_FLOAT16_ATI 0x881B #define GL_ALPHA_FLOAT16_ATI 0x881C #define GL_INTENSITY_FLOAT16_ATI 0x881D #define GL_LUMINANCE_FLOAT16_ATI 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F #define GLEW_ATI_texture_float GLEW_GET_VAR(__GLEW_ATI_texture_float) #endif /* GL_ATI_texture_float */ /* ----------------------- GL_ATI_texture_mirror_once ---------------------- */ #ifndef GL_ATI_texture_mirror_once #define GL_ATI_texture_mirror_once 1 #define GL_MIRROR_CLAMP_ATI 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 #define GLEW_ATI_texture_mirror_once GLEW_GET_VAR(__GLEW_ATI_texture_mirror_once) #endif /* GL_ATI_texture_mirror_once */ /* ----------------------- GL_ATI_vertex_array_object ---------------------- */ #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #define GL_STATIC_ATI 0x8760 #define GL_DYNAMIC_ATI 0x8761 #define GL_PRESERVE_ATI 0x8762 #define GL_DISCARD_ATI 0x8763 #define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 #define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 #define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 #define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 typedef void(GLAPIENTRY * PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void(GLAPIENTRY * PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); typedef void(GLAPIENTRY * PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); typedef GLuint(GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void * pointer, GLenum usage); typedef void(GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve); typedef void(GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); #define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI) #define glFreeObjectBufferATI GLEW_GET_FUN(__glewFreeObjectBufferATI) #define glGetArrayObjectfvATI GLEW_GET_FUN(__glewGetArrayObjectfvATI) #define glGetArrayObjectivATI GLEW_GET_FUN(__glewGetArrayObjectivATI) #define glGetObjectBufferfvATI GLEW_GET_FUN(__glewGetObjectBufferfvATI) #define glGetObjectBufferivATI GLEW_GET_FUN(__glewGetObjectBufferivATI) #define glGetVariantArrayObjectfvATI GLEW_GET_FUN(__glewGetVariantArrayObjectfvATI) #define glGetVariantArrayObjectivATI GLEW_GET_FUN(__glewGetVariantArrayObjectivATI) #define glIsObjectBufferATI GLEW_GET_FUN(__glewIsObjectBufferATI) #define glNewObjectBufferATI GLEW_GET_FUN(__glewNewObjectBufferATI) #define glUpdateObjectBufferATI GLEW_GET_FUN(__glewUpdateObjectBufferATI) #define glVariantArrayObjectATI GLEW_GET_FUN(__glewVariantArrayObjectATI) #define GLEW_ATI_vertex_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_array_object) #endif /* GL_ATI_vertex_array_object */ /* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */ #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)(GLuint index, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)(GLuint index, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); #define glGetVertexAttribArrayObjectfvATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectfvATI) #define glGetVertexAttribArrayObjectivATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectivATI) #define glVertexAttribArrayObjectATI GLEW_GET_FUN(__glewVertexAttribArrayObjectATI) #define GLEW_ATI_vertex_attrib_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_attrib_array_object) #endif /* GL_ATI_vertex_attrib_array_object */ /* ------------------------- GL_ATI_vertex_streams ------------------------- */ #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #define GL_MAX_VERTEX_STREAMS_ATI 0x876B #define GL_VERTEX_SOURCE_ATI 0x876C #define GL_VERTEX_STREAM0_ATI 0x876D #define GL_VERTEX_STREAM1_ATI 0x876E #define GL_VERTEX_STREAM2_ATI 0x876F #define GL_VERTEX_STREAM3_ATI 0x8770 #define GL_VERTEX_STREAM4_ATI 0x8771 #define GL_VERTEX_STREAM5_ATI 0x8772 #define GL_VERTEX_STREAM6_ATI 0x8773 #define GL_VERTEX_STREAM7_ATI 0x8774 typedef void(GLAPIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)(GLenum stream); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3BATIPROC)(GLenum stream, GLbyte x, GLbyte y, GLbyte z); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3BVATIPROC)(GLenum stream, const GLbyte * coords); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3IATIPROC)(GLenum stream, GLint x, GLint y, GLint z); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLNORMALSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); typedef void(GLAPIENTRY * PFNGLVERTEXBLENDENVFATIPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLVERTEXBLENDENVIATIPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1DATIPROC)(GLenum stream, GLdouble x); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1DVATIPROC)(GLenum stream, const GLdouble * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1FATIPROC)(GLenum stream, GLfloat x); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1FVATIPROC)(GLenum stream, const GLfloat * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1IATIPROC)(GLenum stream, GLint x); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1IVATIPROC)(GLenum stream, const GLint * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1SATIPROC)(GLenum stream, GLshort x); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM1SVATIPROC)(GLenum stream, const GLshort * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2DATIPROC)(GLenum stream, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2DVATIPROC)(GLenum stream, const GLdouble * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2FATIPROC)(GLenum stream, GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2FVATIPROC)(GLenum stream, const GLfloat * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2IATIPROC)(GLenum stream, GLint x, GLint y); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2IVATIPROC)(GLenum stream, const GLint * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2SATIPROC)(GLenum stream, GLshort x, GLshort y); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM2SVATIPROC)(GLenum stream, const GLshort * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3IATIPROC)(GLenum stream, GLint x, GLint y, GLint z); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4DVATIPROC)(GLenum stream, const GLdouble * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4FVATIPROC)(GLenum stream, const GLfloat * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4IATIPROC)(GLenum stream, GLint x, GLint y, GLint z, GLint w); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4IVATIPROC)(GLenum stream, const GLint * coords); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); typedef void(GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC)(GLenum stream, const GLshort * coords); #define glClientActiveVertexStreamATI GLEW_GET_FUN(__glewClientActiveVertexStreamATI) #define glNormalStream3bATI GLEW_GET_FUN(__glewNormalStream3bATI) #define glNormalStream3bvATI GLEW_GET_FUN(__glewNormalStream3bvATI) #define glNormalStream3dATI GLEW_GET_FUN(__glewNormalStream3dATI) #define glNormalStream3dvATI GLEW_GET_FUN(__glewNormalStream3dvATI) #define glNormalStream3fATI GLEW_GET_FUN(__glewNormalStream3fATI) #define glNormalStream3fvATI GLEW_GET_FUN(__glewNormalStream3fvATI) #define glNormalStream3iATI GLEW_GET_FUN(__glewNormalStream3iATI) #define glNormalStream3ivATI GLEW_GET_FUN(__glewNormalStream3ivATI) #define glNormalStream3sATI GLEW_GET_FUN(__glewNormalStream3sATI) #define glNormalStream3svATI GLEW_GET_FUN(__glewNormalStream3svATI) #define glVertexBlendEnvfATI GLEW_GET_FUN(__glewVertexBlendEnvfATI) #define glVertexBlendEnviATI GLEW_GET_FUN(__glewVertexBlendEnviATI) #define glVertexStream1dATI GLEW_GET_FUN(__glewVertexStream1dATI) #define glVertexStream1dvATI GLEW_GET_FUN(__glewVertexStream1dvATI) #define glVertexStream1fATI GLEW_GET_FUN(__glewVertexStream1fATI) #define glVertexStream1fvATI GLEW_GET_FUN(__glewVertexStream1fvATI) #define glVertexStream1iATI GLEW_GET_FUN(__glewVertexStream1iATI) #define glVertexStream1ivATI GLEW_GET_FUN(__glewVertexStream1ivATI) #define glVertexStream1sATI GLEW_GET_FUN(__glewVertexStream1sATI) #define glVertexStream1svATI GLEW_GET_FUN(__glewVertexStream1svATI) #define glVertexStream2dATI GLEW_GET_FUN(__glewVertexStream2dATI) #define glVertexStream2dvATI GLEW_GET_FUN(__glewVertexStream2dvATI) #define glVertexStream2fATI GLEW_GET_FUN(__glewVertexStream2fATI) #define glVertexStream2fvATI GLEW_GET_FUN(__glewVertexStream2fvATI) #define glVertexStream2iATI GLEW_GET_FUN(__glewVertexStream2iATI) #define glVertexStream2ivATI GLEW_GET_FUN(__glewVertexStream2ivATI) #define glVertexStream2sATI GLEW_GET_FUN(__glewVertexStream2sATI) #define glVertexStream2svATI GLEW_GET_FUN(__glewVertexStream2svATI) #define glVertexStream3dATI GLEW_GET_FUN(__glewVertexStream3dATI) #define glVertexStream3dvATI GLEW_GET_FUN(__glewVertexStream3dvATI) #define glVertexStream3fATI GLEW_GET_FUN(__glewVertexStream3fATI) #define glVertexStream3fvATI GLEW_GET_FUN(__glewVertexStream3fvATI) #define glVertexStream3iATI GLEW_GET_FUN(__glewVertexStream3iATI) #define glVertexStream3ivATI GLEW_GET_FUN(__glewVertexStream3ivATI) #define glVertexStream3sATI GLEW_GET_FUN(__glewVertexStream3sATI) #define glVertexStream3svATI GLEW_GET_FUN(__glewVertexStream3svATI) #define glVertexStream4dATI GLEW_GET_FUN(__glewVertexStream4dATI) #define glVertexStream4dvATI GLEW_GET_FUN(__glewVertexStream4dvATI) #define glVertexStream4fATI GLEW_GET_FUN(__glewVertexStream4fATI) #define glVertexStream4fvATI GLEW_GET_FUN(__glewVertexStream4fvATI) #define glVertexStream4iATI GLEW_GET_FUN(__glewVertexStream4iATI) #define glVertexStream4ivATI GLEW_GET_FUN(__glewVertexStream4ivATI) #define glVertexStream4sATI GLEW_GET_FUN(__glewVertexStream4sATI) #define glVertexStream4svATI GLEW_GET_FUN(__glewVertexStream4svATI) #define GLEW_ATI_vertex_streams GLEW_GET_VAR(__GLEW_ATI_vertex_streams) #endif /* GL_ATI_vertex_streams */ /* --------------------------- GL_EXT_422_pixels --------------------------- */ #ifndef GL_EXT_422_pixels #define GL_EXT_422_pixels 1 #define GL_422_EXT 0x80CC #define GL_422_REV_EXT 0x80CD #define GL_422_AVERAGE_EXT 0x80CE #define GL_422_REV_AVERAGE_EXT 0x80CF #define GLEW_EXT_422_pixels GLEW_GET_VAR(__GLEW_EXT_422_pixels) #endif /* GL_EXT_422_pixels */ /* ---------------------------- GL_EXT_Cg_shader --------------------------- */ #ifndef GL_EXT_Cg_shader #define GL_EXT_Cg_shader 1 #define GL_CG_VERTEX_SHADER_EXT 0x890E #define GL_CG_FRAGMENT_SHADER_EXT 0x890F #define GLEW_EXT_Cg_shader GLEW_GET_VAR(__GLEW_EXT_Cg_shader) #endif /* GL_EXT_Cg_shader */ /* ------------------------------ GL_EXT_abgr ------------------------------ */ #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #define GL_ABGR_EXT 0x8000 #define GLEW_EXT_abgr GLEW_GET_VAR(__GLEW_EXT_abgr) #endif /* GL_EXT_abgr */ /* ------------------------------ GL_EXT_bgra ------------------------------ */ #ifndef GL_EXT_bgra #define GL_EXT_bgra 1 #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 #define GLEW_EXT_bgra GLEW_GET_VAR(__GLEW_EXT_bgra) #endif /* GL_EXT_bgra */ /* ------------------------ GL_EXT_bindable_uniform ------------------------ */ #ifndef GL_EXT_bindable_uniform #define GL_EXT_bindable_uniform 1 #define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 #define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 #define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 #define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED #define GL_UNIFORM_BUFFER_EXT 0x8DEE #define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF typedef GLint(GLAPIENTRY * PFNGLGETUNIFORMBUFFERSIZEEXTPROC)(GLuint program, GLint location); typedef GLintptr(GLAPIENTRY * PFNGLGETUNIFORMOFFSETEXTPROC)(GLuint program, GLint location); typedef void(GLAPIENTRY * PFNGLUNIFORMBUFFEREXTPROC)(GLuint program, GLint location, GLuint buffer); #define glGetUniformBufferSizeEXT GLEW_GET_FUN(__glewGetUniformBufferSizeEXT) #define glGetUniformOffsetEXT GLEW_GET_FUN(__glewGetUniformOffsetEXT) #define glUniformBufferEXT GLEW_GET_FUN(__glewUniformBufferEXT) #define GLEW_EXT_bindable_uniform GLEW_GET_VAR(__GLEW_EXT_bindable_uniform) #endif /* GL_EXT_bindable_uniform */ /* --------------------------- GL_EXT_blend_color -------------------------- */ #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 #define GL_CONSTANT_ALPHA_EXT 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 #define GL_BLEND_COLOR_EXT 0x8005 typedef void(GLAPIENTRY * PFNGLBLENDCOLOREXTPROC)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); #define glBlendColorEXT GLEW_GET_FUN(__glewBlendColorEXT) #define GLEW_EXT_blend_color GLEW_GET_VAR(__GLEW_EXT_blend_color) #endif /* GL_EXT_blend_color */ /* --------------------- GL_EXT_blend_equation_separate -------------------- */ #ifndef GL_EXT_blend_equation_separate #define GL_EXT_blend_equation_separate 1 #define GL_BLEND_EQUATION_RGB_EXT 0x8009 #define GL_BLEND_EQUATION_ALPHA_EXT 0x883D typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); #define glBlendEquationSeparateEXT GLEW_GET_FUN(__glewBlendEquationSeparateEXT) #define GLEW_EXT_blend_equation_separate GLEW_GET_VAR(__GLEW_EXT_blend_equation_separate) #endif /* GL_EXT_blend_equation_separate */ /* ----------------------- GL_EXT_blend_func_separate ---------------------- */ #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #define GL_BLEND_DST_RGB_EXT 0x80C8 #define GL_BLEND_SRC_RGB_EXT 0x80C9 #define GL_BLEND_DST_ALPHA_EXT 0x80CA #define GL_BLEND_SRC_ALPHA_EXT 0x80CB typedef void(GLAPIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #define glBlendFuncSeparateEXT GLEW_GET_FUN(__glewBlendFuncSeparateEXT) #define GLEW_EXT_blend_func_separate GLEW_GET_VAR(__GLEW_EXT_blend_func_separate) #endif /* GL_EXT_blend_func_separate */ /* ------------------------- GL_EXT_blend_logic_op ------------------------- */ #ifndef GL_EXT_blend_logic_op #define GL_EXT_blend_logic_op 1 #define GLEW_EXT_blend_logic_op GLEW_GET_VAR(__GLEW_EXT_blend_logic_op) #endif /* GL_EXT_blend_logic_op */ /* -------------------------- GL_EXT_blend_minmax -------------------------- */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #define GL_FUNC_ADD_EXT 0x8006 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #define GL_BLEND_EQUATION_EXT 0x8009 typedef void(GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC)(GLenum mode); #define glBlendEquationEXT GLEW_GET_FUN(__glewBlendEquationEXT) #define GLEW_EXT_blend_minmax GLEW_GET_VAR(__GLEW_EXT_blend_minmax) #endif /* GL_EXT_blend_minmax */ /* ------------------------- GL_EXT_blend_subtract ------------------------- */ #ifndef GL_EXT_blend_subtract #define GL_EXT_blend_subtract 1 #define GL_FUNC_SUBTRACT_EXT 0x800A #define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B #define GLEW_EXT_blend_subtract GLEW_GET_VAR(__GLEW_EXT_blend_subtract) #endif /* GL_EXT_blend_subtract */ /* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ #ifndef GL_EXT_clip_volume_hint #define GL_EXT_clip_volume_hint 1 #define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 #define GLEW_EXT_clip_volume_hint GLEW_GET_VAR(__GLEW_EXT_clip_volume_hint) #endif /* GL_EXT_clip_volume_hint */ /* ------------------------------ GL_EXT_cmyka ----------------------------- */ #ifndef GL_EXT_cmyka #define GL_EXT_cmyka 1 #define GL_CMYK_EXT 0x800C #define GL_CMYKA_EXT 0x800D #define GL_PACK_CMYK_HINT_EXT 0x800E #define GL_UNPACK_CMYK_HINT_EXT 0x800F #define GLEW_EXT_cmyka GLEW_GET_VAR(__GLEW_EXT_cmyka) #endif /* GL_EXT_cmyka */ /* ------------------------- GL_EXT_color_subtable ------------------------- */ #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 typedef void(GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); typedef void(GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT) #define glCopyColorSubTableEXT GLEW_GET_FUN(__glewCopyColorSubTableEXT) #define GLEW_EXT_color_subtable GLEW_GET_VAR(__GLEW_EXT_color_subtable) #endif /* GL_EXT_color_subtable */ /* ---------------------- GL_EXT_compiled_vertex_array --------------------- */ #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 #define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 typedef void(GLAPIENTRY * PFNGLLOCKARRAYSEXTPROC)(GLint first, GLsizei count); typedef void(GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC)(void); #define glLockArraysEXT GLEW_GET_FUN(__glewLockArraysEXT) #define glUnlockArraysEXT GLEW_GET_FUN(__glewUnlockArraysEXT) #define GLEW_EXT_compiled_vertex_array GLEW_GET_VAR(__GLEW_EXT_compiled_vertex_array) #endif /* GL_EXT_compiled_vertex_array */ /* --------------------------- GL_EXT_convolution -------------------------- */ #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #define GL_CONVOLUTION_1D_EXT 0x8010 #define GL_CONVOLUTION_2D_EXT 0x8011 #define GL_SEPARABLE_2D_EXT 0x8012 #define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 #define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 #define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 #define GL_REDUCE_EXT 0x8016 #define GL_CONVOLUTION_FORMAT_EXT 0x8017 #define GL_CONVOLUTION_WIDTH_EXT 0x8018 #define GL_CONVOLUTION_HEIGHT_EXT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A #define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F #define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 typedef void(GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * image); typedef void(GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); typedef void(GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); #define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT) #define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT) #define glConvolutionParameterfEXT GLEW_GET_FUN(__glewConvolutionParameterfEXT) #define glConvolutionParameterfvEXT GLEW_GET_FUN(__glewConvolutionParameterfvEXT) #define glConvolutionParameteriEXT GLEW_GET_FUN(__glewConvolutionParameteriEXT) #define glConvolutionParameterivEXT GLEW_GET_FUN(__glewConvolutionParameterivEXT) #define glCopyConvolutionFilter1DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter1DEXT) #define glCopyConvolutionFilter2DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter2DEXT) #define glGetConvolutionFilterEXT GLEW_GET_FUN(__glewGetConvolutionFilterEXT) #define glGetConvolutionParameterfvEXT GLEW_GET_FUN(__glewGetConvolutionParameterfvEXT) #define glGetConvolutionParameterivEXT GLEW_GET_FUN(__glewGetConvolutionParameterivEXT) #define glGetSeparableFilterEXT GLEW_GET_FUN(__glewGetSeparableFilterEXT) #define glSeparableFilter2DEXT GLEW_GET_FUN(__glewSeparableFilter2DEXT) #define GLEW_EXT_convolution GLEW_GET_VAR(__GLEW_EXT_convolution) #endif /* GL_EXT_convolution */ /* ------------------------ GL_EXT_coordinate_frame ------------------------ */ #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #define GL_TANGENT_ARRAY_EXT 0x8439 #define GL_BINORMAL_ARRAY_EXT 0x843A #define GL_CURRENT_TANGENT_EXT 0x843B #define GL_CURRENT_BINORMAL_EXT 0x843C #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 #define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 #define GL_MAP1_TANGENT_EXT 0x8444 #define GL_MAP2_TANGENT_EXT 0x8445 #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 typedef void(GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, void * pointer); typedef void(GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC)(GLenum type, GLsizei stride, void * pointer); #define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT) #define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT) #define GLEW_EXT_coordinate_frame GLEW_GET_VAR(__GLEW_EXT_coordinate_frame) #endif /* GL_EXT_coordinate_frame */ /* -------------------------- GL_EXT_copy_texture -------------------------- */ #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 typedef void(GLAPIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void(GLAPIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void(GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #define glCopyTexImage1DEXT GLEW_GET_FUN(__glewCopyTexImage1DEXT) #define glCopyTexImage2DEXT GLEW_GET_FUN(__glewCopyTexImage2DEXT) #define glCopyTexSubImage1DEXT GLEW_GET_FUN(__glewCopyTexSubImage1DEXT) #define glCopyTexSubImage2DEXT GLEW_GET_FUN(__glewCopyTexSubImage2DEXT) #define glCopyTexSubImage3DEXT GLEW_GET_FUN(__glewCopyTexSubImage3DEXT) #define GLEW_EXT_copy_texture GLEW_GET_VAR(__GLEW_EXT_copy_texture) #endif /* GL_EXT_copy_texture */ /* --------------------------- GL_EXT_cull_vertex -------------------------- */ #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #define GL_CULL_VERTEX_EXT 0x81AA #define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB #define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC typedef void(GLAPIENTRY * PFNGLCULLPARAMETERDVEXTPROC)(GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLCULLPARAMETERFVEXTPROC)(GLenum pname, GLfloat * params); #define glCullParameterdvEXT GLEW_GET_FUN(__glewCullParameterdvEXT) #define glCullParameterfvEXT GLEW_GET_FUN(__glewCullParameterfvEXT) #define GLEW_EXT_cull_vertex GLEW_GET_VAR(__GLEW_EXT_cull_vertex) #endif /* GL_EXT_cull_vertex */ /* -------------------------- GL_EXT_debug_marker -------------------------- */ #ifndef GL_EXT_debug_marker #define GL_EXT_debug_marker 1 typedef void(GLAPIENTRY * PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar * marker); typedef void(GLAPIENTRY * PFNGLPOPGROUPMARKEREXTPROC)(void); typedef void(GLAPIENTRY * PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar * marker); #define glInsertEventMarkerEXT GLEW_GET_FUN(__glewInsertEventMarkerEXT) #define glPopGroupMarkerEXT GLEW_GET_FUN(__glewPopGroupMarkerEXT) #define glPushGroupMarkerEXT GLEW_GET_FUN(__glewPushGroupMarkerEXT) #define GLEW_EXT_debug_marker GLEW_GET_VAR(__GLEW_EXT_debug_marker) #endif /* GL_EXT_debug_marker */ /* ------------------------ GL_EXT_depth_bounds_test ----------------------- */ #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 typedef void(GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC)(GLclampd zmin, GLclampd zmax); #define glDepthBoundsEXT GLEW_GET_FUN(__glewDepthBoundsEXT) #define GLEW_EXT_depth_bounds_test GLEW_GET_VAR(__GLEW_EXT_depth_bounds_test) #endif /* GL_EXT_depth_bounds_test */ /* ----------------------- GL_EXT_direct_state_access ---------------------- */ #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #define GL_PROGRAM_MATRIX_EXT 0x8E2D #define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E #define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F typedef void(GLAPIENTRY * PFNGLBINDMULTITEXTUREEXTPROC)(GLenum texunit, GLenum target, GLuint texture); typedef GLenum(GLAPIENTRY * PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)(GLuint framebuffer, GLenum target); typedef void(GLAPIENTRY * PFNGLCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, 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(GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); typedef void(GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, 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(GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void(GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void(GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void(GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void(GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); typedef void(GLAPIENTRY * PFNGLDISABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); typedef void(GLAPIENTRY * PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); typedef void(GLAPIENTRY * PFNGLDISABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); typedef void(GLAPIENTRY * PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); typedef void(GLAPIENTRY * PFNGLENABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); typedef void(GLAPIENTRY * PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); typedef void(GLAPIENTRY * PFNGLENABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); typedef void(GLAPIENTRY * PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)(GLuint framebuffer, GLsizei n, const GLenum * bufs); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERREADBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); typedef void(GLAPIENTRY * PFNGLGENERATEMULTITEXMIPMAPEXTPROC)(GLenum texunit, GLenum target); typedef void(GLAPIENTRY * PFNGLGENERATETEXTUREMIPMAPEXTPROC)(GLuint texture, GLenum target); typedef void(GLAPIENTRY * PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint level, void * img); typedef void(GLAPIENTRY * PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint level, void * img); typedef void(GLAPIENTRY * PFNGLGETDOUBLEINDEXEDVEXTPROC)(GLenum target, GLuint index, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETDOUBLEI_VEXTPROC)(GLenum pname, GLuint index, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETFLOATINDEXEDVEXTPROC)(GLenum target, GLuint index, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETFLOATI_VEXTPROC)(GLenum pname, GLuint index, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * param); typedef void(GLAPIENTRY * PFNGLGETMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); typedef void(GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)(GLuint buffer, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)(GLuint buffer, GLenum pname, void ** params); typedef void(GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); typedef void(GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLint * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum pname, void * string); typedef void(GLAPIENTRY * PFNGLGETNAMEDPROGRAMIVEXTPROC)(GLuint program, GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)(GLuint renderbuffer, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETPOINTERINDEXEDVEXTPROC)(GLenum target, GLuint index, GLvoid ** params); typedef void(GLAPIENTRY * PFNGLGETPOINTERI_VEXTPROC)(GLenum pname, GLuint index, GLvoid ** params); typedef void(GLAPIENTRY * PFNGLGETTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); typedef void(GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLGETTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); typedef void(GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERVEXTPROC)(GLuint vaobj, GLenum pname, GLint * param); typedef void(GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, GLvoid ** param); typedef void(GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERVEXTPROC)(GLuint vaobj, GLenum pname, GLvoid ** param); typedef GLvoid *(GLAPIENTRY * PFNGLMAPNAMEDBUFFEREXTPROC)(GLuint buffer, GLenum access); typedef GLvoid *(GLAPIENTRY * PFNGLMAPNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void(GLAPIENTRY * PFNGLMATRIXFRUSTUMEXTPROC)(GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); typedef void(GLAPIENTRY * PFNGLMATRIXLOADIDENTITYEXTPROC)(GLenum matrixMode); typedef void(GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEDEXTPROC)(GLenum matrixMode, const GLdouble * m); typedef void(GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEFEXTPROC)(GLenum matrixMode, const GLfloat * m); typedef void(GLAPIENTRY * PFNGLMATRIXLOADDEXTPROC)(GLenum matrixMode, const GLdouble * m); typedef void(GLAPIENTRY * PFNGLMATRIXLOADFEXTPROC)(GLenum matrixMode, const GLfloat * m); typedef void(GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEDEXTPROC)(GLenum matrixMode, const GLdouble * m); typedef void(GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEFEXTPROC)(GLenum matrixMode, const GLfloat * m); typedef void(GLAPIENTRY * PFNGLMATRIXMULTDEXTPROC)(GLenum matrixMode, const GLdouble * m); typedef void(GLAPIENTRY * PFNGLMATRIXMULTFEXTPROC)(GLenum matrixMode, const GLfloat * m); typedef void(GLAPIENTRY * PFNGLMATRIXORTHOEXTPROC)(GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); typedef void(GLAPIENTRY * PFNGLMATRIXPOPEXTPROC)(GLenum matrixMode); typedef void(GLAPIENTRY * PFNGLMATRIXPUSHEXTPROC)(GLenum matrixMode); typedef void(GLAPIENTRY * PFNGLMATRIXROTATEDEXTPROC)(GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLMATRIXROTATEFEXTPROC)(GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLMATRIXSCALEDEXTPROC)(GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLMATRIXSCALEFEXTPROC)(GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLMATRIXTRANSLATEDEXTPROC)(GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLMATRIXTRANSLATEFEXTPROC)(GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLMULTITEXBUFFEREXTPROC)(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORDPOINTEREXTPROC)(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer); typedef void(GLAPIENTRY * PFNGLMULTITEXENVFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLMULTITEXENVIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLMULTITEXGENDEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble param); typedef void(GLAPIENTRY * PFNGLMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); typedef void(GLAPIENTRY * PFNGLMULTITEXGENFEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLMULTITEXGENIEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLuint * params); typedef void(GLAPIENTRY * PFNGLMULTITEXPARAMETERFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * param); typedef void(GLAPIENTRY * PFNGLMULTITEXPARAMETERIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * param); typedef void(GLAPIENTRY * PFNGLMULTITEXRENDERBUFFEREXTPROC)(GLenum texunit, GLenum target, GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, 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(GLAPIENTRY * PFNGLNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); typedef void(GLAPIENTRY * PFNGLNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); typedef void(GLAPIENTRY * PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void(GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLdouble * params); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLint * params); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLuint * params); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); typedef void(GLAPIENTRY * PFNGLNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum format, GLsizei len, const void * string); typedef void(GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1DEXTPROC)(GLuint program, GLint location, GLdouble x); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1FEXTPROC)(GLuint program, GLint location, GLfloat v0); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1IEXTPROC)(GLuint program, GLint location, GLint v0); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIEXTPROC)(GLuint program, GLint location, GLuint v0); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); typedef void(GLAPIENTRY * PFNGLTEXTUREBUFFEREXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); typedef void(GLAPIENTRY * PFNGLTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLuint * params); typedef void(GLAPIENTRY * PFNGLTEXTUREPARAMETERFEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLfloat * param); typedef void(GLAPIENTRY * PFNGLTEXTUREPARAMETERIEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * param); typedef void(GLAPIENTRY * PFNGLTEXTURERENDERBUFFEREXTPROC)(GLuint texture, GLenum target, GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); typedef GLboolean(GLAPIENTRY * PFNGLUNMAPNAMEDBUFFEREXTPROC)(GLuint buffer); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); #define glBindMultiTextureEXT GLEW_GET_FUN(__glewBindMultiTextureEXT) #define glCheckNamedFramebufferStatusEXT GLEW_GET_FUN(__glewCheckNamedFramebufferStatusEXT) #define glClientAttribDefaultEXT GLEW_GET_FUN(__glewClientAttribDefaultEXT) #define glCompressedMultiTexImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage1DEXT) #define glCompressedMultiTexImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage2DEXT) #define glCompressedMultiTexImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage3DEXT) #define glCompressedMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage1DEXT) #define glCompressedMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage2DEXT) #define glCompressedMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage3DEXT) #define glCompressedTextureImage1DEXT GLEW_GET_FUN(__glewCompressedTextureImage1DEXT) #define glCompressedTextureImage2DEXT GLEW_GET_FUN(__glewCompressedTextureImage2DEXT) #define glCompressedTextureImage3DEXT GLEW_GET_FUN(__glewCompressedTextureImage3DEXT) #define glCompressedTextureSubImage1DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage1DEXT) #define glCompressedTextureSubImage2DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage2DEXT) #define glCompressedTextureSubImage3DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage3DEXT) #define glCopyMultiTexImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexImage1DEXT) #define glCopyMultiTexImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexImage2DEXT) #define glCopyMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage1DEXT) #define glCopyMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage2DEXT) #define glCopyMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage3DEXT) #define glCopyTextureImage1DEXT GLEW_GET_FUN(__glewCopyTextureImage1DEXT) #define glCopyTextureImage2DEXT GLEW_GET_FUN(__glewCopyTextureImage2DEXT) #define glCopyTextureSubImage1DEXT GLEW_GET_FUN(__glewCopyTextureSubImage1DEXT) #define glCopyTextureSubImage2DEXT GLEW_GET_FUN(__glewCopyTextureSubImage2DEXT) #define glCopyTextureSubImage3DEXT GLEW_GET_FUN(__glewCopyTextureSubImage3DEXT) #define glDisableClientStateIndexedEXT GLEW_GET_FUN(__glewDisableClientStateIndexedEXT) #define glDisableClientStateiEXT GLEW_GET_FUN(__glewDisableClientStateiEXT) #define glDisableVertexArrayAttribEXT GLEW_GET_FUN(__glewDisableVertexArrayAttribEXT) #define glDisableVertexArrayEXT GLEW_GET_FUN(__glewDisableVertexArrayEXT) #define glEnableClientStateIndexedEXT GLEW_GET_FUN(__glewEnableClientStateIndexedEXT) #define glEnableClientStateiEXT GLEW_GET_FUN(__glewEnableClientStateiEXT) #define glEnableVertexArrayAttribEXT GLEW_GET_FUN(__glewEnableVertexArrayAttribEXT) #define glEnableVertexArrayEXT GLEW_GET_FUN(__glewEnableVertexArrayEXT) #define glFlushMappedNamedBufferRangeEXT GLEW_GET_FUN(__glewFlushMappedNamedBufferRangeEXT) #define glFramebufferDrawBufferEXT GLEW_GET_FUN(__glewFramebufferDrawBufferEXT) #define glFramebufferDrawBuffersEXT GLEW_GET_FUN(__glewFramebufferDrawBuffersEXT) #define glFramebufferReadBufferEXT GLEW_GET_FUN(__glewFramebufferReadBufferEXT) #define glGenerateMultiTexMipmapEXT GLEW_GET_FUN(__glewGenerateMultiTexMipmapEXT) #define glGenerateTextureMipmapEXT GLEW_GET_FUN(__glewGenerateTextureMipmapEXT) #define glGetCompressedMultiTexImageEXT GLEW_GET_FUN(__glewGetCompressedMultiTexImageEXT) #define glGetCompressedTextureImageEXT GLEW_GET_FUN(__glewGetCompressedTextureImageEXT) #define glGetDoubleIndexedvEXT GLEW_GET_FUN(__glewGetDoubleIndexedvEXT) #define glGetDoublei_vEXT GLEW_GET_FUN(__glewGetDoublei_vEXT) #define glGetFloatIndexedvEXT GLEW_GET_FUN(__glewGetFloatIndexedvEXT) #define glGetFloati_vEXT GLEW_GET_FUN(__glewGetFloati_vEXT) #define glGetFramebufferParameterivEXT GLEW_GET_FUN(__glewGetFramebufferParameterivEXT) #define glGetMultiTexEnvfvEXT GLEW_GET_FUN(__glewGetMultiTexEnvfvEXT) #define glGetMultiTexEnvivEXT GLEW_GET_FUN(__glewGetMultiTexEnvivEXT) #define glGetMultiTexGendvEXT GLEW_GET_FUN(__glewGetMultiTexGendvEXT) #define glGetMultiTexGenfvEXT GLEW_GET_FUN(__glewGetMultiTexGenfvEXT) #define glGetMultiTexGenivEXT GLEW_GET_FUN(__glewGetMultiTexGenivEXT) #define glGetMultiTexImageEXT GLEW_GET_FUN(__glewGetMultiTexImageEXT) #define glGetMultiTexLevelParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterfvEXT) #define glGetMultiTexLevelParameterivEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterivEXT) #define glGetMultiTexParameterIivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIivEXT) #define glGetMultiTexParameterIuivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIuivEXT) #define glGetMultiTexParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexParameterfvEXT) #define glGetMultiTexParameterivEXT GLEW_GET_FUN(__glewGetMultiTexParameterivEXT) #define glGetNamedBufferParameterivEXT GLEW_GET_FUN(__glewGetNamedBufferParameterivEXT) #define glGetNamedBufferPointervEXT GLEW_GET_FUN(__glewGetNamedBufferPointervEXT) #define glGetNamedBufferSubDataEXT GLEW_GET_FUN(__glewGetNamedBufferSubDataEXT) #define glGetNamedFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferAttachmentParameterivEXT) #define glGetNamedProgramLocalParameterIivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIivEXT) #define glGetNamedProgramLocalParameterIuivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIuivEXT) #define glGetNamedProgramLocalParameterdvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterdvEXT) #define glGetNamedProgramLocalParameterfvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterfvEXT) #define glGetNamedProgramStringEXT GLEW_GET_FUN(__glewGetNamedProgramStringEXT) #define glGetNamedProgramivEXT GLEW_GET_FUN(__glewGetNamedProgramivEXT) #define glGetNamedRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetNamedRenderbufferParameterivEXT) #define glGetPointerIndexedvEXT GLEW_GET_FUN(__glewGetPointerIndexedvEXT) #define glGetPointeri_vEXT GLEW_GET_FUN(__glewGetPointeri_vEXT) #define glGetTextureImageEXT GLEW_GET_FUN(__glewGetTextureImageEXT) #define glGetTextureLevelParameterfvEXT GLEW_GET_FUN(__glewGetTextureLevelParameterfvEXT) #define glGetTextureLevelParameterivEXT GLEW_GET_FUN(__glewGetTextureLevelParameterivEXT) #define glGetTextureParameterIivEXT GLEW_GET_FUN(__glewGetTextureParameterIivEXT) #define glGetTextureParameterIuivEXT GLEW_GET_FUN(__glewGetTextureParameterIuivEXT) #define glGetTextureParameterfvEXT GLEW_GET_FUN(__glewGetTextureParameterfvEXT) #define glGetTextureParameterivEXT GLEW_GET_FUN(__glewGetTextureParameterivEXT) #define glGetVertexArrayIntegeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayIntegeri_vEXT) #define glGetVertexArrayIntegervEXT GLEW_GET_FUN(__glewGetVertexArrayIntegervEXT) #define glGetVertexArrayPointeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayPointeri_vEXT) #define glGetVertexArrayPointervEXT GLEW_GET_FUN(__glewGetVertexArrayPointervEXT) #define glMapNamedBufferEXT GLEW_GET_FUN(__glewMapNamedBufferEXT) #define glMapNamedBufferRangeEXT GLEW_GET_FUN(__glewMapNamedBufferRangeEXT) #define glMatrixFrustumEXT GLEW_GET_FUN(__glewMatrixFrustumEXT) #define glMatrixLoadIdentityEXT GLEW_GET_FUN(__glewMatrixLoadIdentityEXT) #define glMatrixLoadTransposedEXT GLEW_GET_FUN(__glewMatrixLoadTransposedEXT) #define glMatrixLoadTransposefEXT GLEW_GET_FUN(__glewMatrixLoadTransposefEXT) #define glMatrixLoaddEXT GLEW_GET_FUN(__glewMatrixLoaddEXT) #define glMatrixLoadfEXT GLEW_GET_FUN(__glewMatrixLoadfEXT) #define glMatrixMultTransposedEXT GLEW_GET_FUN(__glewMatrixMultTransposedEXT) #define glMatrixMultTransposefEXT GLEW_GET_FUN(__glewMatrixMultTransposefEXT) #define glMatrixMultdEXT GLEW_GET_FUN(__glewMatrixMultdEXT) #define glMatrixMultfEXT GLEW_GET_FUN(__glewMatrixMultfEXT) #define glMatrixOrthoEXT GLEW_GET_FUN(__glewMatrixOrthoEXT) #define glMatrixPopEXT GLEW_GET_FUN(__glewMatrixPopEXT) #define glMatrixPushEXT GLEW_GET_FUN(__glewMatrixPushEXT) #define glMatrixRotatedEXT GLEW_GET_FUN(__glewMatrixRotatedEXT) #define glMatrixRotatefEXT GLEW_GET_FUN(__glewMatrixRotatefEXT) #define glMatrixScaledEXT GLEW_GET_FUN(__glewMatrixScaledEXT) #define glMatrixScalefEXT GLEW_GET_FUN(__glewMatrixScalefEXT) #define glMatrixTranslatedEXT GLEW_GET_FUN(__glewMatrixTranslatedEXT) #define glMatrixTranslatefEXT GLEW_GET_FUN(__glewMatrixTranslatefEXT) #define glMultiTexBufferEXT GLEW_GET_FUN(__glewMultiTexBufferEXT) #define glMultiTexCoordPointerEXT GLEW_GET_FUN(__glewMultiTexCoordPointerEXT) #define glMultiTexEnvfEXT GLEW_GET_FUN(__glewMultiTexEnvfEXT) #define glMultiTexEnvfvEXT GLEW_GET_FUN(__glewMultiTexEnvfvEXT) #define glMultiTexEnviEXT GLEW_GET_FUN(__glewMultiTexEnviEXT) #define glMultiTexEnvivEXT GLEW_GET_FUN(__glewMultiTexEnvivEXT) #define glMultiTexGendEXT GLEW_GET_FUN(__glewMultiTexGendEXT) #define glMultiTexGendvEXT GLEW_GET_FUN(__glewMultiTexGendvEXT) #define glMultiTexGenfEXT GLEW_GET_FUN(__glewMultiTexGenfEXT) #define glMultiTexGenfvEXT GLEW_GET_FUN(__glewMultiTexGenfvEXT) #define glMultiTexGeniEXT GLEW_GET_FUN(__glewMultiTexGeniEXT) #define glMultiTexGenivEXT GLEW_GET_FUN(__glewMultiTexGenivEXT) #define glMultiTexImage1DEXT GLEW_GET_FUN(__glewMultiTexImage1DEXT) #define glMultiTexImage2DEXT GLEW_GET_FUN(__glewMultiTexImage2DEXT) #define glMultiTexImage3DEXT GLEW_GET_FUN(__glewMultiTexImage3DEXT) #define glMultiTexParameterIivEXT GLEW_GET_FUN(__glewMultiTexParameterIivEXT) #define glMultiTexParameterIuivEXT GLEW_GET_FUN(__glewMultiTexParameterIuivEXT) #define glMultiTexParameterfEXT GLEW_GET_FUN(__glewMultiTexParameterfEXT) #define glMultiTexParameterfvEXT GLEW_GET_FUN(__glewMultiTexParameterfvEXT) #define glMultiTexParameteriEXT GLEW_GET_FUN(__glewMultiTexParameteriEXT) #define glMultiTexParameterivEXT GLEW_GET_FUN(__glewMultiTexParameterivEXT) #define glMultiTexRenderbufferEXT GLEW_GET_FUN(__glewMultiTexRenderbufferEXT) #define glMultiTexSubImage1DEXT GLEW_GET_FUN(__glewMultiTexSubImage1DEXT) #define glMultiTexSubImage2DEXT GLEW_GET_FUN(__glewMultiTexSubImage2DEXT) #define glMultiTexSubImage3DEXT GLEW_GET_FUN(__glewMultiTexSubImage3DEXT) #define glNamedBufferDataEXT GLEW_GET_FUN(__glewNamedBufferDataEXT) #define glNamedBufferSubDataEXT GLEW_GET_FUN(__glewNamedBufferSubDataEXT) #define glNamedCopyBufferSubDataEXT GLEW_GET_FUN(__glewNamedCopyBufferSubDataEXT) #define glNamedFramebufferRenderbufferEXT GLEW_GET_FUN(__glewNamedFramebufferRenderbufferEXT) #define glNamedFramebufferTexture1DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture1DEXT) #define glNamedFramebufferTexture2DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture2DEXT) #define glNamedFramebufferTexture3DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture3DEXT) #define glNamedFramebufferTextureEXT GLEW_GET_FUN(__glewNamedFramebufferTextureEXT) #define glNamedFramebufferTextureFaceEXT GLEW_GET_FUN(__glewNamedFramebufferTextureFaceEXT) #define glNamedFramebufferTextureLayerEXT GLEW_GET_FUN(__glewNamedFramebufferTextureLayerEXT) #define glNamedProgramLocalParameter4dEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dEXT) #define glNamedProgramLocalParameter4dvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dvEXT) #define glNamedProgramLocalParameter4fEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fEXT) #define glNamedProgramLocalParameter4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fvEXT) #define glNamedProgramLocalParameterI4iEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4iEXT) #define glNamedProgramLocalParameterI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4ivEXT) #define glNamedProgramLocalParameterI4uiEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uiEXT) #define glNamedProgramLocalParameterI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uivEXT) #define glNamedProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameters4fvEXT) #define glNamedProgramLocalParametersI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4ivEXT) #define glNamedProgramLocalParametersI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4uivEXT) #define glNamedProgramStringEXT GLEW_GET_FUN(__glewNamedProgramStringEXT) #define glNamedRenderbufferStorageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageEXT) #define glNamedRenderbufferStorageMultisampleCoverageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleCoverageEXT) #define glNamedRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleEXT) #define glProgramUniform1dEXT GLEW_GET_FUN(__glewProgramUniform1dEXT) #define glProgramUniform1dvEXT GLEW_GET_FUN(__glewProgramUniform1dvEXT) #define glProgramUniform1fEXT GLEW_GET_FUN(__glewProgramUniform1fEXT) #define glProgramUniform1fvEXT GLEW_GET_FUN(__glewProgramUniform1fvEXT) #define glProgramUniform1iEXT GLEW_GET_FUN(__glewProgramUniform1iEXT) #define glProgramUniform1ivEXT GLEW_GET_FUN(__glewProgramUniform1ivEXT) #define glProgramUniform1uiEXT GLEW_GET_FUN(__glewProgramUniform1uiEXT) #define glProgramUniform1uivEXT GLEW_GET_FUN(__glewProgramUniform1uivEXT) #define glProgramUniform2dEXT GLEW_GET_FUN(__glewProgramUniform2dEXT) #define glProgramUniform2dvEXT GLEW_GET_FUN(__glewProgramUniform2dvEXT) #define glProgramUniform2fEXT GLEW_GET_FUN(__glewProgramUniform2fEXT) #define glProgramUniform2fvEXT GLEW_GET_FUN(__glewProgramUniform2fvEXT) #define glProgramUniform2iEXT GLEW_GET_FUN(__glewProgramUniform2iEXT) #define glProgramUniform2ivEXT GLEW_GET_FUN(__glewProgramUniform2ivEXT) #define glProgramUniform2uiEXT GLEW_GET_FUN(__glewProgramUniform2uiEXT) #define glProgramUniform2uivEXT GLEW_GET_FUN(__glewProgramUniform2uivEXT) #define glProgramUniform3dEXT GLEW_GET_FUN(__glewProgramUniform3dEXT) #define glProgramUniform3dvEXT GLEW_GET_FUN(__glewProgramUniform3dvEXT) #define glProgramUniform3fEXT GLEW_GET_FUN(__glewProgramUniform3fEXT) #define glProgramUniform3fvEXT GLEW_GET_FUN(__glewProgramUniform3fvEXT) #define glProgramUniform3iEXT GLEW_GET_FUN(__glewProgramUniform3iEXT) #define glProgramUniform3ivEXT GLEW_GET_FUN(__glewProgramUniform3ivEXT) #define glProgramUniform3uiEXT GLEW_GET_FUN(__glewProgramUniform3uiEXT) #define glProgramUniform3uivEXT GLEW_GET_FUN(__glewProgramUniform3uivEXT) #define glProgramUniform4dEXT GLEW_GET_FUN(__glewProgramUniform4dEXT) #define glProgramUniform4dvEXT GLEW_GET_FUN(__glewProgramUniform4dvEXT) #define glProgramUniform4fEXT GLEW_GET_FUN(__glewProgramUniform4fEXT) #define glProgramUniform4fvEXT GLEW_GET_FUN(__glewProgramUniform4fvEXT) #define glProgramUniform4iEXT GLEW_GET_FUN(__glewProgramUniform4iEXT) #define glProgramUniform4ivEXT GLEW_GET_FUN(__glewProgramUniform4ivEXT) #define glProgramUniform4uiEXT GLEW_GET_FUN(__glewProgramUniform4uiEXT) #define glProgramUniform4uivEXT GLEW_GET_FUN(__glewProgramUniform4uivEXT) #define glProgramUniformMatrix2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2dvEXT) #define glProgramUniformMatrix2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2fvEXT) #define glProgramUniformMatrix2x3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3dvEXT) #define glProgramUniformMatrix2x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3fvEXT) #define glProgramUniformMatrix2x4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4dvEXT) #define glProgramUniformMatrix2x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4fvEXT) #define glProgramUniformMatrix3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3dvEXT) #define glProgramUniformMatrix3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3fvEXT) #define glProgramUniformMatrix3x2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2dvEXT) #define glProgramUniformMatrix3x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2fvEXT) #define glProgramUniformMatrix3x4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4dvEXT) #define glProgramUniformMatrix3x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4fvEXT) #define glProgramUniformMatrix4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4dvEXT) #define glProgramUniformMatrix4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4fvEXT) #define glProgramUniformMatrix4x2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2dvEXT) #define glProgramUniformMatrix4x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2fvEXT) #define glProgramUniformMatrix4x3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3dvEXT) #define glProgramUniformMatrix4x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3fvEXT) #define glPushClientAttribDefaultEXT GLEW_GET_FUN(__glewPushClientAttribDefaultEXT) #define glTextureBufferEXT GLEW_GET_FUN(__glewTextureBufferEXT) #define glTextureImage1DEXT GLEW_GET_FUN(__glewTextureImage1DEXT) #define glTextureImage2DEXT GLEW_GET_FUN(__glewTextureImage2DEXT) #define glTextureImage3DEXT GLEW_GET_FUN(__glewTextureImage3DEXT) #define glTextureParameterIivEXT GLEW_GET_FUN(__glewTextureParameterIivEXT) #define glTextureParameterIuivEXT GLEW_GET_FUN(__glewTextureParameterIuivEXT) #define glTextureParameterfEXT GLEW_GET_FUN(__glewTextureParameterfEXT) #define glTextureParameterfvEXT GLEW_GET_FUN(__glewTextureParameterfvEXT) #define glTextureParameteriEXT GLEW_GET_FUN(__glewTextureParameteriEXT) #define glTextureParameterivEXT GLEW_GET_FUN(__glewTextureParameterivEXT) #define glTextureRenderbufferEXT GLEW_GET_FUN(__glewTextureRenderbufferEXT) #define glTextureSubImage1DEXT GLEW_GET_FUN(__glewTextureSubImage1DEXT) #define glTextureSubImage2DEXT GLEW_GET_FUN(__glewTextureSubImage2DEXT) #define glTextureSubImage3DEXT GLEW_GET_FUN(__glewTextureSubImage3DEXT) #define glUnmapNamedBufferEXT GLEW_GET_FUN(__glewUnmapNamedBufferEXT) #define glVertexArrayColorOffsetEXT GLEW_GET_FUN(__glewVertexArrayColorOffsetEXT) #define glVertexArrayEdgeFlagOffsetEXT GLEW_GET_FUN(__glewVertexArrayEdgeFlagOffsetEXT) #define glVertexArrayFogCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayFogCoordOffsetEXT) #define glVertexArrayIndexOffsetEXT GLEW_GET_FUN(__glewVertexArrayIndexOffsetEXT) #define glVertexArrayMultiTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayMultiTexCoordOffsetEXT) #define glVertexArrayNormalOffsetEXT GLEW_GET_FUN(__glewVertexArrayNormalOffsetEXT) #define glVertexArraySecondaryColorOffsetEXT GLEW_GET_FUN(__glewVertexArraySecondaryColorOffsetEXT) #define glVertexArrayTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayTexCoordOffsetEXT) #define glVertexArrayVertexAttribIOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribIOffsetEXT) #define glVertexArrayVertexAttribOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribOffsetEXT) #define glVertexArrayVertexOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexOffsetEXT) #define GLEW_EXT_direct_state_access GLEW_GET_VAR(__GLEW_EXT_direct_state_access) #endif /* GL_EXT_direct_state_access */ /* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ #ifndef GL_EXT_draw_buffers2 #define GL_EXT_draw_buffers2 1 typedef void(GLAPIENTRY * PFNGLCOLORMASKINDEXEDEXTPROC)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void(GLAPIENTRY * PFNGLDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index); typedef void(GLAPIENTRY * PFNGLENABLEINDEXEDEXTPROC)(GLenum target, GLuint index); typedef void(GLAPIENTRY * PFNGLGETBOOLEANINDEXEDVEXTPROC)(GLenum value, GLuint index, GLboolean * data); typedef void(GLAPIENTRY * PFNGLGETINTEGERINDEXEDVEXTPROC)(GLenum value, GLuint index, GLint * data); typedef GLboolean(GLAPIENTRY * PFNGLISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index); #define glColorMaskIndexedEXT GLEW_GET_FUN(__glewColorMaskIndexedEXT) #define glDisableIndexedEXT GLEW_GET_FUN(__glewDisableIndexedEXT) #define glEnableIndexedEXT GLEW_GET_FUN(__glewEnableIndexedEXT) #define glGetBooleanIndexedvEXT GLEW_GET_FUN(__glewGetBooleanIndexedvEXT) #define glGetIntegerIndexedvEXT GLEW_GET_FUN(__glewGetIntegerIndexedvEXT) #define glIsEnabledIndexedEXT GLEW_GET_FUN(__glewIsEnabledIndexedEXT) #define GLEW_EXT_draw_buffers2 GLEW_GET_VAR(__GLEW_EXT_draw_buffers2) #endif /* GL_EXT_draw_buffers2 */ /* ------------------------- GL_EXT_draw_instanced ------------------------- */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 typedef void(GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDEXTPROC)(GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void(GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDEXTPROC)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); #define glDrawArraysInstancedEXT GLEW_GET_FUN(__glewDrawArraysInstancedEXT) #define glDrawElementsInstancedEXT GLEW_GET_FUN(__glewDrawElementsInstancedEXT) #define GLEW_EXT_draw_instanced GLEW_GET_VAR(__GLEW_EXT_draw_instanced) #endif /* GL_EXT_draw_instanced */ /* ----------------------- GL_EXT_draw_range_elements ---------------------- */ #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 #define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 typedef void(GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); #define glDrawRangeElementsEXT GLEW_GET_FUN(__glewDrawRangeElementsEXT) #define GLEW_EXT_draw_range_elements GLEW_GET_VAR(__GLEW_EXT_draw_range_elements) #endif /* GL_EXT_draw_range_elements */ /* ---------------------------- GL_EXT_fog_coord --------------------------- */ #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 #define GL_FOG_COORDINATE_EXT 0x8451 #define GL_FRAGMENT_DEPTH_EXT 0x8452 #define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 #define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 typedef void(GLAPIENTRY * PFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, const GLvoid * pointer); typedef void(GLAPIENTRY * PFNGLFOGCOORDDEXTPROC)(GLdouble coord); typedef void(GLAPIENTRY * PFNGLFOGCOORDDVEXTPROC)(const GLdouble * coord); typedef void(GLAPIENTRY * PFNGLFOGCOORDFEXTPROC)(GLfloat coord); typedef void(GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC)(const GLfloat * coord); #define glFogCoordPointerEXT GLEW_GET_FUN(__glewFogCoordPointerEXT) #define glFogCoorddEXT GLEW_GET_FUN(__glewFogCoorddEXT) #define glFogCoorddvEXT GLEW_GET_FUN(__glewFogCoorddvEXT) #define glFogCoordfEXT GLEW_GET_FUN(__glewFogCoordfEXT) #define glFogCoordfvEXT GLEW_GET_FUN(__glewFogCoordfvEXT) #define GLEW_EXT_fog_coord GLEW_GET_VAR(__GLEW_EXT_fog_coord) #endif /* GL_EXT_fog_coord */ /* ------------------------ GL_EXT_fragment_lighting ----------------------- */ #ifndef GL_EXT_fragment_lighting #define GL_EXT_fragment_lighting 1 #define GL_FRAGMENT_LIGHTING_EXT 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 #define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 #define GL_CURRENT_RASTER_NORMAL_EXT 0x8406 #define GL_LIGHT_ENV_MODE_EXT 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B #define GL_FRAGMENT_LIGHT0_EXT 0x840C #define GL_FRAGMENT_LIGHT7_EXT 0x8413 typedef void(GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALEXTPROC)(GLenum face, GLenum mode); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFEXTPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVEXTPROC)(GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIEXTPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVEXTPROC)(GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTFEXTPROC)(GLenum light, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTFVEXTPROC)(GLenum light, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTIEXTPROC)(GLenum light, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTIVEXTPROC)(GLenum light, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALFEXTPROC)(GLenum face, GLenum pname, const GLfloat param); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALFVEXTPROC)(GLenum face, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALIEXTPROC)(GLenum face, GLenum pname, const GLint param); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALIVEXTPROC)(GLenum face, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVEXTPROC)(GLenum light, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVEXTPROC)(GLenum light, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVEXTPROC)(GLenum face, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVEXTPROC)(GLenum face, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLLIGHTENVIEXTPROC)(GLenum pname, GLint param); #define glFragmentColorMaterialEXT GLEW_GET_FUN(__glewFragmentColorMaterialEXT) #define glFragmentLightModelfEXT GLEW_GET_FUN(__glewFragmentLightModelfEXT) #define glFragmentLightModelfvEXT GLEW_GET_FUN(__glewFragmentLightModelfvEXT) #define glFragmentLightModeliEXT GLEW_GET_FUN(__glewFragmentLightModeliEXT) #define glFragmentLightModelivEXT GLEW_GET_FUN(__glewFragmentLightModelivEXT) #define glFragmentLightfEXT GLEW_GET_FUN(__glewFragmentLightfEXT) #define glFragmentLightfvEXT GLEW_GET_FUN(__glewFragmentLightfvEXT) #define glFragmentLightiEXT GLEW_GET_FUN(__glewFragmentLightiEXT) #define glFragmentLightivEXT GLEW_GET_FUN(__glewFragmentLightivEXT) #define glFragmentMaterialfEXT GLEW_GET_FUN(__glewFragmentMaterialfEXT) #define glFragmentMaterialfvEXT GLEW_GET_FUN(__glewFragmentMaterialfvEXT) #define glFragmentMaterialiEXT GLEW_GET_FUN(__glewFragmentMaterialiEXT) #define glFragmentMaterialivEXT GLEW_GET_FUN(__glewFragmentMaterialivEXT) #define glGetFragmentLightfvEXT GLEW_GET_FUN(__glewGetFragmentLightfvEXT) #define glGetFragmentLightivEXT GLEW_GET_FUN(__glewGetFragmentLightivEXT) #define glGetFragmentMaterialfvEXT GLEW_GET_FUN(__glewGetFragmentMaterialfvEXT) #define glGetFragmentMaterialivEXT GLEW_GET_FUN(__glewGetFragmentMaterialivEXT) #define glLightEnviEXT GLEW_GET_FUN(__glewLightEnviEXT) #define GLEW_EXT_fragment_lighting GLEW_GET_VAR(__GLEW_EXT_fragment_lighting) #endif /* GL_EXT_fragment_lighting */ /* ------------------------ GL_EXT_framebuffer_blit ------------------------ */ #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit 1 #define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_READ_FRAMEBUFFER_EXT 0x8CA8 #define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA typedef void(GLAPIENTRY * PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #define glBlitFramebufferEXT GLEW_GET_FUN(__glewBlitFramebufferEXT) #define GLEW_EXT_framebuffer_blit GLEW_GET_VAR(__GLEW_EXT_framebuffer_blit) #endif /* GL_EXT_framebuffer_blit */ /* --------------------- GL_EXT_framebuffer_multisample -------------------- */ #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 typedef void(GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #define glRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewRenderbufferStorageMultisampleEXT) #define GLEW_EXT_framebuffer_multisample GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample) #endif /* GL_EXT_framebuffer_multisample */ /* --------------- GL_EXT_framebuffer_multisample_blit_scaled -------------- */ #ifndef GL_EXT_framebuffer_multisample_blit_scaled #define GL_EXT_framebuffer_multisample_blit_scaled 1 #define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA #define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB #define GLEW_EXT_framebuffer_multisample_blit_scaled GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample_blit_scaled) #endif /* GL_EXT_framebuffer_multisample_blit_scaled */ /* ----------------------- GL_EXT_framebuffer_object ----------------------- */ #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object 1 #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC #define GL_COLOR_ATTACHMENT13_EXT 0x8CED #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF #define GL_DEPTH_ATTACHMENT_EXT 0x8D00 #define GL_STENCIL_ATTACHMENT_EXT 0x8D20 #define GL_FRAMEBUFFER_EXT 0x8D40 #define GL_RENDERBUFFER_EXT 0x8D41 #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 #define GL_STENCIL_INDEX1_EXT 0x8D46 #define GL_STENCIL_INDEX4_EXT 0x8D47 #define GL_STENCIL_INDEX8_EXT 0x8D48 #define GL_STENCIL_INDEX16_EXT 0x8D49 #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 typedef void(GLAPIENTRY * PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); typedef void(GLAPIENTRY * PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); typedef GLenum(GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint * framebuffers); typedef void(GLAPIENTRY * PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint * renderbuffers); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void(GLAPIENTRY * PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint * framebuffers); typedef void(GLAPIENTRY * PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint * renderbuffers); typedef void(GLAPIENTRY * PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); typedef GLboolean(GLAPIENTRY * PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); typedef void(GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); #define glBindFramebufferEXT GLEW_GET_FUN(__glewBindFramebufferEXT) #define glBindRenderbufferEXT GLEW_GET_FUN(__glewBindRenderbufferEXT) #define glCheckFramebufferStatusEXT GLEW_GET_FUN(__glewCheckFramebufferStatusEXT) #define glDeleteFramebuffersEXT GLEW_GET_FUN(__glewDeleteFramebuffersEXT) #define glDeleteRenderbuffersEXT GLEW_GET_FUN(__glewDeleteRenderbuffersEXT) #define glFramebufferRenderbufferEXT GLEW_GET_FUN(__glewFramebufferRenderbufferEXT) #define glFramebufferTexture1DEXT GLEW_GET_FUN(__glewFramebufferTexture1DEXT) #define glFramebufferTexture2DEXT GLEW_GET_FUN(__glewFramebufferTexture2DEXT) #define glFramebufferTexture3DEXT GLEW_GET_FUN(__glewFramebufferTexture3DEXT) #define glGenFramebuffersEXT GLEW_GET_FUN(__glewGenFramebuffersEXT) #define glGenRenderbuffersEXT GLEW_GET_FUN(__glewGenRenderbuffersEXT) #define glGenerateMipmapEXT GLEW_GET_FUN(__glewGenerateMipmapEXT) #define glGetFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetFramebufferAttachmentParameterivEXT) #define glGetRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetRenderbufferParameterivEXT) #define glIsFramebufferEXT GLEW_GET_FUN(__glewIsFramebufferEXT) #define glIsRenderbufferEXT GLEW_GET_FUN(__glewIsRenderbufferEXT) #define glRenderbufferStorageEXT GLEW_GET_FUN(__glewRenderbufferStorageEXT) #define GLEW_EXT_framebuffer_object GLEW_GET_VAR(__GLEW_EXT_framebuffer_object) #endif /* GL_EXT_framebuffer_object */ /* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */ #ifndef GL_EXT_framebuffer_sRGB #define GL_EXT_framebuffer_sRGB 1 #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA #define GLEW_EXT_framebuffer_sRGB GLEW_GET_VAR(__GLEW_EXT_framebuffer_sRGB) #endif /* GL_EXT_framebuffer_sRGB */ /* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ #ifndef GL_EXT_geometry_shader4 #define GL_EXT_geometry_shader4 1 #define GL_LINES_ADJACENCY_EXT 0xA #define GL_LINE_STRIP_ADJACENCY_EXT 0xB #define GL_TRIANGLES_ADJACENCY_EXT 0xC #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD #define GL_PROGRAM_POINT_SIZE_EXT 0x8642 #define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 #define GL_GEOMETRY_SHADER_EXT 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETERIEXTPROC)(GLuint program, GLenum pname, GLint value); #define glFramebufferTextureEXT GLEW_GET_FUN(__glewFramebufferTextureEXT) #define glFramebufferTextureFaceEXT GLEW_GET_FUN(__glewFramebufferTextureFaceEXT) #define glProgramParameteriEXT GLEW_GET_FUN(__glewProgramParameteriEXT) #define GLEW_EXT_geometry_shader4 GLEW_GET_VAR(__GLEW_EXT_geometry_shader4) #endif /* GL_EXT_geometry_shader4 */ /* --------------------- GL_EXT_gpu_program_parameters --------------------- */ #ifndef GL_EXT_gpu_program_parameters #define GL_EXT_gpu_program_parameters 1 typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); #define glProgramEnvParameters4fvEXT GLEW_GET_FUN(__glewProgramEnvParameters4fvEXT) #define glProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewProgramLocalParameters4fvEXT) #define GLEW_EXT_gpu_program_parameters GLEW_GET_VAR(__GLEW_EXT_gpu_program_parameters) #endif /* GL_EXT_gpu_program_parameters */ /* --------------------------- GL_EXT_gpu_shader4 -------------------------- */ #ifndef GL_EXT_gpu_shader4 #define GL_EXT_gpu_shader4 1 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD #define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 #define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 #define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 #define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 #define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 #define GL_INT_SAMPLER_1D_EXT 0x8DC9 #define GL_INT_SAMPLER_2D_EXT 0x8DCA #define GL_INT_SAMPLER_3D_EXT 0x8DCB #define GL_INT_SAMPLER_CUBE_EXT 0x8DCC #define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD #define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 typedef void(GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color, const GLchar * name); typedef GLint(GLAPIENTRY * PFNGLGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar * name); typedef void(GLAPIENTRY * PFNGLGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, GLuint * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLUNIFORM1UIEXTPROC)(GLint location, GLuint v0); typedef void(GLAPIENTRY * PFNGLUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1); typedef void(GLAPIENTRY * PFNGLUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void(GLAPIENTRY * PFNGLUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void(GLAPIENTRY * PFNGLUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); #define glBindFragDataLocationEXT GLEW_GET_FUN(__glewBindFragDataLocationEXT) #define glGetFragDataLocationEXT GLEW_GET_FUN(__glewGetFragDataLocationEXT) #define glGetUniformuivEXT GLEW_GET_FUN(__glewGetUniformuivEXT) #define glGetVertexAttribIivEXT GLEW_GET_FUN(__glewGetVertexAttribIivEXT) #define glGetVertexAttribIuivEXT GLEW_GET_FUN(__glewGetVertexAttribIuivEXT) #define glUniform1uiEXT GLEW_GET_FUN(__glewUniform1uiEXT) #define glUniform1uivEXT GLEW_GET_FUN(__glewUniform1uivEXT) #define glUniform2uiEXT GLEW_GET_FUN(__glewUniform2uiEXT) #define glUniform2uivEXT GLEW_GET_FUN(__glewUniform2uivEXT) #define glUniform3uiEXT GLEW_GET_FUN(__glewUniform3uiEXT) #define glUniform3uivEXT GLEW_GET_FUN(__glewUniform3uivEXT) #define glUniform4uiEXT GLEW_GET_FUN(__glewUniform4uiEXT) #define glUniform4uivEXT GLEW_GET_FUN(__glewUniform4uivEXT) #define glVertexAttribI1iEXT GLEW_GET_FUN(__glewVertexAttribI1iEXT) #define glVertexAttribI1ivEXT GLEW_GET_FUN(__glewVertexAttribI1ivEXT) #define glVertexAttribI1uiEXT GLEW_GET_FUN(__glewVertexAttribI1uiEXT) #define glVertexAttribI1uivEXT GLEW_GET_FUN(__glewVertexAttribI1uivEXT) #define glVertexAttribI2iEXT GLEW_GET_FUN(__glewVertexAttribI2iEXT) #define glVertexAttribI2ivEXT GLEW_GET_FUN(__glewVertexAttribI2ivEXT) #define glVertexAttribI2uiEXT GLEW_GET_FUN(__glewVertexAttribI2uiEXT) #define glVertexAttribI2uivEXT GLEW_GET_FUN(__glewVertexAttribI2uivEXT) #define glVertexAttribI3iEXT GLEW_GET_FUN(__glewVertexAttribI3iEXT) #define glVertexAttribI3ivEXT GLEW_GET_FUN(__glewVertexAttribI3ivEXT) #define glVertexAttribI3uiEXT GLEW_GET_FUN(__glewVertexAttribI3uiEXT) #define glVertexAttribI3uivEXT GLEW_GET_FUN(__glewVertexAttribI3uivEXT) #define glVertexAttribI4bvEXT GLEW_GET_FUN(__glewVertexAttribI4bvEXT) #define glVertexAttribI4iEXT GLEW_GET_FUN(__glewVertexAttribI4iEXT) #define glVertexAttribI4ivEXT GLEW_GET_FUN(__glewVertexAttribI4ivEXT) #define glVertexAttribI4svEXT GLEW_GET_FUN(__glewVertexAttribI4svEXT) #define glVertexAttribI4ubvEXT GLEW_GET_FUN(__glewVertexAttribI4ubvEXT) #define glVertexAttribI4uiEXT GLEW_GET_FUN(__glewVertexAttribI4uiEXT) #define glVertexAttribI4uivEXT GLEW_GET_FUN(__glewVertexAttribI4uivEXT) #define glVertexAttribI4usvEXT GLEW_GET_FUN(__glewVertexAttribI4usvEXT) #define glVertexAttribIPointerEXT GLEW_GET_FUN(__glewVertexAttribIPointerEXT) #define GLEW_EXT_gpu_shader4 GLEW_GET_VAR(__GLEW_EXT_gpu_shader4) #endif /* GL_EXT_gpu_shader4 */ /* ---------------------------- GL_EXT_histogram --------------------------- */ #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #define GL_HISTOGRAM_EXT 0x8024 #define GL_PROXY_HISTOGRAM_EXT 0x8025 #define GL_HISTOGRAM_WIDTH_EXT 0x8026 #define GL_HISTOGRAM_FORMAT_EXT 0x8027 #define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 #define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 #define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A #define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C #define GL_HISTOGRAM_SINK_EXT 0x802D #define GL_MINMAX_EXT 0x802E #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 typedef void(GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); typedef void(GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETMINMAXEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); typedef void(GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLHISTOGRAMEXTPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void(GLAPIENTRY * PFNGLMINMAXEXTPROC)(GLenum target, GLenum internalformat, GLboolean sink); typedef void(GLAPIENTRY * PFNGLRESETHISTOGRAMEXTPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLRESETMINMAXEXTPROC)(GLenum target); #define glGetHistogramEXT GLEW_GET_FUN(__glewGetHistogramEXT) #define glGetHistogramParameterfvEXT GLEW_GET_FUN(__glewGetHistogramParameterfvEXT) #define glGetHistogramParameterivEXT GLEW_GET_FUN(__glewGetHistogramParameterivEXT) #define glGetMinmaxEXT GLEW_GET_FUN(__glewGetMinmaxEXT) #define glGetMinmaxParameterfvEXT GLEW_GET_FUN(__glewGetMinmaxParameterfvEXT) #define glGetMinmaxParameterivEXT GLEW_GET_FUN(__glewGetMinmaxParameterivEXT) #define glHistogramEXT GLEW_GET_FUN(__glewHistogramEXT) #define glMinmaxEXT GLEW_GET_FUN(__glewMinmaxEXT) #define glResetHistogramEXT GLEW_GET_FUN(__glewResetHistogramEXT) #define glResetMinmaxEXT GLEW_GET_FUN(__glewResetMinmaxEXT) #define GLEW_EXT_histogram GLEW_GET_VAR(__GLEW_EXT_histogram) #endif /* GL_EXT_histogram */ /* ----------------------- GL_EXT_index_array_formats ---------------------- */ #ifndef GL_EXT_index_array_formats #define GL_EXT_index_array_formats 1 #define GLEW_EXT_index_array_formats GLEW_GET_VAR(__GLEW_EXT_index_array_formats) #endif /* GL_EXT_index_array_formats */ /* --------------------------- GL_EXT_index_func --------------------------- */ #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 typedef void(GLAPIENTRY * PFNGLINDEXFUNCEXTPROC)(GLenum func, GLfloat ref); #define glIndexFuncEXT GLEW_GET_FUN(__glewIndexFuncEXT) #define GLEW_EXT_index_func GLEW_GET_VAR(__GLEW_EXT_index_func) #endif /* GL_EXT_index_func */ /* ------------------------- GL_EXT_index_material ------------------------- */ #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 typedef void(GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC)(GLenum face, GLenum mode); #define glIndexMaterialEXT GLEW_GET_FUN(__glewIndexMaterialEXT) #define GLEW_EXT_index_material GLEW_GET_VAR(__GLEW_EXT_index_material) #endif /* GL_EXT_index_material */ /* -------------------------- GL_EXT_index_texture ------------------------- */ #ifndef GL_EXT_index_texture #define GL_EXT_index_texture 1 #define GLEW_EXT_index_texture GLEW_GET_VAR(__GLEW_EXT_index_texture) #endif /* GL_EXT_index_texture */ /* -------------------------- GL_EXT_light_texture ------------------------- */ #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #define GL_FRAGMENT_MATERIAL_EXT 0x8349 #define GL_FRAGMENT_NORMAL_EXT 0x834A #define GL_FRAGMENT_COLOR_EXT 0x834C #define GL_ATTENUATION_EXT 0x834D #define GL_SHADOW_ATTENUATION_EXT 0x834E #define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F #define GL_TEXTURE_LIGHT_EXT 0x8350 #define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 #define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 typedef void(GLAPIENTRY * PFNGLAPPLYTEXTUREEXTPROC)(GLenum mode); typedef void(GLAPIENTRY * PFNGLTEXTURELIGHTEXTPROC)(GLenum pname); typedef void(GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC)(GLenum face, GLenum mode); #define glApplyTextureEXT GLEW_GET_FUN(__glewApplyTextureEXT) #define glTextureLightEXT GLEW_GET_FUN(__glewTextureLightEXT) #define glTextureMaterialEXT GLEW_GET_FUN(__glewTextureMaterialEXT) #define GLEW_EXT_light_texture GLEW_GET_VAR(__GLEW_EXT_light_texture) #endif /* GL_EXT_light_texture */ /* ------------------------- GL_EXT_misc_attribute ------------------------- */ #ifndef GL_EXT_misc_attribute #define GL_EXT_misc_attribute 1 #define GLEW_EXT_misc_attribute GLEW_GET_VAR(__GLEW_EXT_misc_attribute) #endif /* GL_EXT_misc_attribute */ /* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 typedef void(GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); typedef void(GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC)(GLenum mode, GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); #define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT) #define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT) #define GLEW_EXT_multi_draw_arrays GLEW_GET_VAR(__GLEW_EXT_multi_draw_arrays) #endif /* GL_EXT_multi_draw_arrays */ /* --------------------------- GL_EXT_multisample -------------------------- */ #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #define GL_SAMPLE_MASK_EXT 0x80A0 #define GL_1PASS_EXT 0x80A1 #define GL_2PASS_0_EXT 0x80A2 #define GL_2PASS_1_EXT 0x80A3 #define GL_4PASS_0_EXT 0x80A4 #define GL_4PASS_1_EXT 0x80A5 #define GL_4PASS_2_EXT 0x80A6 #define GL_4PASS_3_EXT 0x80A7 #define GL_SAMPLE_BUFFERS_EXT 0x80A8 #define GL_SAMPLES_EXT 0x80A9 #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC #define GL_MULTISAMPLE_BIT_EXT 0x20000000 typedef void(GLAPIENTRY * PFNGLSAMPLEMASKEXTPROC)(GLclampf value, GLboolean invert); typedef void(GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC)(GLenum pattern); #define glSampleMaskEXT GLEW_GET_FUN(__glewSampleMaskEXT) #define glSamplePatternEXT GLEW_GET_FUN(__glewSamplePatternEXT) #define GLEW_EXT_multisample GLEW_GET_VAR(__GLEW_EXT_multisample) #endif /* GL_EXT_multisample */ /* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ #ifndef GL_EXT_packed_depth_stencil #define GL_EXT_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_EXT 0x84F9 #define GL_UNSIGNED_INT_24_8_EXT 0x84FA #define GL_DEPTH24_STENCIL8_EXT 0x88F0 #define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 #define GLEW_EXT_packed_depth_stencil GLEW_GET_VAR(__GLEW_EXT_packed_depth_stencil) #endif /* GL_EXT_packed_depth_stencil */ /* -------------------------- GL_EXT_packed_float -------------------------- */ #ifndef GL_EXT_packed_float #define GL_EXT_packed_float 1 #define GL_R11F_G11F_B10F_EXT 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B #define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C #define GLEW_EXT_packed_float GLEW_GET_VAR(__GLEW_EXT_packed_float) #endif /* GL_EXT_packed_float */ /* -------------------------- GL_EXT_packed_pixels ------------------------- */ #ifndef GL_EXT_packed_pixels #define GL_EXT_packed_pixels 1 #define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 #define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 #define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 #define GLEW_EXT_packed_pixels GLEW_GET_VAR(__GLEW_EXT_packed_pixels) #endif /* GL_EXT_packed_pixels */ /* ------------------------ GL_EXT_paletted_texture ------------------------ */ #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_COLOR_TABLE_FORMAT_EXT 0x80D8 #define GL_COLOR_TABLE_WIDTH_EXT 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B typedef void(GLAPIENTRY * PFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * data); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC)(GLenum target, GLenum format, GLenum type, void * data); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); #define glColorTableEXT GLEW_GET_FUN(__glewColorTableEXT) #define glGetColorTableEXT GLEW_GET_FUN(__glewGetColorTableEXT) #define glGetColorTableParameterfvEXT GLEW_GET_FUN(__glewGetColorTableParameterfvEXT) #define glGetColorTableParameterivEXT GLEW_GET_FUN(__glewGetColorTableParameterivEXT) #define GLEW_EXT_paletted_texture GLEW_GET_VAR(__GLEW_EXT_paletted_texture) #endif /* GL_EXT_paletted_texture */ /* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */ #ifndef GL_EXT_pixel_buffer_object #define GL_EXT_pixel_buffer_object 1 #define GL_PIXEL_PACK_BUFFER_EXT 0x88EB #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF #define GLEW_EXT_pixel_buffer_object GLEW_GET_VAR(__GLEW_EXT_pixel_buffer_object) #endif /* GL_EXT_pixel_buffer_object */ /* ------------------------- GL_EXT_pixel_transform ------------------------ */ #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 #define GL_PIXEL_MAG_FILTER_EXT 0x8331 #define GL_PIXEL_MIN_FILTER_EXT 0x8332 #define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 #define GL_CUBIC_EXT 0x8334 #define GL_AVERAGE_EXT 0x8335 #define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 typedef void(GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)(GLenum target, GLenum pname, const GLfloat param); typedef void(GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)(GLenum target, GLenum pname, const GLint param); typedef void(GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); #define glGetPixelTransformParameterfvEXT GLEW_GET_FUN(__glewGetPixelTransformParameterfvEXT) #define glGetPixelTransformParameterivEXT GLEW_GET_FUN(__glewGetPixelTransformParameterivEXT) #define glPixelTransformParameterfEXT GLEW_GET_FUN(__glewPixelTransformParameterfEXT) #define glPixelTransformParameterfvEXT GLEW_GET_FUN(__glewPixelTransformParameterfvEXT) #define glPixelTransformParameteriEXT GLEW_GET_FUN(__glewPixelTransformParameteriEXT) #define glPixelTransformParameterivEXT GLEW_GET_FUN(__glewPixelTransformParameterivEXT) #define GLEW_EXT_pixel_transform GLEW_GET_VAR(__GLEW_EXT_pixel_transform) #endif /* GL_EXT_pixel_transform */ /* ------------------- GL_EXT_pixel_transform_color_table ------------------ */ #ifndef GL_EXT_pixel_transform_color_table #define GL_EXT_pixel_transform_color_table 1 #define GLEW_EXT_pixel_transform_color_table GLEW_GET_VAR(__GLEW_EXT_pixel_transform_color_table) #endif /* GL_EXT_pixel_transform_color_table */ /* ------------------------ GL_EXT_point_parameters ------------------------ */ #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #define GL_POINT_SIZE_MIN_EXT 0x8126 #define GL_POINT_SIZE_MAX_EXT 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat * params); #define glPointParameterfEXT GLEW_GET_FUN(__glewPointParameterfEXT) #define glPointParameterfvEXT GLEW_GET_FUN(__glewPointParameterfvEXT) #define GLEW_EXT_point_parameters GLEW_GET_VAR(__GLEW_EXT_point_parameters) #endif /* GL_EXT_point_parameters */ /* ------------------------- GL_EXT_polygon_offset ------------------------- */ #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 typedef void(GLAPIENTRY * PFNGLPOLYGONOFFSETEXTPROC)(GLfloat factor, GLfloat bias); #define glPolygonOffsetEXT GLEW_GET_FUN(__glewPolygonOffsetEXT) #define GLEW_EXT_polygon_offset GLEW_GET_VAR(__GLEW_EXT_polygon_offset) #endif /* GL_EXT_polygon_offset */ /* ------------------------ GL_EXT_provoking_vertex ------------------------ */ #ifndef GL_EXT_provoking_vertex #define GL_EXT_provoking_vertex 1 #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C #define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D #define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E #define GL_PROVOKING_VERTEX_EXT 0x8E4F typedef void(GLAPIENTRY * PFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode); #define glProvokingVertexEXT GLEW_GET_FUN(__glewProvokingVertexEXT) #define GLEW_EXT_provoking_vertex GLEW_GET_VAR(__GLEW_EXT_provoking_vertex) #endif /* GL_EXT_provoking_vertex */ /* ------------------------- GL_EXT_rescale_normal ------------------------- */ #ifndef GL_EXT_rescale_normal #define GL_EXT_rescale_normal 1 #define GL_RESCALE_NORMAL_EXT 0x803A #define GLEW_EXT_rescale_normal GLEW_GET_VAR(__GLEW_EXT_rescale_normal) #endif /* GL_EXT_rescale_normal */ /* -------------------------- GL_EXT_scene_marker -------------------------- */ #ifndef GL_EXT_scene_marker #define GL_EXT_scene_marker 1 typedef void(GLAPIENTRY * PFNGLBEGINSCENEEXTPROC)(void); typedef void(GLAPIENTRY * PFNGLENDSCENEEXTPROC)(void); #define glBeginSceneEXT GLEW_GET_FUN(__glewBeginSceneEXT) #define glEndSceneEXT GLEW_GET_FUN(__glewEndSceneEXT) #define GLEW_EXT_scene_marker GLEW_GET_VAR(__GLEW_EXT_scene_marker) #endif /* GL_EXT_scene_marker */ /* ------------------------- GL_EXT_secondary_color ------------------------ */ #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #define GL_COLOR_SUM_EXT 0x8458 #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC)(GLbyte red, GLbyte green, GLbyte blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC)(const GLbyte * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC)(GLdouble red, GLdouble green, GLdouble blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC)(const GLdouble * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC)(GLint red, GLint green, GLint blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC)(const GLint * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC)(GLshort red, GLshort green, GLshort blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC)(const GLshort * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC)(GLuint red, GLuint green, GLuint blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC)(const GLuint * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC)(GLushort red, GLushort green, GLushort blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC)(const GLushort * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); #define glSecondaryColor3bEXT GLEW_GET_FUN(__glewSecondaryColor3bEXT) #define glSecondaryColor3bvEXT GLEW_GET_FUN(__glewSecondaryColor3bvEXT) #define glSecondaryColor3dEXT GLEW_GET_FUN(__glewSecondaryColor3dEXT) #define glSecondaryColor3dvEXT GLEW_GET_FUN(__glewSecondaryColor3dvEXT) #define glSecondaryColor3fEXT GLEW_GET_FUN(__glewSecondaryColor3fEXT) #define glSecondaryColor3fvEXT GLEW_GET_FUN(__glewSecondaryColor3fvEXT) #define glSecondaryColor3iEXT GLEW_GET_FUN(__glewSecondaryColor3iEXT) #define glSecondaryColor3ivEXT GLEW_GET_FUN(__glewSecondaryColor3ivEXT) #define glSecondaryColor3sEXT GLEW_GET_FUN(__glewSecondaryColor3sEXT) #define glSecondaryColor3svEXT GLEW_GET_FUN(__glewSecondaryColor3svEXT) #define glSecondaryColor3ubEXT GLEW_GET_FUN(__glewSecondaryColor3ubEXT) #define glSecondaryColor3ubvEXT GLEW_GET_FUN(__glewSecondaryColor3ubvEXT) #define glSecondaryColor3uiEXT GLEW_GET_FUN(__glewSecondaryColor3uiEXT) #define glSecondaryColor3uivEXT GLEW_GET_FUN(__glewSecondaryColor3uivEXT) #define glSecondaryColor3usEXT GLEW_GET_FUN(__glewSecondaryColor3usEXT) #define glSecondaryColor3usvEXT GLEW_GET_FUN(__glewSecondaryColor3usvEXT) #define glSecondaryColorPointerEXT GLEW_GET_FUN(__glewSecondaryColorPointerEXT) #define GLEW_EXT_secondary_color GLEW_GET_VAR(__GLEW_EXT_secondary_color) #endif /* GL_EXT_secondary_color */ /* --------------------- GL_EXT_separate_shader_objects -------------------- */ #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #define GL_ACTIVE_PROGRAM_EXT 0x8B8D typedef void(GLAPIENTRY * PFNGLACTIVEPROGRAMEXTPROC)(GLuint program); typedef GLuint(GLAPIENTRY * PFNGLCREATESHADERPROGRAMEXTPROC)(GLenum type, const GLchar * string); typedef void(GLAPIENTRY * PFNGLUSESHADERPROGRAMEXTPROC)(GLenum type, GLuint program); #define glActiveProgramEXT GLEW_GET_FUN(__glewActiveProgramEXT) #define glCreateShaderProgramEXT GLEW_GET_FUN(__glewCreateShaderProgramEXT) #define glUseShaderProgramEXT GLEW_GET_FUN(__glewUseShaderProgramEXT) #define GLEW_EXT_separate_shader_objects GLEW_GET_VAR(__GLEW_EXT_separate_shader_objects) #endif /* GL_EXT_separate_shader_objects */ /* --------------------- GL_EXT_separate_specular_color -------------------- */ #ifndef GL_EXT_separate_specular_color #define GL_EXT_separate_specular_color 1 #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #define GL_SINGLE_COLOR_EXT 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #define GLEW_EXT_separate_specular_color GLEW_GET_VAR(__GLEW_EXT_separate_specular_color) #endif /* GL_EXT_separate_specular_color */ /* --------------------- GL_EXT_shader_image_load_store -------------------- */ #ifndef GL_EXT_shader_image_load_store #define GL_EXT_shader_image_load_store 1 #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 #define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 #define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 #define GL_MAX_IMAGE_UNITS_EXT 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 #define GL_IMAGE_BINDING_NAME_EXT 0x8F3A #define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B #define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C #define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D #define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E #define GL_IMAGE_1D_EXT 0x904C #define GL_IMAGE_2D_EXT 0x904D #define GL_IMAGE_3D_EXT 0x904E #define GL_IMAGE_2D_RECT_EXT 0x904F #define GL_IMAGE_CUBE_EXT 0x9050 #define GL_IMAGE_BUFFER_EXT 0x9051 #define GL_IMAGE_1D_ARRAY_EXT 0x9052 #define GL_IMAGE_2D_ARRAY_EXT 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 #define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 #define GL_INT_IMAGE_1D_EXT 0x9057 #define GL_INT_IMAGE_2D_EXT 0x9058 #define GL_INT_IMAGE_3D_EXT 0x9059 #define GL_INT_IMAGE_2D_RECT_EXT 0x905A #define GL_INT_IMAGE_CUBE_EXT 0x905B #define GL_INT_IMAGE_BUFFER_EXT 0x905C #define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D #define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C #define GL_MAX_IMAGE_SAMPLES_EXT 0x906D #define GL_IMAGE_BINDING_FORMAT_EXT 0x906E #define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF typedef void(GLAPIENTRY * PFNGLBINDIMAGETEXTUREEXTPROC)(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); typedef void(GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC)(GLbitfield barriers); #define glBindImageTextureEXT GLEW_GET_FUN(__glewBindImageTextureEXT) #define glMemoryBarrierEXT GLEW_GET_FUN(__glewMemoryBarrierEXT) #define GLEW_EXT_shader_image_load_store GLEW_GET_VAR(__GLEW_EXT_shader_image_load_store) #endif /* GL_EXT_shader_image_load_store */ /* -------------------------- GL_EXT_shadow_funcs -------------------------- */ #ifndef GL_EXT_shadow_funcs #define GL_EXT_shadow_funcs 1 #define GLEW_EXT_shadow_funcs GLEW_GET_VAR(__GLEW_EXT_shadow_funcs) #endif /* GL_EXT_shadow_funcs */ /* --------------------- GL_EXT_shared_texture_palette --------------------- */ #ifndef GL_EXT_shared_texture_palette #define GL_EXT_shared_texture_palette 1 #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB #define GLEW_EXT_shared_texture_palette GLEW_GET_VAR(__GLEW_EXT_shared_texture_palette) #endif /* GL_EXT_shared_texture_palette */ /* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */ #ifndef GL_EXT_stencil_clear_tag #define GL_EXT_stencil_clear_tag 1 #define GL_STENCIL_TAG_BITS_EXT 0x88F2 #define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 #define GLEW_EXT_stencil_clear_tag GLEW_GET_VAR(__GLEW_EXT_stencil_clear_tag) #endif /* GL_EXT_stencil_clear_tag */ /* ------------------------ GL_EXT_stencil_two_side ------------------------ */ #ifndef GL_EXT_stencil_two_side #define GL_EXT_stencil_two_side 1 #define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 typedef void(GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC)(GLenum face); #define glActiveStencilFaceEXT GLEW_GET_FUN(__glewActiveStencilFaceEXT) #define GLEW_EXT_stencil_two_side GLEW_GET_VAR(__GLEW_EXT_stencil_two_side) #endif /* GL_EXT_stencil_two_side */ /* -------------------------- GL_EXT_stencil_wrap -------------------------- */ #ifndef GL_EXT_stencil_wrap #define GL_EXT_stencil_wrap 1 #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 #define GLEW_EXT_stencil_wrap GLEW_GET_VAR(__GLEW_EXT_stencil_wrap) #endif /* GL_EXT_stencil_wrap */ /* --------------------------- GL_EXT_subtexture --------------------------- */ #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 typedef void(GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); #define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT) #define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT) #define glTexSubImage3DEXT GLEW_GET_FUN(__glewTexSubImage3DEXT) #define GLEW_EXT_subtexture GLEW_GET_VAR(__GLEW_EXT_subtexture) #endif /* GL_EXT_subtexture */ /* ----------------------------- GL_EXT_texture ---------------------------- */ #ifndef GL_EXT_texture #define GL_EXT_texture 1 #define GL_ALPHA4_EXT 0x803B #define GL_ALPHA8_EXT 0x803C #define GL_ALPHA12_EXT 0x803D #define GL_ALPHA16_EXT 0x803E #define GL_LUMINANCE4_EXT 0x803F #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE12_EXT 0x8041 #define GL_LUMINANCE16_EXT 0x8042 #define GL_LUMINANCE4_ALPHA4_EXT 0x8043 #define GL_LUMINANCE6_ALPHA2_EXT 0x8044 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_LUMINANCE12_ALPHA4_EXT 0x8046 #define GL_LUMINANCE12_ALPHA12_EXT 0x8047 #define GL_LUMINANCE16_ALPHA16_EXT 0x8048 #define GL_INTENSITY_EXT 0x8049 #define GL_INTENSITY4_EXT 0x804A #define GL_INTENSITY8_EXT 0x804B #define GL_INTENSITY12_EXT 0x804C #define GL_INTENSITY16_EXT 0x804D #define GL_RGB2_EXT 0x804E #define GL_RGB4_EXT 0x804F #define GL_RGB5_EXT 0x8050 #define GL_RGB8_EXT 0x8051 #define GL_RGB10_EXT 0x8052 #define GL_RGB12_EXT 0x8053 #define GL_RGB16_EXT 0x8054 #define GL_RGBA2_EXT 0x8055 #define GL_RGBA4_EXT 0x8056 #define GL_RGB5_A1_EXT 0x8057 #define GL_RGBA8_EXT 0x8058 #define GL_RGB10_A2_EXT 0x8059 #define GL_RGBA12_EXT 0x805A #define GL_RGBA16_EXT 0x805B #define GL_TEXTURE_RED_SIZE_EXT 0x805C #define GL_TEXTURE_GREEN_SIZE_EXT 0x805D #define GL_TEXTURE_BLUE_SIZE_EXT 0x805E #define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F #define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 #define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 #define GL_REPLACE_EXT 0x8062 #define GL_PROXY_TEXTURE_1D_EXT 0x8063 #define GL_PROXY_TEXTURE_2D_EXT 0x8064 #define GLEW_EXT_texture GLEW_GET_VAR(__GLEW_EXT_texture) #endif /* GL_EXT_texture */ /* ---------------------------- GL_EXT_texture3D --------------------------- */ #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #define GL_PACK_SKIP_IMAGES_EXT 0x806B #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E #define GL_TEXTURE_3D_EXT 0x806F #define GL_PROXY_TEXTURE_3D_EXT 0x8070 #define GL_TEXTURE_DEPTH_EXT 0x8071 #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 typedef void(GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); #define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT) #define GLEW_EXT_texture3D GLEW_GET_VAR(__GLEW_EXT_texture3D) #endif /* GL_EXT_texture3D */ /* -------------------------- GL_EXT_texture_array ------------------------- */ #ifndef GL_EXT_texture_array #define GL_EXT_texture_array 1 #define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E #define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF #define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 #define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D typedef void(GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #define glFramebufferTextureLayerEXT GLEW_GET_FUN(__glewFramebufferTextureLayerEXT) #define GLEW_EXT_texture_array GLEW_GET_VAR(__GLEW_EXT_texture_array) #endif /* GL_EXT_texture_array */ /* ---------------------- GL_EXT_texture_buffer_object --------------------- */ #ifndef GL_EXT_texture_buffer_object #define GL_EXT_texture_buffer_object 1 #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E typedef void(GLAPIENTRY * PFNGLTEXBUFFEREXTPROC)(GLenum target, GLenum internalformat, GLuint buffer); #define glTexBufferEXT GLEW_GET_FUN(__glewTexBufferEXT) #define GLEW_EXT_texture_buffer_object GLEW_GET_VAR(__GLEW_EXT_texture_buffer_object) #endif /* GL_EXT_texture_buffer_object */ /* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ #ifndef GL_EXT_texture_compression_dxt1 #define GL_EXT_texture_compression_dxt1 1 #define GLEW_EXT_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_EXT_texture_compression_dxt1) #endif /* GL_EXT_texture_compression_dxt1 */ /* -------------------- GL_EXT_texture_compression_latc -------------------- */ #ifndef GL_EXT_texture_compression_latc #define GL_EXT_texture_compression_latc 1 #define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 #define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 #define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 #define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 #define GLEW_EXT_texture_compression_latc GLEW_GET_VAR(__GLEW_EXT_texture_compression_latc) #endif /* GL_EXT_texture_compression_latc */ /* -------------------- GL_EXT_texture_compression_rgtc -------------------- */ #ifndef GL_EXT_texture_compression_rgtc #define GL_EXT_texture_compression_rgtc 1 #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE #define GLEW_EXT_texture_compression_rgtc GLEW_GET_VAR(__GLEW_EXT_texture_compression_rgtc) #endif /* GL_EXT_texture_compression_rgtc */ /* -------------------- GL_EXT_texture_compression_s3tc -------------------- */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #define GLEW_EXT_texture_compression_s3tc GLEW_GET_VAR(__GLEW_EXT_texture_compression_s3tc) #endif /* GL_EXT_texture_compression_s3tc */ /* ------------------------ GL_EXT_texture_cube_map ------------------------ */ #ifndef GL_EXT_texture_cube_map #define GL_EXT_texture_cube_map 1 #define GL_NORMAL_MAP_EXT 0x8511 #define GL_REFLECTION_MAP_EXT 0x8512 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C #define GLEW_EXT_texture_cube_map GLEW_GET_VAR(__GLEW_EXT_texture_cube_map) #endif /* GL_EXT_texture_cube_map */ /* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ #ifndef GL_EXT_texture_edge_clamp #define GL_EXT_texture_edge_clamp 1 #define GL_CLAMP_TO_EDGE_EXT 0x812F #define GLEW_EXT_texture_edge_clamp GLEW_GET_VAR(__GLEW_EXT_texture_edge_clamp) #endif /* GL_EXT_texture_edge_clamp */ /* --------------------------- GL_EXT_texture_env -------------------------- */ #ifndef GL_EXT_texture_env #define GL_EXT_texture_env 1 #define GL_TEXTURE_ENV0_EXT 0 #define GL_ENV_BLEND_EXT 0 #define GL_TEXTURE_ENV_SHIFT_EXT 0 #define GL_ENV_REPLACE_EXT 0 #define GL_ENV_ADD_EXT 0 #define GL_ENV_SUBTRACT_EXT 0 #define GL_TEXTURE_ENV_MODE_ALPHA_EXT 0 #define GL_ENV_REVERSE_SUBTRACT_EXT 0 #define GL_ENV_REVERSE_BLEND_EXT 0 #define GL_ENV_COPY_EXT 0 #define GL_ENV_MODULATE_EXT 0 #define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env) #endif /* GL_EXT_texture_env */ /* ------------------------- GL_EXT_texture_env_add ------------------------ */ #ifndef GL_EXT_texture_env_add #define GL_EXT_texture_env_add 1 #define GLEW_EXT_texture_env_add GLEW_GET_VAR(__GLEW_EXT_texture_env_add) #endif /* GL_EXT_texture_env_add */ /* ----------------------- GL_EXT_texture_env_combine ---------------------- */ #ifndef GL_EXT_texture_env_combine #define GL_EXT_texture_env_combine 1 #define GL_COMBINE_EXT 0x8570 #define GL_COMBINE_RGB_EXT 0x8571 #define GL_COMBINE_ALPHA_EXT 0x8572 #define GL_RGB_SCALE_EXT 0x8573 #define GL_ADD_SIGNED_EXT 0x8574 #define GL_INTERPOLATE_EXT 0x8575 #define GL_CONSTANT_EXT 0x8576 #define GL_PRIMARY_COLOR_EXT 0x8577 #define GL_PREVIOUS_EXT 0x8578 #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A #define GLEW_EXT_texture_env_combine GLEW_GET_VAR(__GLEW_EXT_texture_env_combine) #endif /* GL_EXT_texture_env_combine */ /* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */ #ifndef GL_EXT_texture_env_dot3 #define GL_EXT_texture_env_dot3 1 #define GL_DOT3_RGB_EXT 0x8740 #define GL_DOT3_RGBA_EXT 0x8741 #define GLEW_EXT_texture_env_dot3 GLEW_GET_VAR(__GLEW_EXT_texture_env_dot3) #endif /* GL_EXT_texture_env_dot3 */ /* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #define GLEW_EXT_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_EXT_texture_filter_anisotropic) #endif /* GL_EXT_texture_filter_anisotropic */ /* ------------------------- GL_EXT_texture_integer ------------------------ */ #ifndef GL_EXT_texture_integer #define GL_EXT_texture_integer 1 #define GL_RGBA32UI_EXT 0x8D70 #define GL_RGB32UI_EXT 0x8D71 #define GL_ALPHA32UI_EXT 0x8D72 #define GL_INTENSITY32UI_EXT 0x8D73 #define GL_LUMINANCE32UI_EXT 0x8D74 #define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 #define GL_RGBA16UI_EXT 0x8D76 #define GL_RGB16UI_EXT 0x8D77 #define GL_ALPHA16UI_EXT 0x8D78 #define GL_INTENSITY16UI_EXT 0x8D79 #define GL_LUMINANCE16UI_EXT 0x8D7A #define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B #define GL_RGBA8UI_EXT 0x8D7C #define GL_RGB8UI_EXT 0x8D7D #define GL_ALPHA8UI_EXT 0x8D7E #define GL_INTENSITY8UI_EXT 0x8D7F #define GL_LUMINANCE8UI_EXT 0x8D80 #define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 #define GL_RGBA32I_EXT 0x8D82 #define GL_RGB32I_EXT 0x8D83 #define GL_ALPHA32I_EXT 0x8D84 #define GL_INTENSITY32I_EXT 0x8D85 #define GL_LUMINANCE32I_EXT 0x8D86 #define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 #define GL_RGBA16I_EXT 0x8D88 #define GL_RGB16I_EXT 0x8D89 #define GL_ALPHA16I_EXT 0x8D8A #define GL_INTENSITY16I_EXT 0x8D8B #define GL_LUMINANCE16I_EXT 0x8D8C #define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D #define GL_RGBA8I_EXT 0x8D8E #define GL_RGB8I_EXT 0x8D8F #define GL_ALPHA8I_EXT 0x8D90 #define GL_INTENSITY8I_EXT 0x8D91 #define GL_LUMINANCE8I_EXT 0x8D92 #define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 #define GL_RED_INTEGER_EXT 0x8D94 #define GL_GREEN_INTEGER_EXT 0x8D95 #define GL_BLUE_INTEGER_EXT 0x8D96 #define GL_ALPHA_INTEGER_EXT 0x8D97 #define GL_RGB_INTEGER_EXT 0x8D98 #define GL_RGBA_INTEGER_EXT 0x8D99 #define GL_BGR_INTEGER_EXT 0x8D9A #define GL_BGRA_INTEGER_EXT 0x8D9B #define GL_LUMINANCE_INTEGER_EXT 0x8D9C #define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D #define GL_RGBA_INTEGER_MODE_EXT 0x8D9E typedef void(GLAPIENTRY * PFNGLCLEARCOLORIIEXTPROC)(GLint red, GLint green, GLint blue, GLint alpha); typedef void(GLAPIENTRY * PFNGLCLEARCOLORIUIEXTPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); typedef void(GLAPIENTRY * PFNGLGETTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, const GLuint * params); #define glClearColorIiEXT GLEW_GET_FUN(__glewClearColorIiEXT) #define glClearColorIuiEXT GLEW_GET_FUN(__glewClearColorIuiEXT) #define glGetTexParameterIivEXT GLEW_GET_FUN(__glewGetTexParameterIivEXT) #define glGetTexParameterIuivEXT GLEW_GET_FUN(__glewGetTexParameterIuivEXT) #define glTexParameterIivEXT GLEW_GET_FUN(__glewTexParameterIivEXT) #define glTexParameterIuivEXT GLEW_GET_FUN(__glewTexParameterIuivEXT) #define GLEW_EXT_texture_integer GLEW_GET_VAR(__GLEW_EXT_texture_integer) #endif /* GL_EXT_texture_integer */ /* ------------------------ GL_EXT_texture_lod_bias ------------------------ */ #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #define GLEW_EXT_texture_lod_bias GLEW_GET_VAR(__GLEW_EXT_texture_lod_bias) #endif /* GL_EXT_texture_lod_bias */ /* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */ #ifndef GL_EXT_texture_mirror_clamp #define GL_EXT_texture_mirror_clamp 1 #define GL_MIRROR_CLAMP_EXT 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 #define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 #define GLEW_EXT_texture_mirror_clamp GLEW_GET_VAR(__GLEW_EXT_texture_mirror_clamp) #endif /* GL_EXT_texture_mirror_clamp */ /* ------------------------- GL_EXT_texture_object ------------------------- */ #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #define GL_TEXTURE_PRIORITY_EXT 0x8066 #define GL_TEXTURE_RESIDENT_EXT 0x8067 #define GL_TEXTURE_1D_BINDING_EXT 0x8068 #define GL_TEXTURE_2D_BINDING_EXT 0x8069 #define GL_TEXTURE_3D_BINDING_EXT 0x806A typedef GLboolean(GLAPIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC)(GLsizei n, const GLuint * textures, GLboolean * residences); typedef void(GLAPIENTRY * PFNGLBINDTEXTUREEXTPROC)(GLenum target, GLuint texture); typedef void(GLAPIENTRY * PFNGLDELETETEXTURESEXTPROC)(GLsizei n, const GLuint * textures); typedef void(GLAPIENTRY * PFNGLGENTEXTURESEXTPROC)(GLsizei n, GLuint * textures); typedef GLboolean(GLAPIENTRY * PFNGLISTEXTUREEXTPROC)(GLuint texture); typedef void(GLAPIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC)(GLsizei n, const GLuint * textures, const GLclampf * priorities); #define glAreTexturesResidentEXT GLEW_GET_FUN(__glewAreTexturesResidentEXT) #define glBindTextureEXT GLEW_GET_FUN(__glewBindTextureEXT) #define glDeleteTexturesEXT GLEW_GET_FUN(__glewDeleteTexturesEXT) #define glGenTexturesEXT GLEW_GET_FUN(__glewGenTexturesEXT) #define glIsTextureEXT GLEW_GET_FUN(__glewIsTextureEXT) #define glPrioritizeTexturesEXT GLEW_GET_FUN(__glewPrioritizeTexturesEXT) #define GLEW_EXT_texture_object GLEW_GET_VAR(__GLEW_EXT_texture_object) #endif /* GL_EXT_texture_object */ /* --------------------- GL_EXT_texture_perturb_normal --------------------- */ #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #define GL_PERTURB_EXT 0x85AE #define GL_TEXTURE_NORMAL_EXT 0x85AF typedef void(GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC)(GLenum mode); #define glTextureNormalEXT GLEW_GET_FUN(__glewTextureNormalEXT) #define GLEW_EXT_texture_perturb_normal GLEW_GET_VAR(__GLEW_EXT_texture_perturb_normal) #endif /* GL_EXT_texture_perturb_normal */ /* ------------------------ GL_EXT_texture_rectangle ----------------------- */ #ifndef GL_EXT_texture_rectangle #define GL_EXT_texture_rectangle 1 #define GL_TEXTURE_RECTANGLE_EXT 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 #define GLEW_EXT_texture_rectangle GLEW_GET_VAR(__GLEW_EXT_texture_rectangle) #endif /* GL_EXT_texture_rectangle */ /* -------------------------- GL_EXT_texture_sRGB -------------------------- */ #ifndef GL_EXT_texture_sRGB #define GL_EXT_texture_sRGB 1 #define GL_SRGB_EXT 0x8C40 #define GL_SRGB8_EXT 0x8C41 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_SLUMINANCE_ALPHA_EXT 0x8C44 #define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 #define GL_SLUMINANCE_EXT 0x8C46 #define GL_SLUMINANCE8_EXT 0x8C47 #define GL_COMPRESSED_SRGB_EXT 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 #define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B #define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F #define GLEW_EXT_texture_sRGB GLEW_GET_VAR(__GLEW_EXT_texture_sRGB) #endif /* GL_EXT_texture_sRGB */ /* ----------------------- GL_EXT_texture_sRGB_decode ---------------------- */ #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #define GLEW_EXT_texture_sRGB_decode GLEW_GET_VAR(__GLEW_EXT_texture_sRGB_decode) #endif /* GL_EXT_texture_sRGB_decode */ /* --------------------- GL_EXT_texture_shared_exponent -------------------- */ #ifndef GL_EXT_texture_shared_exponent #define GL_EXT_texture_shared_exponent 1 #define GL_RGB9_E5_EXT 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E #define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F #define GLEW_EXT_texture_shared_exponent GLEW_GET_VAR(__GLEW_EXT_texture_shared_exponent) #endif /* GL_EXT_texture_shared_exponent */ /* -------------------------- GL_EXT_texture_snorm ------------------------- */ #ifndef GL_EXT_texture_snorm #define GL_EXT_texture_snorm 1 #define GL_RED_SNORM 0x8F90 #define GL_RG_SNORM 0x8F91 #define GL_RGB_SNORM 0x8F92 #define GL_RGBA_SNORM 0x8F93 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_ALPHA_SNORM 0x9010 #define GL_LUMINANCE_SNORM 0x9011 #define GL_LUMINANCE_ALPHA_SNORM 0x9012 #define GL_INTENSITY_SNORM 0x9013 #define GL_ALPHA8_SNORM 0x9014 #define GL_LUMINANCE8_SNORM 0x9015 #define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 #define GL_INTENSITY8_SNORM 0x9017 #define GL_ALPHA16_SNORM 0x9018 #define GL_LUMINANCE16_SNORM 0x9019 #define GL_LUMINANCE16_ALPHA16_SNORM 0x901A #define GL_INTENSITY16_SNORM 0x901B #define GLEW_EXT_texture_snorm GLEW_GET_VAR(__GLEW_EXT_texture_snorm) #endif /* GL_EXT_texture_snorm */ /* ------------------------- GL_EXT_texture_swizzle ------------------------ */ #ifndef GL_EXT_texture_swizzle #define GL_EXT_texture_swizzle 1 #define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 #define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 #define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 #define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 #define GLEW_EXT_texture_swizzle GLEW_GET_VAR(__GLEW_EXT_texture_swizzle) #endif /* GL_EXT_texture_swizzle */ /* --------------------------- GL_EXT_timer_query -------------------------- */ #ifndef GL_EXT_timer_query #define GL_EXT_timer_query 1 #define GL_TIME_ELAPSED_EXT 0x88BF typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTI64VEXTPROC)(GLuint id, GLenum pname, GLint64EXT * params); typedef void(GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VEXTPROC)(GLuint id, GLenum pname, GLuint64EXT * params); #define glGetQueryObjecti64vEXT GLEW_GET_FUN(__glewGetQueryObjecti64vEXT) #define glGetQueryObjectui64vEXT GLEW_GET_FUN(__glewGetQueryObjectui64vEXT) #define GLEW_EXT_timer_query GLEW_GET_VAR(__GLEW_EXT_timer_query) #endif /* GL_EXT_timer_query */ /* ----------------------- GL_EXT_transform_feedback ----------------------- */ #ifndef GL_EXT_transform_feedback #define GL_EXT_transform_feedback 1 #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 #define GL_RASTERIZER_DISCARD_EXT 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B #define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C #define GL_SEPARATE_ATTRIBS_EXT 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F typedef void(GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)(GLenum primitiveMode); typedef void(GLAPIENTRY * PFNGLBINDBUFFERBASEEXTPROC)(GLenum target, GLuint index, GLuint buffer); typedef void(GLAPIENTRY * PFNGLBINDBUFFEROFFSETEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void(GLAPIENTRY * PFNGLBINDBUFFERRANGEEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void(GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKEXTPROC)(void); typedef void(GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); typedef void(GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)(GLuint program, GLsizei count, const GLchar ** varyings, GLenum bufferMode); #define glBeginTransformFeedbackEXT GLEW_GET_FUN(__glewBeginTransformFeedbackEXT) #define glBindBufferBaseEXT GLEW_GET_FUN(__glewBindBufferBaseEXT) #define glBindBufferOffsetEXT GLEW_GET_FUN(__glewBindBufferOffsetEXT) #define glBindBufferRangeEXT GLEW_GET_FUN(__glewBindBufferRangeEXT) #define glEndTransformFeedbackEXT GLEW_GET_FUN(__glewEndTransformFeedbackEXT) #define glGetTransformFeedbackVaryingEXT GLEW_GET_FUN(__glewGetTransformFeedbackVaryingEXT) #define glTransformFeedbackVaryingsEXT GLEW_GET_FUN(__glewTransformFeedbackVaryingsEXT) #define GLEW_EXT_transform_feedback GLEW_GET_VAR(__GLEW_EXT_transform_feedback) #endif /* GL_EXT_transform_feedback */ /* -------------------------- GL_EXT_vertex_array -------------------------- */ #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #define GL_DOUBLE_EXT 0x140A #define GL_VERTEX_ARRAY_EXT 0x8074 #define GL_NORMAL_ARRAY_EXT 0x8075 #define GL_COLOR_ARRAY_EXT 0x8076 #define GL_INDEX_ARRAY_EXT 0x8077 #define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 #define GL_EDGE_FLAG_ARRAY_EXT 0x8079 #define GL_VERTEX_ARRAY_SIZE_EXT 0x807A #define GL_VERTEX_ARRAY_TYPE_EXT 0x807B #define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_TYPE_EXT 0x807E #define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_SIZE_EXT 0x8081 #define GL_COLOR_ARRAY_TYPE_EXT 0x8082 #define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_TYPE_EXT 0x8085 #define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_POINTER_EXT 0x808E #define GL_NORMAL_ARRAY_POINTER_EXT 0x808F #define GL_COLOR_ARRAY_POINTER_EXT 0x8090 #define GL_INDEX_ARRAY_POINTER_EXT 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 typedef void(GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC)(GLint i); typedef void(GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); typedef void(GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); typedef void(GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, const GLboolean * pointer); typedef void(GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); typedef void(GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); typedef void(GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); typedef void(GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); #define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT) #define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT) #define glDrawArraysEXT GLEW_GET_FUN(__glewDrawArraysEXT) #define glEdgeFlagPointerEXT GLEW_GET_FUN(__glewEdgeFlagPointerEXT) #define glIndexPointerEXT GLEW_GET_FUN(__glewIndexPointerEXT) #define glNormalPointerEXT GLEW_GET_FUN(__glewNormalPointerEXT) #define glTexCoordPointerEXT GLEW_GET_FUN(__glewTexCoordPointerEXT) #define glVertexPointerEXT GLEW_GET_FUN(__glewVertexPointerEXT) #define GLEW_EXT_vertex_array GLEW_GET_VAR(__GLEW_EXT_vertex_array) #endif /* GL_EXT_vertex_array */ /* ------------------------ GL_EXT_vertex_array_bgra ----------------------- */ #ifndef GL_EXT_vertex_array_bgra #define GL_EXT_vertex_array_bgra 1 #define GL_BGRA 0x80E1 #define GLEW_EXT_vertex_array_bgra GLEW_GET_VAR(__GLEW_EXT_vertex_array_bgra) #endif /* GL_EXT_vertex_array_bgra */ /* ----------------------- GL_EXT_vertex_attrib_64bit ---------------------- */ #ifndef GL_EXT_vertex_attrib_64bit #define GL_EXT_vertex_attrib_64bit 1 #define GL_DOUBLE_MAT2_EXT 0x8F46 #define GL_DOUBLE_MAT3_EXT 0x8F47 #define GL_DOUBLE_MAT4_EXT 0x8F48 #define GL_DOUBLE_MAT2x3_EXT 0x8F49 #define GL_DOUBLE_MAT2x4_EXT 0x8F4A #define GL_DOUBLE_MAT3x2_EXT 0x8F4B #define GL_DOUBLE_MAT3x4_EXT 0x8F4C #define GL_DOUBLE_MAT4x2_EXT 0x8F4D #define GL_DOUBLE_MAT4x3_EXT 0x8F4E #define GL_DOUBLE_VEC2_EXT 0x8FFC #define GL_DOUBLE_VEC3_EXT 0x8FFD #define GL_DOUBLE_VEC4_EXT 0x8FFE typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVEXTPROC)(GLuint index, GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1DEXTPROC)(GLuint index, GLdouble x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1DVEXTPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2DEXTPROC)(GLuint index, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2DVEXTPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3DVEXTPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4DVEXTPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); #define glGetVertexAttribLdvEXT GLEW_GET_FUN(__glewGetVertexAttribLdvEXT) #define glVertexArrayVertexAttribLOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribLOffsetEXT) #define glVertexAttribL1dEXT GLEW_GET_FUN(__glewVertexAttribL1dEXT) #define glVertexAttribL1dvEXT GLEW_GET_FUN(__glewVertexAttribL1dvEXT) #define glVertexAttribL2dEXT GLEW_GET_FUN(__glewVertexAttribL2dEXT) #define glVertexAttribL2dvEXT GLEW_GET_FUN(__glewVertexAttribL2dvEXT) #define glVertexAttribL3dEXT GLEW_GET_FUN(__glewVertexAttribL3dEXT) #define glVertexAttribL3dvEXT GLEW_GET_FUN(__glewVertexAttribL3dvEXT) #define glVertexAttribL4dEXT GLEW_GET_FUN(__glewVertexAttribL4dEXT) #define glVertexAttribL4dvEXT GLEW_GET_FUN(__glewVertexAttribL4dvEXT) #define glVertexAttribLPointerEXT GLEW_GET_FUN(__glewVertexAttribLPointerEXT) #define GLEW_EXT_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_EXT_vertex_attrib_64bit) #endif /* GL_EXT_vertex_attrib_64bit */ /* -------------------------- GL_EXT_vertex_shader ------------------------- */ #ifndef GL_EXT_vertex_shader #define GL_EXT_vertex_shader 1 #define GL_VERTEX_SHADER_EXT 0x8780 #define GL_VERTEX_SHADER_BINDING_EXT 0x8781 #define GL_OP_INDEX_EXT 0x8782 #define GL_OP_NEGATE_EXT 0x8783 #define GL_OP_DOT3_EXT 0x8784 #define GL_OP_DOT4_EXT 0x8785 #define GL_OP_MUL_EXT 0x8786 #define GL_OP_ADD_EXT 0x8787 #define GL_OP_MADD_EXT 0x8788 #define GL_OP_FRAC_EXT 0x8789 #define GL_OP_MAX_EXT 0x878A #define GL_OP_MIN_EXT 0x878B #define GL_OP_SET_GE_EXT 0x878C #define GL_OP_SET_LT_EXT 0x878D #define GL_OP_CLAMP_EXT 0x878E #define GL_OP_FLOOR_EXT 0x878F #define GL_OP_ROUND_EXT 0x8790 #define GL_OP_EXP_BASE_2_EXT 0x8791 #define GL_OP_LOG_BASE_2_EXT 0x8792 #define GL_OP_POWER_EXT 0x8793 #define GL_OP_RECIP_EXT 0x8794 #define GL_OP_RECIP_SQRT_EXT 0x8795 #define GL_OP_SUB_EXT 0x8796 #define GL_OP_CROSS_PRODUCT_EXT 0x8797 #define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 #define GL_OP_MOV_EXT 0x8799 #define GL_OUTPUT_VERTEX_EXT 0x879A #define GL_OUTPUT_COLOR0_EXT 0x879B #define GL_OUTPUT_COLOR1_EXT 0x879C #define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D #define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E #define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F #define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 #define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 #define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 #define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 #define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 #define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 #define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 #define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 #define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 #define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 #define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA #define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB #define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC #define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD #define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE #define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF #define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 #define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 #define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 #define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 #define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 #define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 #define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 #define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 #define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 #define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 #define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA #define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB #define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC #define GL_OUTPUT_FOG_EXT 0x87BD #define GL_SCALAR_EXT 0x87BE #define GL_VECTOR_EXT 0x87BF #define GL_MATRIX_EXT 0x87C0 #define GL_VARIANT_EXT 0x87C1 #define GL_INVARIANT_EXT 0x87C2 #define GL_LOCAL_CONSTANT_EXT 0x87C3 #define GL_LOCAL_EXT 0x87C4 #define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 #define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 #define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 #define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 #define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA #define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE #define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF #define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 #define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 #define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 #define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 #define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 #define GL_X_EXT 0x87D5 #define GL_Y_EXT 0x87D6 #define GL_Z_EXT 0x87D7 #define GL_W_EXT 0x87D8 #define GL_NEGATIVE_X_EXT 0x87D9 #define GL_NEGATIVE_Y_EXT 0x87DA #define GL_NEGATIVE_Z_EXT 0x87DB #define GL_NEGATIVE_W_EXT 0x87DC #define GL_ZERO_EXT 0x87DD #define GL_ONE_EXT 0x87DE #define GL_NEGATIVE_ONE_EXT 0x87DF #define GL_NORMALIZED_RANGE_EXT 0x87E0 #define GL_FULL_RANGE_EXT 0x87E1 #define GL_CURRENT_VERTEX_EXT 0x87E2 #define GL_MVP_MATRIX_EXT 0x87E3 #define GL_VARIANT_VALUE_EXT 0x87E4 #define GL_VARIANT_DATATYPE_EXT 0x87E5 #define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 #define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 #define GL_VARIANT_ARRAY_EXT 0x87E8 #define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 #define GL_INVARIANT_VALUE_EXT 0x87EA #define GL_INVARIANT_DATATYPE_EXT 0x87EB #define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC #define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED typedef void(GLAPIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC)(void); typedef GLuint(GLAPIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); typedef GLuint(GLAPIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); typedef GLuint(GLAPIENTRY * PFNGLBINDPARAMETEREXTPROC)(GLenum value); typedef GLuint(GLAPIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, GLenum value); typedef GLuint(GLAPIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); typedef void(GLAPIENTRY * PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLENDVERTEXSHADEREXTPROC)(void); typedef void(GLAPIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); typedef GLuint(GLAPIENTRY * PFNGLGENSYMBOLSEXTPROC)(GLenum dataType, GLenum storageType, GLenum range, GLuint components); typedef GLuint(GLAPIENTRY * PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); typedef void(GLAPIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); typedef void(GLAPIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); typedef void(GLAPIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); typedef void(GLAPIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); typedef void(GLAPIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); typedef void(GLAPIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); typedef void(GLAPIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); typedef void(GLAPIENTRY * PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); typedef void(GLAPIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); typedef void(GLAPIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, GLvoid ** data); typedef void(GLAPIENTRY * PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); typedef GLboolean(GLAPIENTRY * PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); typedef void(GLAPIENTRY * PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, GLvoid * addr); typedef void(GLAPIENTRY * PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, GLvoid * addr); typedef void(GLAPIENTRY * PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); typedef void(GLAPIENTRY * PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); typedef void(GLAPIENTRY * PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); typedef void(GLAPIENTRY * PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void(GLAPIENTRY * PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, GLvoid * addr); typedef void(GLAPIENTRY * PFNGLVARIANTBVEXTPROC)(GLuint id, GLbyte * addr); typedef void(GLAPIENTRY * PFNGLVARIANTDVEXTPROC)(GLuint id, GLdouble * addr); typedef void(GLAPIENTRY * PFNGLVARIANTFVEXTPROC)(GLuint id, GLfloat * addr); typedef void(GLAPIENTRY * PFNGLVARIANTIVEXTPROC)(GLuint id, GLint * addr); typedef void(GLAPIENTRY * PFNGLVARIANTSVEXTPROC)(GLuint id, GLshort * addr); typedef void(GLAPIENTRY * PFNGLVARIANTUBVEXTPROC)(GLuint id, GLubyte * addr); typedef void(GLAPIENTRY * PFNGLVARIANTUIVEXTPROC)(GLuint id, GLuint * addr); typedef void(GLAPIENTRY * PFNGLVARIANTUSVEXTPROC)(GLuint id, GLushort * addr); typedef void(GLAPIENTRY * PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); #define glBeginVertexShaderEXT GLEW_GET_FUN(__glewBeginVertexShaderEXT) #define glBindLightParameterEXT GLEW_GET_FUN(__glewBindLightParameterEXT) #define glBindMaterialParameterEXT GLEW_GET_FUN(__glewBindMaterialParameterEXT) #define glBindParameterEXT GLEW_GET_FUN(__glewBindParameterEXT) #define glBindTexGenParameterEXT GLEW_GET_FUN(__glewBindTexGenParameterEXT) #define glBindTextureUnitParameterEXT GLEW_GET_FUN(__glewBindTextureUnitParameterEXT) #define glBindVertexShaderEXT GLEW_GET_FUN(__glewBindVertexShaderEXT) #define glDeleteVertexShaderEXT GLEW_GET_FUN(__glewDeleteVertexShaderEXT) #define glDisableVariantClientStateEXT GLEW_GET_FUN(__glewDisableVariantClientStateEXT) #define glEnableVariantClientStateEXT GLEW_GET_FUN(__glewEnableVariantClientStateEXT) #define glEndVertexShaderEXT GLEW_GET_FUN(__glewEndVertexShaderEXT) #define glExtractComponentEXT GLEW_GET_FUN(__glewExtractComponentEXT) #define glGenSymbolsEXT GLEW_GET_FUN(__glewGenSymbolsEXT) #define glGenVertexShadersEXT GLEW_GET_FUN(__glewGenVertexShadersEXT) #define glGetInvariantBooleanvEXT GLEW_GET_FUN(__glewGetInvariantBooleanvEXT) #define glGetInvariantFloatvEXT GLEW_GET_FUN(__glewGetInvariantFloatvEXT) #define glGetInvariantIntegervEXT GLEW_GET_FUN(__glewGetInvariantIntegervEXT) #define glGetLocalConstantBooleanvEXT GLEW_GET_FUN(__glewGetLocalConstantBooleanvEXT) #define glGetLocalConstantFloatvEXT GLEW_GET_FUN(__glewGetLocalConstantFloatvEXT) #define glGetLocalConstantIntegervEXT GLEW_GET_FUN(__glewGetLocalConstantIntegervEXT) #define glGetVariantBooleanvEXT GLEW_GET_FUN(__glewGetVariantBooleanvEXT) #define glGetVariantFloatvEXT GLEW_GET_FUN(__glewGetVariantFloatvEXT) #define glGetVariantIntegervEXT GLEW_GET_FUN(__glewGetVariantIntegervEXT) #define glGetVariantPointervEXT GLEW_GET_FUN(__glewGetVariantPointervEXT) #define glInsertComponentEXT GLEW_GET_FUN(__glewInsertComponentEXT) #define glIsVariantEnabledEXT GLEW_GET_FUN(__glewIsVariantEnabledEXT) #define glSetInvariantEXT GLEW_GET_FUN(__glewSetInvariantEXT) #define glSetLocalConstantEXT GLEW_GET_FUN(__glewSetLocalConstantEXT) #define glShaderOp1EXT GLEW_GET_FUN(__glewShaderOp1EXT) #define glShaderOp2EXT GLEW_GET_FUN(__glewShaderOp2EXT) #define glShaderOp3EXT GLEW_GET_FUN(__glewShaderOp3EXT) #define glSwizzleEXT GLEW_GET_FUN(__glewSwizzleEXT) #define glVariantPointerEXT GLEW_GET_FUN(__glewVariantPointerEXT) #define glVariantbvEXT GLEW_GET_FUN(__glewVariantbvEXT) #define glVariantdvEXT GLEW_GET_FUN(__glewVariantdvEXT) #define glVariantfvEXT GLEW_GET_FUN(__glewVariantfvEXT) #define glVariantivEXT GLEW_GET_FUN(__glewVariantivEXT) #define glVariantsvEXT GLEW_GET_FUN(__glewVariantsvEXT) #define glVariantubvEXT GLEW_GET_FUN(__glewVariantubvEXT) #define glVariantuivEXT GLEW_GET_FUN(__glewVariantuivEXT) #define glVariantusvEXT GLEW_GET_FUN(__glewVariantusvEXT) #define glWriteMaskEXT GLEW_GET_FUN(__glewWriteMaskEXT) #define GLEW_EXT_vertex_shader GLEW_GET_VAR(__GLEW_EXT_vertex_shader) #endif /* GL_EXT_vertex_shader */ /* ------------------------ GL_EXT_vertex_weighting ------------------------ */ #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 #define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 #define GL_MODELVIEW0_EXT 0x1700 #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW1_EXT 0x850A #define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B #define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C #define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D #define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 typedef void(GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, void * pointer); typedef void(GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC)(GLfloat weight); typedef void(GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC)(GLfloat * weight); #define glVertexWeightPointerEXT GLEW_GET_FUN(__glewVertexWeightPointerEXT) #define glVertexWeightfEXT GLEW_GET_FUN(__glewVertexWeightfEXT) #define glVertexWeightfvEXT GLEW_GET_FUN(__glewVertexWeightfvEXT) #define GLEW_EXT_vertex_weighting GLEW_GET_VAR(__GLEW_EXT_vertex_weighting) #endif /* GL_EXT_vertex_weighting */ /* ------------------------- GL_EXT_x11_sync_object ------------------------ */ #ifndef GL_EXT_x11_sync_object #define GL_EXT_x11_sync_object 1 #define GL_SYNC_X11_FENCE_EXT 0x90E1 typedef GLsync(GLAPIENTRY * PFNGLIMPORTSYNCEXTPROC)(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); #define glImportSyncEXT GLEW_GET_FUN(__glewImportSyncEXT) #define GLEW_EXT_x11_sync_object GLEW_GET_VAR(__GLEW_EXT_x11_sync_object) #endif /* GL_EXT_x11_sync_object */ /* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */ #ifndef GL_GREMEDY_frame_terminator #define GL_GREMEDY_frame_terminator 1 typedef void(GLAPIENTRY * PFNGLFRAMETERMINATORGREMEDYPROC)(void); #define glFrameTerminatorGREMEDY GLEW_GET_FUN(__glewFrameTerminatorGREMEDY) #define GLEW_GREMEDY_frame_terminator GLEW_GET_VAR(__GLEW_GREMEDY_frame_terminator) #endif /* GL_GREMEDY_frame_terminator */ /* ------------------------ GL_GREMEDY_string_marker ----------------------- */ #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 typedef void(GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC)(GLsizei len, const void * string); #define glStringMarkerGREMEDY GLEW_GET_FUN(__glewStringMarkerGREMEDY) #define GLEW_GREMEDY_string_marker GLEW_GET_VAR(__GLEW_GREMEDY_string_marker) #endif /* GL_GREMEDY_string_marker */ /* --------------------- GL_HP_convolution_border_modes -------------------- */ #ifndef GL_HP_convolution_border_modes #define GL_HP_convolution_border_modes 1 #define GLEW_HP_convolution_border_modes GLEW_GET_VAR(__GLEW_HP_convolution_border_modes) #endif /* GL_HP_convolution_border_modes */ /* ------------------------- GL_HP_image_transform ------------------------- */ #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 typedef void(GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC)(GLenum target, GLenum pname, const GLfloat param); typedef void(GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC)(GLenum target, GLenum pname, const GLint param); typedef void(GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, const GLint * params); #define glGetImageTransformParameterfvHP GLEW_GET_FUN(__glewGetImageTransformParameterfvHP) #define glGetImageTransformParameterivHP GLEW_GET_FUN(__glewGetImageTransformParameterivHP) #define glImageTransformParameterfHP GLEW_GET_FUN(__glewImageTransformParameterfHP) #define glImageTransformParameterfvHP GLEW_GET_FUN(__glewImageTransformParameterfvHP) #define glImageTransformParameteriHP GLEW_GET_FUN(__glewImageTransformParameteriHP) #define glImageTransformParameterivHP GLEW_GET_FUN(__glewImageTransformParameterivHP) #define GLEW_HP_image_transform GLEW_GET_VAR(__GLEW_HP_image_transform) #endif /* GL_HP_image_transform */ /* -------------------------- GL_HP_occlusion_test ------------------------- */ #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 #define GL_OCCLUSION_TEST_HP 0x8165 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166 #define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test) #endif /* GL_HP_occlusion_test */ /* ------------------------- GL_HP_texture_lighting ------------------------ */ #ifndef GL_HP_texture_lighting #define GL_HP_texture_lighting 1 #define GLEW_HP_texture_lighting GLEW_GET_VAR(__GLEW_HP_texture_lighting) #endif /* GL_HP_texture_lighting */ /* --------------------------- GL_IBM_cull_vertex -------------------------- */ #ifndef GL_IBM_cull_vertex #define GL_IBM_cull_vertex 1 #define GL_CULL_VERTEX_IBM 103050 #define GLEW_IBM_cull_vertex GLEW_GET_VAR(__GLEW_IBM_cull_vertex) #endif /* GL_IBM_cull_vertex */ /* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */ #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 typedef void(GLAPIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); typedef void(GLAPIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); #define glMultiModeDrawArraysIBM GLEW_GET_FUN(__glewMultiModeDrawArraysIBM) #define glMultiModeDrawElementsIBM GLEW_GET_FUN(__glewMultiModeDrawElementsIBM) #define GLEW_IBM_multimode_draw_arrays GLEW_GET_VAR(__GLEW_IBM_multimode_draw_arrays) #endif /* GL_IBM_multimode_draw_arrays */ /* ------------------------- GL_IBM_rasterpos_clip ------------------------- */ #ifndef GL_IBM_rasterpos_clip #define GL_IBM_rasterpos_clip 1 #define GL_RASTER_POSITION_UNCLIPPED_IBM 103010 #define GLEW_IBM_rasterpos_clip GLEW_GET_VAR(__GLEW_IBM_rasterpos_clip) #endif /* GL_IBM_rasterpos_clip */ /* --------------------------- GL_IBM_static_data -------------------------- */ #ifndef GL_IBM_static_data #define GL_IBM_static_data 1 #define GL_ALL_STATIC_DATA_IBM 103060 #define GL_STATIC_VERTEX_ARRAY_IBM 103061 #define GLEW_IBM_static_data GLEW_GET_VAR(__GLEW_IBM_static_data) #endif /* GL_IBM_static_data */ /* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */ #ifndef GL_IBM_texture_mirrored_repeat #define GL_IBM_texture_mirrored_repeat 1 #define GL_MIRRORED_REPEAT_IBM 0x8370 #define GLEW_IBM_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_IBM_texture_mirrored_repeat) #endif /* GL_IBM_texture_mirrored_repeat */ /* ----------------------- GL_IBM_vertex_array_lists ----------------------- */ #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #define GL_VERTEX_ARRAY_LIST_IBM 103070 #define GL_NORMAL_ARRAY_LIST_IBM 103071 #define GL_COLOR_ARRAY_LIST_IBM 103072 #define GL_INDEX_ARRAY_LIST_IBM 103073 #define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 #define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 #define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 #define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 #define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 #define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 #define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 #define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 #define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 #define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 #define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 #define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 typedef void(GLAPIENTRY * PFNGLCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); typedef void(GLAPIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC)(GLint stride, const GLboolean ** pointer, GLint ptrstride); typedef void(GLAPIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC)(GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); typedef void(GLAPIENTRY * PFNGLINDEXPOINTERLISTIBMPROC)(GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); typedef void(GLAPIENTRY * PFNGLNORMALPOINTERLISTIBMPROC)(GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); typedef void(GLAPIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); typedef void(GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); #define glColorPointerListIBM GLEW_GET_FUN(__glewColorPointerListIBM) #define glEdgeFlagPointerListIBM GLEW_GET_FUN(__glewEdgeFlagPointerListIBM) #define glFogCoordPointerListIBM GLEW_GET_FUN(__glewFogCoordPointerListIBM) #define glIndexPointerListIBM GLEW_GET_FUN(__glewIndexPointerListIBM) #define glNormalPointerListIBM GLEW_GET_FUN(__glewNormalPointerListIBM) #define glSecondaryColorPointerListIBM GLEW_GET_FUN(__glewSecondaryColorPointerListIBM) #define glTexCoordPointerListIBM GLEW_GET_FUN(__glewTexCoordPointerListIBM) #define glVertexPointerListIBM GLEW_GET_FUN(__glewVertexPointerListIBM) #define GLEW_IBM_vertex_array_lists GLEW_GET_VAR(__GLEW_IBM_vertex_array_lists) #endif /* GL_IBM_vertex_array_lists */ /* -------------------------- GL_INGR_color_clamp -------------------------- */ #ifndef GL_INGR_color_clamp #define GL_INGR_color_clamp 1 #define GL_RED_MIN_CLAMP_INGR 0x8560 #define GL_GREEN_MIN_CLAMP_INGR 0x8561 #define GL_BLUE_MIN_CLAMP_INGR 0x8562 #define GL_ALPHA_MIN_CLAMP_INGR 0x8563 #define GL_RED_MAX_CLAMP_INGR 0x8564 #define GL_GREEN_MAX_CLAMP_INGR 0x8565 #define GL_BLUE_MAX_CLAMP_INGR 0x8566 #define GL_ALPHA_MAX_CLAMP_INGR 0x8567 #define GLEW_INGR_color_clamp GLEW_GET_VAR(__GLEW_INGR_color_clamp) #endif /* GL_INGR_color_clamp */ /* ------------------------- GL_INGR_interlace_read ------------------------ */ #ifndef GL_INGR_interlace_read #define GL_INGR_interlace_read 1 #define GL_INTERLACE_READ_INGR 0x8568 #define GLEW_INGR_interlace_read GLEW_GET_VAR(__GLEW_INGR_interlace_read) #endif /* GL_INGR_interlace_read */ /* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #define GL_PARALLEL_ARRAYS_INTEL 0x83F4 #define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 #define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 #define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 #define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 typedef void(GLAPIENTRY * PFNGLCOLORPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); typedef void(GLAPIENTRY * PFNGLNORMALPOINTERVINTELPROC)(GLenum type, const void ** pointer); typedef void(GLAPIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); typedef void(GLAPIENTRY * PFNGLVERTEXPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); #define glColorPointervINTEL GLEW_GET_FUN(__glewColorPointervINTEL) #define glNormalPointervINTEL GLEW_GET_FUN(__glewNormalPointervINTEL) #define glTexCoordPointervINTEL GLEW_GET_FUN(__glewTexCoordPointervINTEL) #define glVertexPointervINTEL GLEW_GET_FUN(__glewVertexPointervINTEL) #define GLEW_INTEL_parallel_arrays GLEW_GET_VAR(__GLEW_INTEL_parallel_arrays) #endif /* GL_INTEL_parallel_arrays */ /* ------------------------ GL_INTEL_texture_scissor ----------------------- */ #ifndef GL_INTEL_texture_scissor #define GL_INTEL_texture_scissor 1 typedef void(GLAPIENTRY * PFNGLTEXSCISSORFUNCINTELPROC)(GLenum target, GLenum lfunc, GLenum hfunc); typedef void(GLAPIENTRY * PFNGLTEXSCISSORINTELPROC)(GLenum target, GLclampf tlow, GLclampf thigh); #define glTexScissorFuncINTEL GLEW_GET_FUN(__glewTexScissorFuncINTEL) #define glTexScissorINTEL GLEW_GET_FUN(__glewTexScissorINTEL) #define GLEW_INTEL_texture_scissor GLEW_GET_VAR(__GLEW_INTEL_texture_scissor) #endif /* GL_INTEL_texture_scissor */ /* ------------------------------ GL_KHR_debug ----------------------------- */ #ifndef GL_KHR_debug #define GL_KHR_debug 1 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 #define GL_DEBUG_SOURCE_API 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 #define GL_DEBUG_SOURCE_APPLICATION 0x824A #define GL_DEBUG_SOURCE_OTHER 0x824B #define GL_DEBUG_TYPE_ERROR 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E #define GL_DEBUG_TYPE_PORTABILITY 0x824F #define GL_DEBUG_TYPE_PERFORMANCE 0x8250 #define GL_DEBUG_TYPE_OTHER 0x8251 #define GL_DEBUG_TYPE_MARKER 0x8268 #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 #define GL_DEBUG_TYPE_POP_GROUP 0x826A #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D #define GL_BUFFER 0x82E0 #define GL_SHADER 0x82E1 #define GL_PROGRAM 0x82E2 #define GL_QUERY 0x82E3 #define GL_PROGRAM_PIPELINE 0x82E4 #define GL_SAMPLER 0x82E6 #define GL_DISPLAY_LIST 0x82E7 #define GL_MAX_LABEL_LENGTH 0x82E8 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 #define GL_DEBUG_LOGGED_MESSAGES 0x9145 #define GL_DEBUG_SEVERITY_HIGH 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147 #define GL_DEBUG_SEVERITY_LOW 0x9148 #define GL_DEBUG_OUTPUT 0x92E0 typedef void(APIENTRY * GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * message, GLvoid * userParam); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, void * userParam); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); typedef void(GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); typedef GLuint(GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); typedef void(GLAPIENTRY * PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); typedef void(GLAPIENTRY * PFNGLGETOBJECTPTRLABELPROC)(void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); typedef void(GLAPIENTRY * PFNGLGETPOINTERVPROC)(GLenum pname, void ** params); typedef void(GLAPIENTRY * PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); typedef void(GLAPIENTRY * PFNGLOBJECTPTRLABELPROC)(void * ptr, GLsizei length, const GLchar * label); typedef void(GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar * message); #define glDebugMessageCallback GLEW_GET_FUN(__glewDebugMessageCallback) #define glDebugMessageControl GLEW_GET_FUN(__glewDebugMessageControl) #define glDebugMessageInsert GLEW_GET_FUN(__glewDebugMessageInsert) #define glGetDebugMessageLog GLEW_GET_FUN(__glewGetDebugMessageLog) #define glGetObjectLabel GLEW_GET_FUN(__glewGetObjectLabel) #define glGetObjectPtrLabel GLEW_GET_FUN(__glewGetObjectPtrLabel) #define glGetPointerv GLEW_GET_FUN(__glewGetPointerv) #define glObjectLabel GLEW_GET_FUN(__glewObjectLabel) #define glObjectPtrLabel GLEW_GET_FUN(__glewObjectPtrLabel) #define glPushDebugGroup GLEW_GET_FUN(__glewPushDebugGroup) #define GLEW_KHR_debug GLEW_GET_VAR(__GLEW_KHR_debug) #endif /* GL_KHR_debug */ /* ------------------ GL_KHR_texture_compression_astc_ldr ------------------ */ #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD #define GLEW_KHR_texture_compression_astc_ldr GLEW_GET_VAR(__GLEW_KHR_texture_compression_astc_ldr) #endif /* GL_KHR_texture_compression_astc_ldr */ /* -------------------------- GL_KTX_buffer_region ------------------------- */ #ifndef GL_KTX_buffer_region #define GL_KTX_buffer_region 1 #define GL_KTX_FRONT_REGION 0x0 #define GL_KTX_BACK_REGION 0x1 #define GL_KTX_Z_REGION 0x2 #define GL_KTX_STENCIL_REGION 0x3 typedef GLuint(GLAPIENTRY * PFNGLBUFFERREGIONENABLEDPROC)(void); typedef void(GLAPIENTRY * PFNGLDELETEBUFFERREGIONPROC)(GLenum region); typedef void(GLAPIENTRY * PFNGLDRAWBUFFERREGIONPROC)(GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest); typedef GLuint(GLAPIENTRY * PFNGLNEWBUFFERREGIONPROC)(GLenum region); typedef void(GLAPIENTRY * PFNGLREADBUFFERREGIONPROC)(GLuint region, GLint x, GLint y, GLsizei width, GLsizei height); #define glBufferRegionEnabled GLEW_GET_FUN(__glewBufferRegionEnabled) #define glDeleteBufferRegion GLEW_GET_FUN(__glewDeleteBufferRegion) #define glDrawBufferRegion GLEW_GET_FUN(__glewDrawBufferRegion) #define glNewBufferRegion GLEW_GET_FUN(__glewNewBufferRegion) #define glReadBufferRegion GLEW_GET_FUN(__glewReadBufferRegion) #define GLEW_KTX_buffer_region GLEW_GET_VAR(__GLEW_KTX_buffer_region) #endif /* GL_KTX_buffer_region */ /* ------------------------- GL_MESAX_texture_stack ------------------------ */ #ifndef GL_MESAX_texture_stack #define GL_MESAX_texture_stack 1 #define GL_TEXTURE_1D_STACK_MESAX 0x8759 #define GL_TEXTURE_2D_STACK_MESAX 0x875A #define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B #define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C #define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D #define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E #define GLEW_MESAX_texture_stack GLEW_GET_VAR(__GLEW_MESAX_texture_stack) #endif /* GL_MESAX_texture_stack */ /* -------------------------- GL_MESA_pack_invert -------------------------- */ #ifndef GL_MESA_pack_invert #define GL_MESA_pack_invert 1 #define GL_PACK_INVERT_MESA 0x8758 #define GLEW_MESA_pack_invert GLEW_GET_VAR(__GLEW_MESA_pack_invert) #endif /* GL_MESA_pack_invert */ /* ------------------------- GL_MESA_resize_buffers ------------------------ */ #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 typedef void(GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC)(void); #define glResizeBuffersMESA GLEW_GET_FUN(__glewResizeBuffersMESA) #define GLEW_MESA_resize_buffers GLEW_GET_VAR(__GLEW_MESA_resize_buffers) #endif /* GL_MESA_resize_buffers */ /* --------------------------- GL_MESA_window_pos -------------------------- */ #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 typedef void(GLAPIENTRY * PFNGLWINDOWPOS2DMESAPROC)(GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2DVMESAPROC)(const GLdouble * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2FMESAPROC)(GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2FVMESAPROC)(const GLfloat * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2IMESAPROC)(GLint x, GLint y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2IVMESAPROC)(const GLint * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2SMESAPROC)(GLshort x, GLshort y); typedef void(GLAPIENTRY * PFNGLWINDOWPOS2SVMESAPROC)(const GLshort * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3DMESAPROC)(GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3DVMESAPROC)(const GLdouble * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3FMESAPROC)(GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3FVMESAPROC)(const GLfloat * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3IMESAPROC)(GLint x, GLint y, GLint z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3IVMESAPROC)(const GLint * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3SMESAPROC)(GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLWINDOWPOS3SVMESAPROC)(const GLshort * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4DMESAPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4DVMESAPROC)(const GLdouble * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4FMESAPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4FVMESAPROC)(const GLfloat * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4IMESAPROC)(GLint x, GLint y, GLint z, GLint w); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4IVMESAPROC)(const GLint * p); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4SMESAPROC)(GLshort x, GLshort y, GLshort z, GLshort w); typedef void(GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC)(const GLshort * p); #define glWindowPos2dMESA GLEW_GET_FUN(__glewWindowPos2dMESA) #define glWindowPos2dvMESA GLEW_GET_FUN(__glewWindowPos2dvMESA) #define glWindowPos2fMESA GLEW_GET_FUN(__glewWindowPos2fMESA) #define glWindowPos2fvMESA GLEW_GET_FUN(__glewWindowPos2fvMESA) #define glWindowPos2iMESA GLEW_GET_FUN(__glewWindowPos2iMESA) #define glWindowPos2ivMESA GLEW_GET_FUN(__glewWindowPos2ivMESA) #define glWindowPos2sMESA GLEW_GET_FUN(__glewWindowPos2sMESA) #define glWindowPos2svMESA GLEW_GET_FUN(__glewWindowPos2svMESA) #define glWindowPos3dMESA GLEW_GET_FUN(__glewWindowPos3dMESA) #define glWindowPos3dvMESA GLEW_GET_FUN(__glewWindowPos3dvMESA) #define glWindowPos3fMESA GLEW_GET_FUN(__glewWindowPos3fMESA) #define glWindowPos3fvMESA GLEW_GET_FUN(__glewWindowPos3fvMESA) #define glWindowPos3iMESA GLEW_GET_FUN(__glewWindowPos3iMESA) #define glWindowPos3ivMESA GLEW_GET_FUN(__glewWindowPos3ivMESA) #define glWindowPos3sMESA GLEW_GET_FUN(__glewWindowPos3sMESA) #define glWindowPos3svMESA GLEW_GET_FUN(__glewWindowPos3svMESA) #define glWindowPos4dMESA GLEW_GET_FUN(__glewWindowPos4dMESA) #define glWindowPos4dvMESA GLEW_GET_FUN(__glewWindowPos4dvMESA) #define glWindowPos4fMESA GLEW_GET_FUN(__glewWindowPos4fMESA) #define glWindowPos4fvMESA GLEW_GET_FUN(__glewWindowPos4fvMESA) #define glWindowPos4iMESA GLEW_GET_FUN(__glewWindowPos4iMESA) #define glWindowPos4ivMESA GLEW_GET_FUN(__glewWindowPos4ivMESA) #define glWindowPos4sMESA GLEW_GET_FUN(__glewWindowPos4sMESA) #define glWindowPos4svMESA GLEW_GET_FUN(__glewWindowPos4svMESA) #define GLEW_MESA_window_pos GLEW_GET_VAR(__GLEW_MESA_window_pos) #endif /* GL_MESA_window_pos */ /* ------------------------- GL_MESA_ycbcr_texture ------------------------- */ #ifndef GL_MESA_ycbcr_texture #define GL_MESA_ycbcr_texture 1 #define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB #define GL_YCBCR_MESA 0x8757 #define GLEW_MESA_ycbcr_texture GLEW_GET_VAR(__GLEW_MESA_ycbcr_texture) #endif /* GL_MESA_ycbcr_texture */ /* ------------------------- GL_NVX_gpu_memory_info ------------------------ */ #ifndef GL_NVX_gpu_memory_info #define GL_NVX_gpu_memory_info 1 #define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 #define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 #define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 #define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A #define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B #define GLEW_NVX_gpu_memory_info GLEW_GET_VAR(__GLEW_NVX_gpu_memory_info) #endif /* GL_NVX_gpu_memory_info */ /* ------------------------- GL_NV_bindless_texture ------------------------ */ #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 typedef GLuint64(GLAPIENTRY * PFNGLGETIMAGEHANDLENVPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef GLuint64(GLAPIENTRY * PFNGLGETTEXTUREHANDLENVPROC)(GLuint texture); typedef GLuint64(GLAPIENTRY * PFNGLGETTEXTURESAMPLERHANDLENVPROC)(GLuint texture, GLuint sampler); typedef GLboolean(GLAPIENTRY * PFNGLISIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle); typedef GLboolean(GLAPIENTRY * PFNGLISTEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); typedef void(GLAPIENTRY * PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)(GLuint64 handle); typedef void(GLAPIENTRY * PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle, GLenum access); typedef void(GLAPIENTRY * PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)(GLuint64 handle); typedef void(GLAPIENTRY * PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)(GLuint program, GLint location, GLuint64 value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); typedef void(GLAPIENTRY * PFNGLUNIFORMHANDLEUI64NVPROC)(GLint location, GLuint64 value); typedef void(GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VNVPROC)(GLint location, GLsizei count, const GLuint64 * value); #define glGetImageHandleNV GLEW_GET_FUN(__glewGetImageHandleNV) #define glGetTextureHandleNV GLEW_GET_FUN(__glewGetTextureHandleNV) #define glGetTextureSamplerHandleNV GLEW_GET_FUN(__glewGetTextureSamplerHandleNV) #define glIsImageHandleResidentNV GLEW_GET_FUN(__glewIsImageHandleResidentNV) #define glIsTextureHandleResidentNV GLEW_GET_FUN(__glewIsTextureHandleResidentNV) #define glMakeImageHandleNonResidentNV GLEW_GET_FUN(__glewMakeImageHandleNonResidentNV) #define glMakeImageHandleResidentNV GLEW_GET_FUN(__glewMakeImageHandleResidentNV) #define glMakeTextureHandleNonResidentNV GLEW_GET_FUN(__glewMakeTextureHandleNonResidentNV) #define glMakeTextureHandleResidentNV GLEW_GET_FUN(__glewMakeTextureHandleResidentNV) #define glProgramUniformHandleui64NV GLEW_GET_FUN(__glewProgramUniformHandleui64NV) #define glProgramUniformHandleui64vNV GLEW_GET_FUN(__glewProgramUniformHandleui64vNV) #define glUniformHandleui64NV GLEW_GET_FUN(__glewUniformHandleui64NV) #define glUniformHandleui64vNV GLEW_GET_FUN(__glewUniformHandleui64vNV) #define GLEW_NV_bindless_texture GLEW_GET_VAR(__GLEW_NV_bindless_texture) #endif /* GL_NV_bindless_texture */ /* --------------------------- GL_NV_blend_square -------------------------- */ #ifndef GL_NV_blend_square #define GL_NV_blend_square 1 #define GLEW_NV_blend_square GLEW_GET_VAR(__GLEW_NV_blend_square) #endif /* GL_NV_blend_square */ /* ------------------------ GL_NV_conditional_render ----------------------- */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 typedef void(GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVPROC)(GLuint id, GLenum mode); typedef void(GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVPROC)(void); #define glBeginConditionalRenderNV GLEW_GET_FUN(__glewBeginConditionalRenderNV) #define glEndConditionalRenderNV GLEW_GET_FUN(__glewEndConditionalRenderNV) #define GLEW_NV_conditional_render GLEW_GET_VAR(__GLEW_NV_conditional_render) #endif /* GL_NV_conditional_render */ /* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E #define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F #define GLEW_NV_copy_depth_to_color GLEW_GET_VAR(__GLEW_NV_copy_depth_to_color) #endif /* GL_NV_copy_depth_to_color */ /* ---------------------------- GL_NV_copy_image --------------------------- */ #ifndef GL_NV_copy_image #define GL_NV_copy_image 1 typedef void(GLAPIENTRY * PFNGLCOPYIMAGESUBDATANVPROC)(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 width, GLsizei height, GLsizei depth); #define glCopyImageSubDataNV GLEW_GET_FUN(__glewCopyImageSubDataNV) #define GLEW_NV_copy_image GLEW_GET_VAR(__GLEW_NV_copy_image) #endif /* GL_NV_copy_image */ /* ------------------------ GL_NV_depth_buffer_float ----------------------- */ #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #define GL_DEPTH_COMPONENT32F_NV 0x8DAB #define GL_DEPTH32F_STENCIL8_NV 0x8DAC #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD #define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF typedef void(GLAPIENTRY * PFNGLCLEARDEPTHDNVPROC)(GLdouble depth); typedef void(GLAPIENTRY * PFNGLDEPTHBOUNDSDNVPROC)(GLdouble zmin, GLdouble zmax); typedef void(GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC)(GLdouble zNear, GLdouble zFar); #define glClearDepthdNV GLEW_GET_FUN(__glewClearDepthdNV) #define glDepthBoundsdNV GLEW_GET_FUN(__glewDepthBoundsdNV) #define glDepthRangedNV GLEW_GET_FUN(__glewDepthRangedNV) #define GLEW_NV_depth_buffer_float GLEW_GET_VAR(__GLEW_NV_depth_buffer_float) #endif /* GL_NV_depth_buffer_float */ /* --------------------------- GL_NV_depth_clamp --------------------------- */ #ifndef GL_NV_depth_clamp #define GL_NV_depth_clamp 1 #define GL_DEPTH_CLAMP_NV 0x864F #define GLEW_NV_depth_clamp GLEW_GET_VAR(__GLEW_NV_depth_clamp) #endif /* GL_NV_depth_clamp */ /* ---------------------- GL_NV_depth_range_unclamped ---------------------- */ #ifndef GL_NV_depth_range_unclamped #define GL_NV_depth_range_unclamped 1 #define GL_SAMPLE_COUNT_BITS_NV 0x8864 #define GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 #define GL_QUERY_RESULT_NV 0x8866 #define GL_QUERY_RESULT_AVAILABLE_NV 0x8867 #define GL_SAMPLE_COUNT_NV 0x8914 #define GLEW_NV_depth_range_unclamped GLEW_GET_VAR(__GLEW_NV_depth_range_unclamped) #endif /* GL_NV_depth_range_unclamped */ /* ---------------------------- GL_NV_evaluators --------------------------- */ #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #define GL_EVAL_2D_NV 0x86C0 #define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 #define GL_MAP_TESSELLATION_NV 0x86C2 #define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 #define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 #define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 #define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 #define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 #define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 #define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 #define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA #define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB #define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC #define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD #define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE #define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF #define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 #define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 #define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 #define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 #define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 #define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 typedef void(GLAPIENTRY * PFNGLEVALMAPSNVPROC)(GLenum target, GLenum mode); typedef void(GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points); typedef void(GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points); typedef void(GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, const GLint * params); #define glEvalMapsNV GLEW_GET_FUN(__glewEvalMapsNV) #define glGetMapAttribParameterfvNV GLEW_GET_FUN(__glewGetMapAttribParameterfvNV) #define glGetMapAttribParameterivNV GLEW_GET_FUN(__glewGetMapAttribParameterivNV) #define glGetMapControlPointsNV GLEW_GET_FUN(__glewGetMapControlPointsNV) #define glGetMapParameterfvNV GLEW_GET_FUN(__glewGetMapParameterfvNV) #define glGetMapParameterivNV GLEW_GET_FUN(__glewGetMapParameterivNV) #define glMapControlPointsNV GLEW_GET_FUN(__glewMapControlPointsNV) #define glMapParameterfvNV GLEW_GET_FUN(__glewMapParameterfvNV) #define glMapParameterivNV GLEW_GET_FUN(__glewMapParameterivNV) #define GLEW_NV_evaluators GLEW_GET_VAR(__GLEW_NV_evaluators) #endif /* GL_NV_evaluators */ /* ----------------------- GL_NV_explicit_multisample ---------------------- */ #ifndef GL_NV_explicit_multisample #define GL_NV_explicit_multisample 1 #define GL_SAMPLE_POSITION_NV 0x8E50 #define GL_SAMPLE_MASK_NV 0x8E51 #define GL_SAMPLE_MASK_VALUE_NV 0x8E52 #define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 #define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 #define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 #define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 #define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 #define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 #define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 typedef void(GLAPIENTRY * PFNGLGETMULTISAMPLEFVNVPROC)(GLenum pname, GLuint index, GLfloat * val); typedef void(GLAPIENTRY * PFNGLSAMPLEMASKINDEXEDNVPROC)(GLuint index, GLbitfield mask); typedef void(GLAPIENTRY * PFNGLTEXRENDERBUFFERNVPROC)(GLenum target, GLuint renderbuffer); #define glGetMultisamplefvNV GLEW_GET_FUN(__glewGetMultisamplefvNV) #define glSampleMaskIndexedNV GLEW_GET_FUN(__glewSampleMaskIndexedNV) #define glTexRenderbufferNV GLEW_GET_FUN(__glewTexRenderbufferNV) #define GLEW_NV_explicit_multisample GLEW_GET_VAR(__GLEW_NV_explicit_multisample) #endif /* GL_NV_explicit_multisample */ /* ------------------------------ GL_NV_fence ------------------------------ */ #ifndef GL_NV_fence #define GL_NV_fence 1 #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 typedef void(GLAPIENTRY * PFNGLDELETEFENCESNVPROC)(GLsizei n, const GLuint * fences); typedef void(GLAPIENTRY * PFNGLFINISHFENCENVPROC)(GLuint fence); typedef void(GLAPIENTRY * PFNGLGENFENCESNVPROC)(GLsizei n, GLuint * fences); typedef void(GLAPIENTRY * PFNGLGETFENCEIVNVPROC)(GLuint fence, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISFENCENVPROC)(GLuint fence); typedef void(GLAPIENTRY * PFNGLSETFENCENVPROC)(GLuint fence, GLenum condition); typedef GLboolean(GLAPIENTRY * PFNGLTESTFENCENVPROC)(GLuint fence); #define glDeleteFencesNV GLEW_GET_FUN(__glewDeleteFencesNV) #define glFinishFenceNV GLEW_GET_FUN(__glewFinishFenceNV) #define glGenFencesNV GLEW_GET_FUN(__glewGenFencesNV) #define glGetFenceivNV GLEW_GET_FUN(__glewGetFenceivNV) #define glIsFenceNV GLEW_GET_FUN(__glewIsFenceNV) #define glSetFenceNV GLEW_GET_FUN(__glewSetFenceNV) #define glTestFenceNV GLEW_GET_FUN(__glewTestFenceNV) #define GLEW_NV_fence GLEW_GET_VAR(__GLEW_NV_fence) #endif /* GL_NV_fence */ /* --------------------------- GL_NV_float_buffer -------------------------- */ #ifndef GL_NV_float_buffer #define GL_NV_float_buffer 1 #define GL_FLOAT_R_NV 0x8880 #define GL_FLOAT_RG_NV 0x8881 #define GL_FLOAT_RGB_NV 0x8882 #define GL_FLOAT_RGBA_NV 0x8883 #define GL_FLOAT_R16_NV 0x8884 #define GL_FLOAT_R32_NV 0x8885 #define GL_FLOAT_RG16_NV 0x8886 #define GL_FLOAT_RG32_NV 0x8887 #define GL_FLOAT_RGB16_NV 0x8888 #define GL_FLOAT_RGB32_NV 0x8889 #define GL_FLOAT_RGBA16_NV 0x888A #define GL_FLOAT_RGBA32_NV 0x888B #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D #define GL_FLOAT_RGBA_MODE_NV 0x888E #define GLEW_NV_float_buffer GLEW_GET_VAR(__GLEW_NV_float_buffer) #endif /* GL_NV_float_buffer */ /* --------------------------- GL_NV_fog_distance -------------------------- */ #ifndef GL_NV_fog_distance #define GL_NV_fog_distance 1 #define GL_FOG_DISTANCE_MODE_NV 0x855A #define GL_EYE_RADIAL_NV 0x855B #define GL_EYE_PLANE_ABSOLUTE_NV 0x855C #define GLEW_NV_fog_distance GLEW_GET_VAR(__GLEW_NV_fog_distance) #endif /* GL_NV_fog_distance */ /* ------------------------- GL_NV_fragment_program ------------------------ */ #ifndef GL_NV_fragment_program #define GL_NV_fragment_program 1 #define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 #define GL_FRAGMENT_PROGRAM_NV 0x8870 #define GL_MAX_TEXTURE_COORDS_NV 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 #define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 #define GL_PROGRAM_ERROR_STRING_NV 0x8874 typedef void(GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); typedef void(GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble v[]); typedef void(GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat v[]); #define glGetProgramNamedParameterdvNV GLEW_GET_FUN(__glewGetProgramNamedParameterdvNV) #define glGetProgramNamedParameterfvNV GLEW_GET_FUN(__glewGetProgramNamedParameterfvNV) #define glProgramNamedParameter4dNV GLEW_GET_FUN(__glewProgramNamedParameter4dNV) #define glProgramNamedParameter4dvNV GLEW_GET_FUN(__glewProgramNamedParameter4dvNV) #define glProgramNamedParameter4fNV GLEW_GET_FUN(__glewProgramNamedParameter4fNV) #define glProgramNamedParameter4fvNV GLEW_GET_FUN(__glewProgramNamedParameter4fvNV) #define GLEW_NV_fragment_program GLEW_GET_VAR(__GLEW_NV_fragment_program) #endif /* GL_NV_fragment_program */ /* ------------------------ GL_NV_fragment_program2 ------------------------ */ #ifndef GL_NV_fragment_program2 #define GL_NV_fragment_program2 1 #define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 #define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 #define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 #define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 #define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 #define GLEW_NV_fragment_program2 GLEW_GET_VAR(__GLEW_NV_fragment_program2) #endif /* GL_NV_fragment_program2 */ /* ------------------------ GL_NV_fragment_program4 ------------------------ */ #ifndef GL_NV_fragment_program4 #define GL_NV_fragment_program4 1 #define GLEW_NV_fragment_program4 GLEW_GET_VAR(__GLEW_NV_fragment_program4) #endif /* GL_NV_fragment_program4 */ /* --------------------- GL_NV_fragment_program_option --------------------- */ #ifndef GL_NV_fragment_program_option #define GL_NV_fragment_program_option 1 #define GLEW_NV_fragment_program_option GLEW_GET_VAR(__GLEW_NV_fragment_program_option) #endif /* GL_NV_fragment_program_option */ /* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB #define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 #define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 #define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 typedef void(GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #define glRenderbufferStorageMultisampleCoverageNV GLEW_GET_FUN(__glewRenderbufferStorageMultisampleCoverageNV) #define GLEW_NV_framebuffer_multisample_coverage GLEW_GET_VAR(__GLEW_NV_framebuffer_multisample_coverage) #endif /* GL_NV_framebuffer_multisample_coverage */ /* ------------------------ GL_NV_geometry_program4 ------------------------ */ #ifndef GL_NV_geometry_program4 #define GL_NV_geometry_program4 1 #define GL_GEOMETRY_PROGRAM_NV 0x8C26 #define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 #define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 typedef void(GLAPIENTRY * PFNGLPROGRAMVERTEXLIMITNVPROC)(GLenum target, GLint limit); #define glProgramVertexLimitNV GLEW_GET_FUN(__glewProgramVertexLimitNV) #define GLEW_NV_geometry_program4 GLEW_GET_VAR(__GLEW_NV_geometry_program4) #endif /* GL_NV_geometry_program4 */ /* ------------------------- GL_NV_geometry_shader4 ------------------------ */ #ifndef GL_NV_geometry_shader4 #define GL_NV_geometry_shader4 1 #define GLEW_NV_geometry_shader4 GLEW_GET_VAR(__GLEW_NV_geometry_shader4) #endif /* GL_NV_geometry_shader4 */ /* --------------------------- GL_NV_gpu_program4 -------------------------- */ #ifndef GL_NV_gpu_program4 #define GL_NV_gpu_program4 1 #define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 #define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 #define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 #define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 #define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 #define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 #define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); #define glProgramEnvParameterI4iNV GLEW_GET_FUN(__glewProgramEnvParameterI4iNV) #define glProgramEnvParameterI4ivNV GLEW_GET_FUN(__glewProgramEnvParameterI4ivNV) #define glProgramEnvParameterI4uiNV GLEW_GET_FUN(__glewProgramEnvParameterI4uiNV) #define glProgramEnvParameterI4uivNV GLEW_GET_FUN(__glewProgramEnvParameterI4uivNV) #define glProgramEnvParametersI4ivNV GLEW_GET_FUN(__glewProgramEnvParametersI4ivNV) #define glProgramEnvParametersI4uivNV GLEW_GET_FUN(__glewProgramEnvParametersI4uivNV) #define glProgramLocalParameterI4iNV GLEW_GET_FUN(__glewProgramLocalParameterI4iNV) #define glProgramLocalParameterI4ivNV GLEW_GET_FUN(__glewProgramLocalParameterI4ivNV) #define glProgramLocalParameterI4uiNV GLEW_GET_FUN(__glewProgramLocalParameterI4uiNV) #define glProgramLocalParameterI4uivNV GLEW_GET_FUN(__glewProgramLocalParameterI4uivNV) #define glProgramLocalParametersI4ivNV GLEW_GET_FUN(__glewProgramLocalParametersI4ivNV) #define glProgramLocalParametersI4uivNV GLEW_GET_FUN(__glewProgramLocalParametersI4uivNV) #define GLEW_NV_gpu_program4 GLEW_GET_VAR(__GLEW_NV_gpu_program4) #endif /* GL_NV_gpu_program4 */ /* --------------------------- GL_NV_gpu_program5 -------------------------- */ #ifndef GL_NV_gpu_program5 #define GL_NV_gpu_program5 1 #define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C #define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F #define GLEW_NV_gpu_program5 GLEW_GET_VAR(__GLEW_NV_gpu_program5) #endif /* GL_NV_gpu_program5 */ /* ------------------------- GL_NV_gpu_program_fp64 ------------------------ */ #ifndef GL_NV_gpu_program_fp64 #define GL_NV_gpu_program_fp64 1 #define GLEW_NV_gpu_program_fp64 GLEW_GET_VAR(__GLEW_NV_gpu_program_fp64) #endif /* GL_NV_gpu_program_fp64 */ /* --------------------------- GL_NV_gpu_shader5 --------------------------- */ #ifndef GL_NV_gpu_shader5 #define GL_NV_gpu_shader5 1 #define GL_INT64_NV 0x140E #define GL_UNSIGNED_INT64_NV 0x140F #define GL_INT8_NV 0x8FE0 #define GL_INT8_VEC2_NV 0x8FE1 #define GL_INT8_VEC3_NV 0x8FE2 #define GL_INT8_VEC4_NV 0x8FE3 #define GL_INT16_NV 0x8FE4 #define GL_INT16_VEC2_NV 0x8FE5 #define GL_INT16_VEC3_NV 0x8FE6 #define GL_INT16_VEC4_NV 0x8FE7 #define GL_INT64_VEC2_NV 0x8FE9 #define GL_INT64_VEC3_NV 0x8FEA #define GL_INT64_VEC4_NV 0x8FEB #define GL_UNSIGNED_INT8_NV 0x8FEC #define GL_UNSIGNED_INT8_VEC2_NV 0x8FED #define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE #define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF #define GL_UNSIGNED_INT16_NV 0x8FF0 #define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 #define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 #define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 #define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 #define GL_FLOAT16_NV 0x8FF8 #define GL_FLOAT16_VEC2_NV 0x8FF9 #define GL_FLOAT16_VEC3_NV 0x8FFA #define GL_FLOAT16_VEC4_NV 0x8FFB typedef void(GLAPIENTRY * PFNGLGETUNIFORMI64VNVPROC)(GLuint program, GLint location, GLint64EXT * params); typedef void(GLAPIENTRY * PFNGLGETUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLuint64EXT * params); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64NVPROC)(GLuint program, GLint location, GLint64EXT x); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM1I64NVPROC)(GLint location, GLint64EXT x); typedef void(GLAPIENTRY * PFNGLUNIFORM1I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM1UI64NVPROC)(GLint location, GLuint64EXT x); typedef void(GLAPIENTRY * PFNGLUNIFORM1UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y); typedef void(GLAPIENTRY * PFNGLUNIFORM2I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM2UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y); typedef void(GLAPIENTRY * PFNGLUNIFORM2UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void(GLAPIENTRY * PFNGLUNIFORM3I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM3UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void(GLAPIENTRY * PFNGLUNIFORM3UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void(GLAPIENTRY * PFNGLUNIFORM4I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORM4UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void(GLAPIENTRY * PFNGLUNIFORM4UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); #define glGetUniformi64vNV GLEW_GET_FUN(__glewGetUniformi64vNV) #define glGetUniformui64vNV GLEW_GET_FUN(__glewGetUniformui64vNV) #define glProgramUniform1i64NV GLEW_GET_FUN(__glewProgramUniform1i64NV) #define glProgramUniform1i64vNV GLEW_GET_FUN(__glewProgramUniform1i64vNV) #define glProgramUniform1ui64NV GLEW_GET_FUN(__glewProgramUniform1ui64NV) #define glProgramUniform1ui64vNV GLEW_GET_FUN(__glewProgramUniform1ui64vNV) #define glProgramUniform2i64NV GLEW_GET_FUN(__glewProgramUniform2i64NV) #define glProgramUniform2i64vNV GLEW_GET_FUN(__glewProgramUniform2i64vNV) #define glProgramUniform2ui64NV GLEW_GET_FUN(__glewProgramUniform2ui64NV) #define glProgramUniform2ui64vNV GLEW_GET_FUN(__glewProgramUniform2ui64vNV) #define glProgramUniform3i64NV GLEW_GET_FUN(__glewProgramUniform3i64NV) #define glProgramUniform3i64vNV GLEW_GET_FUN(__glewProgramUniform3i64vNV) #define glProgramUniform3ui64NV GLEW_GET_FUN(__glewProgramUniform3ui64NV) #define glProgramUniform3ui64vNV GLEW_GET_FUN(__glewProgramUniform3ui64vNV) #define glProgramUniform4i64NV GLEW_GET_FUN(__glewProgramUniform4i64NV) #define glProgramUniform4i64vNV GLEW_GET_FUN(__glewProgramUniform4i64vNV) #define glProgramUniform4ui64NV GLEW_GET_FUN(__glewProgramUniform4ui64NV) #define glProgramUniform4ui64vNV GLEW_GET_FUN(__glewProgramUniform4ui64vNV) #define glUniform1i64NV GLEW_GET_FUN(__glewUniform1i64NV) #define glUniform1i64vNV GLEW_GET_FUN(__glewUniform1i64vNV) #define glUniform1ui64NV GLEW_GET_FUN(__glewUniform1ui64NV) #define glUniform1ui64vNV GLEW_GET_FUN(__glewUniform1ui64vNV) #define glUniform2i64NV GLEW_GET_FUN(__glewUniform2i64NV) #define glUniform2i64vNV GLEW_GET_FUN(__glewUniform2i64vNV) #define glUniform2ui64NV GLEW_GET_FUN(__glewUniform2ui64NV) #define glUniform2ui64vNV GLEW_GET_FUN(__glewUniform2ui64vNV) #define glUniform3i64NV GLEW_GET_FUN(__glewUniform3i64NV) #define glUniform3i64vNV GLEW_GET_FUN(__glewUniform3i64vNV) #define glUniform3ui64NV GLEW_GET_FUN(__glewUniform3ui64NV) #define glUniform3ui64vNV GLEW_GET_FUN(__glewUniform3ui64vNV) #define glUniform4i64NV GLEW_GET_FUN(__glewUniform4i64NV) #define glUniform4i64vNV GLEW_GET_FUN(__glewUniform4i64vNV) #define glUniform4ui64NV GLEW_GET_FUN(__glewUniform4ui64NV) #define glUniform4ui64vNV GLEW_GET_FUN(__glewUniform4ui64vNV) #define GLEW_NV_gpu_shader5 GLEW_GET_VAR(__GLEW_NV_gpu_shader5) #endif /* GL_NV_gpu_shader5 */ /* ---------------------------- GL_NV_half_float --------------------------- */ #ifndef GL_NV_half_float #define GL_NV_half_float 1 #define GL_HALF_FLOAT_NV 0x140B typedef unsigned short GLhalf; typedef void(GLAPIENTRY * PFNGLCOLOR3HNVPROC)(GLhalf red, GLhalf green, GLhalf blue); typedef void(GLAPIENTRY * PFNGLCOLOR3HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLCOLOR4HNVPROC)(GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha); typedef void(GLAPIENTRY * PFNGLCOLOR4HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLFOGCOORDHNVPROC)(GLhalf fog); typedef void(GLAPIENTRY * PFNGLFOGCOORDHVNVPROC)(const GLhalf * fog); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC)(GLenum target, GLhalf s); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC)(GLenum target, GLhalf s, GLhalf t); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3HNVPROC)(GLenum target, GLhalf s, GLhalf t, GLhalf r); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4HNVPROC)(GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q); typedef void(GLAPIENTRY * PFNGLMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLNORMAL3HNVPROC)(GLhalf nx, GLhalf ny, GLhalf nz); typedef void(GLAPIENTRY * PFNGLNORMAL3HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3HNVPROC)(GLhalf red, GLhalf green, GLhalf blue); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLOR3HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD1HNVPROC)(GLhalf s); typedef void(GLAPIENTRY * PFNGLTEXCOORD1HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD2HNVPROC)(GLhalf s, GLhalf t); typedef void(GLAPIENTRY * PFNGLTEXCOORD2HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD3HNVPROC)(GLhalf s, GLhalf t, GLhalf r); typedef void(GLAPIENTRY * PFNGLTEXCOORD3HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD4HNVPROC)(GLhalf s, GLhalf t, GLhalf r, GLhalf q); typedef void(GLAPIENTRY * PFNGLTEXCOORD4HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEX2HNVPROC)(GLhalf x, GLhalf y); typedef void(GLAPIENTRY * PFNGLVERTEX2HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEX3HNVPROC)(GLhalf x, GLhalf y, GLhalf z); typedef void(GLAPIENTRY * PFNGLVERTEX3HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEX4HNVPROC)(GLhalf x, GLhalf y, GLhalf z, GLhalf w); typedef void(GLAPIENTRY * PFNGLVERTEX4HVNVPROC)(const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1HNVPROC)(GLuint index, GLhalf x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2HNVPROC)(GLuint index, GLhalf x, GLhalf y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3HNVPROC)(GLuint index, GLhalf x, GLhalf y, GLhalf z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4HNVPROC)(GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalf * v); typedef void(GLAPIENTRY * PFNGLVERTEXWEIGHTHNVPROC)(GLhalf weight); typedef void(GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC)(const GLhalf * weight); #define glColor3hNV GLEW_GET_FUN(__glewColor3hNV) #define glColor3hvNV GLEW_GET_FUN(__glewColor3hvNV) #define glColor4hNV GLEW_GET_FUN(__glewColor4hNV) #define glColor4hvNV GLEW_GET_FUN(__glewColor4hvNV) #define glFogCoordhNV GLEW_GET_FUN(__glewFogCoordhNV) #define glFogCoordhvNV GLEW_GET_FUN(__glewFogCoordhvNV) #define glMultiTexCoord1hNV GLEW_GET_FUN(__glewMultiTexCoord1hNV) #define glMultiTexCoord1hvNV GLEW_GET_FUN(__glewMultiTexCoord1hvNV) #define glMultiTexCoord2hNV GLEW_GET_FUN(__glewMultiTexCoord2hNV) #define glMultiTexCoord2hvNV GLEW_GET_FUN(__glewMultiTexCoord2hvNV) #define glMultiTexCoord3hNV GLEW_GET_FUN(__glewMultiTexCoord3hNV) #define glMultiTexCoord3hvNV GLEW_GET_FUN(__glewMultiTexCoord3hvNV) #define glMultiTexCoord4hNV GLEW_GET_FUN(__glewMultiTexCoord4hNV) #define glMultiTexCoord4hvNV GLEW_GET_FUN(__glewMultiTexCoord4hvNV) #define glNormal3hNV GLEW_GET_FUN(__glewNormal3hNV) #define glNormal3hvNV GLEW_GET_FUN(__glewNormal3hvNV) #define glSecondaryColor3hNV GLEW_GET_FUN(__glewSecondaryColor3hNV) #define glSecondaryColor3hvNV GLEW_GET_FUN(__glewSecondaryColor3hvNV) #define glTexCoord1hNV GLEW_GET_FUN(__glewTexCoord1hNV) #define glTexCoord1hvNV GLEW_GET_FUN(__glewTexCoord1hvNV) #define glTexCoord2hNV GLEW_GET_FUN(__glewTexCoord2hNV) #define glTexCoord2hvNV GLEW_GET_FUN(__glewTexCoord2hvNV) #define glTexCoord3hNV GLEW_GET_FUN(__glewTexCoord3hNV) #define glTexCoord3hvNV GLEW_GET_FUN(__glewTexCoord3hvNV) #define glTexCoord4hNV GLEW_GET_FUN(__glewTexCoord4hNV) #define glTexCoord4hvNV GLEW_GET_FUN(__glewTexCoord4hvNV) #define glVertex2hNV GLEW_GET_FUN(__glewVertex2hNV) #define glVertex2hvNV GLEW_GET_FUN(__glewVertex2hvNV) #define glVertex3hNV GLEW_GET_FUN(__glewVertex3hNV) #define glVertex3hvNV GLEW_GET_FUN(__glewVertex3hvNV) #define glVertex4hNV GLEW_GET_FUN(__glewVertex4hNV) #define glVertex4hvNV GLEW_GET_FUN(__glewVertex4hvNV) #define glVertexAttrib1hNV GLEW_GET_FUN(__glewVertexAttrib1hNV) #define glVertexAttrib1hvNV GLEW_GET_FUN(__glewVertexAttrib1hvNV) #define glVertexAttrib2hNV GLEW_GET_FUN(__glewVertexAttrib2hNV) #define glVertexAttrib2hvNV GLEW_GET_FUN(__glewVertexAttrib2hvNV) #define glVertexAttrib3hNV GLEW_GET_FUN(__glewVertexAttrib3hNV) #define glVertexAttrib3hvNV GLEW_GET_FUN(__glewVertexAttrib3hvNV) #define glVertexAttrib4hNV GLEW_GET_FUN(__glewVertexAttrib4hNV) #define glVertexAttrib4hvNV GLEW_GET_FUN(__glewVertexAttrib4hvNV) #define glVertexAttribs1hvNV GLEW_GET_FUN(__glewVertexAttribs1hvNV) #define glVertexAttribs2hvNV GLEW_GET_FUN(__glewVertexAttribs2hvNV) #define glVertexAttribs3hvNV GLEW_GET_FUN(__glewVertexAttribs3hvNV) #define glVertexAttribs4hvNV GLEW_GET_FUN(__glewVertexAttribs4hvNV) #define glVertexWeighthNV GLEW_GET_FUN(__glewVertexWeighthNV) #define glVertexWeighthvNV GLEW_GET_FUN(__glewVertexWeighthvNV) #define GLEW_NV_half_float GLEW_GET_VAR(__GLEW_NV_half_float) #endif /* GL_NV_half_float */ /* ------------------------ GL_NV_light_max_exponent ----------------------- */ #ifndef GL_NV_light_max_exponent #define GL_NV_light_max_exponent 1 #define GL_MAX_SHININESS_NV 0x8504 #define GL_MAX_SPOT_EXPONENT_NV 0x8505 #define GLEW_NV_light_max_exponent GLEW_GET_VAR(__GLEW_NV_light_max_exponent) #endif /* GL_NV_light_max_exponent */ /* ----------------------- GL_NV_multisample_coverage ---------------------- */ #ifndef GL_NV_multisample_coverage #define GL_NV_multisample_coverage 1 #define GL_COVERAGE_SAMPLES_NV 0x80A9 #define GL_COLOR_SAMPLES_NV 0x8E20 #define GLEW_NV_multisample_coverage GLEW_GET_VAR(__GLEW_NV_multisample_coverage) #endif /* GL_NV_multisample_coverage */ /* --------------------- GL_NV_multisample_filter_hint --------------------- */ #ifndef GL_NV_multisample_filter_hint #define GL_NV_multisample_filter_hint 1 #define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 #define GLEW_NV_multisample_filter_hint GLEW_GET_VAR(__GLEW_NV_multisample_filter_hint) #endif /* GL_NV_multisample_filter_hint */ /* ------------------------- GL_NV_occlusion_query ------------------------- */ #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #define GL_PIXEL_COUNTER_BITS_NV 0x8864 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 #define GL_PIXEL_COUNT_NV 0x8866 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 typedef void(GLAPIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC)(GLsizei n, const GLuint * ids); typedef void(GLAPIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC)(void); typedef void(GLAPIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC)(GLsizei n, GLuint * ids); typedef void(GLAPIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC)(GLuint id, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC)(GLuint id, GLenum pname, GLuint * params); typedef GLboolean(GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC)(GLuint id); #define glBeginOcclusionQueryNV GLEW_GET_FUN(__glewBeginOcclusionQueryNV) #define glDeleteOcclusionQueriesNV GLEW_GET_FUN(__glewDeleteOcclusionQueriesNV) #define glEndOcclusionQueryNV GLEW_GET_FUN(__glewEndOcclusionQueryNV) #define glGenOcclusionQueriesNV GLEW_GET_FUN(__glewGenOcclusionQueriesNV) #define glGetOcclusionQueryivNV GLEW_GET_FUN(__glewGetOcclusionQueryivNV) #define glGetOcclusionQueryuivNV GLEW_GET_FUN(__glewGetOcclusionQueryuivNV) #define glIsOcclusionQueryNV GLEW_GET_FUN(__glewIsOcclusionQueryNV) #define GLEW_NV_occlusion_query GLEW_GET_VAR(__GLEW_NV_occlusion_query) #endif /* GL_NV_occlusion_query */ /* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ #ifndef GL_NV_packed_depth_stencil #define GL_NV_packed_depth_stencil 1 #define GL_DEPTH_STENCIL_NV 0x84F9 #define GL_UNSIGNED_INT_24_8_NV 0x84FA #define GLEW_NV_packed_depth_stencil GLEW_GET_VAR(__GLEW_NV_packed_depth_stencil) #endif /* GL_NV_packed_depth_stencil */ /* --------------------- GL_NV_parameter_buffer_object --------------------- */ #ifndef GL_NV_parameter_buffer_object #define GL_NV_parameter_buffer_object 1 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 #define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 #define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 #define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 typedef void(GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint * params); typedef void(GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat * params); #define glProgramBufferParametersIivNV GLEW_GET_FUN(__glewProgramBufferParametersIivNV) #define glProgramBufferParametersIuivNV GLEW_GET_FUN(__glewProgramBufferParametersIuivNV) #define glProgramBufferParametersfvNV GLEW_GET_FUN(__glewProgramBufferParametersfvNV) #define GLEW_NV_parameter_buffer_object GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object) #endif /* GL_NV_parameter_buffer_object */ /* --------------------- GL_NV_parameter_buffer_object2 -------------------- */ #ifndef GL_NV_parameter_buffer_object2 #define GL_NV_parameter_buffer_object2 1 #define GLEW_NV_parameter_buffer_object2 GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object2) #endif /* GL_NV_parameter_buffer_object2 */ /* -------------------------- GL_NV_path_rendering ------------------------- */ #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 #define GL_CLOSE_PATH_NV 0x00 #define GL_BOLD_BIT_NV 0x01 #define GL_GLYPH_WIDTH_BIT_NV 0x01 #define GL_GLYPH_HEIGHT_BIT_NV 0x02 #define GL_ITALIC_BIT_NV 0x02 #define GL_MOVE_TO_NV 0x02 #define GL_RELATIVE_MOVE_TO_NV 0x03 #define GL_LINE_TO_NV 0x04 #define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 #define GL_RELATIVE_LINE_TO_NV 0x05 #define GL_HORIZONTAL_LINE_TO_NV 0x06 #define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 #define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 #define GL_VERTICAL_LINE_TO_NV 0x08 #define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 #define GL_QUADRATIC_CURVE_TO_NV 0x0A #define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B #define GL_CUBIC_CURVE_TO_NV 0x0C #define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D #define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E #define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F #define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 #define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 #define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 #define GL_SMALL_CCW_ARC_TO_NV 0x12 #define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 #define GL_SMALL_CW_ARC_TO_NV 0x14 #define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 #define GL_LARGE_CCW_ARC_TO_NV 0x16 #define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 #define GL_LARGE_CW_ARC_TO_NV 0x18 #define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 #define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 #define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 #define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 #define GL_RESTART_PATH_NV 0xF0 #define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 #define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 #define GL_RECT_NV 0xF6 #define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 #define GL_CIRCULAR_CW_ARC_TO_NV 0xFA #define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_PRIMARY_COLOR 0x8577 #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 #define GL_STANDARD_FONT_NAME_NV 0x9072 #define GL_SYSTEM_FONT_NAME_NV 0x9073 #define GL_FILE_NAME_NV 0x9074 #define GL_PATH_STROKE_WIDTH_NV 0x9075 #define GL_PATH_END_CAPS_NV 0x9076 #define GL_PATH_INITIAL_END_CAP_NV 0x9077 #define GL_PATH_TERMINAL_END_CAP_NV 0x9078 #define GL_PATH_JOIN_STYLE_NV 0x9079 #define GL_PATH_MITER_LIMIT_NV 0x907A #define GL_PATH_DASH_CAPS_NV 0x907B #define GL_PATH_INITIAL_DASH_CAP_NV 0x907C #define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D #define GL_PATH_DASH_OFFSET_NV 0x907E #define GL_PATH_CLIENT_LENGTH_NV 0x907F #define GL_PATH_FILL_MODE_NV 0x9080 #define GL_PATH_FILL_MASK_NV 0x9081 #define GL_PATH_FILL_COVER_MODE_NV 0x9082 #define GL_PATH_STROKE_COVER_MODE_NV 0x9083 #define GL_PATH_STROKE_MASK_NV 0x9084 #define GL_COUNT_UP_NV 0x9088 #define GL_COUNT_DOWN_NV 0x9089 #define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A #define GL_CONVEX_HULL_NV 0x908B #define GL_BOUNDING_BOX_NV 0x908D #define GL_TRANSLATE_X_NV 0x908E #define GL_TRANSLATE_Y_NV 0x908F #define GL_TRANSLATE_2D_NV 0x9090 #define GL_TRANSLATE_3D_NV 0x9091 #define GL_AFFINE_2D_NV 0x9092 #define GL_AFFINE_3D_NV 0x9094 #define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 #define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 #define GL_UTF8_NV 0x909A #define GL_UTF16_NV 0x909B #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C #define GL_PATH_COMMAND_COUNT_NV 0x909D #define GL_PATH_COORD_COUNT_NV 0x909E #define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F #define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 #define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 #define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 #define GL_SQUARE_NV 0x90A3 #define GL_ROUND_NV 0x90A4 #define GL_TRIANGULAR_NV 0x90A5 #define GL_BEVEL_NV 0x90A6 #define GL_MITER_REVERT_NV 0x90A7 #define GL_MITER_TRUNCATE_NV 0x90A8 #define GL_SKIP_MISSING_GLYPH_NV 0x90A9 #define GL_USE_MISSING_GLYPH_NV 0x90AA #define GL_PATH_ERROR_POSITION_NV 0x90AB #define GL_PATH_FOG_GEN_MODE_NV 0x90AC #define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD #define GL_ADJACENT_PAIRS_NV 0x90AE #define GL_FIRST_TO_REST_NV 0x90AF #define GL_PATH_GEN_MODE_NV 0x90B0 #define GL_PATH_GEN_COEFF_NV 0x90B1 #define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 #define GL_PATH_GEN_COMPONENTS_NV 0x90B3 #define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 #define GL_MOVE_TO_RESETS_NV 0x90B5 #define GL_MOVE_TO_CONTINUES_NV 0x90B6 #define GL_PATH_STENCIL_FUNC_NV 0x90B7 #define GL_PATH_STENCIL_REF_NV 0x90B8 #define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 #define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD #define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE #define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF #define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 #define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 #define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 #define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 #define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 #define GL_FONT_ASCENDER_BIT_NV 0x00200000 #define GL_FONT_DESCENDER_BIT_NV 0x00400000 #define GL_FONT_HEIGHT_BIT_NV 0x00800000 #define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 #define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 #define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 #define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 #define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 typedef void(GLAPIENTRY * PFNGLCOPYPATHNVPROC)(GLuint resultPath, GLuint srcPath); typedef void(GLAPIENTRY * PFNGLCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); typedef void(GLAPIENTRY * PFNGLCOVERFILLPATHNVPROC)(GLuint path, GLenum coverMode); typedef void(GLAPIENTRY * PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); typedef void(GLAPIENTRY * PFNGLCOVERSTROKEPATHNVPROC)(GLuint name, GLenum coverMode); typedef void(GLAPIENTRY * PFNGLDELETEPATHSNVPROC)(GLuint path, GLsizei range); typedef GLuint(GLAPIENTRY * PFNGLGENPATHSNVPROC)(GLsizei range); typedef void(GLAPIENTRY * PFNGLGETPATHCOLORGENFVNVPROC)(GLenum color, GLenum pname, GLfloat * value); typedef void(GLAPIENTRY * PFNGLGETPATHCOLORGENIVNVPROC)(GLenum color, GLenum pname, GLint * value); typedef void(GLAPIENTRY * PFNGLGETPATHCOMMANDSNVPROC)(GLuint name, GLubyte * commands); typedef void(GLAPIENTRY * PFNGLGETPATHCOORDSNVPROC)(GLuint name, GLfloat * coords); typedef void(GLAPIENTRY * PFNGLGETPATHDASHARRAYNVPROC)(GLuint name, GLfloat * dashArray); typedef GLfloat(GLAPIENTRY * PFNGLGETPATHLENGTHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments); typedef void(GLAPIENTRY * PFNGLGETPATHMETRICRANGENVPROC)(GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics); typedef void(GLAPIENTRY * PFNGLGETPATHMETRICSNVPROC)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics); typedef void(GLAPIENTRY * PFNGLGETPATHPARAMETERFVNVPROC)(GLuint name, GLenum param, GLfloat * value); typedef void(GLAPIENTRY * PFNGLGETPATHPARAMETERIVNVPROC)(GLuint name, GLenum param, GLint * value); typedef void(GLAPIENTRY * PFNGLGETPATHSPACINGNVPROC)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing); typedef void(GLAPIENTRY * PFNGLGETPATHTEXGENFVNVPROC)(GLenum texCoordSet, GLenum pname, GLfloat * value); typedef void(GLAPIENTRY * PFNGLGETPATHTEXGENIVNVPROC)(GLenum texCoordSet, GLenum pname, GLint * value); typedef void(GLAPIENTRY * PFNGLINTERPOLATEPATHSNVPROC)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); typedef GLboolean(GLAPIENTRY * PFNGLISPATHNVPROC)(GLuint path); typedef GLboolean(GLAPIENTRY * PFNGLISPOINTINFILLPATHNVPROC)(GLuint path, GLuint mask, GLfloat x, GLfloat y); typedef GLboolean(GLAPIENTRY * PFNGLISPOINTINSTROKEPATHNVPROC)(GLuint path, GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLPATHCOLORGENNVPROC)(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs); typedef void(GLAPIENTRY * PFNGLPATHCOMMANDSNVPROC)(GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const GLvoid * coords); typedef void(GLAPIENTRY * PFNGLPATHCOORDSNVPROC)(GLuint path, GLsizei numCoords, GLenum coordType, const void * coords); typedef void(GLAPIENTRY * PFNGLPATHCOVERDEPTHFUNCNVPROC)(GLenum zfunc); typedef void(GLAPIENTRY * PFNGLPATHDASHARRAYNVPROC)(GLuint path, GLsizei dashCount, const GLfloat * dashArray); typedef void(GLAPIENTRY * PFNGLPATHFOGGENNVPROC)(GLenum genMode); typedef void(GLAPIENTRY * PFNGLPATHGLYPHRANGENVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void(GLAPIENTRY * PFNGLPATHGLYPHSNVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void(GLAPIENTRY * PFNGLPATHPARAMETERFNVPROC)(GLuint path, GLenum pname, GLfloat value); typedef void(GLAPIENTRY * PFNGLPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, const GLfloat * value); typedef void(GLAPIENTRY * PFNGLPATHPARAMETERINVPROC)(GLuint path, GLenum pname, GLint value); typedef void(GLAPIENTRY * PFNGLPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, const GLint * value); typedef void(GLAPIENTRY * PFNGLPATHSTENCILDEPTHOFFSETNVPROC)(GLfloat factor, GLfloat units); typedef void(GLAPIENTRY * PFNGLPATHSTENCILFUNCNVPROC)(GLenum func, GLint ref, GLuint mask); typedef void(GLAPIENTRY * PFNGLPATHSTRINGNVPROC)(GLuint path, GLenum format, GLsizei length, const void * pathString); typedef void(GLAPIENTRY * PFNGLPATHSUBCOMMANDSNVPROC)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const GLvoid * coords); typedef void(GLAPIENTRY * PFNGLPATHSUBCOORDSNVPROC)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords); typedef void(GLAPIENTRY * PFNGLPATHTEXGENNVPROC)(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs); typedef GLboolean(GLAPIENTRY * PFNGLPOINTALONGPATHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY); typedef void(GLAPIENTRY * PFNGLSTENCILFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues); typedef void(GLAPIENTRY * PFNGLSTENCILFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask); typedef void(GLAPIENTRY * PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues); typedef void(GLAPIENTRY * PFNGLSTENCILSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask); typedef void(GLAPIENTRY * PFNGLTRANSFORMPATHNVPROC)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues); typedef void(GLAPIENTRY * PFNGLWEIGHTPATHSNVPROC)(GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]); #define glCopyPathNV GLEW_GET_FUN(__glewCopyPathNV) #define glCoverFillPathInstancedNV GLEW_GET_FUN(__glewCoverFillPathInstancedNV) #define glCoverFillPathNV GLEW_GET_FUN(__glewCoverFillPathNV) #define glCoverStrokePathInstancedNV GLEW_GET_FUN(__glewCoverStrokePathInstancedNV) #define glCoverStrokePathNV GLEW_GET_FUN(__glewCoverStrokePathNV) #define glDeletePathsNV GLEW_GET_FUN(__glewDeletePathsNV) #define glGenPathsNV GLEW_GET_FUN(__glewGenPathsNV) #define glGetPathColorGenfvNV GLEW_GET_FUN(__glewGetPathColorGenfvNV) #define glGetPathColorGenivNV GLEW_GET_FUN(__glewGetPathColorGenivNV) #define glGetPathCommandsNV GLEW_GET_FUN(__glewGetPathCommandsNV) #define glGetPathCoordsNV GLEW_GET_FUN(__glewGetPathCoordsNV) #define glGetPathDashArrayNV GLEW_GET_FUN(__glewGetPathDashArrayNV) #define glGetPathLengthNV GLEW_GET_FUN(__glewGetPathLengthNV) #define glGetPathMetricRangeNV GLEW_GET_FUN(__glewGetPathMetricRangeNV) #define glGetPathMetricsNV GLEW_GET_FUN(__glewGetPathMetricsNV) #define glGetPathParameterfvNV GLEW_GET_FUN(__glewGetPathParameterfvNV) #define glGetPathParameterivNV GLEW_GET_FUN(__glewGetPathParameterivNV) #define glGetPathSpacingNV GLEW_GET_FUN(__glewGetPathSpacingNV) #define glGetPathTexGenfvNV GLEW_GET_FUN(__glewGetPathTexGenfvNV) #define glGetPathTexGenivNV GLEW_GET_FUN(__glewGetPathTexGenivNV) #define glInterpolatePathsNV GLEW_GET_FUN(__glewInterpolatePathsNV) #define glIsPathNV GLEW_GET_FUN(__glewIsPathNV) #define glIsPointInFillPathNV GLEW_GET_FUN(__glewIsPointInFillPathNV) #define glIsPointInStrokePathNV GLEW_GET_FUN(__glewIsPointInStrokePathNV) #define glPathColorGenNV GLEW_GET_FUN(__glewPathColorGenNV) #define glPathCommandsNV GLEW_GET_FUN(__glewPathCommandsNV) #define glPathCoordsNV GLEW_GET_FUN(__glewPathCoordsNV) #define glPathCoverDepthFuncNV GLEW_GET_FUN(__glewPathCoverDepthFuncNV) #define glPathDashArrayNV GLEW_GET_FUN(__glewPathDashArrayNV) #define glPathFogGenNV GLEW_GET_FUN(__glewPathFogGenNV) #define glPathGlyphRangeNV GLEW_GET_FUN(__glewPathGlyphRangeNV) #define glPathGlyphsNV GLEW_GET_FUN(__glewPathGlyphsNV) #define glPathParameterfNV GLEW_GET_FUN(__glewPathParameterfNV) #define glPathParameterfvNV GLEW_GET_FUN(__glewPathParameterfvNV) #define glPathParameteriNV GLEW_GET_FUN(__glewPathParameteriNV) #define glPathParameterivNV GLEW_GET_FUN(__glewPathParameterivNV) #define glPathStencilDepthOffsetNV GLEW_GET_FUN(__glewPathStencilDepthOffsetNV) #define glPathStencilFuncNV GLEW_GET_FUN(__glewPathStencilFuncNV) #define glPathStringNV GLEW_GET_FUN(__glewPathStringNV) #define glPathSubCommandsNV GLEW_GET_FUN(__glewPathSubCommandsNV) #define glPathSubCoordsNV GLEW_GET_FUN(__glewPathSubCoordsNV) #define glPathTexGenNV GLEW_GET_FUN(__glewPathTexGenNV) #define glPointAlongPathNV GLEW_GET_FUN(__glewPointAlongPathNV) #define glStencilFillPathInstancedNV GLEW_GET_FUN(__glewStencilFillPathInstancedNV) #define glStencilFillPathNV GLEW_GET_FUN(__glewStencilFillPathNV) #define glStencilStrokePathInstancedNV GLEW_GET_FUN(__glewStencilStrokePathInstancedNV) #define glStencilStrokePathNV GLEW_GET_FUN(__glewStencilStrokePathNV) #define glTransformPathNV GLEW_GET_FUN(__glewTransformPathNV) #define glWeightPathsNV GLEW_GET_FUN(__glewWeightPathsNV) #define GLEW_NV_path_rendering GLEW_GET_VAR(__GLEW_NV_path_rendering) #endif /* GL_NV_path_rendering */ /* ------------------------- GL_NV_pixel_data_range ------------------------ */ #ifndef GL_NV_pixel_data_range #define GL_NV_pixel_data_range 1 #define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 #define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 #define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A #define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B #define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C #define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D typedef void(GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLPIXELDATARANGENVPROC)(GLenum target, GLsizei length, void * pointer); #define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV) #define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV) #define GLEW_NV_pixel_data_range GLEW_GET_VAR(__GLEW_NV_pixel_data_range) #endif /* GL_NV_pixel_data_range */ /* --------------------------- GL_NV_point_sprite -------------------------- */ #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #define GL_POINT_SPRITE_NV 0x8861 #define GL_COORD_REPLACE_NV 0x8862 #define GL_POINT_SPRITE_R_MODE_NV 0x8863 typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERINVPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC)(GLenum pname, const GLint * params); #define glPointParameteriNV GLEW_GET_FUN(__glewPointParameteriNV) #define glPointParameterivNV GLEW_GET_FUN(__glewPointParameterivNV) #define GLEW_NV_point_sprite GLEW_GET_VAR(__GLEW_NV_point_sprite) #endif /* GL_NV_point_sprite */ /* -------------------------- GL_NV_present_video -------------------------- */ #ifndef GL_NV_present_video #define GL_NV_present_video 1 #define GL_FRAME_NV 0x8E26 #define GL_FIELDS_NV 0x8E27 #define GL_CURRENT_TIME_NV 0x8E28 #define GL_NUM_FILL_STREAMS_NV 0x8E29 #define GL_PRESENT_TIME_NV 0x8E2A #define GL_PRESENT_DURATION_NV 0x8E2B typedef void(GLAPIENTRY * PFNGLGETVIDEOI64VNVPROC)(GLuint video_slot, GLenum pname, GLint64EXT * params); typedef void(GLAPIENTRY * PFNGLGETVIDEOIVNVPROC)(GLuint video_slot, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVIDEOUI64VNVPROC)(GLuint video_slot, GLenum pname, GLuint64EXT * params); typedef void(GLAPIENTRY * PFNGLGETVIDEOUIVNVPROC)(GLuint video_slot, GLenum pname, GLuint * params); typedef void(GLAPIENTRY * PFNGLPRESENTFRAMEDUALFILLNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); typedef void(GLAPIENTRY * PFNGLPRESENTFRAMEKEYEDNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); #define glGetVideoi64vNV GLEW_GET_FUN(__glewGetVideoi64vNV) #define glGetVideoivNV GLEW_GET_FUN(__glewGetVideoivNV) #define glGetVideoui64vNV GLEW_GET_FUN(__glewGetVideoui64vNV) #define glGetVideouivNV GLEW_GET_FUN(__glewGetVideouivNV) #define glPresentFrameDualFillNV GLEW_GET_FUN(__glewPresentFrameDualFillNV) #define glPresentFrameKeyedNV GLEW_GET_FUN(__glewPresentFrameKeyedNV) #define GLEW_NV_present_video GLEW_GET_VAR(__GLEW_NV_present_video) #endif /* GL_NV_present_video */ /* ------------------------ GL_NV_primitive_restart ------------------------ */ #ifndef GL_NV_primitive_restart #define GL_NV_primitive_restart 1 #define GL_PRIMITIVE_RESTART_NV 0x8558 #define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 typedef void(GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC)(GLuint index); typedef void(GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC)(void); #define glPrimitiveRestartIndexNV GLEW_GET_FUN(__glewPrimitiveRestartIndexNV) #define glPrimitiveRestartNV GLEW_GET_FUN(__glewPrimitiveRestartNV) #define GLEW_NV_primitive_restart GLEW_GET_VAR(__GLEW_NV_primitive_restart) #endif /* GL_NV_primitive_restart */ /* ------------------------ GL_NV_register_combiners ----------------------- */ #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #define GL_REGISTER_COMBINERS_NV 0x8522 #define GL_VARIABLE_A_NV 0x8523 #define GL_VARIABLE_B_NV 0x8524 #define GL_VARIABLE_C_NV 0x8525 #define GL_VARIABLE_D_NV 0x8526 #define GL_VARIABLE_E_NV 0x8527 #define GL_VARIABLE_F_NV 0x8528 #define GL_VARIABLE_G_NV 0x8529 #define GL_CONSTANT_COLOR0_NV 0x852A #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_SPARE0_NV 0x852E #define GL_SPARE1_NV 0x852F #define GL_DISCARD_NV 0x8530 #define GL_E_TIMES_F_NV 0x8531 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 #define GL_UNSIGNED_IDENTITY_NV 0x8536 #define GL_UNSIGNED_INVERT_NV 0x8537 #define GL_EXPAND_NORMAL_NV 0x8538 #define GL_EXPAND_NEGATE_NV 0x8539 #define GL_HALF_BIAS_NORMAL_NV 0x853A #define GL_HALF_BIAS_NEGATE_NV 0x853B #define GL_SIGNED_IDENTITY_NV 0x853C #define GL_SIGNED_NEGATE_NV 0x853D #define GL_SCALE_BY_TWO_NV 0x853E #define GL_SCALE_BY_FOUR_NV 0x853F #define GL_SCALE_BY_ONE_HALF_NV 0x8540 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 #define GL_COMBINER_INPUT_NV 0x8542 #define GL_COMBINER_MAPPING_NV 0x8543 #define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 #define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 #define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 #define GL_COMBINER_MUX_SUM_NV 0x8547 #define GL_COMBINER_SCALE_NV 0x8548 #define GL_COMBINER_BIAS_NV 0x8549 #define GL_COMBINER_AB_OUTPUT_NV 0x854A #define GL_COMBINER_CD_OUTPUT_NV 0x854B #define GL_COMBINER_SUM_OUTPUT_NV 0x854C #define GL_MAX_GENERAL_COMBINERS_NV 0x854D #define GL_NUM_GENERAL_COMBINERS_NV 0x854E #define GL_COLOR_SUM_CLAMP_NV 0x854F #define GL_COMBINER0_NV 0x8550 #define GL_COMBINER1_NV 0x8551 #define GL_COMBINER2_NV 0x8552 #define GL_COMBINER3_NV 0x8553 #define GL_COMBINER4_NV 0x8554 #define GL_COMBINER5_NV 0x8555 #define GL_COMBINER6_NV 0x8556 #define GL_COMBINER7_NV 0x8557 typedef void(GLAPIENTRY * PFNGLCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void(GLAPIENTRY * PFNGLCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); typedef void(GLAPIENTRY * PFNGLCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void(GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint * params); #define glCombinerInputNV GLEW_GET_FUN(__glewCombinerInputNV) #define glCombinerOutputNV GLEW_GET_FUN(__glewCombinerOutputNV) #define glCombinerParameterfNV GLEW_GET_FUN(__glewCombinerParameterfNV) #define glCombinerParameterfvNV GLEW_GET_FUN(__glewCombinerParameterfvNV) #define glCombinerParameteriNV GLEW_GET_FUN(__glewCombinerParameteriNV) #define glCombinerParameterivNV GLEW_GET_FUN(__glewCombinerParameterivNV) #define glFinalCombinerInputNV GLEW_GET_FUN(__glewFinalCombinerInputNV) #define glGetCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetCombinerInputParameterfvNV) #define glGetCombinerInputParameterivNV GLEW_GET_FUN(__glewGetCombinerInputParameterivNV) #define glGetCombinerOutputParameterfvNV GLEW_GET_FUN(__glewGetCombinerOutputParameterfvNV) #define glGetCombinerOutputParameterivNV GLEW_GET_FUN(__glewGetCombinerOutputParameterivNV) #define glGetFinalCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterfvNV) #define glGetFinalCombinerInputParameterivNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterivNV) #define GLEW_NV_register_combiners GLEW_GET_VAR(__GLEW_NV_register_combiners) #endif /* GL_NV_register_combiners */ /* ----------------------- GL_NV_register_combiners2 ----------------------- */ #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #define GL_PER_STAGE_CONSTANTS_NV 0x8535 typedef void(GLAPIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat * params); #define glCombinerStageParameterfvNV GLEW_GET_FUN(__glewCombinerStageParameterfvNV) #define glGetCombinerStageParameterfvNV GLEW_GET_FUN(__glewGetCombinerStageParameterfvNV) #define GLEW_NV_register_combiners2 GLEW_GET_VAR(__GLEW_NV_register_combiners2) #endif /* GL_NV_register_combiners2 */ /* ----------------------- GL_NV_shader_atomic_float ----------------------- */ #ifndef GL_NV_shader_atomic_float #define GL_NV_shader_atomic_float 1 #define GLEW_NV_shader_atomic_float GLEW_GET_VAR(__GLEW_NV_shader_atomic_float) #endif /* GL_NV_shader_atomic_float */ /* ------------------------ GL_NV_shader_buffer_load ----------------------- */ #ifndef GL_NV_shader_buffer_load #define GL_NV_shader_buffer_load 1 #define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D #define GL_GPU_ADDRESS_NV 0x8F34 #define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 typedef void(GLAPIENTRY * PFNGLGETBUFFERPARAMETERUI64VNVPROC)(GLenum target, GLenum pname, GLuint64EXT * params); typedef void(GLAPIENTRY * PFNGLGETINTEGERUI64VNVPROC)(GLenum value, GLuint64EXT * result); typedef void(GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)(GLuint buffer, GLenum pname, GLuint64EXT * params); typedef GLboolean(GLAPIENTRY * PFNGLISBUFFERRESIDENTNVPROC)(GLenum target); typedef GLboolean(GLAPIENTRY * PFNGLISNAMEDBUFFERRESIDENTNVPROC)(GLuint buffer); typedef void(GLAPIENTRY * PFNGLMAKEBUFFERNONRESIDENTNVPROC)(GLenum target); typedef void(GLAPIENTRY * PFNGLMAKEBUFFERRESIDENTNVPROC)(GLenum target, GLenum access); typedef void(GLAPIENTRY * PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)(GLuint buffer); typedef void(GLAPIENTRY * PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)(GLuint buffer, GLenum access); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64NVPROC)(GLuint program, GLint location, GLuint64EXT value); typedef void(GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); typedef void(GLAPIENTRY * PFNGLUNIFORMUI64NVPROC)(GLint location, GLuint64EXT value); typedef void(GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); #define glGetBufferParameterui64vNV GLEW_GET_FUN(__glewGetBufferParameterui64vNV) #define glGetIntegerui64vNV GLEW_GET_FUN(__glewGetIntegerui64vNV) #define glGetNamedBufferParameterui64vNV GLEW_GET_FUN(__glewGetNamedBufferParameterui64vNV) #define glIsBufferResidentNV GLEW_GET_FUN(__glewIsBufferResidentNV) #define glIsNamedBufferResidentNV GLEW_GET_FUN(__glewIsNamedBufferResidentNV) #define glMakeBufferNonResidentNV GLEW_GET_FUN(__glewMakeBufferNonResidentNV) #define glMakeBufferResidentNV GLEW_GET_FUN(__glewMakeBufferResidentNV) #define glMakeNamedBufferNonResidentNV GLEW_GET_FUN(__glewMakeNamedBufferNonResidentNV) #define glMakeNamedBufferResidentNV GLEW_GET_FUN(__glewMakeNamedBufferResidentNV) #define glProgramUniformui64NV GLEW_GET_FUN(__glewProgramUniformui64NV) #define glProgramUniformui64vNV GLEW_GET_FUN(__glewProgramUniformui64vNV) #define glUniformui64NV GLEW_GET_FUN(__glewUniformui64NV) #define glUniformui64vNV GLEW_GET_FUN(__glewUniformui64vNV) #define GLEW_NV_shader_buffer_load GLEW_GET_VAR(__GLEW_NV_shader_buffer_load) #endif /* GL_NV_shader_buffer_load */ /* ---------------------- GL_NV_tessellation_program5 ---------------------- */ #ifndef GL_NV_tessellation_program5 #define GL_NV_tessellation_program5 1 #define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 #define GL_TESS_CONTROL_PROGRAM_NV 0x891E #define GL_TESS_EVALUATION_PROGRAM_NV 0x891F #define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 #define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 #define GLEW_NV_tessellation_program5 GLEW_GET_VAR(__GLEW_NV_tessellation_program5) #endif /* GL_NV_tessellation_program5 */ /* -------------------------- GL_NV_texgen_emboss -------------------------- */ #ifndef GL_NV_texgen_emboss #define GL_NV_texgen_emboss 1 #define GL_EMBOSS_LIGHT_NV 0x855D #define GL_EMBOSS_CONSTANT_NV 0x855E #define GL_EMBOSS_MAP_NV 0x855F #define GLEW_NV_texgen_emboss GLEW_GET_VAR(__GLEW_NV_texgen_emboss) #endif /* GL_NV_texgen_emboss */ /* ------------------------ GL_NV_texgen_reflection ------------------------ */ #ifndef GL_NV_texgen_reflection #define GL_NV_texgen_reflection 1 #define GL_NORMAL_MAP_NV 0x8511 #define GL_REFLECTION_MAP_NV 0x8512 #define GLEW_NV_texgen_reflection GLEW_GET_VAR(__GLEW_NV_texgen_reflection) #endif /* GL_NV_texgen_reflection */ /* ------------------------- GL_NV_texture_barrier ------------------------- */ #ifndef GL_NV_texture_barrier #define GL_NV_texture_barrier 1 typedef void(GLAPIENTRY * PFNGLTEXTUREBARRIERNVPROC)(void); #define glTextureBarrierNV GLEW_GET_FUN(__glewTextureBarrierNV) #define GLEW_NV_texture_barrier GLEW_GET_VAR(__GLEW_NV_texture_barrier) #endif /* GL_NV_texture_barrier */ /* --------------------- GL_NV_texture_compression_vtc --------------------- */ #ifndef GL_NV_texture_compression_vtc #define GL_NV_texture_compression_vtc 1 #define GLEW_NV_texture_compression_vtc GLEW_GET_VAR(__GLEW_NV_texture_compression_vtc) #endif /* GL_NV_texture_compression_vtc */ /* ----------------------- GL_NV_texture_env_combine4 ---------------------- */ #ifndef GL_NV_texture_env_combine4 #define GL_NV_texture_env_combine4 1 #define GL_COMBINE4_NV 0x8503 #define GL_SOURCE3_RGB_NV 0x8583 #define GL_SOURCE3_ALPHA_NV 0x858B #define GL_OPERAND3_RGB_NV 0x8593 #define GL_OPERAND3_ALPHA_NV 0x859B #define GLEW_NV_texture_env_combine4 GLEW_GET_VAR(__GLEW_NV_texture_env_combine4) #endif /* GL_NV_texture_env_combine4 */ /* ---------------------- GL_NV_texture_expand_normal ---------------------- */ #ifndef GL_NV_texture_expand_normal #define GL_NV_texture_expand_normal 1 #define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F #define GLEW_NV_texture_expand_normal GLEW_GET_VAR(__GLEW_NV_texture_expand_normal) #endif /* GL_NV_texture_expand_normal */ /* ----------------------- GL_NV_texture_multisample ----------------------- */ #ifndef GL_NV_texture_multisample #define GL_NV_texture_multisample 1 #define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 #define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 typedef void(GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void(GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void(GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void(GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void(GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void(GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); #define glTexImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage2DMultisampleCoverageNV) #define glTexImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage3DMultisampleCoverageNV) #define glTextureImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage2DMultisampleCoverageNV) #define glTextureImage2DMultisampleNV GLEW_GET_FUN(__glewTextureImage2DMultisampleNV) #define glTextureImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage3DMultisampleCoverageNV) #define glTextureImage3DMultisampleNV GLEW_GET_FUN(__glewTextureImage3DMultisampleNV) #define GLEW_NV_texture_multisample GLEW_GET_VAR(__GLEW_NV_texture_multisample) #endif /* GL_NV_texture_multisample */ /* ------------------------ GL_NV_texture_rectangle ------------------------ */ #ifndef GL_NV_texture_rectangle #define GL_NV_texture_rectangle 1 #define GL_TEXTURE_RECTANGLE_NV 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 #define GLEW_NV_texture_rectangle GLEW_GET_VAR(__GLEW_NV_texture_rectangle) #endif /* GL_NV_texture_rectangle */ /* -------------------------- GL_NV_texture_shader ------------------------- */ #ifndef GL_NV_texture_shader #define GL_NV_texture_shader 1 #define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C #define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D #define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E #define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_SHADER_CONSISTENT_NV 0x86DD #define GL_TEXTURE_SHADER_NV 0x86DE #define GL_SHADER_OPERATION_NV 0x86DF #define GL_CULL_MODES_NV 0x86E0 #define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 #define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 #define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 #define GL_CONST_EYE_NV 0x86E5 #define GL_PASS_THROUGH_NV 0x86E6 #define GL_CULL_FRAGMENT_NV 0x86E7 #define GL_OFFSET_TEXTURE_2D_NV 0x86E8 #define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 #define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA #define GL_DOT_PRODUCT_NV 0x86EC #define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED #define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE #define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 #define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 #define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 #define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GL_HI_SCALE_NV 0x870E #define GL_LO_SCALE_NV 0x870F #define GL_DS_SCALE_NV 0x8710 #define GL_DT_SCALE_NV 0x8711 #define GL_MAGNITUDE_SCALE_NV 0x8712 #define GL_VIBRANCE_SCALE_NV 0x8713 #define GL_HI_BIAS_NV 0x8714 #define GL_LO_BIAS_NV 0x8715 #define GL_DS_BIAS_NV 0x8716 #define GL_DT_BIAS_NV 0x8717 #define GL_MAGNITUDE_BIAS_NV 0x8718 #define GL_VIBRANCE_BIAS_NV 0x8719 #define GL_TEXTURE_BORDER_VALUES_NV 0x871A #define GL_TEXTURE_HI_SIZE_NV 0x871B #define GL_TEXTURE_LO_SIZE_NV 0x871C #define GL_TEXTURE_DS_SIZE_NV 0x871D #define GL_TEXTURE_DT_SIZE_NV 0x871E #define GL_TEXTURE_MAG_SIZE_NV 0x871F #define GLEW_NV_texture_shader GLEW_GET_VAR(__GLEW_NV_texture_shader) #endif /* GL_NV_texture_shader */ /* ------------------------- GL_NV_texture_shader2 ------------------------- */ #ifndef GL_NV_texture_shader2 #define GL_NV_texture_shader2 1 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GLEW_NV_texture_shader2 GLEW_GET_VAR(__GLEW_NV_texture_shader2) #endif /* GL_NV_texture_shader2 */ /* ------------------------- GL_NV_texture_shader3 ------------------------- */ #ifndef GL_NV_texture_shader3 #define GL_NV_texture_shader3 1 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 #define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 #define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 #define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 #define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 #define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A #define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B #define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C #define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D #define GL_HILO8_NV 0x885E #define GL_SIGNED_HILO8_NV 0x885F #define GL_FORCE_BLUE_TO_ONE_NV 0x8860 #define GLEW_NV_texture_shader3 GLEW_GET_VAR(__GLEW_NV_texture_shader3) #endif /* GL_NV_texture_shader3 */ /* ------------------------ GL_NV_transform_feedback ----------------------- */ #ifndef GL_NV_transform_feedback #define GL_NV_transform_feedback 1 #define GL_BACK_PRIMARY_COLOR_NV 0x8C77 #define GL_BACK_SECONDARY_COLOR_NV 0x8C78 #define GL_TEXTURE_COORD_NV 0x8C79 #define GL_CLIP_DISTANCE_NV 0x8C7A #define GL_VERTEX_ID_NV 0x8C7B #define GL_PRIMITIVE_ID_NV 0x8C7C #define GL_GENERIC_ATTRIB_NV 0x8C7D #define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 #define GL_ACTIVE_VARYINGS_NV 0x8C81 #define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 #define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 #define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 #define GL_PRIMITIVES_GENERATED_NV 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 #define GL_RASTERIZER_DISCARD_NV 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B #define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C #define GL_SEPARATE_ATTRIBS_NV 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F typedef void(GLAPIENTRY * PFNGLACTIVEVARYINGNVPROC)(GLuint program, const GLchar * name); typedef void(GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKNVPROC)(GLenum primitiveMode); typedef void(GLAPIENTRY * PFNGLBINDBUFFERBASENVPROC)(GLenum target, GLuint index, GLuint buffer); typedef void(GLAPIENTRY * PFNGLBINDBUFFEROFFSETNVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void(GLAPIENTRY * PFNGLBINDBUFFERRANGENVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void(GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKNVPROC)(void); typedef void(GLAPIENTRY * PFNGLGETACTIVEVARYINGNVPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); typedef void(GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)(GLuint program, GLuint index, GLint * location); typedef GLint(GLAPIENTRY * PFNGLGETVARYINGLOCATIONNVPROC)(GLuint program, const GLchar * name); typedef void(GLAPIENTRY * PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)(GLuint count, const GLint * attribs, GLenum bufferMode); typedef void(GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); #define glActiveVaryingNV GLEW_GET_FUN(__glewActiveVaryingNV) #define glBeginTransformFeedbackNV GLEW_GET_FUN(__glewBeginTransformFeedbackNV) #define glBindBufferBaseNV GLEW_GET_FUN(__glewBindBufferBaseNV) #define glBindBufferOffsetNV GLEW_GET_FUN(__glewBindBufferOffsetNV) #define glBindBufferRangeNV GLEW_GET_FUN(__glewBindBufferRangeNV) #define glEndTransformFeedbackNV GLEW_GET_FUN(__glewEndTransformFeedbackNV) #define glGetActiveVaryingNV GLEW_GET_FUN(__glewGetActiveVaryingNV) #define glGetTransformFeedbackVaryingNV GLEW_GET_FUN(__glewGetTransformFeedbackVaryingNV) #define glGetVaryingLocationNV GLEW_GET_FUN(__glewGetVaryingLocationNV) #define glTransformFeedbackAttribsNV GLEW_GET_FUN(__glewTransformFeedbackAttribsNV) #define glTransformFeedbackVaryingsNV GLEW_GET_FUN(__glewTransformFeedbackVaryingsNV) #define GLEW_NV_transform_feedback GLEW_GET_VAR(__GLEW_NV_transform_feedback) #endif /* GL_NV_transform_feedback */ /* ----------------------- GL_NV_transform_feedback2 ----------------------- */ #ifndef GL_NV_transform_feedback2 #define GL_NV_transform_feedback2 1 #define GL_TRANSFORM_FEEDBACK_NV 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 typedef void(GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKNVPROC)(GLenum target, GLuint id); typedef void(GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSNVPROC)(GLsizei n, const GLuint * ids); typedef void(GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKNVPROC)(GLenum mode, GLuint id); typedef void(GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSNVPROC)(GLsizei n, GLuint * ids); typedef GLboolean(GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKNVPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKNVPROC)(void); typedef void(GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKNVPROC)(void); #define glBindTransformFeedbackNV GLEW_GET_FUN(__glewBindTransformFeedbackNV) #define glDeleteTransformFeedbacksNV GLEW_GET_FUN(__glewDeleteTransformFeedbacksNV) #define glDrawTransformFeedbackNV GLEW_GET_FUN(__glewDrawTransformFeedbackNV) #define glGenTransformFeedbacksNV GLEW_GET_FUN(__glewGenTransformFeedbacksNV) #define glIsTransformFeedbackNV GLEW_GET_FUN(__glewIsTransformFeedbackNV) #define glPauseTransformFeedbackNV GLEW_GET_FUN(__glewPauseTransformFeedbackNV) #define glResumeTransformFeedbackNV GLEW_GET_FUN(__glewResumeTransformFeedbackNV) #define GLEW_NV_transform_feedback2 GLEW_GET_VAR(__GLEW_NV_transform_feedback2) #endif /* GL_NV_transform_feedback2 */ /* -------------------------- GL_NV_vdpau_interop -------------------------- */ #ifndef GL_NV_vdpau_interop #define GL_NV_vdpau_interop 1 #define GL_SURFACE_STATE_NV 0x86EB #define GL_SURFACE_REGISTERED_NV 0x86FD #define GL_SURFACE_MAPPED_NV 0x8700 #define GL_WRITE_DISCARD_NV 0x88BE typedef GLintptr GLvdpauSurfaceNV; typedef void(GLAPIENTRY * PFNGLVDPAUFININVPROC)(void); typedef void(GLAPIENTRY * PFNGLVDPAUGETSURFACEIVNVPROC)(GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); typedef void(GLAPIENTRY * PFNGLVDPAUINITNVPROC)(const void * vdpDevice, const GLvoid * getProcAddress); typedef void(GLAPIENTRY * PFNGLVDPAUISSURFACENVPROC)(GLvdpauSurfaceNV surface); typedef void(GLAPIENTRY * PFNGLVDPAUMAPSURFACESNVPROC)(GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces); typedef GLvdpauSurfaceNV(GLAPIENTRY * PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); typedef GLvdpauSurfaceNV(GLAPIENTRY * PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); typedef void(GLAPIENTRY * PFNGLVDPAUSURFACEACCESSNVPROC)(GLvdpauSurfaceNV surface, GLenum access); typedef void(GLAPIENTRY * PFNGLVDPAUUNMAPSURFACESNVPROC)(GLsizei numSurface, const GLvdpauSurfaceNV * surfaces); typedef void(GLAPIENTRY * PFNGLVDPAUUNREGISTERSURFACENVPROC)(GLvdpauSurfaceNV surface); #define glVDPAUFiniNV GLEW_GET_FUN(__glewVDPAUFiniNV) #define glVDPAUGetSurfaceivNV GLEW_GET_FUN(__glewVDPAUGetSurfaceivNV) #define glVDPAUInitNV GLEW_GET_FUN(__glewVDPAUInitNV) #define glVDPAUIsSurfaceNV GLEW_GET_FUN(__glewVDPAUIsSurfaceNV) #define glVDPAUMapSurfacesNV GLEW_GET_FUN(__glewVDPAUMapSurfacesNV) #define glVDPAURegisterOutputSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterOutputSurfaceNV) #define glVDPAURegisterVideoSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterVideoSurfaceNV) #define glVDPAUSurfaceAccessNV GLEW_GET_FUN(__glewVDPAUSurfaceAccessNV) #define glVDPAUUnmapSurfacesNV GLEW_GET_FUN(__glewVDPAUUnmapSurfacesNV) #define glVDPAUUnregisterSurfaceNV GLEW_GET_FUN(__glewVDPAUUnregisterSurfaceNV) #define GLEW_NV_vdpau_interop GLEW_GET_VAR(__GLEW_NV_vdpau_interop) #endif /* GL_NV_vdpau_interop */ /* ------------------------ GL_NV_vertex_array_range ----------------------- */ #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #define GL_VERTEX_ARRAY_RANGE_NV 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E #define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 typedef void(GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC)(void); typedef void(GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC)(GLsizei length, void * pointer); #define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV) #define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV) #define GLEW_NV_vertex_array_range GLEW_GET_VAR(__GLEW_NV_vertex_array_range) #endif /* GL_NV_vertex_array_range */ /* ----------------------- GL_NV_vertex_array_range2 ----------------------- */ #ifndef GL_NV_vertex_array_range2 #define GL_NV_vertex_array_range2 1 #define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 #define GLEW_NV_vertex_array_range2 GLEW_GET_VAR(__GLEW_NV_vertex_array_range2) #endif /* GL_NV_vertex_array_range2 */ /* ------------------- GL_NV_vertex_attrib_integer_64bit ------------------- */ #ifndef GL_NV_vertex_attrib_integer_64bit #define GL_NV_vertex_attrib_integer_64bit 1 #define GL_INT64_NV 0x140E #define GL_UNSIGNED_INT64_NV 0x140F typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBLI64VNVPROC)(GLuint index, GLenum pname, GLint64EXT * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBLUI64VNVPROC)(GLuint index, GLenum pname, GLuint64EXT * params); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1I64NVPROC)(GLuint index, GLint64EXT x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1I64VNVPROC)(GLuint index, const GLint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64NVPROC)(GLuint index, GLuint64EXT x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64VNVPROC)(GLuint index, const GLuint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2I64VNVPROC)(GLuint index, const GLint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64VNVPROC)(GLuint index, const GLuint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3I64VNVPROC)(GLuint index, const GLint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64VNVPROC)(GLuint index, const GLuint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4I64VNVPROC)(GLuint index, const GLint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64VNVPROC)(GLuint index, const GLuint64EXT * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBLFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); #define glGetVertexAttribLi64vNV GLEW_GET_FUN(__glewGetVertexAttribLi64vNV) #define glGetVertexAttribLui64vNV GLEW_GET_FUN(__glewGetVertexAttribLui64vNV) #define glVertexAttribL1i64NV GLEW_GET_FUN(__glewVertexAttribL1i64NV) #define glVertexAttribL1i64vNV GLEW_GET_FUN(__glewVertexAttribL1i64vNV) #define glVertexAttribL1ui64NV GLEW_GET_FUN(__glewVertexAttribL1ui64NV) #define glVertexAttribL1ui64vNV GLEW_GET_FUN(__glewVertexAttribL1ui64vNV) #define glVertexAttribL2i64NV GLEW_GET_FUN(__glewVertexAttribL2i64NV) #define glVertexAttribL2i64vNV GLEW_GET_FUN(__glewVertexAttribL2i64vNV) #define glVertexAttribL2ui64NV GLEW_GET_FUN(__glewVertexAttribL2ui64NV) #define glVertexAttribL2ui64vNV GLEW_GET_FUN(__glewVertexAttribL2ui64vNV) #define glVertexAttribL3i64NV GLEW_GET_FUN(__glewVertexAttribL3i64NV) #define glVertexAttribL3i64vNV GLEW_GET_FUN(__glewVertexAttribL3i64vNV) #define glVertexAttribL3ui64NV GLEW_GET_FUN(__glewVertexAttribL3ui64NV) #define glVertexAttribL3ui64vNV GLEW_GET_FUN(__glewVertexAttribL3ui64vNV) #define glVertexAttribL4i64NV GLEW_GET_FUN(__glewVertexAttribL4i64NV) #define glVertexAttribL4i64vNV GLEW_GET_FUN(__glewVertexAttribL4i64vNV) #define glVertexAttribL4ui64NV GLEW_GET_FUN(__glewVertexAttribL4ui64NV) #define glVertexAttribL4ui64vNV GLEW_GET_FUN(__glewVertexAttribL4ui64vNV) #define glVertexAttribLFormatNV GLEW_GET_FUN(__glewVertexAttribLFormatNV) #define GLEW_NV_vertex_attrib_integer_64bit GLEW_GET_VAR(__GLEW_NV_vertex_attrib_integer_64bit) #endif /* GL_NV_vertex_attrib_integer_64bit */ /* ------------------- GL_NV_vertex_buffer_unified_memory ------------------ */ #ifndef GL_NV_vertex_buffer_unified_memory #define GL_NV_vertex_buffer_unified_memory 1 #define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E #define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F #define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 #define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 #define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 #define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 #define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 #define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 #define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 #define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 #define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 #define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 #define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A #define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B #define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C #define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D #define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E #define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F #define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 #define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 #define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 #define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 #define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 #define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 #define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 typedef void(GLAPIENTRY * PFNGLBUFFERADDRESSRANGENVPROC)(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); typedef void(GLAPIENTRY * PFNGLCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); typedef void(GLAPIENTRY * PFNGLEDGEFLAGFORMATNVPROC)(GLsizei stride); typedef void(GLAPIENTRY * PFNGLFOGCOORDFORMATNVPROC)(GLenum type, GLsizei stride); typedef void(GLAPIENTRY * PFNGLGETINTEGERUI64I_VNVPROC)(GLenum value, GLuint index, GLuint64EXT result[]); typedef void(GLAPIENTRY * PFNGLINDEXFORMATNVPROC)(GLenum type, GLsizei stride); typedef void(GLAPIENTRY * PFNGLNORMALFORMATNVPROC)(GLenum type, GLsizei stride); typedef void(GLAPIENTRY * PFNGLSECONDARYCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); typedef void(GLAPIENTRY * PFNGLTEXCOORDFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBIFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); typedef void(GLAPIENTRY * PFNGLVERTEXFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); #define glBufferAddressRangeNV GLEW_GET_FUN(__glewBufferAddressRangeNV) #define glColorFormatNV GLEW_GET_FUN(__glewColorFormatNV) #define glEdgeFlagFormatNV GLEW_GET_FUN(__glewEdgeFlagFormatNV) #define glFogCoordFormatNV GLEW_GET_FUN(__glewFogCoordFormatNV) #define glGetIntegerui64i_vNV GLEW_GET_FUN(__glewGetIntegerui64i_vNV) #define glIndexFormatNV GLEW_GET_FUN(__glewIndexFormatNV) #define glNormalFormatNV GLEW_GET_FUN(__glewNormalFormatNV) #define glSecondaryColorFormatNV GLEW_GET_FUN(__glewSecondaryColorFormatNV) #define glTexCoordFormatNV GLEW_GET_FUN(__glewTexCoordFormatNV) #define glVertexAttribFormatNV GLEW_GET_FUN(__glewVertexAttribFormatNV) #define glVertexAttribIFormatNV GLEW_GET_FUN(__glewVertexAttribIFormatNV) #define glVertexFormatNV GLEW_GET_FUN(__glewVertexFormatNV) #define GLEW_NV_vertex_buffer_unified_memory GLEW_GET_VAR(__GLEW_NV_vertex_buffer_unified_memory) #endif /* GL_NV_vertex_buffer_unified_memory */ /* -------------------------- GL_NV_vertex_program ------------------------- */ #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #define GL_VERTEX_PROGRAM_NV 0x8620 #define GL_VERTEX_STATE_PROGRAM_NV 0x8621 #define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 #define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 #define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 #define GL_CURRENT_ATTRIB_NV 0x8626 #define GL_PROGRAM_LENGTH_NV 0x8627 #define GL_PROGRAM_STRING_NV 0x8628 #define GL_MODELVIEW_PROJECTION_NV 0x8629 #define GL_IDENTITY_NV 0x862A #define GL_INVERSE_NV 0x862B #define GL_TRANSPOSE_NV 0x862C #define GL_INVERSE_TRANSPOSE_NV 0x862D #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E #define GL_MAX_TRACK_MATRICES_NV 0x862F #define GL_MATRIX0_NV 0x8630 #define GL_MATRIX1_NV 0x8631 #define GL_MATRIX2_NV 0x8632 #define GL_MATRIX3_NV 0x8633 #define GL_MATRIX4_NV 0x8634 #define GL_MATRIX5_NV 0x8635 #define GL_MATRIX6_NV 0x8636 #define GL_MATRIX7_NV 0x8637 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 #define GL_CURRENT_MATRIX_NV 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 #define GL_PROGRAM_PARAMETER_NV 0x8644 #define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 #define GL_PROGRAM_TARGET_NV 0x8646 #define GL_PROGRAM_RESIDENT_NV 0x8647 #define GL_TRACK_MATRIX_NV 0x8648 #define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 #define GL_VERTEX_PROGRAM_BINDING_NV 0x864A #define GL_PROGRAM_ERROR_POSITION_NV 0x864B #define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 #define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 #define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 #define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 #define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 #define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 #define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 #define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 #define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 #define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 #define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A #define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B #define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C #define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D #define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E #define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F #define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 #define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 #define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 #define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 #define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 #define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 #define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 #define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 #define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 #define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 #define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A #define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B #define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C #define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D #define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E #define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F #define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 #define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 #define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 #define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 #define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 #define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 #define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 #define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 #define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 #define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 #define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A #define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B #define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C #define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D #define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E #define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F typedef GLboolean(GLAPIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC)(GLsizei n, const GLuint * ids, GLboolean * residences); typedef void(GLAPIENTRY * PFNGLBINDPROGRAMNVPROC)(GLenum target, GLuint id); typedef void(GLAPIENTRY * PFNGLDELETEPROGRAMSNVPROC)(GLsizei n, const GLuint * ids); typedef void(GLAPIENTRY * PFNGLEXECUTEPROGRAMNVPROC)(GLenum target, GLuint id, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLGENPROGRAMSNVPROC)(GLsizei n, GLuint * ids); typedef void(GLAPIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC)(GLenum target, GLuint index, GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETPROGRAMSTRINGNVPROC)(GLuint id, GLenum pname, GLubyte * program); typedef void(GLAPIENTRY * PFNGLGETPROGRAMIVNVPROC)(GLuint id, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETTRACKMATRIXIVNVPROC)(GLenum target, GLuint address, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC)(GLuint index, GLenum pname, GLvoid ** pointer); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC)(GLuint index, GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC)(GLuint index, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC)(GLuint index, GLenum pname, GLint * params); typedef GLboolean(GLAPIENTRY * PFNGLISPROGRAMNVPROC)(GLuint id); typedef void(GLAPIENTRY * PFNGLLOADPROGRAMNVPROC)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC)(GLenum target, GLuint index, const GLdouble * params); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC)(GLenum target, GLuint index, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); typedef void(GLAPIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC)(GLsizei n, GLuint * ids); typedef void(GLAPIENTRY * PFNGLTRACKMATRIXNVPROC)(GLenum target, GLuint address, GLenum matrix, GLenum transform); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1DNVPROC)(GLuint index, GLdouble x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1DVNVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1FNVPROC)(GLuint index, GLfloat x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1FVNVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1SNVPROC)(GLuint index, GLshort x); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB1SVNVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2DNVPROC)(GLuint index, GLdouble x, GLdouble y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2DVNVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2FNVPROC)(GLuint index, GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2FVNVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2SNVPROC)(GLuint index, GLshort x, GLshort y); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB2SVNVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3DVNVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3FVNVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB3SVNVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4DVNVPROC)(GLuint index, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4FVNVPROC)(GLuint index, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC)(GLuint index, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC)(GLuint index, const GLubyte * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC)(GLuint index, GLsizei n, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC)(GLuint index, GLsizei n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC)(GLuint index, GLsizei n, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC)(GLuint index, GLsizei n, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC)(GLuint index, GLsizei n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC)(GLuint index, GLsizei n, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC)(GLuint index, GLsizei n, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC)(GLuint index, GLsizei n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC)(GLuint index, GLsizei n, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC)(GLuint index, GLsizei n, const GLdouble * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC)(GLuint index, GLsizei n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC)(GLuint index, GLsizei n, const GLshort * v); typedef void(GLAPIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC)(GLuint index, GLsizei n, const GLubyte * v); #define glAreProgramsResidentNV GLEW_GET_FUN(__glewAreProgramsResidentNV) #define glBindProgramNV GLEW_GET_FUN(__glewBindProgramNV) #define glDeleteProgramsNV GLEW_GET_FUN(__glewDeleteProgramsNV) #define glExecuteProgramNV GLEW_GET_FUN(__glewExecuteProgramNV) #define glGenProgramsNV GLEW_GET_FUN(__glewGenProgramsNV) #define glGetProgramParameterdvNV GLEW_GET_FUN(__glewGetProgramParameterdvNV) #define glGetProgramParameterfvNV GLEW_GET_FUN(__glewGetProgramParameterfvNV) #define glGetProgramStringNV GLEW_GET_FUN(__glewGetProgramStringNV) #define glGetProgramivNV GLEW_GET_FUN(__glewGetProgramivNV) #define glGetTrackMatrixivNV GLEW_GET_FUN(__glewGetTrackMatrixivNV) #define glGetVertexAttribPointervNV GLEW_GET_FUN(__glewGetVertexAttribPointervNV) #define glGetVertexAttribdvNV GLEW_GET_FUN(__glewGetVertexAttribdvNV) #define glGetVertexAttribfvNV GLEW_GET_FUN(__glewGetVertexAttribfvNV) #define glGetVertexAttribivNV GLEW_GET_FUN(__glewGetVertexAttribivNV) #define glIsProgramNV GLEW_GET_FUN(__glewIsProgramNV) #define glLoadProgramNV GLEW_GET_FUN(__glewLoadProgramNV) #define glProgramParameter4dNV GLEW_GET_FUN(__glewProgramParameter4dNV) #define glProgramParameter4dvNV GLEW_GET_FUN(__glewProgramParameter4dvNV) #define glProgramParameter4fNV GLEW_GET_FUN(__glewProgramParameter4fNV) #define glProgramParameter4fvNV GLEW_GET_FUN(__glewProgramParameter4fvNV) #define glProgramParameters4dvNV GLEW_GET_FUN(__glewProgramParameters4dvNV) #define glProgramParameters4fvNV GLEW_GET_FUN(__glewProgramParameters4fvNV) #define glRequestResidentProgramsNV GLEW_GET_FUN(__glewRequestResidentProgramsNV) #define glTrackMatrixNV GLEW_GET_FUN(__glewTrackMatrixNV) #define glVertexAttrib1dNV GLEW_GET_FUN(__glewVertexAttrib1dNV) #define glVertexAttrib1dvNV GLEW_GET_FUN(__glewVertexAttrib1dvNV) #define glVertexAttrib1fNV GLEW_GET_FUN(__glewVertexAttrib1fNV) #define glVertexAttrib1fvNV GLEW_GET_FUN(__glewVertexAttrib1fvNV) #define glVertexAttrib1sNV GLEW_GET_FUN(__glewVertexAttrib1sNV) #define glVertexAttrib1svNV GLEW_GET_FUN(__glewVertexAttrib1svNV) #define glVertexAttrib2dNV GLEW_GET_FUN(__glewVertexAttrib2dNV) #define glVertexAttrib2dvNV GLEW_GET_FUN(__glewVertexAttrib2dvNV) #define glVertexAttrib2fNV GLEW_GET_FUN(__glewVertexAttrib2fNV) #define glVertexAttrib2fvNV GLEW_GET_FUN(__glewVertexAttrib2fvNV) #define glVertexAttrib2sNV GLEW_GET_FUN(__glewVertexAttrib2sNV) #define glVertexAttrib2svNV GLEW_GET_FUN(__glewVertexAttrib2svNV) #define glVertexAttrib3dNV GLEW_GET_FUN(__glewVertexAttrib3dNV) #define glVertexAttrib3dvNV GLEW_GET_FUN(__glewVertexAttrib3dvNV) #define glVertexAttrib3fNV GLEW_GET_FUN(__glewVertexAttrib3fNV) #define glVertexAttrib3fvNV GLEW_GET_FUN(__glewVertexAttrib3fvNV) #define glVertexAttrib3sNV GLEW_GET_FUN(__glewVertexAttrib3sNV) #define glVertexAttrib3svNV GLEW_GET_FUN(__glewVertexAttrib3svNV) #define glVertexAttrib4dNV GLEW_GET_FUN(__glewVertexAttrib4dNV) #define glVertexAttrib4dvNV GLEW_GET_FUN(__glewVertexAttrib4dvNV) #define glVertexAttrib4fNV GLEW_GET_FUN(__glewVertexAttrib4fNV) #define glVertexAttrib4fvNV GLEW_GET_FUN(__glewVertexAttrib4fvNV) #define glVertexAttrib4sNV GLEW_GET_FUN(__glewVertexAttrib4sNV) #define glVertexAttrib4svNV GLEW_GET_FUN(__glewVertexAttrib4svNV) #define glVertexAttrib4ubNV GLEW_GET_FUN(__glewVertexAttrib4ubNV) #define glVertexAttrib4ubvNV GLEW_GET_FUN(__glewVertexAttrib4ubvNV) #define glVertexAttribPointerNV GLEW_GET_FUN(__glewVertexAttribPointerNV) #define glVertexAttribs1dvNV GLEW_GET_FUN(__glewVertexAttribs1dvNV) #define glVertexAttribs1fvNV GLEW_GET_FUN(__glewVertexAttribs1fvNV) #define glVertexAttribs1svNV GLEW_GET_FUN(__glewVertexAttribs1svNV) #define glVertexAttribs2dvNV GLEW_GET_FUN(__glewVertexAttribs2dvNV) #define glVertexAttribs2fvNV GLEW_GET_FUN(__glewVertexAttribs2fvNV) #define glVertexAttribs2svNV GLEW_GET_FUN(__glewVertexAttribs2svNV) #define glVertexAttribs3dvNV GLEW_GET_FUN(__glewVertexAttribs3dvNV) #define glVertexAttribs3fvNV GLEW_GET_FUN(__glewVertexAttribs3fvNV) #define glVertexAttribs3svNV GLEW_GET_FUN(__glewVertexAttribs3svNV) #define glVertexAttribs4dvNV GLEW_GET_FUN(__glewVertexAttribs4dvNV) #define glVertexAttribs4fvNV GLEW_GET_FUN(__glewVertexAttribs4fvNV) #define glVertexAttribs4svNV GLEW_GET_FUN(__glewVertexAttribs4svNV) #define glVertexAttribs4ubvNV GLEW_GET_FUN(__glewVertexAttribs4ubvNV) #define GLEW_NV_vertex_program GLEW_GET_VAR(__GLEW_NV_vertex_program) #endif /* GL_NV_vertex_program */ /* ------------------------ GL_NV_vertex_program1_1 ------------------------ */ #ifndef GL_NV_vertex_program1_1 #define GL_NV_vertex_program1_1 1 #define GLEW_NV_vertex_program1_1 GLEW_GET_VAR(__GLEW_NV_vertex_program1_1) #endif /* GL_NV_vertex_program1_1 */ /* ------------------------- GL_NV_vertex_program2 ------------------------- */ #ifndef GL_NV_vertex_program2 #define GL_NV_vertex_program2 1 #define GLEW_NV_vertex_program2 GLEW_GET_VAR(__GLEW_NV_vertex_program2) #endif /* GL_NV_vertex_program2 */ /* ---------------------- GL_NV_vertex_program2_option --------------------- */ #ifndef GL_NV_vertex_program2_option #define GL_NV_vertex_program2_option 1 #define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 #define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 #define GLEW_NV_vertex_program2_option GLEW_GET_VAR(__GLEW_NV_vertex_program2_option) #endif /* GL_NV_vertex_program2_option */ /* ------------------------- GL_NV_vertex_program3 ------------------------- */ #ifndef GL_NV_vertex_program3 #define GL_NV_vertex_program3 1 #define MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C #define GLEW_NV_vertex_program3 GLEW_GET_VAR(__GLEW_NV_vertex_program3) #endif /* GL_NV_vertex_program3 */ /* ------------------------- GL_NV_vertex_program4 ------------------------- */ #ifndef GL_NV_vertex_program4 #define GL_NV_vertex_program4 1 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD #define GLEW_NV_vertex_program4 GLEW_GET_VAR(__GLEW_NV_vertex_program4) #endif /* GL_NV_vertex_program4 */ /* -------------------------- GL_NV_video_capture -------------------------- */ #ifndef GL_NV_video_capture #define GL_NV_video_capture 1 #define GL_VIDEO_BUFFER_NV 0x9020 #define GL_VIDEO_BUFFER_BINDING_NV 0x9021 #define GL_FIELD_UPPER_NV 0x9022 #define GL_FIELD_LOWER_NV 0x9023 #define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 #define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 #define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 #define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 #define GL_VIDEO_BUFFER_PITCH_NV 0x9028 #define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 #define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A #define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B #define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C #define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D #define GL_PARTIAL_SUCCESS_NV 0x902E #define GL_SUCCESS_NV 0x902F #define GL_FAILURE_NV 0x9030 #define GL_YCBYCR8_422_NV 0x9031 #define GL_YCBAYCR8A_4224_NV 0x9032 #define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 #define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 #define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 #define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 #define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 #define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 #define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 #define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A #define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B #define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C typedef void(GLAPIENTRY * PFNGLBEGINVIDEOCAPTURENVPROC)(GLuint video_capture_slot); typedef void(GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); typedef void(GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); typedef void(GLAPIENTRY * PFNGLENDVIDEOCAPTURENVPROC)(GLuint video_capture_slot); typedef void(GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params); typedef void(GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETVIDEOCAPTUREIVNVPROC)(GLuint video_capture_slot, GLenum pname, GLint * params); typedef GLenum(GLAPIENTRY * PFNGLVIDEOCAPTURENVPROC)(GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time); typedef void(GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params); typedef void(GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params); #define glBeginVideoCaptureNV GLEW_GET_FUN(__glewBeginVideoCaptureNV) #define glBindVideoCaptureStreamBufferNV GLEW_GET_FUN(__glewBindVideoCaptureStreamBufferNV) #define glBindVideoCaptureStreamTextureNV GLEW_GET_FUN(__glewBindVideoCaptureStreamTextureNV) #define glEndVideoCaptureNV GLEW_GET_FUN(__glewEndVideoCaptureNV) #define glGetVideoCaptureStreamdvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamdvNV) #define glGetVideoCaptureStreamfvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamfvNV) #define glGetVideoCaptureStreamivNV GLEW_GET_FUN(__glewGetVideoCaptureStreamivNV) #define glGetVideoCaptureivNV GLEW_GET_FUN(__glewGetVideoCaptureivNV) #define glVideoCaptureNV GLEW_GET_FUN(__glewVideoCaptureNV) #define glVideoCaptureStreamParameterdvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterdvNV) #define glVideoCaptureStreamParameterfvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterfvNV) #define glVideoCaptureStreamParameterivNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterivNV) #define GLEW_NV_video_capture GLEW_GET_VAR(__GLEW_NV_video_capture) #endif /* GL_NV_video_capture */ /* ------------------------ GL_OES_byte_coordinates ------------------------ */ #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 #define GL_BYTE 0x1400 #define GLEW_OES_byte_coordinates GLEW_GET_VAR(__GLEW_OES_byte_coordinates) #endif /* GL_OES_byte_coordinates */ /* ------------------- GL_OES_compressed_paletted_texture ------------------ */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #define GLEW_OES_compressed_paletted_texture GLEW_GET_VAR(__GLEW_OES_compressed_paletted_texture) #endif /* GL_OES_compressed_paletted_texture */ /* --------------------------- GL_OES_read_format -------------------------- */ #ifndef GL_OES_read_format #define GL_OES_read_format 1 #define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B #define GLEW_OES_read_format GLEW_GET_VAR(__GLEW_OES_read_format) #endif /* GL_OES_read_format */ /* ------------------------ GL_OES_single_precision ------------------------ */ #ifndef GL_OES_single_precision #define GL_OES_single_precision 1 typedef void(GLAPIENTRY * PFNGLCLEARDEPTHFOESPROC)(GLclampd depth); typedef void(GLAPIENTRY * PFNGLCLIPPLANEFOESPROC)(GLenum plane, const GLfloat * equation); typedef void(GLAPIENTRY * PFNGLDEPTHRANGEFOESPROC)(GLclampf n, GLclampf f); typedef void(GLAPIENTRY * PFNGLFRUSTUMFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); typedef void(GLAPIENTRY * PFNGLGETCLIPPLANEFOESPROC)(GLenum plane, GLfloat * equation); typedef void(GLAPIENTRY * PFNGLORTHOFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); #define glClearDepthfOES GLEW_GET_FUN(__glewClearDepthfOES) #define glClipPlanefOES GLEW_GET_FUN(__glewClipPlanefOES) #define glDepthRangefOES GLEW_GET_FUN(__glewDepthRangefOES) #define glFrustumfOES GLEW_GET_FUN(__glewFrustumfOES) #define glGetClipPlanefOES GLEW_GET_FUN(__glewGetClipPlanefOES) #define glOrthofOES GLEW_GET_FUN(__glewOrthofOES) #define GLEW_OES_single_precision GLEW_GET_VAR(__GLEW_OES_single_precision) #endif /* GL_OES_single_precision */ /* ---------------------------- GL_OML_interlace --------------------------- */ #ifndef GL_OML_interlace #define GL_OML_interlace 1 #define GL_INTERLACE_OML 0x8980 #define GL_INTERLACE_READ_OML 0x8981 #define GLEW_OML_interlace GLEW_GET_VAR(__GLEW_OML_interlace) #endif /* GL_OML_interlace */ /* ---------------------------- GL_OML_resample ---------------------------- */ #ifndef GL_OML_resample #define GL_OML_resample 1 #define GL_PACK_RESAMPLE_OML 0x8984 #define GL_UNPACK_RESAMPLE_OML 0x8985 #define GL_RESAMPLE_REPLICATE_OML 0x8986 #define GL_RESAMPLE_ZERO_FILL_OML 0x8987 #define GL_RESAMPLE_AVERAGE_OML 0x8988 #define GL_RESAMPLE_DECIMATE_OML 0x8989 #define GLEW_OML_resample GLEW_GET_VAR(__GLEW_OML_resample) #endif /* GL_OML_resample */ /* ---------------------------- GL_OML_subsample --------------------------- */ #ifndef GL_OML_subsample #define GL_OML_subsample 1 #define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 #define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 #define GLEW_OML_subsample GLEW_GET_VAR(__GLEW_OML_subsample) #endif /* GL_OML_subsample */ /* --------------------------- GL_PGI_misc_hints --------------------------- */ #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #define GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000 #define GL_CONSERVE_MEMORY_HINT_PGI 107005 #define GL_RECLAIM_MEMORY_HINT_PGI 107006 #define GL_NATIVE_GRAPHICS_HANDLE_PGI 107010 #define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011 #define GL_NATIVE_GRAPHICS_END_HINT_PGI 107012 #define GL_ALWAYS_FAST_HINT_PGI 107020 #define GL_ALWAYS_SOFT_HINT_PGI 107021 #define GL_ALLOW_DRAW_OBJ_HINT_PGI 107022 #define GL_ALLOW_DRAW_WIN_HINT_PGI 107023 #define GL_ALLOW_DRAW_FRG_HINT_PGI 107024 #define GL_ALLOW_DRAW_MEM_HINT_PGI 107025 #define GL_STRICT_DEPTHFUNC_HINT_PGI 107030 #define GL_STRICT_LIGHTING_HINT_PGI 107031 #define GL_STRICT_SCISSOR_HINT_PGI 107032 #define GL_FULL_STIPPLE_HINT_PGI 107033 #define GL_CLIP_NEAR_HINT_PGI 107040 #define GL_CLIP_FAR_HINT_PGI 107041 #define GL_WIDE_LINE_HINT_PGI 107042 #define GL_BACK_NORMALS_HINT_PGI 107043 #define GLEW_PGI_misc_hints GLEW_GET_VAR(__GLEW_PGI_misc_hints) #endif /* GL_PGI_misc_hints */ /* -------------------------- GL_PGI_vertex_hints -------------------------- */ #ifndef GL_PGI_vertex_hints #define GL_PGI_vertex_hints 1 #define GL_VERTEX23_BIT_PGI 0x00000004 #define GL_VERTEX4_BIT_PGI 0x00000008 #define GL_COLOR3_BIT_PGI 0x00010000 #define GL_COLOR4_BIT_PGI 0x00020000 #define GL_EDGEFLAG_BIT_PGI 0x00040000 #define GL_INDEX_BIT_PGI 0x00080000 #define GL_MAT_AMBIENT_BIT_PGI 0x00100000 #define GL_VERTEX_DATA_HINT_PGI 107050 #define GL_VERTEX_CONSISTENT_HINT_PGI 107051 #define GL_MATERIAL_SIDE_HINT_PGI 107052 #define GL_MAX_VERTEX_HINT_PGI 107053 #define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 #define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 #define GL_MAT_EMISSION_BIT_PGI 0x00800000 #define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 #define GL_MAT_SHININESS_BIT_PGI 0x02000000 #define GL_MAT_SPECULAR_BIT_PGI 0x04000000 #define GL_NORMAL_BIT_PGI 0x08000000 #define GL_TEXCOORD1_BIT_PGI 0x10000000 #define GL_TEXCOORD2_BIT_PGI 0x20000000 #define GL_TEXCOORD3_BIT_PGI 0x40000000 #define GL_TEXCOORD4_BIT_PGI 0x80000000 #define GLEW_PGI_vertex_hints GLEW_GET_VAR(__GLEW_PGI_vertex_hints) #endif /* GL_PGI_vertex_hints */ /* ------------------------- GL_REGAL_error_string ------------------------- */ #ifndef GL_REGAL_error_string #define GL_REGAL_error_string 1 typedef const GLchar *(GLAPIENTRY * PFNGLERRORSTRINGREGALPROC)(GLenum error); #define glErrorStringREGAL GLEW_GET_FUN(__glewErrorStringREGAL) #define GLEW_REGAL_error_string GLEW_GET_VAR(__GLEW_REGAL_error_string) #endif /* GL_REGAL_error_string */ /* ------------------------ GL_REGAL_extension_query ----------------------- */ #ifndef GL_REGAL_extension_query #define GL_REGAL_extension_query 1 typedef GLboolean(GLAPIENTRY * PFNGLGETEXTENSIONREGALPROC)(const GLchar * ext); typedef GLboolean(GLAPIENTRY * PFNGLISSUPPORTEDREGALPROC)(const GLchar * ext); #define glGetExtensionREGAL GLEW_GET_FUN(__glewGetExtensionREGAL) #define glIsSupportedREGAL GLEW_GET_FUN(__glewIsSupportedREGAL) #define GLEW_REGAL_extension_query GLEW_GET_VAR(__GLEW_REGAL_extension_query) #endif /* GL_REGAL_extension_query */ /* ------------------------------ GL_REGAL_log ----------------------------- */ #ifndef GL_REGAL_log #define GL_REGAL_log 1 #define GL_LOG_ERROR_REGAL 0x9319 #define GL_LOG_WARNING_REGAL 0x931A #define GL_LOG_INFO_REGAL 0x931B #define GL_LOG_APP_REGAL 0x931C #define GL_LOG_DRIVER_REGAL 0x931D #define GL_LOG_INTERNAL_REGAL 0x931E #define GL_LOG_DEBUG_REGAL 0x931F #define GL_LOG_STATUS_REGAL 0x9320 #define GL_LOG_HTTP_REGAL 0x9321 #define GLEW_REGAL_log GLEW_GET_VAR(__GLEW_REGAL_log) #endif /* GL_REGAL_log */ /* ----------------------- GL_REND_screen_coordinates ---------------------- */ #ifndef GL_REND_screen_coordinates #define GL_REND_screen_coordinates 1 #define GL_SCREEN_COORDINATES_REND 0x8490 #define GL_INVERTED_SCREEN_W_REND 0x8491 #define GLEW_REND_screen_coordinates GLEW_GET_VAR(__GLEW_REND_screen_coordinates) #endif /* GL_REND_screen_coordinates */ /* ------------------------------- GL_S3_s3tc ------------------------------ */ #ifndef GL_S3_s3tc #define GL_S3_s3tc 1 #define GL_RGB_S3TC 0x83A0 #define GL_RGB4_S3TC 0x83A1 #define GL_RGBA_S3TC 0x83A2 #define GL_RGBA4_S3TC 0x83A3 #define GL_RGBA_DXT5_S3TC 0x83A4 #define GL_RGBA4_DXT5_S3TC 0x83A5 #define GLEW_S3_s3tc GLEW_GET_VAR(__GLEW_S3_s3tc) #endif /* GL_S3_s3tc */ /* -------------------------- GL_SGIS_color_range -------------------------- */ #ifndef GL_SGIS_color_range #define GL_SGIS_color_range 1 #define GL_EXTENDED_RANGE_SGIS 0x85A5 #define GL_MIN_RED_SGIS 0x85A6 #define GL_MAX_RED_SGIS 0x85A7 #define GL_MIN_GREEN_SGIS 0x85A8 #define GL_MAX_GREEN_SGIS 0x85A9 #define GL_MIN_BLUE_SGIS 0x85AA #define GL_MAX_BLUE_SGIS 0x85AB #define GL_MIN_ALPHA_SGIS 0x85AC #define GL_MAX_ALPHA_SGIS 0x85AD #define GLEW_SGIS_color_range GLEW_GET_VAR(__GLEW_SGIS_color_range) #endif /* GL_SGIS_color_range */ /* ------------------------- GL_SGIS_detail_texture ------------------------ */ #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 typedef void(GLAPIENTRY * PFNGLDETAILTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); typedef void(GLAPIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC)(GLenum target, GLfloat * points); #define glDetailTexFuncSGIS GLEW_GET_FUN(__glewDetailTexFuncSGIS) #define glGetDetailTexFuncSGIS GLEW_GET_FUN(__glewGetDetailTexFuncSGIS) #define GLEW_SGIS_detail_texture GLEW_GET_VAR(__GLEW_SGIS_detail_texture) #endif /* GL_SGIS_detail_texture */ /* -------------------------- GL_SGIS_fog_function ------------------------- */ #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 typedef void(GLAPIENTRY * PFNGLFOGFUNCSGISPROC)(GLsizei n, const GLfloat * points); typedef void(GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC)(GLfloat * points); #define glFogFuncSGIS GLEW_GET_FUN(__glewFogFuncSGIS) #define glGetFogFuncSGIS GLEW_GET_FUN(__glewGetFogFuncSGIS) #define GLEW_SGIS_fog_function GLEW_GET_VAR(__GLEW_SGIS_fog_function) #endif /* GL_SGIS_fog_function */ /* ------------------------ GL_SGIS_generate_mipmap ------------------------ */ #ifndef GL_SGIS_generate_mipmap #define GL_SGIS_generate_mipmap 1 #define GL_GENERATE_MIPMAP_SGIS 0x8191 #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 #define GLEW_SGIS_generate_mipmap GLEW_GET_VAR(__GLEW_SGIS_generate_mipmap) #endif /* GL_SGIS_generate_mipmap */ /* -------------------------- GL_SGIS_multisample -------------------------- */ #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #define GL_MULTISAMPLE_SGIS 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F #define GL_SAMPLE_MASK_SGIS 0x80A0 #define GL_1PASS_SGIS 0x80A1 #define GL_2PASS_0_SGIS 0x80A2 #define GL_2PASS_1_SGIS 0x80A3 #define GL_4PASS_0_SGIS 0x80A4 #define GL_4PASS_1_SGIS 0x80A5 #define GL_4PASS_2_SGIS 0x80A6 #define GL_4PASS_3_SGIS 0x80A7 #define GL_SAMPLE_BUFFERS_SGIS 0x80A8 #define GL_SAMPLES_SGIS 0x80A9 #define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA #define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB #define GL_SAMPLE_PATTERN_SGIS 0x80AC typedef void(GLAPIENTRY * PFNGLSAMPLEMASKSGISPROC)(GLclampf value, GLboolean invert); typedef void(GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC)(GLenum pattern); #define glSampleMaskSGIS GLEW_GET_FUN(__glewSampleMaskSGIS) #define glSamplePatternSGIS GLEW_GET_FUN(__glewSamplePatternSGIS) #define GLEW_SGIS_multisample GLEW_GET_VAR(__GLEW_SGIS_multisample) #endif /* GL_SGIS_multisample */ /* ------------------------- GL_SGIS_pixel_texture ------------------------- */ #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #define GLEW_SGIS_pixel_texture GLEW_GET_VAR(__GLEW_SGIS_pixel_texture) #endif /* GL_SGIS_pixel_texture */ /* ----------------------- GL_SGIS_point_line_texgen ----------------------- */ #ifndef GL_SGIS_point_line_texgen #define GL_SGIS_point_line_texgen 1 #define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 #define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 #define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 #define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 #define GL_EYE_POINT_SGIS 0x81F4 #define GL_OBJECT_POINT_SGIS 0x81F5 #define GL_EYE_LINE_SGIS 0x81F6 #define GL_OBJECT_LINE_SGIS 0x81F7 #define GLEW_SGIS_point_line_texgen GLEW_GET_VAR(__GLEW_SGIS_point_line_texgen) #endif /* GL_SGIS_point_line_texgen */ /* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 typedef void(GLAPIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC)(GLenum target, GLfloat * points); typedef void(GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); #define glGetSharpenTexFuncSGIS GLEW_GET_FUN(__glewGetSharpenTexFuncSGIS) #define glSharpenTexFuncSGIS GLEW_GET_FUN(__glewSharpenTexFuncSGIS) #define GLEW_SGIS_sharpen_texture GLEW_GET_VAR(__GLEW_SGIS_sharpen_texture) #endif /* GL_SGIS_sharpen_texture */ /* --------------------------- GL_SGIS_texture4D --------------------------- */ #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 typedef void(GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const void * pixels); typedef void(GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const void * pixels); #define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS) #define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS) #define GLEW_SGIS_texture4D GLEW_GET_VAR(__GLEW_SGIS_texture4D) #endif /* GL_SGIS_texture4D */ /* ---------------------- GL_SGIS_texture_border_clamp --------------------- */ #ifndef GL_SGIS_texture_border_clamp #define GL_SGIS_texture_border_clamp 1 #define GL_CLAMP_TO_BORDER_SGIS 0x812D #define GLEW_SGIS_texture_border_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_border_clamp) #endif /* GL_SGIS_texture_border_clamp */ /* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */ #ifndef GL_SGIS_texture_edge_clamp #define GL_SGIS_texture_edge_clamp 1 #define GL_CLAMP_TO_EDGE_SGIS 0x812F #define GLEW_SGIS_texture_edge_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_edge_clamp) #endif /* GL_SGIS_texture_edge_clamp */ /* ------------------------ GL_SGIS_texture_filter4 ------------------------ */ #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 typedef void(GLAPIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLfloat * weights); typedef void(GLAPIENTRY * PFNGLTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); #define glGetTexFilterFuncSGIS GLEW_GET_FUN(__glewGetTexFilterFuncSGIS) #define glTexFilterFuncSGIS GLEW_GET_FUN(__glewTexFilterFuncSGIS) #define GLEW_SGIS_texture_filter4 GLEW_GET_VAR(__GLEW_SGIS_texture_filter4) #endif /* GL_SGIS_texture_filter4 */ /* -------------------------- GL_SGIS_texture_lod -------------------------- */ #ifndef GL_SGIS_texture_lod #define GL_SGIS_texture_lod 1 #define GL_TEXTURE_MIN_LOD_SGIS 0x813A #define GL_TEXTURE_MAX_LOD_SGIS 0x813B #define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C #define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D #define GLEW_SGIS_texture_lod GLEW_GET_VAR(__GLEW_SGIS_texture_lod) #endif /* GL_SGIS_texture_lod */ /* ------------------------- GL_SGIS_texture_select ------------------------ */ #ifndef GL_SGIS_texture_select #define GL_SGIS_texture_select 1 #define GLEW_SGIS_texture_select GLEW_GET_VAR(__GLEW_SGIS_texture_select) #endif /* GL_SGIS_texture_select */ /* ----------------------------- GL_SGIX_async ----------------------------- */ #ifndef GL_SGIX_async #define GL_SGIX_async 1 #define GL_ASYNC_MARKER_SGIX 0x8329 typedef void(GLAPIENTRY * PFNGLASYNCMARKERSGIXPROC)(GLuint marker); typedef void(GLAPIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC)(GLuint marker, GLsizei range); typedef GLint(GLAPIENTRY * PFNGLFINISHASYNCSGIXPROC)(GLuint * markerp); typedef GLuint(GLAPIENTRY * PFNGLGENASYNCMARKERSSGIXPROC)(GLsizei range); typedef GLboolean(GLAPIENTRY * PFNGLISASYNCMARKERSGIXPROC)(GLuint marker); typedef GLint(GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC)(GLuint * markerp); #define glAsyncMarkerSGIX GLEW_GET_FUN(__glewAsyncMarkerSGIX) #define glDeleteAsyncMarkersSGIX GLEW_GET_FUN(__glewDeleteAsyncMarkersSGIX) #define glFinishAsyncSGIX GLEW_GET_FUN(__glewFinishAsyncSGIX) #define glGenAsyncMarkersSGIX GLEW_GET_FUN(__glewGenAsyncMarkersSGIX) #define glIsAsyncMarkerSGIX GLEW_GET_FUN(__glewIsAsyncMarkerSGIX) #define glPollAsyncSGIX GLEW_GET_FUN(__glewPollAsyncSGIX) #define GLEW_SGIX_async GLEW_GET_VAR(__GLEW_SGIX_async) #endif /* GL_SGIX_async */ /* ------------------------ GL_SGIX_async_histogram ------------------------ */ #ifndef GL_SGIX_async_histogram #define GL_SGIX_async_histogram 1 #define GL_ASYNC_HISTOGRAM_SGIX 0x832C #define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D #define GLEW_SGIX_async_histogram GLEW_GET_VAR(__GLEW_SGIX_async_histogram) #endif /* GL_SGIX_async_histogram */ /* -------------------------- GL_SGIX_async_pixel -------------------------- */ #ifndef GL_SGIX_async_pixel #define GL_SGIX_async_pixel 1 #define GL_ASYNC_TEX_IMAGE_SGIX 0x835C #define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D #define GL_ASYNC_READ_PIXELS_SGIX 0x835E #define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F #define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 #define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 #define GLEW_SGIX_async_pixel GLEW_GET_VAR(__GLEW_SGIX_async_pixel) #endif /* GL_SGIX_async_pixel */ /* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ #ifndef GL_SGIX_blend_alpha_minmax #define GL_SGIX_blend_alpha_minmax 1 #define GL_ALPHA_MIN_SGIX 0x8320 #define GL_ALPHA_MAX_SGIX 0x8321 #define GLEW_SGIX_blend_alpha_minmax GLEW_GET_VAR(__GLEW_SGIX_blend_alpha_minmax) #endif /* GL_SGIX_blend_alpha_minmax */ /* ---------------------------- GL_SGIX_clipmap ---------------------------- */ #ifndef GL_SGIX_clipmap #define GL_SGIX_clipmap 1 #define GLEW_SGIX_clipmap GLEW_GET_VAR(__GLEW_SGIX_clipmap) #endif /* GL_SGIX_clipmap */ /* ---------------------- GL_SGIX_convolution_accuracy --------------------- */ #ifndef GL_SGIX_convolution_accuracy #define GL_SGIX_convolution_accuracy 1 #define GL_CONVOLUTION_HINT_SGIX 0x8316 #define GLEW_SGIX_convolution_accuracy GLEW_GET_VAR(__GLEW_SGIX_convolution_accuracy) #endif /* GL_SGIX_convolution_accuracy */ /* ------------------------- GL_SGIX_depth_texture ------------------------- */ #ifndef GL_SGIX_depth_texture #define GL_SGIX_depth_texture 1 #define GL_DEPTH_COMPONENT16_SGIX 0x81A5 #define GL_DEPTH_COMPONENT24_SGIX 0x81A6 #define GL_DEPTH_COMPONENT32_SGIX 0x81A7 #define GLEW_SGIX_depth_texture GLEW_GET_VAR(__GLEW_SGIX_depth_texture) #endif /* GL_SGIX_depth_texture */ /* -------------------------- GL_SGIX_flush_raster ------------------------- */ #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 typedef void(GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC)(void); #define glFlushRasterSGIX GLEW_GET_FUN(__glewFlushRasterSGIX) #define GLEW_SGIX_flush_raster GLEW_GET_VAR(__GLEW_SGIX_flush_raster) #endif /* GL_SGIX_flush_raster */ /* --------------------------- GL_SGIX_fog_offset -------------------------- */ #ifndef GL_SGIX_fog_offset #define GL_SGIX_fog_offset 1 #define GL_FOG_OFFSET_SGIX 0x8198 #define GL_FOG_OFFSET_VALUE_SGIX 0x8199 #define GLEW_SGIX_fog_offset GLEW_GET_VAR(__GLEW_SGIX_fog_offset) #endif /* GL_SGIX_fog_offset */ /* -------------------------- GL_SGIX_fog_texture -------------------------- */ #ifndef GL_SGIX_fog_texture #define GL_SGIX_fog_texture 1 #define GL_TEXTURE_FOG_SGIX 0 #define GL_FOG_PATCHY_FACTOR_SGIX 0 #define GL_FRAGMENT_FOG_SGIX 0 typedef void(GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC)(GLenum pname); #define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX) #define GLEW_SGIX_fog_texture GLEW_GET_VAR(__GLEW_SGIX_fog_texture) #endif /* GL_SGIX_fog_texture */ /* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ #ifndef GL_SGIX_fragment_specular_lighting #define GL_SGIX_fragment_specular_lighting 1 typedef void(GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC)(GLenum face, GLenum mode); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC)(GLenum light, GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC)(GLenum light, GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC)(GLenum face, GLenum pname, const GLfloat param); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC)(GLenum face, GLenum pname, const GLint param); typedef void(GLAPIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum value, GLfloat * data); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum value, GLint * data); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, const GLfloat * data); typedef void(GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, const GLint * data); #define glFragmentColorMaterialSGIX GLEW_GET_FUN(__glewFragmentColorMaterialSGIX) #define glFragmentLightModelfSGIX GLEW_GET_FUN(__glewFragmentLightModelfSGIX) #define glFragmentLightModelfvSGIX GLEW_GET_FUN(__glewFragmentLightModelfvSGIX) #define glFragmentLightModeliSGIX GLEW_GET_FUN(__glewFragmentLightModeliSGIX) #define glFragmentLightModelivSGIX GLEW_GET_FUN(__glewFragmentLightModelivSGIX) #define glFragmentLightfSGIX GLEW_GET_FUN(__glewFragmentLightfSGIX) #define glFragmentLightfvSGIX GLEW_GET_FUN(__glewFragmentLightfvSGIX) #define glFragmentLightiSGIX GLEW_GET_FUN(__glewFragmentLightiSGIX) #define glFragmentLightivSGIX GLEW_GET_FUN(__glewFragmentLightivSGIX) #define glFragmentMaterialfSGIX GLEW_GET_FUN(__glewFragmentMaterialfSGIX) #define glFragmentMaterialfvSGIX GLEW_GET_FUN(__glewFragmentMaterialfvSGIX) #define glFragmentMaterialiSGIX GLEW_GET_FUN(__glewFragmentMaterialiSGIX) #define glFragmentMaterialivSGIX GLEW_GET_FUN(__glewFragmentMaterialivSGIX) #define glGetFragmentLightfvSGIX GLEW_GET_FUN(__glewGetFragmentLightfvSGIX) #define glGetFragmentLightivSGIX GLEW_GET_FUN(__glewGetFragmentLightivSGIX) #define glGetFragmentMaterialfvSGIX GLEW_GET_FUN(__glewGetFragmentMaterialfvSGIX) #define glGetFragmentMaterialivSGIX GLEW_GET_FUN(__glewGetFragmentMaterialivSGIX) #define GLEW_SGIX_fragment_specular_lighting GLEW_GET_VAR(__GLEW_SGIX_fragment_specular_lighting) #endif /* GL_SGIX_fragment_specular_lighting */ /* --------------------------- GL_SGIX_framezoom --------------------------- */ #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 typedef void(GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC)(GLint factor); #define glFrameZoomSGIX GLEW_GET_FUN(__glewFrameZoomSGIX) #define GLEW_SGIX_framezoom GLEW_GET_VAR(__GLEW_SGIX_framezoom) #endif /* GL_SGIX_framezoom */ /* --------------------------- GL_SGIX_interlace --------------------------- */ #ifndef GL_SGIX_interlace #define GL_SGIX_interlace 1 #define GL_INTERLACE_SGIX 0x8094 #define GLEW_SGIX_interlace GLEW_GET_VAR(__GLEW_SGIX_interlace) #endif /* GL_SGIX_interlace */ /* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */ #ifndef GL_SGIX_ir_instrument1 #define GL_SGIX_ir_instrument1 1 #define GLEW_SGIX_ir_instrument1 GLEW_GET_VAR(__GLEW_SGIX_ir_instrument1) #endif /* GL_SGIX_ir_instrument1 */ /* ------------------------- GL_SGIX_list_priority ------------------------- */ #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #define GLEW_SGIX_list_priority GLEW_GET_VAR(__GLEW_SGIX_list_priority) #endif /* GL_SGIX_list_priority */ /* ------------------------- GL_SGIX_pixel_texture ------------------------- */ #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 typedef void(GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC)(GLenum mode); #define glPixelTexGenSGIX GLEW_GET_FUN(__glewPixelTexGenSGIX) #define GLEW_SGIX_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_pixel_texture) #endif /* GL_SGIX_pixel_texture */ /* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */ #ifndef GL_SGIX_pixel_texture_bits #define GL_SGIX_pixel_texture_bits 1 #define GLEW_SGIX_pixel_texture_bits GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_bits) #endif /* GL_SGIX_pixel_texture_bits */ /* ------------------------ GL_SGIX_reference_plane ------------------------ */ #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 typedef void(GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC)(const GLdouble * equation); #define glReferencePlaneSGIX GLEW_GET_FUN(__glewReferencePlaneSGIX) #define GLEW_SGIX_reference_plane GLEW_GET_VAR(__GLEW_SGIX_reference_plane) #endif /* GL_SGIX_reference_plane */ /* ---------------------------- GL_SGIX_resample --------------------------- */ #ifndef GL_SGIX_resample #define GL_SGIX_resample 1 #define GL_PACK_RESAMPLE_SGIX 0x842E #define GL_UNPACK_RESAMPLE_SGIX 0x842F #define GL_RESAMPLE_DECIMATE_SGIX 0x8430 #define GL_RESAMPLE_REPLICATE_SGIX 0x8433 #define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 #define GLEW_SGIX_resample GLEW_GET_VAR(__GLEW_SGIX_resample) #endif /* GL_SGIX_resample */ /* ----------------------------- GL_SGIX_shadow ---------------------------- */ #ifndef GL_SGIX_shadow #define GL_SGIX_shadow 1 #define GL_TEXTURE_COMPARE_SGIX 0x819A #define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B #define GL_TEXTURE_LEQUAL_R_SGIX 0x819C #define GL_TEXTURE_GEQUAL_R_SGIX 0x819D #define GLEW_SGIX_shadow GLEW_GET_VAR(__GLEW_SGIX_shadow) #endif /* GL_SGIX_shadow */ /* ------------------------- GL_SGIX_shadow_ambient ------------------------ */ #ifndef GL_SGIX_shadow_ambient #define GL_SGIX_shadow_ambient 1 #define GL_SHADOW_AMBIENT_SGIX 0x80BF #define GLEW_SGIX_shadow_ambient GLEW_GET_VAR(__GLEW_SGIX_shadow_ambient) #endif /* GL_SGIX_shadow_ambient */ /* ----------------------------- GL_SGIX_sprite ---------------------------- */ #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 typedef void(GLAPIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC)(GLenum pname, GLfloat param); typedef void(GLAPIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC)(GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLSPRITEPARAMETERISGIXPROC)(GLenum pname, GLint param); typedef void(GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC)(GLenum pname, GLint * params); #define glSpriteParameterfSGIX GLEW_GET_FUN(__glewSpriteParameterfSGIX) #define glSpriteParameterfvSGIX GLEW_GET_FUN(__glewSpriteParameterfvSGIX) #define glSpriteParameteriSGIX GLEW_GET_FUN(__glewSpriteParameteriSGIX) #define glSpriteParameterivSGIX GLEW_GET_FUN(__glewSpriteParameterivSGIX) #define GLEW_SGIX_sprite GLEW_GET_VAR(__GLEW_SGIX_sprite) #endif /* GL_SGIX_sprite */ /* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 typedef void(GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC)(void); #define glTagSampleBufferSGIX GLEW_GET_FUN(__glewTagSampleBufferSGIX) #define GLEW_SGIX_tag_sample_buffer GLEW_GET_VAR(__GLEW_SGIX_tag_sample_buffer) #endif /* GL_SGIX_tag_sample_buffer */ /* ------------------------ GL_SGIX_texture_add_env ------------------------ */ #ifndef GL_SGIX_texture_add_env #define GL_SGIX_texture_add_env 1 #define GLEW_SGIX_texture_add_env GLEW_GET_VAR(__GLEW_SGIX_texture_add_env) #endif /* GL_SGIX_texture_add_env */ /* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */ #ifndef GL_SGIX_texture_coordinate_clamp #define GL_SGIX_texture_coordinate_clamp 1 #define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 #define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A #define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B #define GLEW_SGIX_texture_coordinate_clamp GLEW_GET_VAR(__GLEW_SGIX_texture_coordinate_clamp) #endif /* GL_SGIX_texture_coordinate_clamp */ /* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */ #ifndef GL_SGIX_texture_lod_bias #define GL_SGIX_texture_lod_bias 1 #define GLEW_SGIX_texture_lod_bias GLEW_GET_VAR(__GLEW_SGIX_texture_lod_bias) #endif /* GL_SGIX_texture_lod_bias */ /* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ #ifndef GL_SGIX_texture_multi_buffer #define GL_SGIX_texture_multi_buffer 1 #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #define GLEW_SGIX_texture_multi_buffer GLEW_GET_VAR(__GLEW_SGIX_texture_multi_buffer) #endif /* GL_SGIX_texture_multi_buffer */ /* ------------------------- GL_SGIX_texture_range ------------------------- */ #ifndef GL_SGIX_texture_range #define GL_SGIX_texture_range 1 #define GL_RGB_SIGNED_SGIX 0x85E0 #define GL_RGBA_SIGNED_SGIX 0x85E1 #define GL_ALPHA_SIGNED_SGIX 0x85E2 #define GL_LUMINANCE_SIGNED_SGIX 0x85E3 #define GL_INTENSITY_SIGNED_SGIX 0x85E4 #define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 #define GL_RGB16_SIGNED_SGIX 0x85E6 #define GL_RGBA16_SIGNED_SGIX 0x85E7 #define GL_ALPHA16_SIGNED_SGIX 0x85E8 #define GL_LUMINANCE16_SIGNED_SGIX 0x85E9 #define GL_INTENSITY16_SIGNED_SGIX 0x85EA #define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB #define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC #define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED #define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE #define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF #define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 #define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 #define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 #define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 #define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 #define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 #define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 #define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 #define GL_MIN_LUMINANCE_SGIS 0x85F8 #define GL_MAX_LUMINANCE_SGIS 0x85F9 #define GL_MIN_INTENSITY_SGIS 0x85FA #define GL_MAX_INTENSITY_SGIS 0x85FB #define GLEW_SGIX_texture_range GLEW_GET_VAR(__GLEW_SGIX_texture_range) #endif /* GL_SGIX_texture_range */ /* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */ #ifndef GL_SGIX_texture_scale_bias #define GL_SGIX_texture_scale_bias 1 #define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 #define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A #define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B #define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C #define GLEW_SGIX_texture_scale_bias GLEW_GET_VAR(__GLEW_SGIX_texture_scale_bias) #endif /* GL_SGIX_texture_scale_bias */ /* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ #ifndef GL_SGIX_vertex_preclip #define GL_SGIX_vertex_preclip 1 #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #define GLEW_SGIX_vertex_preclip GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip) #endif /* GL_SGIX_vertex_preclip */ /* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */ #ifndef GL_SGIX_vertex_preclip_hint #define GL_SGIX_vertex_preclip_hint 1 #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #define GLEW_SGIX_vertex_preclip_hint GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip_hint) #endif /* GL_SGIX_vertex_preclip_hint */ /* ----------------------------- GL_SGIX_ycrcb ----------------------------- */ #ifndef GL_SGIX_ycrcb #define GL_SGIX_ycrcb 1 #define GLEW_SGIX_ycrcb GLEW_GET_VAR(__GLEW_SGIX_ycrcb) #endif /* GL_SGIX_ycrcb */ /* -------------------------- GL_SGI_color_matrix -------------------------- */ #ifndef GL_SGI_color_matrix #define GL_SGI_color_matrix 1 #define GL_COLOR_MATRIX_SGI 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB #define GLEW_SGI_color_matrix GLEW_GET_VAR(__GLEW_SGI_color_matrix) #endif /* GL_SGI_color_matrix */ /* --------------------------- GL_SGI_color_table -------------------------- */ #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #define GL_COLOR_TABLE_SGI 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 #define GL_PROXY_COLOR_TABLE_SGI 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 #define GL_COLOR_TABLE_SCALE_SGI 0x80D6 #define GL_COLOR_TABLE_BIAS_SGI 0x80D7 #define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 #define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF typedef void(GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, const GLfloat * params); typedef void(GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, const GLint * params); typedef void(GLAPIENTRY * PFNGLCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); typedef void(GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, GLfloat * params); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, GLint * params); typedef void(GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC)(GLenum target, GLenum format, GLenum type, void * table); #define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI) #define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI) #define glColorTableSGI GLEW_GET_FUN(__glewColorTableSGI) #define glCopyColorTableSGI GLEW_GET_FUN(__glewCopyColorTableSGI) #define glGetColorTableParameterfvSGI GLEW_GET_FUN(__glewGetColorTableParameterfvSGI) #define glGetColorTableParameterivSGI GLEW_GET_FUN(__glewGetColorTableParameterivSGI) #define glGetColorTableSGI GLEW_GET_FUN(__glewGetColorTableSGI) #define GLEW_SGI_color_table GLEW_GET_VAR(__GLEW_SGI_color_table) #endif /* GL_SGI_color_table */ /* ----------------------- GL_SGI_texture_color_table ---------------------- */ #ifndef GL_SGI_texture_color_table #define GL_SGI_texture_color_table 1 #define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC #define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD #define GLEW_SGI_texture_color_table GLEW_GET_VAR(__GLEW_SGI_texture_color_table) #endif /* GL_SGI_texture_color_table */ /* ------------------------- GL_SUNX_constant_data ------------------------- */ #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 #define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 typedef void(GLAPIENTRY * PFNGLFINISHTEXTURESUNXPROC)(void); #define glFinishTextureSUNX GLEW_GET_FUN(__glewFinishTextureSUNX) #define GLEW_SUNX_constant_data GLEW_GET_VAR(__GLEW_SUNX_constant_data) #endif /* GL_SUNX_constant_data */ /* -------------------- GL_SUN_convolution_border_modes -------------------- */ #ifndef GL_SUN_convolution_border_modes #define GL_SUN_convolution_border_modes 1 #define GL_WRAP_BORDER_SUN 0x81D4 #define GLEW_SUN_convolution_border_modes GLEW_GET_VAR(__GLEW_SUN_convolution_border_modes) #endif /* GL_SUN_convolution_border_modes */ /* -------------------------- GL_SUN_global_alpha -------------------------- */ #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #define GL_GLOBAL_ALPHA_SUN 0x81D9 #define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC)(GLbyte factor); typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC)(GLdouble factor); typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC)(GLfloat factor); typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC)(GLint factor); typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC)(GLshort factor); typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC)(GLubyte factor); typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC)(GLuint factor); typedef void(GLAPIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC)(GLushort factor); #define glGlobalAlphaFactorbSUN GLEW_GET_FUN(__glewGlobalAlphaFactorbSUN) #define glGlobalAlphaFactordSUN GLEW_GET_FUN(__glewGlobalAlphaFactordSUN) #define glGlobalAlphaFactorfSUN GLEW_GET_FUN(__glewGlobalAlphaFactorfSUN) #define glGlobalAlphaFactoriSUN GLEW_GET_FUN(__glewGlobalAlphaFactoriSUN) #define glGlobalAlphaFactorsSUN GLEW_GET_FUN(__glewGlobalAlphaFactorsSUN) #define glGlobalAlphaFactorubSUN GLEW_GET_FUN(__glewGlobalAlphaFactorubSUN) #define glGlobalAlphaFactoruiSUN GLEW_GET_FUN(__glewGlobalAlphaFactoruiSUN) #define glGlobalAlphaFactorusSUN GLEW_GET_FUN(__glewGlobalAlphaFactorusSUN) #define GLEW_SUN_global_alpha GLEW_GET_VAR(__GLEW_SUN_global_alpha) #endif /* GL_SUN_global_alpha */ /* --------------------------- GL_SUN_mesh_array --------------------------- */ #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #define GL_QUAD_MESH_SUN 0x8614 #define GL_TRIANGLE_MESH_SUN 0x8615 #define GLEW_SUN_mesh_array GLEW_GET_VAR(__GLEW_SUN_mesh_array) #endif /* GL_SUN_mesh_array */ /* ------------------------ GL_SUN_read_video_pixels ----------------------- */ #ifndef GL_SUN_read_video_pixels #define GL_SUN_read_video_pixels 1 typedef void(GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels); #define glReadVideoPixelsSUN GLEW_GET_FUN(__glewReadVideoPixelsSUN) #define GLEW_SUN_read_video_pixels GLEW_GET_VAR(__GLEW_SUN_read_video_pixels) #endif /* GL_SUN_read_video_pixels */ /* --------------------------- GL_SUN_slice_accum -------------------------- */ #ifndef GL_SUN_slice_accum #define GL_SUN_slice_accum 1 #define GL_SLICE_ACCUM_SUN 0x85CC #define GLEW_SUN_slice_accum GLEW_GET_VAR(__GLEW_SUN_slice_accum) #endif /* GL_SUN_slice_accum */ /* -------------------------- GL_SUN_triangle_list ------------------------- */ #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #define GL_RESTART_SUN 0x01 #define GL_REPLACE_MIDDLE_SUN 0x02 #define GL_REPLACE_OLDEST_SUN 0x03 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 #define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 #define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 #define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 #define GL_R1UI_V3F_SUN 0x85C4 #define GL_R1UI_C4UB_V3F_SUN 0x85C5 #define GL_R1UI_C3F_V3F_SUN 0x85C6 #define GL_R1UI_N3F_V3F_SUN 0x85C7 #define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 #define GL_R1UI_T2F_V3F_SUN 0x85C9 #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC)(GLenum type, GLsizei stride, const void * pointer); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC)(GLubyte code); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC)(const GLubyte * code); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC)(GLuint code); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC)(const GLuint * code); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC)(GLushort code); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC)(const GLushort * code); #define glReplacementCodePointerSUN GLEW_GET_FUN(__glewReplacementCodePointerSUN) #define glReplacementCodeubSUN GLEW_GET_FUN(__glewReplacementCodeubSUN) #define glReplacementCodeubvSUN GLEW_GET_FUN(__glewReplacementCodeubvSUN) #define glReplacementCodeuiSUN GLEW_GET_FUN(__glewReplacementCodeuiSUN) #define glReplacementCodeuivSUN GLEW_GET_FUN(__glewReplacementCodeuivSUN) #define glReplacementCodeusSUN GLEW_GET_FUN(__glewReplacementCodeusSUN) #define glReplacementCodeusvSUN GLEW_GET_FUN(__glewReplacementCodeusvSUN) #define GLEW_SUN_triangle_list GLEW_GET_VAR(__GLEW_SUN_triangle_list) #endif /* GL_SUN_triangle_list */ /* ----------------------------- GL_SUN_vertex ----------------------------- */ #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 typedef void(GLAPIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); typedef void(GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC)(const GLubyte * c, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC)(const GLubyte * c, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC)(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)(const GLuint * rc, const GLubyte * c, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)(GLuint rc, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)(const GLfloat * tc, const GLubyte * c, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void(GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); typedef void(GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void(GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * v); #define glColor3fVertex3fSUN GLEW_GET_FUN(__glewColor3fVertex3fSUN) #define glColor3fVertex3fvSUN GLEW_GET_FUN(__glewColor3fVertex3fvSUN) #define glColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fSUN) #define glColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fvSUN) #define glColor4ubVertex2fSUN GLEW_GET_FUN(__glewColor4ubVertex2fSUN) #define glColor4ubVertex2fvSUN GLEW_GET_FUN(__glewColor4ubVertex2fvSUN) #define glColor4ubVertex3fSUN GLEW_GET_FUN(__glewColor4ubVertex3fSUN) #define glColor4ubVertex3fvSUN GLEW_GET_FUN(__glewColor4ubVertex3fvSUN) #define glNormal3fVertex3fSUN GLEW_GET_FUN(__glewNormal3fVertex3fSUN) #define glNormal3fVertex3fvSUN GLEW_GET_FUN(__glewNormal3fVertex3fvSUN) #define glReplacementCodeuiColor3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fSUN) #define glReplacementCodeuiColor3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fvSUN) #define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fSUN) #define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fvSUN) #define glReplacementCodeuiColor4ubVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fSUN) #define glReplacementCodeuiColor4ubVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fvSUN) #define glReplacementCodeuiNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fSUN) #define glReplacementCodeuiNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fvSUN) #define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) #define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) #define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) #define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) #define glReplacementCodeuiTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fSUN) #define glReplacementCodeuiTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fvSUN) #define glReplacementCodeuiVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fSUN) #define glReplacementCodeuiVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fvSUN) #define glTexCoord2fColor3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fSUN) #define glTexCoord2fColor3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fvSUN) #define glTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fSUN) #define glTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fvSUN) #define glTexCoord2fColor4ubVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fSUN) #define glTexCoord2fColor4ubVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fvSUN) #define glTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fSUN) #define glTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fvSUN) #define glTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fSUN) #define glTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fvSUN) #define glTexCoord4fColor4fNormal3fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fSUN) #define glTexCoord4fColor4fNormal3fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fvSUN) #define glTexCoord4fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fSUN) #define glTexCoord4fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fvSUN) #define GLEW_SUN_vertex GLEW_GET_VAR(__GLEW_SUN_vertex) #endif /* GL_SUN_vertex */ /* -------------------------- GL_WIN_phong_shading ------------------------- */ #ifndef GL_WIN_phong_shading #define GL_WIN_phong_shading 1 #define GL_PHONG_WIN 0x80EA #define GL_PHONG_HINT_WIN 0x80EB #define GLEW_WIN_phong_shading GLEW_GET_VAR(__GLEW_WIN_phong_shading) #endif /* GL_WIN_phong_shading */ /* -------------------------- GL_WIN_specular_fog -------------------------- */ #ifndef GL_WIN_specular_fog #define GL_WIN_specular_fog 1 #define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC #define GLEW_WIN_specular_fog GLEW_GET_VAR(__GLEW_WIN_specular_fog) #endif /* GL_WIN_specular_fog */ /* ---------------------------- GL_WIN_swap_hint --------------------------- */ #ifndef GL_WIN_swap_hint #define GL_WIN_swap_hint 1 typedef void(GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC)(GLint x, GLint y, GLsizei width, GLsizei height); #define glAddSwapHintRectWIN GLEW_GET_FUN(__glewAddSwapHintRectWIN) #define GLEW_WIN_swap_hint GLEW_GET_VAR(__GLEW_WIN_swap_hint) #endif /* GL_WIN_swap_hint */ /* ------------------------------------------------------------------------- */ #if defined(GLEW_MX) && defined(_WIN32) #define GLEW_FUN_EXPORT #else #define GLEW_FUN_EXPORT GLEWAPI #endif /* GLEW_MX */ #if defined(GLEW_MX) #define GLEW_VAR_EXPORT #else #define GLEW_VAR_EXPORT GLEWAPI #endif /* GLEW_MX */ #if defined(GLEW_MX) && defined(_WIN32) struct GLEWContextStruct { #endif /* GLEW_MX */ GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements; GLEW_FUN_EXPORT PFNGLTEXIMAGE3DPROC __glewTexImage3D; GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D; GLEW_FUN_EXPORT PFNGLACTIVETEXTUREPROC __glewActiveTexture; GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D; GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage; GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd; GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf; GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd; GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv; GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage; GLEW_FUN_EXPORT PFNGLBLENDCOLORPROC __glewBlendColor; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONPROC __glewBlendEquation; GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate; GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer; GLEW_FUN_EXPORT PFNGLFOGCOORDDPROC __glewFogCoordd; GLEW_FUN_EXPORT PFNGLFOGCOORDDVPROC __glewFogCoorddv; GLEW_FUN_EXPORT PFNGLFOGCOORDFPROC __glewFogCoordf; GLEW_FUN_EXPORT PFNGLFOGCOORDFVPROC __glewFogCoordfv; GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFPROC __glewPointParameterf; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIPROC __glewPointParameteri; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer; GLEW_FUN_EXPORT PFNGLWINDOWPOS2DPROC __glewWindowPos2d; GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv; GLEW_FUN_EXPORT PFNGLWINDOWPOS2FPROC __glewWindowPos2f; GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv; GLEW_FUN_EXPORT PFNGLWINDOWPOS2IPROC __glewWindowPos2i; GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv; GLEW_FUN_EXPORT PFNGLWINDOWPOS2SPROC __glewWindowPos2s; GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv; GLEW_FUN_EXPORT PFNGLWINDOWPOS3DPROC __glewWindowPos3d; GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv; GLEW_FUN_EXPORT PFNGLWINDOWPOS3FPROC __glewWindowPos3f; GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv; GLEW_FUN_EXPORT PFNGLWINDOWPOS3IPROC __glewWindowPos3i; GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv; GLEW_FUN_EXPORT PFNGLWINDOWPOS3SPROC __glewWindowPos3s; GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv; GLEW_FUN_EXPORT PFNGLBEGINQUERYPROC __glewBeginQuery; GLEW_FUN_EXPORT PFNGLBINDBUFFERPROC __glewBindBuffer; GLEW_FUN_EXPORT PFNGLBUFFERDATAPROC __glewBufferData; GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAPROC __glewBufferSubData; GLEW_FUN_EXPORT PFNGLDELETEBUFFERSPROC __glewDeleteBuffers; GLEW_FUN_EXPORT PFNGLDELETEQUERIESPROC __glewDeleteQueries; GLEW_FUN_EXPORT PFNGLENDQUERYPROC __glewEndQuery; GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers; GLEW_FUN_EXPORT PFNGLGENQUERIESPROC __glewGenQueries; GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv; GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv; GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv; GLEW_FUN_EXPORT PFNGLGETQUERYIVPROC __glewGetQueryiv; GLEW_FUN_EXPORT PFNGLISBUFFERPROC __glewIsBuffer; GLEW_FUN_EXPORT PFNGLISQUERYPROC __glewIsQuery; GLEW_FUN_EXPORT PFNGLMAPBUFFERPROC __glewMapBuffer; GLEW_FUN_EXPORT PFNGLUNMAPBUFFERPROC __glewUnmapBuffer; GLEW_FUN_EXPORT PFNGLATTACHSHADERPROC __glewAttachShader; GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate; GLEW_FUN_EXPORT PFNGLCOMPILESHADERPROC __glewCompileShader; GLEW_FUN_EXPORT PFNGLCREATEPROGRAMPROC __glewCreateProgram; GLEW_FUN_EXPORT PFNGLCREATESHADERPROC __glewCreateShader; GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPROC __glewDeleteProgram; GLEW_FUN_EXPORT PFNGLDELETESHADERPROC __glewDeleteShader; GLEW_FUN_EXPORT PFNGLDETACHSHADERPROC __glewDetachShader; GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray; GLEW_FUN_EXPORT PFNGLDRAWBUFFERSPROC __glewDrawBuffers; GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray; GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib; GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform; GLEW_FUN_EXPORT PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders; GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation; GLEW_FUN_EXPORT PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog; GLEW_FUN_EXPORT PFNGLGETPROGRAMIVPROC __glewGetProgramiv; GLEW_FUN_EXPORT PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog; GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEPROC __glewGetShaderSource; GLEW_FUN_EXPORT PFNGLGETSHADERIVPROC __glewGetShaderiv; GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation; GLEW_FUN_EXPORT PFNGLGETUNIFORMFVPROC __glewGetUniformfv; GLEW_FUN_EXPORT PFNGLGETUNIFORMIVPROC __glewGetUniformiv; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv; GLEW_FUN_EXPORT PFNGLISPROGRAMPROC __glewIsProgram; GLEW_FUN_EXPORT PFNGLISSHADERPROC __glewIsShader; GLEW_FUN_EXPORT PFNGLLINKPROGRAMPROC __glewLinkProgram; GLEW_FUN_EXPORT PFNGLSHADERSOURCEPROC __glewShaderSource; GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate; GLEW_FUN_EXPORT PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate; GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate; GLEW_FUN_EXPORT PFNGLUNIFORM1FPROC __glewUniform1f; GLEW_FUN_EXPORT PFNGLUNIFORM1FVPROC __glewUniform1fv; GLEW_FUN_EXPORT PFNGLUNIFORM1IPROC __glewUniform1i; GLEW_FUN_EXPORT PFNGLUNIFORM1IVPROC __glewUniform1iv; GLEW_FUN_EXPORT PFNGLUNIFORM2FPROC __glewUniform2f; GLEW_FUN_EXPORT PFNGLUNIFORM2FVPROC __glewUniform2fv; GLEW_FUN_EXPORT PFNGLUNIFORM2IPROC __glewUniform2i; GLEW_FUN_EXPORT PFNGLUNIFORM2IVPROC __glewUniform2iv; GLEW_FUN_EXPORT PFNGLUNIFORM3FPROC __glewUniform3f; GLEW_FUN_EXPORT PFNGLUNIFORM3FVPROC __glewUniform3fv; GLEW_FUN_EXPORT PFNGLUNIFORM3IPROC __glewUniform3i; GLEW_FUN_EXPORT PFNGLUNIFORM3IVPROC __glewUniform3iv; GLEW_FUN_EXPORT PFNGLUNIFORM4FPROC __glewUniform4f; GLEW_FUN_EXPORT PFNGLUNIFORM4FVPROC __glewUniform4fv; GLEW_FUN_EXPORT PFNGLUNIFORM4IPROC __glewUniform4i; GLEW_FUN_EXPORT PFNGLUNIFORM4IVPROC __glewUniform4iv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv; GLEW_FUN_EXPORT PFNGLUSEPROGRAMPROC __glewUseProgram; GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPROC __glewValidateProgram; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv; GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender; GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback; GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation; GLEW_FUN_EXPORT PFNGLCLAMPCOLORPROC __glewClampColor; GLEW_FUN_EXPORT PFNGLCLEARBUFFERFIPROC __glewClearBufferfi; GLEW_FUN_EXPORT PFNGLCLEARBUFFERFVPROC __glewClearBufferfv; GLEW_FUN_EXPORT PFNGLCLEARBUFFERIVPROC __glewClearBufferiv; GLEW_FUN_EXPORT PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv; GLEW_FUN_EXPORT PFNGLCOLORMASKIPROC __glewColorMaski; GLEW_FUN_EXPORT PFNGLDISABLEIPROC __glewDisablei; GLEW_FUN_EXPORT PFNGLENABLEIPROC __glewEnablei; GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender; GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback; GLEW_FUN_EXPORT PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v; GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation; GLEW_FUN_EXPORT PFNGLGETSTRINGIPROC __glewGetStringi; GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv; GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv; GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying; GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv; GLEW_FUN_EXPORT PFNGLISENABLEDIPROC __glewIsEnabledi; GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv; GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv; GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings; GLEW_FUN_EXPORT PFNGLUNIFORM1UIPROC __glewUniform1ui; GLEW_FUN_EXPORT PFNGLUNIFORM1UIVPROC __glewUniform1uiv; GLEW_FUN_EXPORT PFNGLUNIFORM2UIPROC __glewUniform2ui; GLEW_FUN_EXPORT PFNGLUNIFORM2UIVPROC __glewUniform2uiv; GLEW_FUN_EXPORT PFNGLUNIFORM3UIPROC __glewUniform3ui; GLEW_FUN_EXPORT PFNGLUNIFORM3UIVPROC __glewUniform3uiv; GLEW_FUN_EXPORT PFNGLUNIFORM4UIPROC __glewUniform4ui; GLEW_FUN_EXPORT PFNGLUNIFORM4UIVPROC __glewUniform4uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer; GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDPROC __glewDrawArraysInstanced; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDPROC __glewDrawElementsInstanced; GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXPROC __glewPrimitiveRestartIndex; GLEW_FUN_EXPORT PFNGLTEXBUFFERPROC __glewTexBuffer; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREPROC __glewFramebufferTexture; GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERI64VPROC __glewGetBufferParameteri64v; GLEW_FUN_EXPORT PFNGLGETINTEGER64I_VPROC __glewGetInteger64i_v; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORPROC __glewVertexAttribDivisor; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIPROC __glewBlendEquationSeparatei; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIPROC __glewBlendEquationi; GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIPROC __glewBlendFuncSeparatei; GLEW_FUN_EXPORT PFNGLBLENDFUNCIPROC __glewBlendFunci; GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGPROC __glewMinSampleShading; GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEENABLEAMDPROC __glewDebugMessageEnableAMD; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTAMDPROC __glewDebugMessageInsertAMD; GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGAMDPROC __glewGetDebugMessageLogAMD; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONINDEXEDAMDPROC __glewBlendEquationIndexedAMD; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD; GLEW_FUN_EXPORT PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD; GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD; GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD; GLEW_FUN_EXPORT PFNGLDELETENAMESAMDPROC __glewDeleteNamesAMD; GLEW_FUN_EXPORT PFNGLGENNAMESAMDPROC __glewGenNamesAMD; GLEW_FUN_EXPORT PFNGLISNAMEAMDPROC __glewIsNameAMD; GLEW_FUN_EXPORT PFNGLBEGINPERFMONITORAMDPROC __glewBeginPerfMonitorAMD; GLEW_FUN_EXPORT PFNGLDELETEPERFMONITORSAMDPROC __glewDeletePerfMonitorsAMD; GLEW_FUN_EXPORT PFNGLENDPERFMONITORAMDPROC __glewEndPerfMonitorAMD; GLEW_FUN_EXPORT PFNGLGENPERFMONITORSAMDPROC __glewGenPerfMonitorsAMD; GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERDATAAMDPROC __glewGetPerfMonitorCounterDataAMD; GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERINFOAMDPROC __glewGetPerfMonitorCounterInfoAMD; GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC __glewGetPerfMonitorCounterStringAMD; GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSAMDPROC __glewGetPerfMonitorCountersAMD; GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSTRINGAMDPROC __glewGetPerfMonitorGroupStringAMD; GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSAMDPROC __glewGetPerfMonitorGroupsAMD; GLEW_FUN_EXPORT PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD; GLEW_FUN_EXPORT PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD; GLEW_FUN_EXPORT PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD; GLEW_FUN_EXPORT PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD; GLEW_FUN_EXPORT PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD; GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE; GLEW_FUN_EXPORT PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE; GLEW_FUN_EXPORT PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE; GLEW_FUN_EXPORT PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE; GLEW_FUN_EXPORT PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE; GLEW_FUN_EXPORT PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE; GLEW_FUN_EXPORT PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE; GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE; GLEW_FUN_EXPORT PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE; GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE; GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE; GLEW_FUN_EXPORT PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE; GLEW_FUN_EXPORT PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE; GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE; GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE; GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE; GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE; GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE; GLEW_FUN_EXPORT PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE; GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE; GLEW_FUN_EXPORT PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE; GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE; GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBAPPLEPROC __glewDisableVertexAttribAPPLE; GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBAPPLEPROC __glewEnableVertexAttribAPPLE; GLEW_FUN_EXPORT PFNGLISVERTEXATTRIBENABLEDAPPLEPROC __glewIsVertexAttribEnabledAPPLE; GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1DAPPLEPROC __glewMapVertexAttrib1dAPPLE; GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1FAPPLEPROC __glewMapVertexAttrib1fAPPLE; GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2DAPPLEPROC __glewMapVertexAttrib2dAPPLE; GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2FAPPLEPROC __glewMapVertexAttrib2fAPPLE; GLEW_FUN_EXPORT PFNGLCLEARDEPTHFPROC __glewClearDepthf; GLEW_FUN_EXPORT PFNGLDEPTHRANGEFPROC __glewDepthRangef; GLEW_FUN_EXPORT PFNGLGETSHADERPRECISIONFORMATPROC __glewGetShaderPrecisionFormat; GLEW_FUN_EXPORT PFNGLRELEASESHADERCOMPILERPROC __glewReleaseShaderCompiler; GLEW_FUN_EXPORT PFNGLSHADERBINARYPROC __glewShaderBinary; GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance; GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed; GLEW_FUN_EXPORT PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex; GLEW_FUN_EXPORT PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB; GLEW_FUN_EXPORT PFNGLCLEARBUFFERDATAPROC __glewClearBufferData; GLEW_FUN_EXPORT PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData; GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT; GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT; GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB; GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute; GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect; GLEW_FUN_EXPORT PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData; GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKARBPROC __glewDebugMessageCallbackARB; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECONTROLARBPROC __glewDebugMessageControlARB; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTARBPROC __glewDebugMessageInsertARB; GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGARBPROC __glewGetDebugMessageLogARB; GLEW_FUN_EXPORT PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIARBPROC __glewBlendEquationSeparateiARB; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIARBPROC __glewBlendEquationiARB; GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIARBPROC __glewBlendFuncSeparateiARB; GLEW_FUN_EXPORT PFNGLBLENDFUNCIARBPROC __glewBlendFunciARB; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSBASEVERTEXPROC __glewDrawElementsBaseVertex; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC __glewDrawElementsInstancedBaseVertex; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC __glewDrawRangeElementsBaseVertex; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC __glewMultiDrawElementsBaseVertex; GLEW_FUN_EXPORT PFNGLDRAWARRAYSINDIRECTPROC __glewDrawArraysIndirect; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINDIRECTPROC __glewDrawElementsIndirect; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERPARAMETERIPROC __glewFramebufferParameteri; GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVPROC __glewGetFramebufferParameteriv; GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC __glewGetNamedFramebufferParameterivEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC __glewNamedFramebufferParameteriEXT; GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer; GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer; GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer; GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus; GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers; GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERPROC __glewFramebufferTextureLayer; GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers; GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers; GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap; GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv; GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv; GLEW_FUN_EXPORT PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer; GLEW_FUN_EXPORT PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer; GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage; GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMBINARYPROC __glewGetProgramBinary; GLEW_FUN_EXPORT PFNGLPROGRAMBINARYPROC __glewProgramBinary; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri; GLEW_FUN_EXPORT PFNGLGETUNIFORMDVPROC __glewGetUniformdv; GLEW_FUN_EXPORT PFNGLUNIFORM1DPROC __glewUniform1d; GLEW_FUN_EXPORT PFNGLUNIFORM1DVPROC __glewUniform1dv; GLEW_FUN_EXPORT PFNGLUNIFORM2DPROC __glewUniform2d; GLEW_FUN_EXPORT PFNGLUNIFORM2DVPROC __glewUniform2dv; GLEW_FUN_EXPORT PFNGLUNIFORM3DPROC __glewUniform3d; GLEW_FUN_EXPORT PFNGLUNIFORM3DVPROC __glewUniform3dv; GLEW_FUN_EXPORT PFNGLUNIFORM4DPROC __glewUniform4d; GLEW_FUN_EXPORT PFNGLUNIFORM4DVPROC __glewUniform4dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2DVPROC __glewUniformMatrix2dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3DVPROC __glewUniformMatrix2x3dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4DVPROC __glewUniformMatrix2x4dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3DVPROC __glewUniformMatrix3dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2DVPROC __glewUniformMatrix3x2dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4DVPROC __glewUniformMatrix3x4dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4DVPROC __glewUniformMatrix4dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2DVPROC __glewUniformMatrix4x2dv; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3DVPROC __glewUniformMatrix4x3dv; GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable; GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable; GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv; GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv; GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D; GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv; GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable; GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable; GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D; GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv; GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter; GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv; GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv; GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram; GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv; GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv; GLEW_FUN_EXPORT PFNGLGETMINMAXPROC __glewGetMinmax; GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv; GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv; GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter; GLEW_FUN_EXPORT PFNGLHISTOGRAMPROC __glewHistogram; GLEW_FUN_EXPORT PFNGLMINMAXPROC __glewMinmax; GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram; GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax; GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D; GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB; GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATIVPROC __glewGetInternalformativ; GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATI64VPROC __glewGetInternalformati64v; GLEW_FUN_EXPORT PFNGLINVALIDATEBUFFERDATAPROC __glewInvalidateBufferData; GLEW_FUN_EXPORT PFNGLINVALIDATEBUFFERSUBDATAPROC __glewInvalidateBufferSubData; GLEW_FUN_EXPORT PFNGLINVALIDATEFRAMEBUFFERPROC __glewInvalidateFramebuffer; GLEW_FUN_EXPORT PFNGLINVALIDATESUBFRAMEBUFFERPROC __glewInvalidateSubFramebuffer; GLEW_FUN_EXPORT PFNGLINVALIDATETEXIMAGEPROC __glewInvalidateTexImage; GLEW_FUN_EXPORT PFNGLINVALIDATETEXSUBIMAGEPROC __glewInvalidateTexSubImage; GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange; GLEW_FUN_EXPORT PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange; GLEW_FUN_EXPORT PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB; GLEW_FUN_EXPORT PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB; GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB; GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB; GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB; GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect; GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB; GLEW_FUN_EXPORT PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB; GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB; GLEW_FUN_EXPORT PFNGLBEGINQUERYARBPROC __glewBeginQueryARB; GLEW_FUN_EXPORT PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB; GLEW_FUN_EXPORT PFNGLENDQUERYARBPROC __glewEndQueryARB; GLEW_FUN_EXPORT PFNGLGENQUERIESARBPROC __glewGenQueriesARB; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB; GLEW_FUN_EXPORT PFNGLGETQUERYIVARBPROC __glewGetQueryivARB; GLEW_FUN_EXPORT PFNGLISQUERYARBPROC __glewIsQueryARB; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMINTERFACEIVPROC __glewGetProgramInterfaceiv; GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCEINDEXPROC __glewGetProgramResourceIndex; GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONPROC __glewGetProgramResourceLocation; GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC __glewGetProgramResourceLocationIndex; GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCENAMEPROC __glewGetProgramResourceName; GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCEIVPROC __glewGetProgramResourceiv; GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXPROC __glewProvokingVertex; GLEW_FUN_EXPORT PFNGLGETGRAPHICSRESETSTATUSARBPROC __glewGetGraphicsResetStatusARB; GLEW_FUN_EXPORT PFNGLGETNCOLORTABLEARBPROC __glewGetnColorTableARB; GLEW_FUN_EXPORT PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC __glewGetnCompressedTexImageARB; GLEW_FUN_EXPORT PFNGLGETNCONVOLUTIONFILTERARBPROC __glewGetnConvolutionFilterARB; GLEW_FUN_EXPORT PFNGLGETNHISTOGRAMARBPROC __glewGetnHistogramARB; GLEW_FUN_EXPORT PFNGLGETNMAPDVARBPROC __glewGetnMapdvARB; GLEW_FUN_EXPORT PFNGLGETNMAPFVARBPROC __glewGetnMapfvARB; GLEW_FUN_EXPORT PFNGLGETNMAPIVARBPROC __glewGetnMapivARB; GLEW_FUN_EXPORT PFNGLGETNMINMAXARBPROC __glewGetnMinmaxARB; GLEW_FUN_EXPORT PFNGLGETNPIXELMAPFVARBPROC __glewGetnPixelMapfvARB; GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUIVARBPROC __glewGetnPixelMapuivARB; GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUSVARBPROC __glewGetnPixelMapusvARB; GLEW_FUN_EXPORT PFNGLGETNPOLYGONSTIPPLEARBPROC __glewGetnPolygonStippleARB; GLEW_FUN_EXPORT PFNGLGETNSEPARABLEFILTERARBPROC __glewGetnSeparableFilterARB; GLEW_FUN_EXPORT PFNGLGETNTEXIMAGEARBPROC __glewGetnTexImageARB; GLEW_FUN_EXPORT PFNGLGETNUNIFORMDVARBPROC __glewGetnUniformdvARB; GLEW_FUN_EXPORT PFNGLGETNUNIFORMFVARBPROC __glewGetnUniformfvARB; GLEW_FUN_EXPORT PFNGLGETNUNIFORMIVARBPROC __glewGetnUniformivARB; GLEW_FUN_EXPORT PFNGLGETNUNIFORMUIVARBPROC __glewGetnUniformuivARB; GLEW_FUN_EXPORT PFNGLREADNPIXELSARBPROC __glewReadnPixelsARB; GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGARBPROC __glewMinSampleShadingARB; GLEW_FUN_EXPORT PFNGLBINDSAMPLERPROC __glewBindSampler; GLEW_FUN_EXPORT PFNGLDELETESAMPLERSPROC __glewDeleteSamplers; GLEW_FUN_EXPORT PFNGLGENSAMPLERSPROC __glewGenSamplers; GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIIVPROC __glewGetSamplerParameterIiv; GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIUIVPROC __glewGetSamplerParameterIuiv; GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERFVPROC __glewGetSamplerParameterfv; GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIVPROC __glewGetSamplerParameteriv; GLEW_FUN_EXPORT PFNGLISSAMPLERPROC __glewIsSampler; GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIIVPROC __glewSamplerParameterIiv; GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIUIVPROC __glewSamplerParameterIuiv; GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFPROC __glewSamplerParameterf; GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFVPROC __glewSamplerParameterfv; GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIPROC __glewSamplerParameteri; GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIVPROC __glewSamplerParameteriv; GLEW_FUN_EXPORT PFNGLACTIVESHADERPROGRAMPROC __glewActiveShaderProgram; GLEW_FUN_EXPORT PFNGLBINDPROGRAMPIPELINEPROC __glewBindProgramPipeline; GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMVPROC __glewCreateShaderProgramv; GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPIPELINESPROC __glewDeleteProgramPipelines; GLEW_FUN_EXPORT PFNGLGENPROGRAMPIPELINESPROC __glewGenProgramPipelines; GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEINFOLOGPROC __glewGetProgramPipelineInfoLog; GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEIVPROC __glewGetProgramPipelineiv; GLEW_FUN_EXPORT PFNGLISPROGRAMPIPELINEPROC __glewIsProgramPipeline; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DPROC __glewProgramUniform1d; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DVPROC __glewProgramUniform1dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FPROC __glewProgramUniform1f; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVPROC __glewProgramUniform1fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IPROC __glewProgramUniform1i; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVPROC __glewProgramUniform1iv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIPROC __glewProgramUniform1ui; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVPROC __glewProgramUniform1uiv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DPROC __glewProgramUniform2d; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DVPROC __glewProgramUniform2dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FPROC __glewProgramUniform2f; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVPROC __glewProgramUniform2fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IPROC __glewProgramUniform2i; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVPROC __glewProgramUniform2iv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIPROC __glewProgramUniform2ui; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVPROC __glewProgramUniform2uiv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DPROC __glewProgramUniform3d; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DVPROC __glewProgramUniform3dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FPROC __glewProgramUniform3f; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVPROC __glewProgramUniform3fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IPROC __glewProgramUniform3i; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVPROC __glewProgramUniform3iv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIPROC __glewProgramUniform3ui; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVPROC __glewProgramUniform3uiv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DPROC __glewProgramUniform4d; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DVPROC __glewProgramUniform4dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FPROC __glewProgramUniform4f; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVPROC __glewProgramUniform4fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IPROC __glewProgramUniform4i; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVPROC __glewProgramUniform4iv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIPROC __glewProgramUniform4ui; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVPROC __glewProgramUniform4uiv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2DVPROC __glewProgramUniformMatrix2dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVPROC __glewProgramUniformMatrix2fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC __glewProgramUniformMatrix2x3dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC __glewProgramUniformMatrix2x3fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC __glewProgramUniformMatrix2x4dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC __glewProgramUniformMatrix2x4fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3DVPROC __glewProgramUniformMatrix3dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVPROC __glewProgramUniformMatrix3fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC __glewProgramUniformMatrix3x2dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC __glewProgramUniformMatrix3x2fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC __glewProgramUniformMatrix3x4dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC __glewProgramUniformMatrix3x4fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4DVPROC __glewProgramUniformMatrix4dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVPROC __glewProgramUniformMatrix4fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC __glewProgramUniformMatrix4x2dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC __glewProgramUniformMatrix4x2fv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC __glewProgramUniformMatrix4x3dv; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC __glewProgramUniformMatrix4x3fv; GLEW_FUN_EXPORT PFNGLUSEPROGRAMSTAGESPROC __glewUseProgramStages; GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPIPELINEPROC __glewValidateProgramPipeline; GLEW_FUN_EXPORT PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC __glewGetActiveAtomicCounterBufferiv; GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREPROC __glewBindImageTexture; GLEW_FUN_EXPORT PFNGLMEMORYBARRIERPROC __glewMemoryBarrier; GLEW_FUN_EXPORT PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB; GLEW_FUN_EXPORT PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB; GLEW_FUN_EXPORT PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB; GLEW_FUN_EXPORT PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB; GLEW_FUN_EXPORT PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB; GLEW_FUN_EXPORT PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB; GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB; GLEW_FUN_EXPORT PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB; GLEW_FUN_EXPORT PFNGLGETHANDLEARBPROC __glewGetHandleARB; GLEW_FUN_EXPORT PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB; GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB; GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB; GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB; GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB; GLEW_FUN_EXPORT PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB; GLEW_FUN_EXPORT PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB; GLEW_FUN_EXPORT PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB; GLEW_FUN_EXPORT PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB; GLEW_FUN_EXPORT PFNGLUNIFORM1FARBPROC __glewUniform1fARB; GLEW_FUN_EXPORT PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB; GLEW_FUN_EXPORT PFNGLUNIFORM1IARBPROC __glewUniform1iARB; GLEW_FUN_EXPORT PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB; GLEW_FUN_EXPORT PFNGLUNIFORM2FARBPROC __glewUniform2fARB; GLEW_FUN_EXPORT PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB; GLEW_FUN_EXPORT PFNGLUNIFORM2IARBPROC __glewUniform2iARB; GLEW_FUN_EXPORT PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB; GLEW_FUN_EXPORT PFNGLUNIFORM3FARBPROC __glewUniform3fARB; GLEW_FUN_EXPORT PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB; GLEW_FUN_EXPORT PFNGLUNIFORM3IARBPROC __glewUniform3iARB; GLEW_FUN_EXPORT PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB; GLEW_FUN_EXPORT PFNGLUNIFORM4FARBPROC __glewUniform4fARB; GLEW_FUN_EXPORT PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB; GLEW_FUN_EXPORT PFNGLUNIFORM4IARBPROC __glewUniform4iARB; GLEW_FUN_EXPORT PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB; GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB; GLEW_FUN_EXPORT PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB; GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB; GLEW_FUN_EXPORT PFNGLSHADERSTORAGEBLOCKBINDINGPROC __glewShaderStorageBlockBinding; GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINENAMEPROC __glewGetActiveSubroutineName; GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC __glewGetActiveSubroutineUniformName; GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC __glewGetActiveSubroutineUniformiv; GLEW_FUN_EXPORT PFNGLGETPROGRAMSTAGEIVPROC __glewGetProgramStageiv; GLEW_FUN_EXPORT PFNGLGETSUBROUTINEINDEXPROC __glewGetSubroutineIndex; GLEW_FUN_EXPORT PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC __glewGetSubroutineUniformLocation; GLEW_FUN_EXPORT PFNGLGETUNIFORMSUBROUTINEUIVPROC __glewGetUniformSubroutineuiv; GLEW_FUN_EXPORT PFNGLUNIFORMSUBROUTINESUIVPROC __glewUniformSubroutinesuiv; GLEW_FUN_EXPORT PFNGLCOMPILESHADERINCLUDEARBPROC __glewCompileShaderIncludeARB; GLEW_FUN_EXPORT PFNGLDELETENAMEDSTRINGARBPROC __glewDeleteNamedStringARB; GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGARBPROC __glewGetNamedStringARB; GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB; GLEW_FUN_EXPORT PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB; GLEW_FUN_EXPORT PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB; GLEW_FUN_EXPORT PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync; GLEW_FUN_EXPORT PFNGLDELETESYNCPROC __glewDeleteSync; GLEW_FUN_EXPORT PFNGLFENCESYNCPROC __glewFenceSync; GLEW_FUN_EXPORT PFNGLGETINTEGER64VPROC __glewGetInteger64v; GLEW_FUN_EXPORT PFNGLGETSYNCIVPROC __glewGetSynciv; GLEW_FUN_EXPORT PFNGLISSYNCPROC __glewIsSync; GLEW_FUN_EXPORT PFNGLWAITSYNCPROC __glewWaitSync; GLEW_FUN_EXPORT PFNGLPATCHPARAMETERFVPROC __glewPatchParameterfv; GLEW_FUN_EXPORT PFNGLPATCHPARAMETERIPROC __glewPatchParameteri; GLEW_FUN_EXPORT PFNGLTEXBUFFERARBPROC __glewTexBufferARB; GLEW_FUN_EXPORT PFNGLTEXBUFFERRANGEPROC __glewTexBufferRange; GLEW_FUN_EXPORT PFNGLTEXTUREBUFFERRANGEEXTPROC __glewTextureBufferRangeEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB; GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB; GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVPROC __glewGetMultisamplefv; GLEW_FUN_EXPORT PFNGLSAMPLEMASKIPROC __glewSampleMaski; GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLEPROC __glewTexImage2DMultisample; GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample; GLEW_FUN_EXPORT PFNGLTEXSTORAGE1DPROC __glewTexStorage1D; GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DPROC __glewTexStorage2D; GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DPROC __glewTexStorage3D; GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT; GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT; GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT; GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DMULTISAMPLEPROC __glewTexStorage2DMultisample; GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DMULTISAMPLEPROC __glewTexStorage3DMultisample; GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC __glewTextureStorage2DMultisampleEXT; GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC __glewTextureStorage3DMultisampleEXT; GLEW_FUN_EXPORT PFNGLTEXTUREVIEWPROC __glewTextureView; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VPROC __glewGetQueryObjecti64v; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VPROC __glewGetQueryObjectui64v; GLEW_FUN_EXPORT PFNGLQUERYCOUNTERPROC __glewQueryCounter; GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKPROC __glewBindTransformFeedback; GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSPROC __glewDeleteTransformFeedbacks; GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKPROC __glewDrawTransformFeedback; GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSPROC __glewGenTransformFeedbacks; GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKPROC __glewIsTransformFeedback; GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKPROC __glewPauseTransformFeedback; GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKPROC __glewResumeTransformFeedback; GLEW_FUN_EXPORT PFNGLBEGINQUERYINDEXEDPROC __glewBeginQueryIndexed; GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC __glewDrawTransformFeedbackStream; GLEW_FUN_EXPORT PFNGLENDQUERYINDEXEDPROC __glewEndQueryIndexed; GLEW_FUN_EXPORT PFNGLGETQUERYINDEXEDIVPROC __glewGetQueryIndexediv; GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC __glewDrawTransformFeedbackInstanced; GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC __glewDrawTransformFeedbackStreamInstanced; GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB; GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB; GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB; GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB; GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEPROC __glewBindBufferBase; GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange; GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC __glewGetActiveUniformBlockName; GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKIVPROC __glewGetActiveUniformBlockiv; GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMNAMEPROC __glewGetActiveUniformName; GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMSIVPROC __glewGetActiveUniformsiv; GLEW_FUN_EXPORT PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v; GLEW_FUN_EXPORT PFNGLGETUNIFORMBLOCKINDEXPROC __glewGetUniformBlockIndex; GLEW_FUN_EXPORT PFNGLGETUNIFORMINDICESPROC __glewGetUniformIndices; GLEW_FUN_EXPORT PFNGLUNIFORMBLOCKBINDINGPROC __glewUniformBlockBinding; GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray; GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays; GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays; GLEW_FUN_EXPORT PFNGLISVERTEXARRAYPROC __glewIsVertexArray; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVPROC __glewGetVertexAttribLdv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DPROC __glewVertexAttribL1d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVPROC __glewVertexAttribL1dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DPROC __glewVertexAttribL2d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVPROC __glewVertexAttribL2dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DPROC __glewVertexAttribL3d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVPROC __glewVertexAttribL3dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DPROC __glewVertexAttribL4d; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVPROC __glewVertexAttribL4dv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTERPROC __glewVertexAttribLPointer; GLEW_FUN_EXPORT PFNGLBINDVERTEXBUFFERPROC __glewBindVertexBuffer; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBBINDINGPROC __glewVertexAttribBinding; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBFORMATPROC __glewVertexAttribFormat; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIFORMATPROC __glewVertexAttribIFormat; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLFORMATPROC __glewVertexAttribLFormat; GLEW_FUN_EXPORT PFNGLVERTEXBINDINGDIVISORPROC __glewVertexBindingDivisor; GLEW_FUN_EXPORT PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB; GLEW_FUN_EXPORT PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB; GLEW_FUN_EXPORT PFNGLWEIGHTBVARBPROC __glewWeightbvARB; GLEW_FUN_EXPORT PFNGLWEIGHTDVARBPROC __glewWeightdvARB; GLEW_FUN_EXPORT PFNGLWEIGHTFVARBPROC __glewWeightfvARB; GLEW_FUN_EXPORT PFNGLWEIGHTIVARBPROC __glewWeightivARB; GLEW_FUN_EXPORT PFNGLWEIGHTSVARBPROC __glewWeightsvARB; GLEW_FUN_EXPORT PFNGLWEIGHTUBVARBPROC __glewWeightubvARB; GLEW_FUN_EXPORT PFNGLWEIGHTUIVARBPROC __glewWeightuivARB; GLEW_FUN_EXPORT PFNGLWEIGHTUSVARBPROC __glewWeightusvARB; GLEW_FUN_EXPORT PFNGLBINDBUFFERARBPROC __glewBindBufferARB; GLEW_FUN_EXPORT PFNGLBUFFERDATAARBPROC __glewBufferDataARB; GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB; GLEW_FUN_EXPORT PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB; GLEW_FUN_EXPORT PFNGLGENBUFFERSARBPROC __glewGenBuffersARB; GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB; GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB; GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB; GLEW_FUN_EXPORT PFNGLISBUFFERARBPROC __glewIsBufferARB; GLEW_FUN_EXPORT PFNGLMAPBUFFERARBPROC __glewMapBufferARB; GLEW_FUN_EXPORT PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB; GLEW_FUN_EXPORT PFNGLBINDPROGRAMARBPROC __glewBindProgramARB; GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB; GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB; GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB; GLEW_FUN_EXPORT PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB; GLEW_FUN_EXPORT PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB; GLEW_FUN_EXPORT PFNGLISPROGRAMARBPROC __glewIsProgramARB; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB; GLEW_FUN_EXPORT PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB; GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB; GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB; GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB; GLEW_FUN_EXPORT PFNGLCOLORP3UIPROC __glewColorP3ui; GLEW_FUN_EXPORT PFNGLCOLORP3UIVPROC __glewColorP3uiv; GLEW_FUN_EXPORT PFNGLCOLORP4UIPROC __glewColorP4ui; GLEW_FUN_EXPORT PFNGLCOLORP4UIVPROC __glewColorP4uiv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIPROC __glewMultiTexCoordP1ui; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIVPROC __glewMultiTexCoordP1uiv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIPROC __glewMultiTexCoordP2ui; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIVPROC __glewMultiTexCoordP2uiv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIPROC __glewMultiTexCoordP3ui; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIVPROC __glewMultiTexCoordP3uiv; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIPROC __glewMultiTexCoordP4ui; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIVPROC __glewMultiTexCoordP4uiv; GLEW_FUN_EXPORT PFNGLNORMALP3UIPROC __glewNormalP3ui; GLEW_FUN_EXPORT PFNGLNORMALP3UIVPROC __glewNormalP3uiv; GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIPROC __glewSecondaryColorP3ui; GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIVPROC __glewSecondaryColorP3uiv; GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIPROC __glewTexCoordP1ui; GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIVPROC __glewTexCoordP1uiv; GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIPROC __glewTexCoordP2ui; GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIVPROC __glewTexCoordP2uiv; GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIPROC __glewTexCoordP3ui; GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIVPROC __glewTexCoordP3uiv; GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIPROC __glewTexCoordP4ui; GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIVPROC __glewTexCoordP4uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIPROC __glewVertexAttribP1ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIVPROC __glewVertexAttribP1uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIPROC __glewVertexAttribP2ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIVPROC __glewVertexAttribP2uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIPROC __glewVertexAttribP3ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIVPROC __glewVertexAttribP3uiv; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIPROC __glewVertexAttribP4ui; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIVPROC __glewVertexAttribP4uiv; GLEW_FUN_EXPORT PFNGLVERTEXP2UIPROC __glewVertexP2ui; GLEW_FUN_EXPORT PFNGLVERTEXP2UIVPROC __glewVertexP2uiv; GLEW_FUN_EXPORT PFNGLVERTEXP3UIPROC __glewVertexP3ui; GLEW_FUN_EXPORT PFNGLVERTEXP3UIVPROC __glewVertexP3uiv; GLEW_FUN_EXPORT PFNGLVERTEXP4UIPROC __glewVertexP4ui; GLEW_FUN_EXPORT PFNGLVERTEXP4UIVPROC __glewVertexP4uiv; GLEW_FUN_EXPORT PFNGLDEPTHRANGEARRAYVPROC __glewDepthRangeArrayv; GLEW_FUN_EXPORT PFNGLDEPTHRANGEINDEXEDPROC __glewDepthRangeIndexed; GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VPROC __glewGetDoublei_v; GLEW_FUN_EXPORT PFNGLGETFLOATI_VPROC __glewGetFloati_v; GLEW_FUN_EXPORT PFNGLSCISSORARRAYVPROC __glewScissorArrayv; GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDPROC __glewScissorIndexed; GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDVPROC __glewScissorIndexedv; GLEW_FUN_EXPORT PFNGLVIEWPORTARRAYVPROC __glewViewportArrayv; GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFPROC __glewViewportIndexedf; GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFVPROC __glewViewportIndexedfv; GLEW_FUN_EXPORT PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB; GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB; GLEW_FUN_EXPORT PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI; GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI; GLEW_FUN_EXPORT PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI; GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI; GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI; GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI; GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI; GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI; GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI; GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI; GLEW_FUN_EXPORT PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI; GLEW_FUN_EXPORT PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI; GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI; GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI; GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI; GLEW_FUN_EXPORT PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI; GLEW_FUN_EXPORT PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI; GLEW_FUN_EXPORT PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI; GLEW_FUN_EXPORT PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI; GLEW_FUN_EXPORT PFNGLSAMPLEMAPATIPROC __glewSampleMapATI; GLEW_FUN_EXPORT PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI; GLEW_FUN_EXPORT PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI; GLEW_FUN_EXPORT PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI; GLEW_FUN_EXPORT PFNGLPNTRIANGLESFATIPROC __glewPNTrianglesfATI; GLEW_FUN_EXPORT PFNGLPNTRIANGLESIATIPROC __glewPNTrianglesiATI; GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI; GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI; GLEW_FUN_EXPORT PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI; GLEW_FUN_EXPORT PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI; GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI; GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI; GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI; GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI; GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI; GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI; GLEW_FUN_EXPORT PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI; GLEW_FUN_EXPORT PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI; GLEW_FUN_EXPORT PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI; GLEW_FUN_EXPORT PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI; GLEW_FUN_EXPORT PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI; GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI; GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI; GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1DATIPROC __glewVertexStream1dATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1DVATIPROC __glewVertexStream1dvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1FATIPROC __glewVertexStream1fATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1FVATIPROC __glewVertexStream1fvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1IATIPROC __glewVertexStream1iATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1IVATIPROC __glewVertexStream1ivATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1SATIPROC __glewVertexStream1sATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1SVATIPROC __glewVertexStream1svATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI; GLEW_FUN_EXPORT PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT; GLEW_FUN_EXPORT PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT; GLEW_FUN_EXPORT PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT; GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT; GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT; GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT; GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT; GLEW_FUN_EXPORT PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT; GLEW_FUN_EXPORT PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT; GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT; GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT; GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT; GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT; GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT; GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT; GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT; GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT; GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT; GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT; GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT; GLEW_FUN_EXPORT PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT; GLEW_FUN_EXPORT PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT; GLEW_FUN_EXPORT PFNGLINSERTEVENTMARKEREXTPROC __glewInsertEventMarkerEXT; GLEW_FUN_EXPORT PFNGLPOPGROUPMARKEREXTPROC __glewPopGroupMarkerEXT; GLEW_FUN_EXPORT PFNGLPUSHGROUPMARKEREXTPROC __glewPushGroupMarkerEXT; GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT; GLEW_FUN_EXPORT PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT; GLEW_FUN_EXPORT PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT; GLEW_FUN_EXPORT PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT; GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT; GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT; GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT; GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT; GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT; GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT; GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT; GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEIEXTPROC __glewDisableClientStateiEXT; GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC __glewDisableVertexArrayAttribEXT; GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYEXTPROC __glewDisableVertexArrayEXT; GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT; GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEIEXTPROC __glewEnableClientStateiEXT; GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYATTRIBEXTPROC __glewEnableVertexArrayAttribEXT; GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYEXTPROC __glewEnableVertexArrayEXT; GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC __glewFlushMappedNamedBufferRangeEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT; GLEW_FUN_EXPORT PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT; GLEW_FUN_EXPORT PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT; GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT; GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT; GLEW_FUN_EXPORT PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT; GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VEXTPROC __glewGetDoublei_vEXT; GLEW_FUN_EXPORT PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT; GLEW_FUN_EXPORT PFNGLGETFLOATI_VEXTPROC __glewGetFloati_vEXT; GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT; GLEW_FUN_EXPORT PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT; GLEW_FUN_EXPORT PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT; GLEW_FUN_EXPORT PFNGLGETPOINTERI_VEXTPROC __glewGetPointeri_vEXT; GLEW_FUN_EXPORT PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT; GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT; GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT; GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT; GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT; GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC __glewGetVertexArrayIntegeri_vEXT; GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERVEXTPROC __glewGetVertexArrayIntegervEXT; GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC __glewGetVertexArrayPointeri_vEXT; GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERVEXTPROC __glewGetVertexArrayPointervEXT; GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT; GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFERRANGEEXTPROC __glewMapNamedBufferRangeEXT; GLEW_FUN_EXPORT PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT; GLEW_FUN_EXPORT PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT; GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT; GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT; GLEW_FUN_EXPORT PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT; GLEW_FUN_EXPORT PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT; GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT; GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT; GLEW_FUN_EXPORT PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT; GLEW_FUN_EXPORT PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT; GLEW_FUN_EXPORT PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT; GLEW_FUN_EXPORT PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT; GLEW_FUN_EXPORT PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT; GLEW_FUN_EXPORT PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT; GLEW_FUN_EXPORT PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT; GLEW_FUN_EXPORT PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT; GLEW_FUN_EXPORT PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT; GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT; GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT; GLEW_FUN_EXPORT PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT; GLEW_FUN_EXPORT PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT; GLEW_FUN_EXPORT PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT; GLEW_FUN_EXPORT PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT; GLEW_FUN_EXPORT PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT; GLEW_FUN_EXPORT PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT; GLEW_FUN_EXPORT PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT; GLEW_FUN_EXPORT PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT; GLEW_FUN_EXPORT PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT; GLEW_FUN_EXPORT PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT; GLEW_FUN_EXPORT PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT; GLEW_FUN_EXPORT PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT; GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT; GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT; GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT; GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT; GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT; GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT; GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT; GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT; GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT; GLEW_FUN_EXPORT PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT; GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT; GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT; GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT; GLEW_FUN_EXPORT PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT; GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT; GLEW_FUN_EXPORT PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC __glewNamedCopyBufferSubDataEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT; GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT; GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT; GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT; GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT; GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DEXTPROC __glewProgramUniform1dEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DVEXTPROC __glewProgramUniform1dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DEXTPROC __glewProgramUniform2dEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DVEXTPROC __glewProgramUniform2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DEXTPROC __glewProgramUniform3dEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DVEXTPROC __glewProgramUniform3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DEXTPROC __glewProgramUniform4dEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DVEXTPROC __glewProgramUniform4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC __glewProgramUniformMatrix2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC __glewProgramUniformMatrix2x3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC __glewProgramUniformMatrix2x4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC __glewProgramUniformMatrix3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC __glewProgramUniformMatrix3x2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC __glewProgramUniformMatrix3x4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC __glewProgramUniformMatrix4dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC __glewProgramUniformMatrix4x2dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC __glewProgramUniformMatrix4x3dvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT; GLEW_FUN_EXPORT PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT; GLEW_FUN_EXPORT PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT; GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT; GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT; GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT; GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT; GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT; GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT; GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT; GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT; GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT; GLEW_FUN_EXPORT PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT; GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT; GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT; GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT; GLEW_FUN_EXPORT PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYCOLOROFFSETEXTPROC __glewVertexArrayColorOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC __glewVertexArrayEdgeFlagOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC __glewVertexArrayFogCoordOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYINDEXOFFSETEXTPROC __glewVertexArrayIndexOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC __glewVertexArrayMultiTexCoordOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYNORMALOFFSETEXTPROC __glewVertexArrayNormalOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC __glewVertexArraySecondaryColorOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC __glewVertexArrayTexCoordOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVertexAttribIOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT; GLEW_FUN_EXPORT PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT; GLEW_FUN_EXPORT PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT; GLEW_FUN_EXPORT PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT; GLEW_FUN_EXPORT PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT; GLEW_FUN_EXPORT PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT; GLEW_FUN_EXPORT PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT; GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT; GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT; GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT; GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT; GLEW_FUN_EXPORT PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT; GLEW_FUN_EXPORT PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT; GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT; GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT; GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT; GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT; GLEW_FUN_EXPORT PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT; GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT; GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT; GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT; GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT; GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT; GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT; GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT; GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT; GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT; GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT; GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT; GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT; GLEW_FUN_EXPORT PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT; GLEW_FUN_EXPORT PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT; GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT; GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT; GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT; GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT; GLEW_FUN_EXPORT PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT; GLEW_FUN_EXPORT PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT; GLEW_FUN_EXPORT PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT; GLEW_FUN_EXPORT PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT; GLEW_FUN_EXPORT PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT; GLEW_FUN_EXPORT PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT; GLEW_FUN_EXPORT PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT; GLEW_FUN_EXPORT PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT; GLEW_FUN_EXPORT PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT; GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT; GLEW_FUN_EXPORT PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT; GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT; GLEW_FUN_EXPORT PFNGLHISTOGRAMEXTPROC __glewHistogramEXT; GLEW_FUN_EXPORT PFNGLMINMAXEXTPROC __glewMinmaxEXT; GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT; GLEW_FUN_EXPORT PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT; GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT; GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT; GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT; GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT; GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT; GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT; GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT; GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT; GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT; GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT; GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT; GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT; GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT; GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT; GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT; GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT; GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXEXTPROC __glewProvokingVertexEXT; GLEW_FUN_EXPORT PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT; GLEW_FUN_EXPORT PFNGLENDSCENEEXTPROC __glewEndSceneEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT; GLEW_FUN_EXPORT PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT; GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT; GLEW_FUN_EXPORT PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT; GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT; GLEW_FUN_EXPORT PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT; GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT; GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT; GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT; GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT; GLEW_FUN_EXPORT PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT; GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT; GLEW_FUN_EXPORT PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT; GLEW_FUN_EXPORT PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT; GLEW_FUN_EXPORT PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT; GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT; GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT; GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT; GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT; GLEW_FUN_EXPORT PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT; GLEW_FUN_EXPORT PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT; GLEW_FUN_EXPORT PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT; GLEW_FUN_EXPORT PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT; GLEW_FUN_EXPORT PFNGLISTEXTUREEXTPROC __glewIsTextureEXT; GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT; GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT; GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT; GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT; GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT; GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT; GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT; GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT; GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT; GLEW_FUN_EXPORT PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT; GLEW_FUN_EXPORT PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT; GLEW_FUN_EXPORT PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT; GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT; GLEW_FUN_EXPORT PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT; GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT; GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT; GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVEXTPROC __glewVertexAttribL1dvEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DEXTPROC __glewVertexAttribL2dEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVEXTPROC __glewVertexAttribL2dvEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DEXTPROC __glewVertexAttribL3dEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVEXTPROC __glewVertexAttribL3dvEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DEXTPROC __glewVertexAttribL4dEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVEXTPROC __glewVertexAttribL4dvEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTEREXTPROC __glewVertexAttribLPointerEXT; GLEW_FUN_EXPORT PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT; GLEW_FUN_EXPORT PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT; GLEW_FUN_EXPORT PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT; GLEW_FUN_EXPORT PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT; GLEW_FUN_EXPORT PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT; GLEW_FUN_EXPORT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT; GLEW_FUN_EXPORT PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT; GLEW_FUN_EXPORT PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT; GLEW_FUN_EXPORT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT; GLEW_FUN_EXPORT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT; GLEW_FUN_EXPORT PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT; GLEW_FUN_EXPORT PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT; GLEW_FUN_EXPORT PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT; GLEW_FUN_EXPORT PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT; GLEW_FUN_EXPORT PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT; GLEW_FUN_EXPORT PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT; GLEW_FUN_EXPORT PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT; GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT; GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT; GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT; GLEW_FUN_EXPORT PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT; GLEW_FUN_EXPORT PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT; GLEW_FUN_EXPORT PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT; GLEW_FUN_EXPORT PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT; GLEW_FUN_EXPORT PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT; GLEW_FUN_EXPORT PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT; GLEW_FUN_EXPORT PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT; GLEW_FUN_EXPORT PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT; GLEW_FUN_EXPORT PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT; GLEW_FUN_EXPORT PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT; GLEW_FUN_EXPORT PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT; GLEW_FUN_EXPORT PFNGLSWIZZLEEXTPROC __glewSwizzleEXT; GLEW_FUN_EXPORT PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT; GLEW_FUN_EXPORT PFNGLVARIANTBVEXTPROC __glewVariantbvEXT; GLEW_FUN_EXPORT PFNGLVARIANTDVEXTPROC __glewVariantdvEXT; GLEW_FUN_EXPORT PFNGLVARIANTFVEXTPROC __glewVariantfvEXT; GLEW_FUN_EXPORT PFNGLVARIANTIVEXTPROC __glewVariantivEXT; GLEW_FUN_EXPORT PFNGLVARIANTSVEXTPROC __glewVariantsvEXT; GLEW_FUN_EXPORT PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT; GLEW_FUN_EXPORT PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT; GLEW_FUN_EXPORT PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT; GLEW_FUN_EXPORT PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT; GLEW_FUN_EXPORT PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT; GLEW_FUN_EXPORT PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY; GLEW_FUN_EXPORT PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY; GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP; GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP; GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP; GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP; GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP; GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP; GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM; GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM; GLEW_FUN_EXPORT PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM; GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM; GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM; GLEW_FUN_EXPORT PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM; GLEW_FUN_EXPORT PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM; GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM; GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM; GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM; GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL; GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL; GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL; GLEW_FUN_EXPORT PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL; GLEW_FUN_EXPORT PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL; GLEW_FUN_EXPORT PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKPROC __glewDebugMessageCallback; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECONTROLPROC __glewDebugMessageControl; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert; GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog; GLEW_FUN_EXPORT PFNGLGETOBJECTLABELPROC __glewGetObjectLabel; GLEW_FUN_EXPORT PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel; GLEW_FUN_EXPORT PFNGLGETPOINTERVPROC __glewGetPointerv; GLEW_FUN_EXPORT PFNGLOBJECTLABELPROC __glewObjectLabel; GLEW_FUN_EXPORT PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel; GLEW_FUN_EXPORT PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup; GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled; GLEW_FUN_EXPORT PFNGLDELETEBUFFERREGIONPROC __glewDeleteBufferRegion; GLEW_FUN_EXPORT PFNGLDRAWBUFFERREGIONPROC __glewDrawBufferRegion; GLEW_FUN_EXPORT PFNGLNEWBUFFERREGIONPROC __glewNewBufferRegion; GLEW_FUN_EXPORT PFNGLREADBUFFERREGIONPROC __glewReadBufferRegion; GLEW_FUN_EXPORT PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA; GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA; GLEW_FUN_EXPORT PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV; GLEW_FUN_EXPORT PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV; GLEW_FUN_EXPORT PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV; GLEW_FUN_EXPORT PFNGLISIMAGEHANDLERESIDENTNVPROC __glewIsImageHandleResidentNV; GLEW_FUN_EXPORT PFNGLISTEXTUREHANDLERESIDENTNVPROC __glewIsTextureHandleResidentNV; GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC __glewMakeImageHandleNonResidentNV; GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLERESIDENTNVPROC __glewMakeImageHandleResidentNV; GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC __glewMakeTextureHandleNonResidentNV; GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLERESIDENTNVPROC __glewMakeTextureHandleResidentNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC __glewProgramUniformHandleui64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleui64vNV; GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV; GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV; GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV; GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV; GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV; GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV; GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV; GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV; GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV; GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV; GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV; GLEW_FUN_EXPORT PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV; GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV; GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV; GLEW_FUN_EXPORT PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV; GLEW_FUN_EXPORT PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV; GLEW_FUN_EXPORT PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV; GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV; GLEW_FUN_EXPORT PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV; GLEW_FUN_EXPORT PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV; GLEW_FUN_EXPORT PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV; GLEW_FUN_EXPORT PFNGLFINISHFENCENVPROC __glewFinishFenceNV; GLEW_FUN_EXPORT PFNGLGENFENCESNVPROC __glewGenFencesNV; GLEW_FUN_EXPORT PFNGLGETFENCEIVNVPROC __glewGetFenceivNV; GLEW_FUN_EXPORT PFNGLISFENCENVPROC __glewIsFenceNV; GLEW_FUN_EXPORT PFNGLSETFENCENVPROC __glewSetFenceNV; GLEW_FUN_EXPORT PFNGLTESTFENCENVPROC __glewTestFenceNV; GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV; GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV; GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV; GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV; GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV; GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV; GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV; GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV; GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV; GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV; GLEW_FUN_EXPORT PFNGLGETUNIFORMI64VNVPROC __glewGetUniformi64vNV; GLEW_FUN_EXPORT PFNGLGETUNIFORMUI64VNVPROC __glewGetUniformui64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64NVPROC __glewProgramUniform1i64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64VNVPROC __glewProgramUniform1i64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64NVPROC __glewProgramUniform1ui64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64VNVPROC __glewProgramUniform1ui64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64NVPROC __glewProgramUniform2i64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64VNVPROC __glewProgramUniform2i64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64NVPROC __glewProgramUniform2ui64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64VNVPROC __glewProgramUniform2ui64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64NVPROC __glewProgramUniform3i64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64VNVPROC __glewProgramUniform3i64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64NVPROC __glewProgramUniform3ui64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64VNVPROC __glewProgramUniform3ui64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64NVPROC __glewProgramUniform4i64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64VNVPROC __glewProgramUniform4i64vNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64NVPROC __glewProgramUniform4ui64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64VNVPROC __glewProgramUniform4ui64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM1I64NVPROC __glewUniform1i64NV; GLEW_FUN_EXPORT PFNGLUNIFORM1I64VNVPROC __glewUniform1i64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM1UI64NVPROC __glewUniform1ui64NV; GLEW_FUN_EXPORT PFNGLUNIFORM1UI64VNVPROC __glewUniform1ui64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM2I64NVPROC __glewUniform2i64NV; GLEW_FUN_EXPORT PFNGLUNIFORM2I64VNVPROC __glewUniform2i64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM2UI64NVPROC __glewUniform2ui64NV; GLEW_FUN_EXPORT PFNGLUNIFORM2UI64VNVPROC __glewUniform2ui64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM3I64NVPROC __glewUniform3i64NV; GLEW_FUN_EXPORT PFNGLUNIFORM3I64VNVPROC __glewUniform3i64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM3UI64NVPROC __glewUniform3ui64NV; GLEW_FUN_EXPORT PFNGLUNIFORM3UI64VNVPROC __glewUniform3ui64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM4I64NVPROC __glewUniform4i64NV; GLEW_FUN_EXPORT PFNGLUNIFORM4I64VNVPROC __glewUniform4i64vNV; GLEW_FUN_EXPORT PFNGLUNIFORM4UI64NVPROC __glewUniform4ui64NV; GLEW_FUN_EXPORT PFNGLUNIFORM4UI64VNVPROC __glewUniform4ui64vNV; GLEW_FUN_EXPORT PFNGLCOLOR3HNVPROC __glewColor3hNV; GLEW_FUN_EXPORT PFNGLCOLOR3HVNVPROC __glewColor3hvNV; GLEW_FUN_EXPORT PFNGLCOLOR4HNVPROC __glewColor4hNV; GLEW_FUN_EXPORT PFNGLCOLOR4HVNVPROC __glewColor4hvNV; GLEW_FUN_EXPORT PFNGLFOGCOORDHNVPROC __glewFogCoordhNV; GLEW_FUN_EXPORT PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV; GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV; GLEW_FUN_EXPORT PFNGLNORMAL3HNVPROC __glewNormal3hNV; GLEW_FUN_EXPORT PFNGLNORMAL3HVNVPROC __glewNormal3hvNV; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV; GLEW_FUN_EXPORT PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV; GLEW_FUN_EXPORT PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV; GLEW_FUN_EXPORT PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV; GLEW_FUN_EXPORT PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV; GLEW_FUN_EXPORT PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV; GLEW_FUN_EXPORT PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV; GLEW_FUN_EXPORT PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV; GLEW_FUN_EXPORT PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV; GLEW_FUN_EXPORT PFNGLVERTEX2HNVPROC __glewVertex2hNV; GLEW_FUN_EXPORT PFNGLVERTEX2HVNVPROC __glewVertex2hvNV; GLEW_FUN_EXPORT PFNGLVERTEX3HNVPROC __glewVertex3hNV; GLEW_FUN_EXPORT PFNGLVERTEX3HVNVPROC __glewVertex3hvNV; GLEW_FUN_EXPORT PFNGLVERTEX4HNVPROC __glewVertex4hNV; GLEW_FUN_EXPORT PFNGLVERTEX4HVNVPROC __glewVertex4hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV; GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV; GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV; GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV; GLEW_FUN_EXPORT PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV; GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV; GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV; GLEW_FUN_EXPORT PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV; GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV; GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV; GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV; GLEW_FUN_EXPORT PFNGLCOPYPATHNVPROC __glewCopyPathNV; GLEW_FUN_EXPORT PFNGLCOVERFILLPATHINSTANCEDNVPROC __glewCoverFillPathInstancedNV; GLEW_FUN_EXPORT PFNGLCOVERFILLPATHNVPROC __glewCoverFillPathNV; GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHINSTANCEDNVPROC __glewCoverStrokePathInstancedNV; GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHNVPROC __glewCoverStrokePathNV; GLEW_FUN_EXPORT PFNGLDELETEPATHSNVPROC __glewDeletePathsNV; GLEW_FUN_EXPORT PFNGLGENPATHSNVPROC __glewGenPathsNV; GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENFVNVPROC __glewGetPathColorGenfvNV; GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENIVNVPROC __glewGetPathColorGenivNV; GLEW_FUN_EXPORT PFNGLGETPATHCOMMANDSNVPROC __glewGetPathCommandsNV; GLEW_FUN_EXPORT PFNGLGETPATHCOORDSNVPROC __glewGetPathCoordsNV; GLEW_FUN_EXPORT PFNGLGETPATHDASHARRAYNVPROC __glewGetPathDashArrayNV; GLEW_FUN_EXPORT PFNGLGETPATHLENGTHNVPROC __glewGetPathLengthNV; GLEW_FUN_EXPORT PFNGLGETPATHMETRICRANGENVPROC __glewGetPathMetricRangeNV; GLEW_FUN_EXPORT PFNGLGETPATHMETRICSNVPROC __glewGetPathMetricsNV; GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERFVNVPROC __glewGetPathParameterfvNV; GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERIVNVPROC __glewGetPathParameterivNV; GLEW_FUN_EXPORT PFNGLGETPATHSPACINGNVPROC __glewGetPathSpacingNV; GLEW_FUN_EXPORT PFNGLGETPATHTEXGENFVNVPROC __glewGetPathTexGenfvNV; GLEW_FUN_EXPORT PFNGLGETPATHTEXGENIVNVPROC __glewGetPathTexGenivNV; GLEW_FUN_EXPORT PFNGLINTERPOLATEPATHSNVPROC __glewInterpolatePathsNV; GLEW_FUN_EXPORT PFNGLISPATHNVPROC __glewIsPathNV; GLEW_FUN_EXPORT PFNGLISPOINTINFILLPATHNVPROC __glewIsPointInFillPathNV; GLEW_FUN_EXPORT PFNGLISPOINTINSTROKEPATHNVPROC __glewIsPointInStrokePathNV; GLEW_FUN_EXPORT PFNGLPATHCOLORGENNVPROC __glewPathColorGenNV; GLEW_FUN_EXPORT PFNGLPATHCOMMANDSNVPROC __glewPathCommandsNV; GLEW_FUN_EXPORT PFNGLPATHCOORDSNVPROC __glewPathCoordsNV; GLEW_FUN_EXPORT PFNGLPATHCOVERDEPTHFUNCNVPROC __glewPathCoverDepthFuncNV; GLEW_FUN_EXPORT PFNGLPATHDASHARRAYNVPROC __glewPathDashArrayNV; GLEW_FUN_EXPORT PFNGLPATHFOGGENNVPROC __glewPathFogGenNV; GLEW_FUN_EXPORT PFNGLPATHGLYPHRANGENVPROC __glewPathGlyphRangeNV; GLEW_FUN_EXPORT PFNGLPATHGLYPHSNVPROC __glewPathGlyphsNV; GLEW_FUN_EXPORT PFNGLPATHPARAMETERFNVPROC __glewPathParameterfNV; GLEW_FUN_EXPORT PFNGLPATHPARAMETERFVNVPROC __glewPathParameterfvNV; GLEW_FUN_EXPORT PFNGLPATHPARAMETERINVPROC __glewPathParameteriNV; GLEW_FUN_EXPORT PFNGLPATHPARAMETERIVNVPROC __glewPathParameterivNV; GLEW_FUN_EXPORT PFNGLPATHSTENCILDEPTHOFFSETNVPROC __glewPathStencilDepthOffsetNV; GLEW_FUN_EXPORT PFNGLPATHSTENCILFUNCNVPROC __glewPathStencilFuncNV; GLEW_FUN_EXPORT PFNGLPATHSTRINGNVPROC __glewPathStringNV; GLEW_FUN_EXPORT PFNGLPATHSUBCOMMANDSNVPROC __glewPathSubCommandsNV; GLEW_FUN_EXPORT PFNGLPATHSUBCOORDSNVPROC __glewPathSubCoordsNV; GLEW_FUN_EXPORT PFNGLPATHTEXGENNVPROC __glewPathTexGenNV; GLEW_FUN_EXPORT PFNGLPOINTALONGPATHNVPROC __glewPointAlongPathNV; GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHINSTANCEDNVPROC __glewStencilFillPathInstancedNV; GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHNVPROC __glewStencilFillPathNV; GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC __glewStencilStrokePathInstancedNV; GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHNVPROC __glewStencilStrokePathNV; GLEW_FUN_EXPORT PFNGLTRANSFORMPATHNVPROC __glewTransformPathNV; GLEW_FUN_EXPORT PFNGLWEIGHTPATHSNVPROC __glewWeightPathsNV; GLEW_FUN_EXPORT PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV; GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV; GLEW_FUN_EXPORT PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV; GLEW_FUN_EXPORT PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV; GLEW_FUN_EXPORT PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV; GLEW_FUN_EXPORT PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV; GLEW_FUN_EXPORT PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV; GLEW_FUN_EXPORT PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV; GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV; GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV; GLEW_FUN_EXPORT PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV; GLEW_FUN_EXPORT PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV; GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV; GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV; GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV; GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV; GLEW_FUN_EXPORT PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV; GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV; GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV; GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV; GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV; GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV; GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV; GLEW_FUN_EXPORT PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV; GLEW_FUN_EXPORT PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV; GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERUI64VNVPROC __glewGetBufferParameterui64vNV; GLEW_FUN_EXPORT PFNGLGETINTEGERUI64VNVPROC __glewGetIntegerui64vNV; GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC __glewGetNamedBufferParameterui64vNV; GLEW_FUN_EXPORT PFNGLISBUFFERRESIDENTNVPROC __glewIsBufferResidentNV; GLEW_FUN_EXPORT PFNGLISNAMEDBUFFERRESIDENTNVPROC __glewIsNamedBufferResidentNV; GLEW_FUN_EXPORT PFNGLMAKEBUFFERNONRESIDENTNVPROC __glewMakeBufferNonResidentNV; GLEW_FUN_EXPORT PFNGLMAKEBUFFERRESIDENTNVPROC __glewMakeBufferResidentNV; GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC __glewMakeNamedBufferNonResidentNV; GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERRESIDENTNVPROC __glewMakeNamedBufferResidentNV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64NVPROC __glewProgramUniformui64NV; GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV; GLEW_FUN_EXPORT PFNGLUNIFORMUI64NVPROC __glewUniformui64NV; GLEW_FUN_EXPORT PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV; GLEW_FUN_EXPORT PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV; GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV; GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTexImage3DMultisampleCoverageNV; GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTextureImage2DMultisampleCoverageNV; GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC __glewTextureImage2DMultisampleNV; GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTextureImage3DMultisampleCoverageNV; GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC __glewTextureImage3DMultisampleNV; GLEW_FUN_EXPORT PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV; GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV; GLEW_FUN_EXPORT PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV; GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV; GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV; GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV; GLEW_FUN_EXPORT PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV; GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV; GLEW_FUN_EXPORT PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV; GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV; GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV; GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKNVPROC __glewBindTransformFeedbackNV; GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSNVPROC __glewDeleteTransformFeedbacksNV; GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKNVPROC __glewDrawTransformFeedbackNV; GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSNVPROC __glewGenTransformFeedbacksNV; GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKNVPROC __glewIsTransformFeedbackNV; GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKNVPROC __glewPauseTransformFeedbackNV; GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKNVPROC __glewResumeTransformFeedbackNV; GLEW_FUN_EXPORT PFNGLVDPAUFININVPROC __glewVDPAUFiniNV; GLEW_FUN_EXPORT PFNGLVDPAUGETSURFACEIVNVPROC __glewVDPAUGetSurfaceivNV; GLEW_FUN_EXPORT PFNGLVDPAUINITNVPROC __glewVDPAUInitNV; GLEW_FUN_EXPORT PFNGLVDPAUISSURFACENVPROC __glewVDPAUIsSurfaceNV; GLEW_FUN_EXPORT PFNGLVDPAUMAPSURFACESNVPROC __glewVDPAUMapSurfacesNV; GLEW_FUN_EXPORT PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC __glewVDPAURegisterOutputSurfaceNV; GLEW_FUN_EXPORT PFNGLVDPAUREGISTERVIDEOSURFACENVPROC __glewVDPAURegisterVideoSurfaceNV; GLEW_FUN_EXPORT PFNGLVDPAUSURFACEACCESSNVPROC __glewVDPAUSurfaceAccessNV; GLEW_FUN_EXPORT PFNGLVDPAUUNMAPSURFACESNVPROC __glewVDPAUUnmapSurfacesNV; GLEW_FUN_EXPORT PFNGLVDPAUUNREGISTERSURFACENVPROC __glewVDPAUUnregisterSurfaceNV; GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV; GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLI64VNVPROC __glewGetVertexAttribLi64vNV; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLUI64VNVPROC __glewGetVertexAttribLui64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64NVPROC __glewVertexAttribL1i64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64VNVPROC __glewVertexAttribL1i64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64NVPROC __glewVertexAttribL1ui64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64VNVPROC __glewVertexAttribL1ui64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64NVPROC __glewVertexAttribL2i64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64VNVPROC __glewVertexAttribL2i64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64NVPROC __glewVertexAttribL2ui64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64VNVPROC __glewVertexAttribL2ui64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64NVPROC __glewVertexAttribL3i64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64VNVPROC __glewVertexAttribL3i64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64NVPROC __glewVertexAttribL3ui64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64VNVPROC __glewVertexAttribL3ui64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64NVPROC __glewVertexAttribL4i64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64VNVPROC __glewVertexAttribL4i64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64NVPROC __glewVertexAttribL4ui64NV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64VNVPROC __glewVertexAttribL4ui64vNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLFORMATNVPROC __glewVertexAttribLFormatNV; GLEW_FUN_EXPORT PFNGLBUFFERADDRESSRANGENVPROC __glewBufferAddressRangeNV; GLEW_FUN_EXPORT PFNGLCOLORFORMATNVPROC __glewColorFormatNV; GLEW_FUN_EXPORT PFNGLEDGEFLAGFORMATNVPROC __glewEdgeFlagFormatNV; GLEW_FUN_EXPORT PFNGLFOGCOORDFORMATNVPROC __glewFogCoordFormatNV; GLEW_FUN_EXPORT PFNGLGETINTEGERUI64I_VNVPROC __glewGetIntegerui64i_vNV; GLEW_FUN_EXPORT PFNGLINDEXFORMATNVPROC __glewIndexFormatNV; GLEW_FUN_EXPORT PFNGLNORMALFORMATNVPROC __glewNormalFormatNV; GLEW_FUN_EXPORT PFNGLSECONDARYCOLORFORMATNVPROC __glewSecondaryColorFormatNV; GLEW_FUN_EXPORT PFNGLTEXCOORDFORMATNVPROC __glewTexCoordFormatNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBFORMATNVPROC __glewVertexAttribFormatNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIFORMATNVPROC __glewVertexAttribIFormatNV; GLEW_FUN_EXPORT PFNGLVERTEXFORMATNVPROC __glewVertexFormatNV; GLEW_FUN_EXPORT PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV; GLEW_FUN_EXPORT PFNGLBINDPROGRAMNVPROC __glewBindProgramNV; GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV; GLEW_FUN_EXPORT PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV; GLEW_FUN_EXPORT PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV; GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV; GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV; GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV; GLEW_FUN_EXPORT PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV; GLEW_FUN_EXPORT PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV; GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV; GLEW_FUN_EXPORT PFNGLISPROGRAMNVPROC __glewIsProgramNV; GLEW_FUN_EXPORT PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV; GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV; GLEW_FUN_EXPORT PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV; GLEW_FUN_EXPORT PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV; GLEW_FUN_EXPORT PFNGLBEGINVIDEOCAPTURENVPROC __glewBeginVideoCaptureNV; GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC __glewBindVideoCaptureStreamBufferNV; GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC __glewBindVideoCaptureStreamTextureNV; GLEW_FUN_EXPORT PFNGLENDVIDEOCAPTURENVPROC __glewEndVideoCaptureNV; GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMDVNVPROC __glewGetVideoCaptureStreamdvNV; GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMFVNVPROC __glewGetVideoCaptureStreamfvNV; GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMIVNVPROC __glewGetVideoCaptureStreamivNV; GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTUREIVNVPROC __glewGetVideoCaptureivNV; GLEW_FUN_EXPORT PFNGLVIDEOCAPTURENVPROC __glewVideoCaptureNV; GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV; GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV; GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV; GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES; GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES; GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES; GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES; GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES; GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES; GLEW_FUN_EXPORT PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL; GLEW_FUN_EXPORT PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL; GLEW_FUN_EXPORT PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL; GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS; GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS; GLEW_FUN_EXPORT PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS; GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS; GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS; GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS; GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS; GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS; GLEW_FUN_EXPORT PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS; GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS; GLEW_FUN_EXPORT PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS; GLEW_FUN_EXPORT PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS; GLEW_FUN_EXPORT PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX; GLEW_FUN_EXPORT PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX; GLEW_FUN_EXPORT PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX; GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX; GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX; GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX; GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX; GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX; GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX; GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX; GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX; GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX; GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX; GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX; GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX; GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX; GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX; GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX; GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX; GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX; GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI; GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI; GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI; GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI; GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI; GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN; GLEW_FUN_EXPORT PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN; GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN; GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN; GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN; GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN; GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN; GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN; GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN; GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN; #if defined(GLEW_MX) && !defined(_WIN32) struct GLEWContextStruct { #endif /* GLEW_MX */ GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2_1; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_3; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_4; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_5; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_0; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_1; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_0; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_1; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_2; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_3; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_0; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_1; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_2; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_3; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_blend_minmax_factor; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_conservative_depth; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_debug_output; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_depth_clamp_separate; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_draw_buffers_blend; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_multi_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_name_gen_delete; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_performance_monitor; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_pinned_memory; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_query_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sample_positions; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_seamless_cubemap_per_texture; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_export; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_stencil_operation_extended; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_texture4; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback3_lines_triangles; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_layer; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_tessellator; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_viewport_index; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_aux_depth_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_flush_buffer_range; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_object_purgeable; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_pixel_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_rgb_422; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_row_bytes; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_range; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_program_evaluators; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_ycbcr_422; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES2_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES3_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_arrays_of_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_base_instance; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_blend_func_extended; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_cl_event; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_clear_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compressed_texture_pixel_storage; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compute_shader; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_conservative_depth; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_image; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_debug_output; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_buffer_float; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers_blend; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_elements_base_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_instanced; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_attrib_location; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_uniform_location; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_coord_conventions; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_layer_viewport; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program_shadow; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_shader; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_no_attachments; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_sRGB; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_geometry_shader4; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_get_program_binary; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader5; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader_fp64; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_instanced_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query2; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_invalidate_subdata; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_alignment; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_range; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multi_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query2; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pixel_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_program_interface_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_provoking_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robust_buffer_access_behavior; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_application_isolation; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_share_group_isolation; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sample_shading; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sampler_objects; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cube_map; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_separate_shader_objects; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_atomic_counters; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_bit_encoding; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_load_store; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_size; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_precision; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_stencil_export; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_storage_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_subroutine; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_texture_lod; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_100; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_420pack; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_include; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_packing; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_stencil_texturing; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sync; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_tessellation_shader; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_border_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object_rgb32; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_range; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_bptc; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_rgtc; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map_array; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_gather; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_levels; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_lod; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rg; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rgb10_a2ui; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_swizzle; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_view; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_timer_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback2; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback3; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback_instanced; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_uniform_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_bgra; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_attrib_64bit; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_attrib_binding; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_viewport_array; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos; GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites; GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3; GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route; GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_vertex_shader_output_point_size; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_draw_buffers; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_element_array; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_envmap_bumpmap; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_fragment_shader; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_map_object_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_meminfo; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_pn_triangles; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_separate_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_shader_texture_lod; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_text_fragment_shader; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_compression_3dc; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_env_combine3; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_float; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bindable_uniform; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_debug_marker; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_direct_state_access; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers2; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_instanced; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_blit; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_sRGB; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader4; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_program_parameters; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader4; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_depth_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_float; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_paletted_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform_color_table; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_point_parameters; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_provoking_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_shader_objects; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_store; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_clear_tag; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_wrap; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_subtexture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_array; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_latc; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_rgtc; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_integer; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB_decode; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_shared_exponent; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_snorm; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_swizzle; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_transform_feedback; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_bgra; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_attrib_64bit; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_x11_sync_object; GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator; GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_string_marker; GLEW_VAR_EXPORT GLboolean __GLEW_HP_convolution_border_modes; GLEW_VAR_EXPORT GLboolean __GLEW_HP_image_transform; GLEW_VAR_EXPORT GLboolean __GLEW_HP_occlusion_test; GLEW_VAR_EXPORT GLboolean __GLEW_HP_texture_lighting; GLEW_VAR_EXPORT GLboolean __GLEW_IBM_cull_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_IBM_multimode_draw_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_IBM_rasterpos_clip; GLEW_VAR_EXPORT GLboolean __GLEW_IBM_static_data; GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat; GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists; GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read; GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_debug; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_texture_compression_astc_ldr; GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region; GLEW_VAR_EXPORT GLboolean __GLEW_MESAX_texture_stack; GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert; GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers; GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos; GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture; GLEW_VAR_EXPORT GLboolean __GLEW_NVX_gpu_memory_info; GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_texture; GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square; GLEW_VAR_EXPORT GLboolean __GLEW_NV_conditional_render; GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color; GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_image; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped; GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators; GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence; GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fog_distance; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option; GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage; GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program_fp64; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_shader5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float; GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent; GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_coverage; GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint; GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query; GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_path_rendering; GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range; GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite; GLEW_VAR_EXPORT GLboolean __GLEW_NV_present_video; GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart; GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners; GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load; GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_barrier; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3; GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback; GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vdpau_interop; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_attrib_integer_64bit; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_buffer_unified_memory; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program1_1; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_video_capture; GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates; GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture; GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format; GLEW_VAR_EXPORT GLboolean __GLEW_OES_single_precision; GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace; GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample; GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample; GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints; GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_error_string; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_extension_query; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_log; GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates; GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_point_line_texgen; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_edge_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_filter4; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_lod; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_convolution_accuracy; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb; GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix; GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table; GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table; GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_global_alpha; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_mesh_array; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_read_video_pixels; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading; GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog; GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; #ifdef GLEW_MX }; /* GLEWContextStruct */ #endif /* GLEW_MX */ /* ------------------------------------------------------------------------- */ /* error codes */ #define GLEW_OK 0 #define GLEW_NO_ERROR 0 #define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ #define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */ #define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */ /* string codes */ #define GLEW_VERSION 1 #define GLEW_VERSION_MAJOR 2 #define GLEW_VERSION_MINOR 3 #define GLEW_VERSION_MICRO 4 /* API */ #ifdef GLEW_MX typedef struct GLEWContextStruct GLEWContext; GLEWAPI GLenum GLEWAPIENTRY glewContextInit(GLEWContext * ctx); GLEWAPI GLboolean GLEWAPIENTRY glewContextIsSupported(const GLEWContext * ctx, const char * name); #define glewInit() glewContextInit(glewGetContext()) #define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) #define glewIsExtensionSupported(x) glewIsSupported(x) #define GLEW_GET_VAR(x) (*(const GLboolean *)&(glewGetContext()->x)) #ifdef _WIN32 #define GLEW_GET_FUN(x) glewGetContext()->x #else #define GLEW_GET_FUN(x) x #endif #else /* GLEW_MX */ GLEWAPI GLenum GLEWAPIENTRY glewInit(void); GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported(const char * name); #define glewIsExtensionSupported(x) glewIsSupported(x) #define GLEW_GET_VAR(x) (*(const GLboolean *)&x) #define GLEW_GET_FUN(x) x #endif /* GLEW_MX */ GLEWAPI GLboolean glewExperimental; GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension(const char * name); GLEWAPI const GLubyte * GLEWAPIENTRY glewGetErrorString(GLenum error); GLEWAPI const GLubyte * GLEWAPIENTRY glewGetString(GLenum name); #ifdef __cplusplus } #endif #ifdef GLEW_APIENTRY_DEFINED #undef GLEW_APIENTRY_DEFINED #undef APIENTRY #undef GLAPIENTRY #define GLAPIENTRY #endif #ifdef GLEW_CALLBACK_DEFINED #undef GLEW_CALLBACK_DEFINED #undef CALLBACK #endif #ifdef GLEW_WINGDIAPI_DEFINED #undef GLEW_WINGDIAPI_DEFINED #undef WINGDIAPI #endif #undef GLAPI /* #undef GLEWAPI */ #endif /* __glew_h__ */ DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glew/glxew.h000066400000000000000000002010101360473665400254100ustar00rootroot00000000000000/* ** The OpenGL Extension Wrangler Library ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** ** * Redistributions of source code must retain the above copyright notice, ** this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright notice, ** this list of conditions and the following disclaimer in the documentation ** and/or other materials provided with the distribution. ** * The name of the author may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF ** THE POSSIBILITY OF SUCH DAMAGE. */ /* * Mesa 3-D graphics library * Version: 7.0 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* ** Copyright (c) 2007 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. */ #ifndef __glxew_h__ #define __glxew_h__ #define __GLXEW_H__ #ifdef __glxext_h_ #error glxext.h included before glxew.h #endif #if defined(GLX_H) || defined(__GLX_glx_h__) || defined(__glx_h__) #error glx.h included before glxew.h #endif #define __glxext_h_ #define GLX_H #define __GLX_glx_h__ #define __glx_h__ #include "glew.h" #include #include #include #ifdef __cplusplus extern "C" { #endif /* ---------------------------- GLX_VERSION_1_0 --------------------------- */ #ifndef GLX_VERSION_1_0 #define GLX_VERSION_1_0 1 #define GLX_USE_GL 1 #define GLX_BUFFER_SIZE 2 #define GLX_LEVEL 3 #define GLX_RGBA 4 #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_BAD_SCREEN 1 #define GLX_BAD_ATTRIBUTE 2 #define GLX_NO_EXTENSION 3 #define GLX_BAD_VISUAL 4 #define GLX_BAD_CONTEXT 5 #define GLX_BAD_VALUE 6 #define GLX_BAD_ENUM 7 typedef XID GLXDrawable; typedef XID GLXPixmap; #ifdef __sun typedef struct __glXContextRec * GLXContext; #else typedef struct __GLXcontextRec * GLXContext; #endif typedef unsigned int GLXVideoDeviceNV; extern Bool glXQueryExtension(Display * dpy, int * errorBase, int * eventBase); extern Bool glXQueryVersion(Display * dpy, int * major, int * minor); extern int glXGetConfig(Display * dpy, XVisualInfo * vis, int attrib, int * value); extern XVisualInfo * glXChooseVisual(Display * dpy, int screen, int * attribList); extern GLXPixmap glXCreateGLXPixmap(Display * dpy, XVisualInfo * vis, Pixmap pixmap); extern void glXDestroyGLXPixmap(Display * dpy, GLXPixmap pix); extern GLXContext glXCreateContext(Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct); extern void glXDestroyContext(Display * dpy, GLXContext ctx); extern Bool glXIsDirect(Display * dpy, GLXContext ctx); extern void glXCopyContext(Display * dpy, GLXContext src, GLXContext dst, GLulong mask); extern Bool glXMakeCurrent(Display * dpy, GLXDrawable drawable, GLXContext ctx); extern GLXContext glXGetCurrentContext(void); extern GLXDrawable glXGetCurrentDrawable(void); extern void glXWaitGL(void); extern void glXWaitX(void); extern void glXSwapBuffers(Display * dpy, GLXDrawable drawable); extern void glXUseXFont(Font font, int first, int count, int listBase); #define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) #endif /* GLX_VERSION_1_0 */ /* ---------------------------- GLX_VERSION_1_1 --------------------------- */ #ifndef GLX_VERSION_1_1 #define GLX_VERSION_1_1 #define GLX_VENDOR 0x1 #define GLX_VERSION 0x2 #define GLX_EXTENSIONS 0x3 extern const char * glXQueryExtensionsString(Display * dpy, int screen); extern const char * glXGetClientString(Display * dpy, int name); extern const char * glXQueryServerString(Display * dpy, int screen, int name); #define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) #endif /* GLX_VERSION_1_1 */ /* ---------------------------- GLX_VERSION_1_2 ---------------------------- */ #ifndef GLX_VERSION_1_2 #define GLX_VERSION_1_2 1 typedef Display * (*PFNGLXGETCURRENTDISPLAYPROC)(void); #define glXGetCurrentDisplay GLXEW_GET_FUN(__glewXGetCurrentDisplay) #define GLXEW_VERSION_1_2 GLXEW_GET_VAR(__GLXEW_VERSION_1_2) #endif /* GLX_VERSION_1_2 */ /* ---------------------------- GLX_VERSION_1_3 ---------------------------- */ #ifndef GLX_VERSION_1_3 #define GLX_VERSION_1_3 1 #define GLX_RGBA_BIT 0x00000001 #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 #define GLX_WINDOW_BIT 0x00000001 #define GLX_COLOR_INDEX_BIT 0x00000002 #define GLX_PIXMAP_BIT 0x00000002 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 #define GLX_PBUFFER_BIT 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 #define GLX_AUX_BUFFERS_BIT 0x00000010 #define GLX_CONFIG_CAVEAT 0x20 #define GLX_DEPTH_BUFFER_BIT 0x00000020 #define GLX_X_VISUAL_TYPE 0x22 #define GLX_TRANSPARENT_TYPE 0x23 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 #define GLX_TRANSPARENT_RED_VALUE 0x25 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 #define GLX_STENCIL_BUFFER_BIT 0x00000040 #define GLX_ACCUM_BUFFER_BIT 0x00000080 #define GLX_NONE 0x8000 #define GLX_SLOW_CONFIG 0x8001 #define GLX_TRUE_COLOR 0x8002 #define GLX_DIRECT_COLOR 0x8003 #define GLX_PSEUDO_COLOR 0x8004 #define GLX_STATIC_COLOR 0x8005 #define GLX_GRAY_SCALE 0x8006 #define GLX_STATIC_GRAY 0x8007 #define GLX_TRANSPARENT_RGB 0x8008 #define GLX_TRANSPARENT_INDEX 0x8009 #define GLX_VISUAL_ID 0x800B #define GLX_SCREEN 0x800C #define GLX_NON_CONFORMANT_CONFIG 0x800D #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_X_RENDERABLE 0x8012 #define GLX_FBCONFIG_ID 0x8013 #define GLX_RGBA_TYPE 0x8014 #define GLX_COLOR_INDEX_TYPE 0x8015 #define GLX_MAX_PBUFFER_WIDTH 0x8016 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 #define GLX_MAX_PBUFFER_PIXELS 0x8018 #define GLX_PRESERVED_CONTENTS 0x801B #define GLX_LARGEST_PBUFFER 0x801C #define GLX_WIDTH 0x801D #define GLX_HEIGHT 0x801E #define GLX_EVENT_MASK 0x801F #define GLX_DAMAGED 0x8020 #define GLX_SAVED 0x8021 #define GLX_WINDOW 0x8022 #define GLX_PBUFFER 0x8023 #define GLX_PBUFFER_HEIGHT 0x8040 #define GLX_PBUFFER_WIDTH 0x8041 #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 #define GLX_DONT_CARE 0xFFFFFFFF typedef XID GLXFBConfigID; typedef XID GLXPbuffer; typedef XID GLXWindow; typedef struct __GLXFBConfigRec * GLXFBConfig; typedef struct { int event_type; int draw_type; unsigned long serial; Bool send_event; Display * display; GLXDrawable drawable; unsigned int buffer_mask; unsigned int aux_buffer; int x, y; int width, height; int count; } GLXPbufferClobberEvent; typedef union __GLXEvent { GLXPbufferClobberEvent glxpbufferclobber; long pad[24]; } GLXEvent; typedef GLXFBConfig * (*PFNGLXCHOOSEFBCONFIGPROC)(Display * dpy, int screen, const int * attrib_list, int * nelements); typedef GLXContext (*PFNGLXCREATENEWCONTEXTPROC)(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); typedef GLXPbuffer (*PFNGLXCREATEPBUFFERPROC)(Display * dpy, GLXFBConfig config, const int * attrib_list); typedef GLXPixmap (*PFNGLXCREATEPIXMAPPROC)(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); typedef GLXWindow (*PFNGLXCREATEWINDOWPROC)(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); typedef void (*PFNGLXDESTROYPBUFFERPROC)(Display * dpy, GLXPbuffer pbuf); typedef void (*PFNGLXDESTROYPIXMAPPROC)(Display * dpy, GLXPixmap pixmap); typedef void (*PFNGLXDESTROYWINDOWPROC)(Display * dpy, GLXWindow win); typedef GLXDrawable (*PFNGLXGETCURRENTREADDRAWABLEPROC)(void); typedef int (*PFNGLXGETFBCONFIGATTRIBPROC)(Display * dpy, GLXFBConfig config, int attribute, int * value); typedef GLXFBConfig * (*PFNGLXGETFBCONFIGSPROC)(Display * dpy, int screen, int * nelements); typedef void (*PFNGLXGETSELECTEDEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long * event_mask); typedef XVisualInfo * (*PFNGLXGETVISUALFROMFBCONFIGPROC)(Display * dpy, GLXFBConfig config); typedef Bool (*PFNGLXMAKECONTEXTCURRENTPROC)(Display * display, GLXDrawable draw, GLXDrawable read, GLXContext ctx); typedef int (*PFNGLXQUERYCONTEXTPROC)(Display * dpy, GLXContext ctx, int attribute, int * value); typedef void (*PFNGLXQUERYDRAWABLEPROC)(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); typedef void (*PFNGLXSELECTEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long event_mask); #define glXChooseFBConfig GLXEW_GET_FUN(__glewXChooseFBConfig) #define glXCreateNewContext GLXEW_GET_FUN(__glewXCreateNewContext) #define glXCreatePbuffer GLXEW_GET_FUN(__glewXCreatePbuffer) #define glXCreatePixmap GLXEW_GET_FUN(__glewXCreatePixmap) #define glXCreateWindow GLXEW_GET_FUN(__glewXCreateWindow) #define glXDestroyPbuffer GLXEW_GET_FUN(__glewXDestroyPbuffer) #define glXDestroyPixmap GLXEW_GET_FUN(__glewXDestroyPixmap) #define glXDestroyWindow GLXEW_GET_FUN(__glewXDestroyWindow) #define glXGetCurrentReadDrawable GLXEW_GET_FUN(__glewXGetCurrentReadDrawable) #define glXGetFBConfigAttrib GLXEW_GET_FUN(__glewXGetFBConfigAttrib) #define glXGetFBConfigs GLXEW_GET_FUN(__glewXGetFBConfigs) #define glXGetSelectedEvent GLXEW_GET_FUN(__glewXGetSelectedEvent) #define glXGetVisualFromFBConfig GLXEW_GET_FUN(__glewXGetVisualFromFBConfig) #define glXMakeContextCurrent GLXEW_GET_FUN(__glewXMakeContextCurrent) #define glXQueryContext GLXEW_GET_FUN(__glewXQueryContext) #define glXQueryDrawable GLXEW_GET_FUN(__glewXQueryDrawable) #define glXSelectEvent GLXEW_GET_FUN(__glewXSelectEvent) #define GLXEW_VERSION_1_3 GLXEW_GET_VAR(__GLXEW_VERSION_1_3) #endif /* GLX_VERSION_1_3 */ /* ---------------------------- GLX_VERSION_1_4 ---------------------------- */ #ifndef GLX_VERSION_1_4 #define GLX_VERSION_1_4 1 #define GLX_SAMPLE_BUFFERS 100000 #define GLX_SAMPLES 100001 extern void (*glXGetProcAddress(const GLubyte * procName))(void); #define GLXEW_VERSION_1_4 GLXEW_GET_VAR(__GLXEW_VERSION_1_4) #endif /* GLX_VERSION_1_4 */ /* -------------------------- GLX_3DFX_multisample ------------------------- */ #ifndef GLX_3DFX_multisample #define GLX_3DFX_multisample 1 #define GLX_SAMPLE_BUFFERS_3DFX 0x8050 #define GLX_SAMPLES_3DFX 0x8051 #define GLXEW_3DFX_multisample GLXEW_GET_VAR(__GLXEW_3DFX_multisample) #endif /* GLX_3DFX_multisample */ /* ------------------------ GLX_AMD_gpu_association ------------------------ */ #ifndef GLX_AMD_gpu_association #define GLX_AMD_gpu_association 1 #define GLX_GPU_VENDOR_AMD 0x1F00 #define GLX_GPU_RENDERER_STRING_AMD 0x1F01 #define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define GLX_GPU_RAM_AMD 0x21A3 #define GLX_GPU_CLOCK_AMD 0x21A4 #define GLX_GPU_NUM_PIPES_AMD 0x21A5 #define GLX_GPU_NUM_SIMD_AMD 0x21A6 #define GLX_GPU_NUM_RB_AMD 0x21A7 #define GLX_GPU_NUM_SPI_AMD 0x21A8 #define GLXEW_AMD_gpu_association GLXEW_GET_VAR(__GLXEW_AMD_gpu_association) #endif /* GLX_AMD_gpu_association */ /* ------------------------- GLX_ARB_create_context ------------------------ */ #ifndef GLX_ARB_create_context #define GLX_ARB_create_context 1 #define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 #define GLX_CONTEXT_FLAGS_ARB 0x2094 typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); #define glXCreateContextAttribsARB GLXEW_GET_FUN(__glewXCreateContextAttribsARB) #define GLXEW_ARB_create_context GLXEW_GET_VAR(__GLXEW_ARB_create_context) #endif /* GLX_ARB_create_context */ /* --------------------- GLX_ARB_create_context_profile -------------------- */ #ifndef GLX_ARB_create_context_profile #define GLX_ARB_create_context_profile 1 #define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 #define GLXEW_ARB_create_context_profile GLXEW_GET_VAR(__GLXEW_ARB_create_context_profile) #endif /* GLX_ARB_create_context_profile */ /* ------------------- GLX_ARB_create_context_robustness ------------------- */ #ifndef GLX_ARB_create_context_robustness #define GLX_ARB_create_context_robustness 1 #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 GLXEW_ARB_create_context_robustness GLXEW_GET_VAR(__GLXEW_ARB_create_context_robustness) #endif /* GLX_ARB_create_context_robustness */ /* ------------------------- GLX_ARB_fbconfig_float ------------------------ */ #ifndef GLX_ARB_fbconfig_float #define GLX_ARB_fbconfig_float 1 #define GLX_RGBA_FLOAT_BIT 0x00000004 #define GLX_RGBA_FLOAT_TYPE 0x20B9 #define GLXEW_ARB_fbconfig_float GLXEW_GET_VAR(__GLXEW_ARB_fbconfig_float) #endif /* GLX_ARB_fbconfig_float */ /* ------------------------ GLX_ARB_framebuffer_sRGB ----------------------- */ #ifndef GLX_ARB_framebuffer_sRGB #define GLX_ARB_framebuffer_sRGB 1 #define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 #define GLXEW_ARB_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_ARB_framebuffer_sRGB) #endif /* GLX_ARB_framebuffer_sRGB */ /* ------------------------ GLX_ARB_get_proc_address ----------------------- */ #ifndef GLX_ARB_get_proc_address #define GLX_ARB_get_proc_address 1 extern void (*glXGetProcAddressARB(const GLubyte * procName))(void); #define GLXEW_ARB_get_proc_address GLXEW_GET_VAR(__GLXEW_ARB_get_proc_address) #endif /* GLX_ARB_get_proc_address */ /* -------------------------- GLX_ARB_multisample -------------------------- */ #ifndef GLX_ARB_multisample #define GLX_ARB_multisample 1 #define GLX_SAMPLE_BUFFERS_ARB 100000 #define GLX_SAMPLES_ARB 100001 #define GLXEW_ARB_multisample GLXEW_GET_VAR(__GLXEW_ARB_multisample) #endif /* GLX_ARB_multisample */ /* ---------------- GLX_ARB_robustness_application_isolation --------------- */ #ifndef GLX_ARB_robustness_application_isolation #define GLX_ARB_robustness_application_isolation 1 #define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 #define GLXEW_ARB_robustness_application_isolation GLXEW_GET_VAR(__GLXEW_ARB_robustness_application_isolation) #endif /* GLX_ARB_robustness_application_isolation */ /* ---------------- GLX_ARB_robustness_share_group_isolation --------------- */ #ifndef GLX_ARB_robustness_share_group_isolation #define GLX_ARB_robustness_share_group_isolation 1 #define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 #define GLXEW_ARB_robustness_share_group_isolation GLXEW_GET_VAR(__GLXEW_ARB_robustness_share_group_isolation) #endif /* GLX_ARB_robustness_share_group_isolation */ /* ---------------------- GLX_ARB_vertex_buffer_object --------------------- */ #ifndef GLX_ARB_vertex_buffer_object #define GLX_ARB_vertex_buffer_object 1 #define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 #define GLXEW_ARB_vertex_buffer_object GLXEW_GET_VAR(__GLXEW_ARB_vertex_buffer_object) #endif /* GLX_ARB_vertex_buffer_object */ /* ----------------------- GLX_ATI_pixel_format_float ---------------------- */ #ifndef GLX_ATI_pixel_format_float #define GLX_ATI_pixel_format_float 1 #define GLX_RGBA_FLOAT_ATI_BIT 0x00000100 #define GLXEW_ATI_pixel_format_float GLXEW_GET_VAR(__GLXEW_ATI_pixel_format_float) #endif /* GLX_ATI_pixel_format_float */ /* ------------------------- GLX_ATI_render_texture ------------------------ */ #ifndef GLX_ATI_render_texture #define GLX_ATI_render_texture 1 #define GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 #define GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 #define GLX_TEXTURE_FORMAT_ATI 0x9802 #define GLX_TEXTURE_TARGET_ATI 0x9803 #define GLX_MIPMAP_TEXTURE_ATI 0x9804 #define GLX_TEXTURE_RGB_ATI 0x9805 #define GLX_TEXTURE_RGBA_ATI 0x9806 #define GLX_NO_TEXTURE_ATI 0x9807 #define GLX_TEXTURE_CUBE_MAP_ATI 0x9808 #define GLX_TEXTURE_1D_ATI 0x9809 #define GLX_TEXTURE_2D_ATI 0x980A #define GLX_MIPMAP_LEVEL_ATI 0x980B #define GLX_CUBE_MAP_FACE_ATI 0x980C #define GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D #define GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E #define GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F #define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 #define GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 #define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 #define GLX_FRONT_LEFT_ATI 0x9813 #define GLX_FRONT_RIGHT_ATI 0x9814 #define GLX_BACK_LEFT_ATI 0x9815 #define GLX_BACK_RIGHT_ATI 0x9816 #define GLX_AUX0_ATI 0x9817 #define GLX_AUX1_ATI 0x9818 #define GLX_AUX2_ATI 0x9819 #define GLX_AUX3_ATI 0x981A #define GLX_AUX4_ATI 0x981B #define GLX_AUX5_ATI 0x981C #define GLX_AUX6_ATI 0x981D #define GLX_AUX7_ATI 0x981E #define GLX_AUX8_ATI 0x981F #define GLX_AUX9_ATI 0x9820 #define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 #define GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 typedef void (*PFNGLXBINDTEXIMAGEATIPROC)(Display * dpy, GLXPbuffer pbuf, int buffer); typedef void (*PFNGLXDRAWABLEATTRIBATIPROC)(Display * dpy, GLXDrawable draw, const int * attrib_list); typedef void (*PFNGLXRELEASETEXIMAGEATIPROC)(Display * dpy, GLXPbuffer pbuf, int buffer); #define glXBindTexImageATI GLXEW_GET_FUN(__glewXBindTexImageATI) #define glXDrawableAttribATI GLXEW_GET_FUN(__glewXDrawableAttribATI) #define glXReleaseTexImageATI GLXEW_GET_FUN(__glewXReleaseTexImageATI) #define GLXEW_ATI_render_texture GLXEW_GET_VAR(__GLXEW_ATI_render_texture) #endif /* GLX_ATI_render_texture */ /* ------------------- GLX_EXT_create_context_es2_profile ------------------ */ #ifndef GLX_EXT_create_context_es2_profile #define GLX_EXT_create_context_es2_profile 1 #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #define GLXEW_EXT_create_context_es2_profile GLXEW_GET_VAR(__GLXEW_EXT_create_context_es2_profile) #endif /* GLX_EXT_create_context_es2_profile */ /* ------------------- GLX_EXT_create_context_es_profile ------------------- */ #ifndef GLX_EXT_create_context_es_profile #define GLX_EXT_create_context_es_profile 1 #define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #define GLXEW_EXT_create_context_es_profile GLXEW_GET_VAR(__GLXEW_EXT_create_context_es_profile) #endif /* GLX_EXT_create_context_es_profile */ /* --------------------- GLX_EXT_fbconfig_packed_float --------------------- */ #ifndef GLX_EXT_fbconfig_packed_float #define GLX_EXT_fbconfig_packed_float 1 #define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 #define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 #define GLXEW_EXT_fbconfig_packed_float GLXEW_GET_VAR(__GLXEW_EXT_fbconfig_packed_float) #endif /* GLX_EXT_fbconfig_packed_float */ /* ------------------------ GLX_EXT_framebuffer_sRGB ----------------------- */ #ifndef GLX_EXT_framebuffer_sRGB #define GLX_EXT_framebuffer_sRGB 1 #define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 #define GLXEW_EXT_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_EXT_framebuffer_sRGB) #endif /* GLX_EXT_framebuffer_sRGB */ /* ------------------------- GLX_EXT_import_context ------------------------ */ #ifndef GLX_EXT_import_context #define GLX_EXT_import_context 1 #define GLX_SHARE_CONTEXT_EXT 0x800A #define GLX_VISUAL_ID_EXT 0x800B #define GLX_SCREEN_EXT 0x800C typedef XID GLXContextID; typedef void (*PFNGLXFREECONTEXTEXTPROC)(Display * dpy, GLXContext context); typedef GLXContextID (*PFNGLXGETCONTEXTIDEXTPROC)(const GLXContext context); typedef GLXContext (*PFNGLXIMPORTCONTEXTEXTPROC)(Display * dpy, GLXContextID contextID); typedef int (*PFNGLXQUERYCONTEXTINFOEXTPROC)(Display * dpy, GLXContext context, int attribute, int * value); #define glXFreeContextEXT GLXEW_GET_FUN(__glewXFreeContextEXT) #define glXGetContextIDEXT GLXEW_GET_FUN(__glewXGetContextIDEXT) #define glXImportContextEXT GLXEW_GET_FUN(__glewXImportContextEXT) #define glXQueryContextInfoEXT GLXEW_GET_FUN(__glewXQueryContextInfoEXT) #define GLXEW_EXT_import_context GLXEW_GET_VAR(__GLXEW_EXT_import_context) #endif /* GLX_EXT_import_context */ /* -------------------------- GLX_EXT_scene_marker ------------------------- */ #ifndef GLX_EXT_scene_marker #define GLX_EXT_scene_marker 1 #define GLXEW_EXT_scene_marker GLXEW_GET_VAR(__GLXEW_EXT_scene_marker) #endif /* GLX_EXT_scene_marker */ /* -------------------------- GLX_EXT_swap_control ------------------------- */ #ifndef GLX_EXT_swap_control #define GLX_EXT_swap_control 1 #define GLX_SWAP_INTERVAL_EXT 0x20F1 #define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 typedef void (*PFNGLXSWAPINTERVALEXTPROC)(Display * dpy, GLXDrawable drawable, int interval); #define glXSwapIntervalEXT GLXEW_GET_FUN(__glewXSwapIntervalEXT) #define GLXEW_EXT_swap_control GLXEW_GET_VAR(__GLXEW_EXT_swap_control) #endif /* GLX_EXT_swap_control */ /* ----------------------- GLX_EXT_swap_control_tear ----------------------- */ #ifndef GLX_EXT_swap_control_tear #define GLX_EXT_swap_control_tear 1 #define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 #define GLXEW_EXT_swap_control_tear GLXEW_GET_VAR(__GLXEW_EXT_swap_control_tear) #endif /* GLX_EXT_swap_control_tear */ /* ---------------------- GLX_EXT_texture_from_pixmap ---------------------- */ #ifndef GLX_EXT_texture_from_pixmap #define GLX_EXT_texture_from_pixmap 1 #define GLX_TEXTURE_1D_BIT_EXT 0x00000001 #define GLX_TEXTURE_2D_BIT_EXT 0x00000002 #define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 #define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 #define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 #define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 #define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 #define GLX_Y_INVERTED_EXT 0x20D4 #define GLX_TEXTURE_FORMAT_EXT 0x20D5 #define GLX_TEXTURE_TARGET_EXT 0x20D6 #define GLX_MIPMAP_TEXTURE_EXT 0x20D7 #define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 #define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 #define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA #define GLX_TEXTURE_1D_EXT 0x20DB #define GLX_TEXTURE_2D_EXT 0x20DC #define GLX_TEXTURE_RECTANGLE_EXT 0x20DD #define GLX_FRONT_LEFT_EXT 0x20DE #define GLX_FRONT_RIGHT_EXT 0x20DF #define GLX_BACK_LEFT_EXT 0x20E0 #define GLX_BACK_RIGHT_EXT 0x20E1 #define GLX_AUX0_EXT 0x20E2 #define GLX_AUX1_EXT 0x20E3 #define GLX_AUX2_EXT 0x20E4 #define GLX_AUX3_EXT 0x20E5 #define GLX_AUX4_EXT 0x20E6 #define GLX_AUX5_EXT 0x20E7 #define GLX_AUX6_EXT 0x20E8 #define GLX_AUX7_EXT 0x20E9 #define GLX_AUX8_EXT 0x20EA #define GLX_AUX9_EXT 0x20EB typedef void (*PFNGLXBINDTEXIMAGEEXTPROC)(Display * display, GLXDrawable drawable, int buffer, const int * attrib_list); typedef void (*PFNGLXRELEASETEXIMAGEEXTPROC)(Display * display, GLXDrawable drawable, int buffer); #define glXBindTexImageEXT GLXEW_GET_FUN(__glewXBindTexImageEXT) #define glXReleaseTexImageEXT GLXEW_GET_FUN(__glewXReleaseTexImageEXT) #define GLXEW_EXT_texture_from_pixmap GLXEW_GET_VAR(__GLXEW_EXT_texture_from_pixmap) #endif /* GLX_EXT_texture_from_pixmap */ /* -------------------------- GLX_EXT_visual_info -------------------------- */ #ifndef GLX_EXT_visual_info #define GLX_EXT_visual_info 1 #define GLX_X_VISUAL_TYPE_EXT 0x22 #define GLX_TRANSPARENT_TYPE_EXT 0x23 #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 #define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 #define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 #define GLX_NONE_EXT 0x8000 #define GLX_TRUE_COLOR_EXT 0x8002 #define GLX_DIRECT_COLOR_EXT 0x8003 #define GLX_PSEUDO_COLOR_EXT 0x8004 #define GLX_STATIC_COLOR_EXT 0x8005 #define GLX_GRAY_SCALE_EXT 0x8006 #define GLX_STATIC_GRAY_EXT 0x8007 #define GLX_TRANSPARENT_RGB_EXT 0x8008 #define GLX_TRANSPARENT_INDEX_EXT 0x8009 #define GLXEW_EXT_visual_info GLXEW_GET_VAR(__GLXEW_EXT_visual_info) #endif /* GLX_EXT_visual_info */ /* ------------------------- GLX_EXT_visual_rating ------------------------- */ #ifndef GLX_EXT_visual_rating #define GLX_EXT_visual_rating 1 #define GLX_VISUAL_CAVEAT_EXT 0x20 #define GLX_SLOW_VISUAL_EXT 0x8001 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D #define GLXEW_EXT_visual_rating GLXEW_GET_VAR(__GLXEW_EXT_visual_rating) #endif /* GLX_EXT_visual_rating */ /* -------------------------- GLX_INTEL_swap_event ------------------------- */ #ifndef GLX_INTEL_swap_event #define GLX_INTEL_swap_event 1 #define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 #define GLX_COPY_COMPLETE_INTEL 0x8181 #define GLX_FLIP_COMPLETE_INTEL 0x8182 #define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 #define GLXEW_INTEL_swap_event GLXEW_GET_VAR(__GLXEW_INTEL_swap_event) #endif /* GLX_INTEL_swap_event */ /* -------------------------- GLX_MESA_agp_offset -------------------------- */ #ifndef GLX_MESA_agp_offset #define GLX_MESA_agp_offset 1 typedef unsigned int (*PFNGLXGETAGPOFFSETMESAPROC)(const void * pointer); #define glXGetAGPOffsetMESA GLXEW_GET_FUN(__glewXGetAGPOffsetMESA) #define GLXEW_MESA_agp_offset GLXEW_GET_VAR(__GLXEW_MESA_agp_offset) #endif /* GLX_MESA_agp_offset */ /* ------------------------ GLX_MESA_copy_sub_buffer ----------------------- */ #ifndef GLX_MESA_copy_sub_buffer #define GLX_MESA_copy_sub_buffer 1 typedef void (*PFNGLXCOPYSUBBUFFERMESAPROC)(Display * dpy, GLXDrawable drawable, int x, int y, int width, int height); #define glXCopySubBufferMESA GLXEW_GET_FUN(__glewXCopySubBufferMESA) #define GLXEW_MESA_copy_sub_buffer GLXEW_GET_VAR(__GLXEW_MESA_copy_sub_buffer) #endif /* GLX_MESA_copy_sub_buffer */ /* ------------------------ GLX_MESA_pixmap_colormap ----------------------- */ #ifndef GLX_MESA_pixmap_colormap #define GLX_MESA_pixmap_colormap 1 typedef GLXPixmap (*PFNGLXCREATEGLXPIXMAPMESAPROC)(Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap); #define glXCreateGLXPixmapMESA GLXEW_GET_FUN(__glewXCreateGLXPixmapMESA) #define GLXEW_MESA_pixmap_colormap GLXEW_GET_VAR(__GLXEW_MESA_pixmap_colormap) #endif /* GLX_MESA_pixmap_colormap */ /* ------------------------ GLX_MESA_release_buffers ----------------------- */ #ifndef GLX_MESA_release_buffers #define GLX_MESA_release_buffers 1 typedef Bool (*PFNGLXRELEASEBUFFERSMESAPROC)(Display * dpy, GLXDrawable d); #define glXReleaseBuffersMESA GLXEW_GET_FUN(__glewXReleaseBuffersMESA) #define GLXEW_MESA_release_buffers GLXEW_GET_VAR(__GLXEW_MESA_release_buffers) #endif /* GLX_MESA_release_buffers */ /* ------------------------- GLX_MESA_set_3dfx_mode ------------------------ */ #ifndef GLX_MESA_set_3dfx_mode #define GLX_MESA_set_3dfx_mode 1 #define GLX_3DFX_WINDOW_MODE_MESA 0x1 #define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 typedef GLboolean (*PFNGLXSET3DFXMODEMESAPROC)(GLint mode); #define glXSet3DfxModeMESA GLXEW_GET_FUN(__glewXSet3DfxModeMESA) #define GLXEW_MESA_set_3dfx_mode GLXEW_GET_VAR(__GLXEW_MESA_set_3dfx_mode) #endif /* GLX_MESA_set_3dfx_mode */ /* ------------------------- GLX_MESA_swap_control ------------------------- */ #ifndef GLX_MESA_swap_control #define GLX_MESA_swap_control 1 typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void); typedef int (*PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval); #define glXGetSwapIntervalMESA GLXEW_GET_FUN(__glewXGetSwapIntervalMESA) #define glXSwapIntervalMESA GLXEW_GET_FUN(__glewXSwapIntervalMESA) #define GLXEW_MESA_swap_control GLXEW_GET_VAR(__GLXEW_MESA_swap_control) #endif /* GLX_MESA_swap_control */ /* --------------------------- GLX_NV_copy_image --------------------------- */ #ifndef GLX_NV_copy_image #define GLX_NV_copy_image 1 typedef void (*PFNGLXCOPYIMAGESUBDATANVPROC)(Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #define glXCopyImageSubDataNV GLXEW_GET_FUN(__glewXCopyImageSubDataNV) #define GLXEW_NV_copy_image GLXEW_GET_VAR(__GLXEW_NV_copy_image) #endif /* GLX_NV_copy_image */ /* -------------------------- GLX_NV_float_buffer -------------------------- */ #ifndef GLX_NV_float_buffer #define GLX_NV_float_buffer 1 #define GLX_FLOAT_COMPONENTS_NV 0x20B0 #define GLXEW_NV_float_buffer GLXEW_GET_VAR(__GLXEW_NV_float_buffer) #endif /* GLX_NV_float_buffer */ /* ---------------------- GLX_NV_multisample_coverage ---------------------- */ #ifndef GLX_NV_multisample_coverage #define GLX_NV_multisample_coverage 1 #define GLX_COLOR_SAMPLES_NV 0x20B3 #define GLX_COVERAGE_SAMPLES_NV 100001 #define GLXEW_NV_multisample_coverage GLXEW_GET_VAR(__GLXEW_NV_multisample_coverage) #endif /* GLX_NV_multisample_coverage */ /* -------------------------- GLX_NV_present_video ------------------------- */ #ifndef GLX_NV_present_video #define GLX_NV_present_video 1 #define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 typedef int (*PFNGLXBINDVIDEODEVICENVPROC)(Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list); typedef unsigned int * (*PFNGLXENUMERATEVIDEODEVICESNVPROC)(Display * dpy, int screen, int * nelements); #define glXBindVideoDeviceNV GLXEW_GET_FUN(__glewXBindVideoDeviceNV) #define glXEnumerateVideoDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoDevicesNV) #define GLXEW_NV_present_video GLXEW_GET_VAR(__GLXEW_NV_present_video) #endif /* GLX_NV_present_video */ /* --------------------------- GLX_NV_swap_group --------------------------- */ #ifndef GLX_NV_swap_group #define GLX_NV_swap_group 1 typedef Bool (*PFNGLXBINDSWAPBARRIERNVPROC)(Display * dpy, GLuint group, GLuint barrier); typedef Bool (*PFNGLXJOINSWAPGROUPNVPROC)(Display * dpy, GLXDrawable drawable, GLuint group); typedef Bool (*PFNGLXQUERYFRAMECOUNTNVPROC)(Display * dpy, int screen, GLuint * count); typedef Bool (*PFNGLXQUERYMAXSWAPGROUPSNVPROC)(Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers); typedef Bool (*PFNGLXQUERYSWAPGROUPNVPROC)(Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier); typedef Bool (*PFNGLXRESETFRAMECOUNTNVPROC)(Display * dpy, int screen); #define glXBindSwapBarrierNV GLXEW_GET_FUN(__glewXBindSwapBarrierNV) #define glXJoinSwapGroupNV GLXEW_GET_FUN(__glewXJoinSwapGroupNV) #define glXQueryFrameCountNV GLXEW_GET_FUN(__glewXQueryFrameCountNV) #define glXQueryMaxSwapGroupsNV GLXEW_GET_FUN(__glewXQueryMaxSwapGroupsNV) #define glXQuerySwapGroupNV GLXEW_GET_FUN(__glewXQuerySwapGroupNV) #define glXResetFrameCountNV GLXEW_GET_FUN(__glewXResetFrameCountNV) #define GLXEW_NV_swap_group GLXEW_GET_VAR(__GLXEW_NV_swap_group) #endif /* GLX_NV_swap_group */ /* ----------------------- GLX_NV_vertex_array_range ----------------------- */ #ifndef GLX_NV_vertex_array_range #define GLX_NV_vertex_array_range 1 typedef void * (*PFNGLXALLOCATEMEMORYNVPROC)(GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); typedef void (*PFNGLXFREEMEMORYNVPROC)(void * pointer); #define glXAllocateMemoryNV GLXEW_GET_FUN(__glewXAllocateMemoryNV) #define glXFreeMemoryNV GLXEW_GET_FUN(__glewXFreeMemoryNV) #define GLXEW_NV_vertex_array_range GLXEW_GET_VAR(__GLXEW_NV_vertex_array_range) #endif /* GLX_NV_vertex_array_range */ /* -------------------------- GLX_NV_video_capture ------------------------- */ #ifndef GLX_NV_video_capture #define GLX_NV_video_capture 1 #define GLX_DEVICE_ID_NV 0x20CD #define GLX_UNIQUE_ID_NV 0x20CE #define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF typedef XID GLXVideoCaptureDeviceNV; typedef int (*PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)(Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); typedef GLXVideoCaptureDeviceNV * (*PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)(Display * dpy, int screen, int * nelements); typedef void (*PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device); typedef int (*PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value); typedef void (*PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device); #define glXBindVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXBindVideoCaptureDeviceNV) #define glXEnumerateVideoCaptureDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoCaptureDevicesNV) #define glXLockVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXLockVideoCaptureDeviceNV) #define glXQueryVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXQueryVideoCaptureDeviceNV) #define glXReleaseVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoCaptureDeviceNV) #define GLXEW_NV_video_capture GLXEW_GET_VAR(__GLXEW_NV_video_capture) #endif /* GLX_NV_video_capture */ /* ---------------------------- GLX_NV_video_out --------------------------- */ #ifndef GLX_NV_video_out #define GLX_NV_video_out 1 #define GLX_VIDEO_OUT_COLOR_NV 0x20C3 #define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 #define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 #define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define GLX_VIDEO_OUT_FRAME_NV 0x20C8 #define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 #define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA #define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB #define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC typedef int (*PFNGLXBINDVIDEOIMAGENVPROC)(Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); typedef int (*PFNGLXGETVIDEODEVICENVPROC)(Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice); typedef int (*PFNGLXGETVIDEOINFONVPROC)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); typedef int (*PFNGLXRELEASEVIDEODEVICENVPROC)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice); typedef int (*PFNGLXRELEASEVIDEOIMAGENVPROC)(Display * dpy, GLXPbuffer pbuf); typedef int (*PFNGLXSENDPBUFFERTOVIDEONVPROC)(Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock); #define glXBindVideoImageNV GLXEW_GET_FUN(__glewXBindVideoImageNV) #define glXGetVideoDeviceNV GLXEW_GET_FUN(__glewXGetVideoDeviceNV) #define glXGetVideoInfoNV GLXEW_GET_FUN(__glewXGetVideoInfoNV) #define glXReleaseVideoDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoDeviceNV) #define glXReleaseVideoImageNV GLXEW_GET_FUN(__glewXReleaseVideoImageNV) #define glXSendPbufferToVideoNV GLXEW_GET_FUN(__glewXSendPbufferToVideoNV) #define GLXEW_NV_video_out GLXEW_GET_VAR(__GLXEW_NV_video_out) #endif /* GLX_NV_video_out */ /* -------------------------- GLX_OML_swap_method -------------------------- */ #ifndef GLX_OML_swap_method #define GLX_OML_swap_method 1 #define GLX_SWAP_METHOD_OML 0x8060 #define GLX_SWAP_EXCHANGE_OML 0x8061 #define GLX_SWAP_COPY_OML 0x8062 #define GLX_SWAP_UNDEFINED_OML 0x8063 #define GLXEW_OML_swap_method GLXEW_GET_VAR(__GLXEW_OML_swap_method) #endif /* GLX_OML_swap_method */ /* -------------------------- GLX_OML_sync_control ------------------------- */ #ifndef GLX_OML_sync_control #define GLX_OML_sync_control 1 typedef Bool (*PFNGLXGETMSCRATEOMLPROC)(Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator); typedef Bool (*PFNGLXGETSYNCVALUESOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc); typedef int64_t (*PFNGLXSWAPBUFFERSMSCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); typedef Bool (*PFNGLXWAITFORMSCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc); typedef Bool (*PFNGLXWAITFORSBCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc); #define glXGetMscRateOML GLXEW_GET_FUN(__glewXGetMscRateOML) #define glXGetSyncValuesOML GLXEW_GET_FUN(__glewXGetSyncValuesOML) #define glXSwapBuffersMscOML GLXEW_GET_FUN(__glewXSwapBuffersMscOML) #define glXWaitForMscOML GLXEW_GET_FUN(__glewXWaitForMscOML) #define glXWaitForSbcOML GLXEW_GET_FUN(__glewXWaitForSbcOML) #define GLXEW_OML_sync_control GLXEW_GET_VAR(__GLXEW_OML_sync_control) #endif /* GLX_OML_sync_control */ /* ------------------------ GLX_SGIS_blended_overlay ----------------------- */ #ifndef GLX_SGIS_blended_overlay #define GLX_SGIS_blended_overlay 1 #define GLX_BLENDED_RGBA_SGIS 0x8025 #define GLXEW_SGIS_blended_overlay GLXEW_GET_VAR(__GLXEW_SGIS_blended_overlay) #endif /* GLX_SGIS_blended_overlay */ /* -------------------------- GLX_SGIS_color_range ------------------------- */ #ifndef GLX_SGIS_color_range #define GLX_SGIS_color_range 1 #define GLX_MIN_RED_SGIS 0 #define GLX_MAX_GREEN_SGIS 0 #define GLX_MIN_BLUE_SGIS 0 #define GLX_MAX_ALPHA_SGIS 0 #define GLX_MIN_GREEN_SGIS 0 #define GLX_MIN_ALPHA_SGIS 0 #define GLX_MAX_RED_SGIS 0 #define GLX_EXTENDED_RANGE_SGIS 0 #define GLX_MAX_BLUE_SGIS 0 #define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range) #endif /* GLX_SGIS_color_range */ /* -------------------------- GLX_SGIS_multisample ------------------------- */ #ifndef GLX_SGIS_multisample #define GLX_SGIS_multisample 1 #define GLX_SAMPLE_BUFFERS_SGIS 100000 #define GLX_SAMPLES_SGIS 100001 #define GLXEW_SGIS_multisample GLXEW_GET_VAR(__GLXEW_SGIS_multisample) #endif /* GLX_SGIS_multisample */ /* ---------------------- GLX_SGIS_shared_multisample ---------------------- */ #ifndef GLX_SGIS_shared_multisample #define GLX_SGIS_shared_multisample 1 #define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 #define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 #define GLXEW_SGIS_shared_multisample GLXEW_GET_VAR(__GLXEW_SGIS_shared_multisample) #endif /* GLX_SGIS_shared_multisample */ /* --------------------------- GLX_SGIX_fbconfig --------------------------- */ #ifndef GLX_SGIX_fbconfig #define GLX_SGIX_fbconfig 1 #define GLX_WINDOW_BIT_SGIX 0x00000001 #define GLX_RGBA_BIT_SGIX 0x00000001 #define GLX_PIXMAP_BIT_SGIX 0x00000002 #define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 #define GLX_SCREEN_EXT 0x800C #define GLX_DRAWABLE_TYPE_SGIX 0x8010 #define GLX_RENDER_TYPE_SGIX 0x8011 #define GLX_X_RENDERABLE_SGIX 0x8012 #define GLX_FBCONFIG_ID_SGIX 0x8013 #define GLX_RGBA_TYPE_SGIX 0x8014 #define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 typedef XID GLXFBConfigIDSGIX; typedef struct __GLXFBConfigRec * GLXFBConfigSGIX; typedef GLXFBConfigSGIX * (*PFNGLXCHOOSEFBCONFIGSGIXPROC)(Display * dpy, int screen, const int * attrib_list, int * nelements); typedef GLXContext (*PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); typedef GLXPixmap (*PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)(Display * dpy, GLXFBConfig config, Pixmap pixmap); typedef int (*PFNGLXGETFBCONFIGATTRIBSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, int attribute, int * value); typedef GLXFBConfigSGIX (*PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)(Display * dpy, XVisualInfo * vis); typedef XVisualInfo * (*PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)(Display * dpy, GLXFBConfig config); #define glXChooseFBConfigSGIX GLXEW_GET_FUN(__glewXChooseFBConfigSGIX) #define glXCreateContextWithConfigSGIX GLXEW_GET_FUN(__glewXCreateContextWithConfigSGIX) #define glXCreateGLXPixmapWithConfigSGIX GLXEW_GET_FUN(__glewXCreateGLXPixmapWithConfigSGIX) #define glXGetFBConfigAttribSGIX GLXEW_GET_FUN(__glewXGetFBConfigAttribSGIX) #define glXGetFBConfigFromVisualSGIX GLXEW_GET_FUN(__glewXGetFBConfigFromVisualSGIX) #define glXGetVisualFromFBConfigSGIX GLXEW_GET_FUN(__glewXGetVisualFromFBConfigSGIX) #define GLXEW_SGIX_fbconfig GLXEW_GET_VAR(__GLXEW_SGIX_fbconfig) #endif /* GLX_SGIX_fbconfig */ /* --------------------------- GLX_SGIX_hyperpipe -------------------------- */ #ifndef GLX_SGIX_hyperpipe #define GLX_SGIX_hyperpipe 1 #define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 #define GLX_PIPE_RECT_SGIX 0x00000001 #define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 #define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 #define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 #define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 #define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 #define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 #define GLX_BAD_HYPERPIPE_SGIX 92 #define GLX_HYPERPIPE_ID_SGIX 0x8030 typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; typedef int (*PFNGLXBINDHYPERPIPESGIXPROC)(Display * dpy, int hpId); typedef int (*PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)(Display * dpy, int hpId); typedef int (*PFNGLXHYPERPIPEATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * attribList); typedef int (*PFNGLXHYPERPIPECONFIGSGIXPROC)(Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId); typedef int (*PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList); typedef int (*PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList); typedef GLXHyperpipeConfigSGIX * (*PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)(Display * dpy, int hpId, int * npipes); typedef GLXHyperpipeNetworkSGIX * (*PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)(Display * dpy, int * npipes); #define glXBindHyperpipeSGIX GLXEW_GET_FUN(__glewXBindHyperpipeSGIX) #define glXDestroyHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXDestroyHyperpipeConfigSGIX) #define glXHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXHyperpipeAttribSGIX) #define glXHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXHyperpipeConfigSGIX) #define glXQueryHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeAttribSGIX) #define glXQueryHyperpipeBestAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeBestAttribSGIX) #define glXQueryHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeConfigSGIX) #define glXQueryHyperpipeNetworkSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeNetworkSGIX) #define GLXEW_SGIX_hyperpipe GLXEW_GET_VAR(__GLXEW_SGIX_hyperpipe) #endif /* GLX_SGIX_hyperpipe */ /* ---------------------------- GLX_SGIX_pbuffer --------------------------- */ #ifndef GLX_SGIX_pbuffer #define GLX_SGIX_pbuffer 1 #define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 #define GLX_PBUFFER_BIT_SGIX 0x00000004 #define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 #define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 #define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 #define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 #define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 #define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 #define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 #define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 #define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 #define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 #define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A #define GLX_PRESERVED_CONTENTS_SGIX 0x801B #define GLX_LARGEST_PBUFFER_SGIX 0x801C #define GLX_WIDTH_SGIX 0x801D #define GLX_HEIGHT_SGIX 0x801E #define GLX_EVENT_MASK_SGIX 0x801F #define GLX_DAMAGED_SGIX 0x8020 #define GLX_SAVED_SGIX 0x8021 #define GLX_WINDOW_SGIX 0x8022 #define GLX_PBUFFER_SGIX 0x8023 #define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 typedef XID GLXPbufferSGIX; typedef struct { int type; unsigned long serial; Bool send_event; Display * display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX; typedef GLXPbuffer (*PFNGLXCREATEGLXPBUFFERSGIXPROC)(Display * dpy, GLXFBConfig config, unsigned int width, unsigned int height, int * attrib_list); typedef void (*PFNGLXDESTROYGLXPBUFFERSGIXPROC)(Display * dpy, GLXPbuffer pbuf); typedef void (*PFNGLXGETSELECTEDEVENTSGIXPROC)(Display * dpy, GLXDrawable drawable, unsigned long * mask); typedef void (*PFNGLXQUERYGLXPBUFFERSGIXPROC)(Display * dpy, GLXPbuffer pbuf, int attribute, unsigned int * value); typedef void (*PFNGLXSELECTEVENTSGIXPROC)(Display * dpy, GLXDrawable drawable, unsigned long mask); #define glXCreateGLXPbufferSGIX GLXEW_GET_FUN(__glewXCreateGLXPbufferSGIX) #define glXDestroyGLXPbufferSGIX GLXEW_GET_FUN(__glewXDestroyGLXPbufferSGIX) #define glXGetSelectedEventSGIX GLXEW_GET_FUN(__glewXGetSelectedEventSGIX) #define glXQueryGLXPbufferSGIX GLXEW_GET_FUN(__glewXQueryGLXPbufferSGIX) #define glXSelectEventSGIX GLXEW_GET_FUN(__glewXSelectEventSGIX) #define GLXEW_SGIX_pbuffer GLXEW_GET_VAR(__GLXEW_SGIX_pbuffer) #endif /* GLX_SGIX_pbuffer */ /* ------------------------- GLX_SGIX_swap_barrier ------------------------- */ #ifndef GLX_SGIX_swap_barrier #define GLX_SGIX_swap_barrier 1 typedef void (*PFNGLXBINDSWAPBARRIERSGIXPROC)(Display * dpy, GLXDrawable drawable, int barrier); typedef Bool (*PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)(Display * dpy, int screen, int * max); #define glXBindSwapBarrierSGIX GLXEW_GET_FUN(__glewXBindSwapBarrierSGIX) #define glXQueryMaxSwapBarriersSGIX GLXEW_GET_FUN(__glewXQueryMaxSwapBarriersSGIX) #define GLXEW_SGIX_swap_barrier GLXEW_GET_VAR(__GLXEW_SGIX_swap_barrier) #endif /* GLX_SGIX_swap_barrier */ /* -------------------------- GLX_SGIX_swap_group -------------------------- */ #ifndef GLX_SGIX_swap_group #define GLX_SGIX_swap_group 1 typedef void (*PFNGLXJOINSWAPGROUPSGIXPROC)(Display * dpy, GLXDrawable drawable, GLXDrawable member); #define glXJoinSwapGroupSGIX GLXEW_GET_FUN(__glewXJoinSwapGroupSGIX) #define GLXEW_SGIX_swap_group GLXEW_GET_VAR(__GLXEW_SGIX_swap_group) #endif /* GLX_SGIX_swap_group */ /* ------------------------- GLX_SGIX_video_resize ------------------------- */ #ifndef GLX_SGIX_video_resize #define GLX_SGIX_video_resize 1 #define GLX_SYNC_FRAME_SGIX 0x00000000 #define GLX_SYNC_SWAP_SGIX 0x00000001 typedef int (*PFNGLXBINDCHANNELTOWINDOWSGIXPROC)(Display * display, int screen, int channel, Window window); typedef int (*PFNGLXCHANNELRECTSGIXPROC)(Display * display, int screen, int channel, int x, int y, int w, int h); typedef int (*PFNGLXCHANNELRECTSYNCSGIXPROC)(Display * display, int screen, int channel, GLenum synctype); typedef int (*PFNGLXQUERYCHANNELDELTASSGIXPROC)(Display * display, int screen, int channel, int * x, int * y, int * w, int * h); typedef int (*PFNGLXQUERYCHANNELRECTSGIXPROC)(Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh); #define glXBindChannelToWindowSGIX GLXEW_GET_FUN(__glewXBindChannelToWindowSGIX) #define glXChannelRectSGIX GLXEW_GET_FUN(__glewXChannelRectSGIX) #define glXChannelRectSyncSGIX GLXEW_GET_FUN(__glewXChannelRectSyncSGIX) #define glXQueryChannelDeltasSGIX GLXEW_GET_FUN(__glewXQueryChannelDeltasSGIX) #define glXQueryChannelRectSGIX GLXEW_GET_FUN(__glewXQueryChannelRectSGIX) #define GLXEW_SGIX_video_resize GLXEW_GET_VAR(__GLXEW_SGIX_video_resize) #endif /* GLX_SGIX_video_resize */ /* ---------------------- GLX_SGIX_visual_select_group --------------------- */ #ifndef GLX_SGIX_visual_select_group #define GLX_SGIX_visual_select_group 1 #define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 #define GLXEW_SGIX_visual_select_group GLXEW_GET_VAR(__GLXEW_SGIX_visual_select_group) #endif /* GLX_SGIX_visual_select_group */ /* ---------------------------- GLX_SGI_cushion ---------------------------- */ #ifndef GLX_SGI_cushion #define GLX_SGI_cushion 1 typedef void (*PFNGLXCUSHIONSGIPROC)(Display * dpy, Window window, float cushion); #define glXCushionSGI GLXEW_GET_FUN(__glewXCushionSGI) #define GLXEW_SGI_cushion GLXEW_GET_VAR(__GLXEW_SGI_cushion) #endif /* GLX_SGI_cushion */ /* ----------------------- GLX_SGI_make_current_read ----------------------- */ #ifndef GLX_SGI_make_current_read #define GLX_SGI_make_current_read 1 typedef GLXDrawable (*PFNGLXGETCURRENTREADDRAWABLESGIPROC)(void); typedef Bool (*PFNGLXMAKECURRENTREADSGIPROC)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); #define glXGetCurrentReadDrawableSGI GLXEW_GET_FUN(__glewXGetCurrentReadDrawableSGI) #define glXMakeCurrentReadSGI GLXEW_GET_FUN(__glewXMakeCurrentReadSGI) #define GLXEW_SGI_make_current_read GLXEW_GET_VAR(__GLXEW_SGI_make_current_read) #endif /* GLX_SGI_make_current_read */ /* -------------------------- GLX_SGI_swap_control ------------------------- */ #ifndef GLX_SGI_swap_control #define GLX_SGI_swap_control 1 typedef int (*PFNGLXSWAPINTERVALSGIPROC)(int interval); #define glXSwapIntervalSGI GLXEW_GET_FUN(__glewXSwapIntervalSGI) #define GLXEW_SGI_swap_control GLXEW_GET_VAR(__GLXEW_SGI_swap_control) #endif /* GLX_SGI_swap_control */ /* --------------------------- GLX_SGI_video_sync -------------------------- */ #ifndef GLX_SGI_video_sync #define GLX_SGI_video_sync 1 typedef int (*PFNGLXGETVIDEOSYNCSGIPROC)(unsigned int * count); typedef int (*PFNGLXWAITVIDEOSYNCSGIPROC)(int divisor, int remainder, unsigned int * count); #define glXGetVideoSyncSGI GLXEW_GET_FUN(__glewXGetVideoSyncSGI) #define glXWaitVideoSyncSGI GLXEW_GET_FUN(__glewXWaitVideoSyncSGI) #define GLXEW_SGI_video_sync GLXEW_GET_VAR(__GLXEW_SGI_video_sync) #endif /* GLX_SGI_video_sync */ /* --------------------- GLX_SUN_get_transparent_index --------------------- */ #ifndef GLX_SUN_get_transparent_index #define GLX_SUN_get_transparent_index 1 typedef Status (*PFNGLXGETTRANSPARENTINDEXSUNPROC)(Display * dpy, Window overlay, Window underlay, unsigned long * pTransparentIndex); #define glXGetTransparentIndexSUN GLXEW_GET_FUN(__glewXGetTransparentIndexSUN) #define GLXEW_SUN_get_transparent_index GLXEW_GET_VAR(__GLXEW_SUN_get_transparent_index) #endif /* GLX_SUN_get_transparent_index */ /* -------------------------- GLX_SUN_video_resize ------------------------- */ #ifndef GLX_SUN_video_resize #define GLX_SUN_video_resize 1 #define GLX_VIDEO_RESIZE_SUN 0x8171 #define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD typedef int (*PFNGLXGETVIDEORESIZESUNPROC)(Display * display, GLXDrawable window, float * factor); typedef int (*PFNGLXVIDEORESIZESUNPROC)(Display * display, GLXDrawable window, float factor); #define glXGetVideoResizeSUN GLXEW_GET_FUN(__glewXGetVideoResizeSUN) #define glXVideoResizeSUN GLXEW_GET_FUN(__glewXVideoResizeSUN) #define GLXEW_SUN_video_resize GLXEW_GET_VAR(__GLXEW_SUN_video_resize) #endif /* GLX_SUN_video_resize */ /* ------------------------------------------------------------------------- */ #ifdef GLEW_MX #define GLXEW_FUN_EXPORT #define GLXEW_VAR_EXPORT #else #define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT #define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT #endif /* GLEW_MX */ GLXEW_FUN_EXPORT PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay; GLXEW_FUN_EXPORT PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig; GLXEW_FUN_EXPORT PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext; GLXEW_FUN_EXPORT PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer; GLXEW_FUN_EXPORT PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap; GLXEW_FUN_EXPORT PFNGLXCREATEWINDOWPROC __glewXCreateWindow; GLXEW_FUN_EXPORT PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer; GLXEW_FUN_EXPORT PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap; GLXEW_FUN_EXPORT PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow; GLXEW_FUN_EXPORT PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable; GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib; GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs; GLXEW_FUN_EXPORT PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent; GLXEW_FUN_EXPORT PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig; GLXEW_FUN_EXPORT PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent; GLXEW_FUN_EXPORT PFNGLXQUERYCONTEXTPROC __glewXQueryContext; GLXEW_FUN_EXPORT PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable; GLXEW_FUN_EXPORT PFNGLXSELECTEVENTPROC __glewXSelectEvent; GLXEW_FUN_EXPORT PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB; GLXEW_FUN_EXPORT PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI; GLXEW_FUN_EXPORT PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI; GLXEW_FUN_EXPORT PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI; GLXEW_FUN_EXPORT PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT; GLXEW_FUN_EXPORT PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT; GLXEW_FUN_EXPORT PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT; GLXEW_FUN_EXPORT PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT; GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALEXTPROC __glewXSwapIntervalEXT; GLXEW_FUN_EXPORT PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT; GLXEW_FUN_EXPORT PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT; GLXEW_FUN_EXPORT PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA; GLXEW_FUN_EXPORT PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA; GLXEW_FUN_EXPORT PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA; GLXEW_FUN_EXPORT PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA; GLXEW_FUN_EXPORT PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA; GLXEW_FUN_EXPORT PFNGLXGETSWAPINTERVALMESAPROC __glewXGetSwapIntervalMESA; GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALMESAPROC __glewXSwapIntervalMESA; GLXEW_FUN_EXPORT PFNGLXCOPYIMAGESUBDATANVPROC __glewXCopyImageSubDataNV; GLXEW_FUN_EXPORT PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV; GLXEW_FUN_EXPORT PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV; GLXEW_FUN_EXPORT PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV; GLXEW_FUN_EXPORT PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV; GLXEW_FUN_EXPORT PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV; GLXEW_FUN_EXPORT PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV; GLXEW_FUN_EXPORT PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV; GLXEW_FUN_EXPORT PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV; GLXEW_FUN_EXPORT PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV; GLXEW_FUN_EXPORT PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV; GLXEW_FUN_EXPORT PFNGLXBINDVIDEOCAPTUREDEVICENVPROC __glewXBindVideoCaptureDeviceNV; GLXEW_FUN_EXPORT PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC __glewXEnumerateVideoCaptureDevicesNV; GLXEW_FUN_EXPORT PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC __glewXLockVideoCaptureDeviceNV; GLXEW_FUN_EXPORT PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC __glewXQueryVideoCaptureDeviceNV; GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC __glewXReleaseVideoCaptureDeviceNV; GLXEW_FUN_EXPORT PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV; GLXEW_FUN_EXPORT PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV; GLXEW_FUN_EXPORT PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV; GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV; GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV; GLXEW_FUN_EXPORT PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV; GLXEW_FUN_EXPORT PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML; GLXEW_FUN_EXPORT PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML; GLXEW_FUN_EXPORT PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML; GLXEW_FUN_EXPORT PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML; GLXEW_FUN_EXPORT PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML; GLXEW_FUN_EXPORT PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX; GLXEW_FUN_EXPORT PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX; GLXEW_FUN_EXPORT PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX; GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX; GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX; GLXEW_FUN_EXPORT PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX; GLXEW_FUN_EXPORT PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX; GLXEW_FUN_EXPORT PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX; GLXEW_FUN_EXPORT PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX; GLXEW_FUN_EXPORT PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX; GLXEW_FUN_EXPORT PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX; GLXEW_FUN_EXPORT PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX; GLXEW_FUN_EXPORT PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX; GLXEW_FUN_EXPORT PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX; GLXEW_FUN_EXPORT PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX; GLXEW_FUN_EXPORT PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX; GLXEW_FUN_EXPORT PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX; GLXEW_FUN_EXPORT PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX; GLXEW_FUN_EXPORT PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX; GLXEW_FUN_EXPORT PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX; GLXEW_FUN_EXPORT PFNGLXCUSHIONSGIPROC __glewXCushionSGI; GLXEW_FUN_EXPORT PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI; GLXEW_FUN_EXPORT PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI; GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI; GLXEW_FUN_EXPORT PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI; GLXEW_FUN_EXPORT PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI; GLXEW_FUN_EXPORT PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN; GLXEW_FUN_EXPORT PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN; GLXEW_FUN_EXPORT PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN; #if defined(GLEW_MX) struct GLXEWContextStruct { #endif /* GLEW_MX */ GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0; GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1; GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2; GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_3; GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_4; GLXEW_VAR_EXPORT GLboolean __GLXEW_3DFX_multisample; GLXEW_VAR_EXPORT GLboolean __GLXEW_AMD_gpu_association; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_profile; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_robustness; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_fbconfig_float; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_framebuffer_sRGB; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_get_proc_address; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_multisample; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_robustness_application_isolation; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_robustness_share_group_isolation; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_vertex_buffer_object; GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_pixel_format_float; GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_render_texture; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es2_profile; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es_profile; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_import_context; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_scene_marker; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control_tear; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_texture_from_pixmap; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_visual_info; GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_visual_rating; GLXEW_VAR_EXPORT GLboolean __GLXEW_INTEL_swap_event; GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_agp_offset; GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_copy_sub_buffer; GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_pixmap_colormap; GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_release_buffers; GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_set_3dfx_mode; GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_swap_control; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_copy_image; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_float_buffer; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_multisample_coverage; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_present_video; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_swap_group; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_vertex_array_range; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_capture; GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_out; GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_swap_method; GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_sync_control; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_blended_overlay; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_color_range; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_multisample; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_shared_multisample; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_fbconfig; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_hyperpipe; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_pbuffer; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_swap_barrier; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_swap_group; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_video_resize; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_visual_select_group; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_cushion; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_make_current_read; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_swap_control; GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_video_sync; GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_get_transparent_index; GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_video_resize; #ifdef GLEW_MX }; /* GLXEWContextStruct */ #endif /* GLEW_MX */ /* ------------------------------------------------------------------------ */ #ifdef GLEW_MX typedef struct GLXEWContextStruct GLXEWContext; GLEWAPI GLenum GLEWAPIENTRY glxewContextInit(GLXEWContext * ctx); GLEWAPI GLboolean GLEWAPIENTRY glxewContextIsSupported(const GLXEWContext * ctx, const char * name); #define glxewInit() glxewContextInit(glxewGetContext()) #define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) #define GLXEW_GET_VAR(x) (*(const GLboolean *)&(glxewGetContext()->x)) #define GLXEW_GET_FUN(x) x #else /* GLEW_MX */ #define GLXEW_GET_VAR(x) (*(const GLboolean *)&x) #define GLXEW_GET_FUN(x) x GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported(const char * name); #endif /* GLEW_MX */ GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension(const char * name); #ifdef __cplusplus } #endif #endif /* __glxew_h__ */ DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glew/wglew.h000066400000000000000000001704751360473665400254330ustar00rootroot00000000000000/* ** The OpenGL Extension Wrangler Library ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** ** * Redistributions of source code must retain the above copyright notice, ** this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright notice, ** this list of conditions and the following disclaimer in the documentation ** and/or other materials provided with the distribution. ** * The name of the author may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF ** THE POSSIBILITY OF SUCH DAMAGE. */ /* ** Copyright (c) 2007 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. */ #ifndef __wglew_h__ #define __wglew_h__ #define __WGLEW_H__ #ifdef __wglext_h_ #error wglext.h included before wglew.h #endif #define __wglext_h_ #if !defined(WINAPI) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #include #undef WIN32_LEAN_AND_MEAN #endif /* * GLEW_STATIC needs to be set when using the static version. * GLEW_BUILD is set when building the DLL version. */ #ifdef GLEW_STATIC #define GLEWAPI extern #else #ifdef GLEW_BUILD #define GLEWAPI extern __declspec(dllexport) #else #define GLEWAPI extern __declspec(dllimport) #endif #endif #ifdef __cplusplus extern "C" { #endif /* -------------------------- WGL_3DFX_multisample ------------------------- */ #ifndef WGL_3DFX_multisample #define WGL_3DFX_multisample 1 #define WGL_SAMPLE_BUFFERS_3DFX 0x2060 #define WGL_SAMPLES_3DFX 0x2061 #define WGLEW_3DFX_multisample WGLEW_GET_VAR(__WGLEW_3DFX_multisample) #endif /* WGL_3DFX_multisample */ /* ------------------------- WGL_3DL_stereo_control ------------------------ */ #ifndef WGL_3DL_stereo_control #define WGL_3DL_stereo_control 1 #define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 #define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 #define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 #define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 typedef BOOL(WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC)(HDC hDC, UINT uState); #define wglSetStereoEmitterState3DL WGLEW_GET_FUN(__wglewSetStereoEmitterState3DL) #define WGLEW_3DL_stereo_control WGLEW_GET_VAR(__WGLEW_3DL_stereo_control) #endif /* WGL_3DL_stereo_control */ /* ------------------------ WGL_AMD_gpu_association ------------------------ */ #ifndef WGL_AMD_gpu_association #define WGL_AMD_gpu_association 1 #define WGL_GPU_VENDOR_AMD 0x1F00 #define WGL_GPU_RENDERER_STRING_AMD 0x1F01 #define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define WGL_GPU_RAM_AMD 0x21A3 #define WGL_GPU_CLOCK_AMD 0x21A4 #define WGL_GPU_NUM_PIPES_AMD 0x21A5 #define WGL_GPU_NUM_SIMD_AMD 0x21A6 #define WGL_GPU_NUM_RB_AMD 0x21A7 #define WGL_GPU_NUM_SPI_AMD 0x21A8 typedef VOID(WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)(HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef HGLRC(WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)(UINT id); typedef HGLRC(WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(UINT id, HGLRC hShareContext, const int * attribList); typedef BOOL(WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)(HGLRC hglrc); typedef UINT(WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC)(HGLRC hglrc); typedef HGLRC(WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); typedef UINT(WINAPI * PFNWGLGETGPUIDSAMDPROC)(UINT maxCount, UINT * ids); typedef INT(WINAPI * PFNWGLGETGPUINFOAMDPROC)(UINT id, INT property, GLenum dataType, UINT size, void * data); typedef BOOL(WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(HGLRC hglrc); #define wglBlitContextFramebufferAMD WGLEW_GET_FUN(__wglewBlitContextFramebufferAMD) #define wglCreateAssociatedContextAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAMD) #define wglCreateAssociatedContextAttribsAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAttribsAMD) #define wglDeleteAssociatedContextAMD WGLEW_GET_FUN(__wglewDeleteAssociatedContextAMD) #define wglGetContextGPUIDAMD WGLEW_GET_FUN(__wglewGetContextGPUIDAMD) #define wglGetCurrentAssociatedContextAMD WGLEW_GET_FUN(__wglewGetCurrentAssociatedContextAMD) #define wglGetGPUIDsAMD WGLEW_GET_FUN(__wglewGetGPUIDsAMD) #define wglGetGPUInfoAMD WGLEW_GET_FUN(__wglewGetGPUInfoAMD) #define wglMakeAssociatedContextCurrentAMD WGLEW_GET_FUN(__wglewMakeAssociatedContextCurrentAMD) #define WGLEW_AMD_gpu_association WGLEW_GET_VAR(__WGLEW_AMD_gpu_association) #endif /* WGL_AMD_gpu_association */ /* ------------------------- WGL_ARB_buffer_region ------------------------- */ #ifndef WGL_ARB_buffer_region #define WGL_ARB_buffer_region 1 #define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 #define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 #define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 #define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 typedef HANDLE(WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC)(HDC hDC, int iLayerPlane, UINT uType); typedef VOID(WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC)(HANDLE hRegion); typedef BOOL(WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); typedef BOOL(WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height); #define wglCreateBufferRegionARB WGLEW_GET_FUN(__wglewCreateBufferRegionARB) #define wglDeleteBufferRegionARB WGLEW_GET_FUN(__wglewDeleteBufferRegionARB) #define wglRestoreBufferRegionARB WGLEW_GET_FUN(__wglewRestoreBufferRegionARB) #define wglSaveBufferRegionARB WGLEW_GET_FUN(__wglewSaveBufferRegionARB) #define WGLEW_ARB_buffer_region WGLEW_GET_VAR(__WGLEW_ARB_buffer_region) #endif /* WGL_ARB_buffer_region */ /* ------------------------- WGL_ARB_create_context ------------------------ */ #ifndef WGL_ARB_create_context #define WGL_ARB_create_context 1 #define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 #define WGL_CONTEXT_FLAGS_ARB 0x2094 #define ERROR_INVALID_VERSION_ARB 0x2095 #define ERROR_INVALID_PROFILE_ARB 0x2096 typedef HGLRC(WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC hDC, HGLRC hShareContext, const int * attribList); #define wglCreateContextAttribsARB WGLEW_GET_FUN(__wglewCreateContextAttribsARB) #define WGLEW_ARB_create_context WGLEW_GET_VAR(__WGLEW_ARB_create_context) #endif /* WGL_ARB_create_context */ /* --------------------- WGL_ARB_create_context_profile -------------------- */ #ifndef WGL_ARB_create_context_profile #define WGL_ARB_create_context_profile 1 #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 #define WGLEW_ARB_create_context_profile WGLEW_GET_VAR(__WGLEW_ARB_create_context_profile) #endif /* WGL_ARB_create_context_profile */ /* ------------------- WGL_ARB_create_context_robustness ------------------- */ #ifndef WGL_ARB_create_context_robustness #define WGL_ARB_create_context_robustness 1 #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 #define WGLEW_ARB_create_context_robustness WGLEW_GET_VAR(__WGLEW_ARB_create_context_robustness) #endif /* WGL_ARB_create_context_robustness */ /* ----------------------- WGL_ARB_extensions_string ----------------------- */ #ifndef WGL_ARB_extensions_string #define WGL_ARB_extensions_string 1 typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc); #define wglGetExtensionsStringARB WGLEW_GET_FUN(__wglewGetExtensionsStringARB) #define WGLEW_ARB_extensions_string WGLEW_GET_VAR(__WGLEW_ARB_extensions_string) #endif /* WGL_ARB_extensions_string */ /* ------------------------ WGL_ARB_framebuffer_sRGB ----------------------- */ #ifndef WGL_ARB_framebuffer_sRGB #define WGL_ARB_framebuffer_sRGB 1 #define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 #define WGLEW_ARB_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_ARB_framebuffer_sRGB) #endif /* WGL_ARB_framebuffer_sRGB */ /* ----------------------- WGL_ARB_make_current_read ----------------------- */ #ifndef WGL_ARB_make_current_read #define WGL_ARB_make_current_read 1 #define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 #define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 typedef HDC(WINAPI * PFNWGLGETCURRENTREADDCARBPROC)(VOID); typedef BOOL(WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); #define wglGetCurrentReadDCARB WGLEW_GET_FUN(__wglewGetCurrentReadDCARB) #define wglMakeContextCurrentARB WGLEW_GET_FUN(__wglewMakeContextCurrentARB) #define WGLEW_ARB_make_current_read WGLEW_GET_VAR(__WGLEW_ARB_make_current_read) #endif /* WGL_ARB_make_current_read */ /* -------------------------- WGL_ARB_multisample -------------------------- */ #ifndef WGL_ARB_multisample #define WGL_ARB_multisample 1 #define WGL_SAMPLE_BUFFERS_ARB 0x2041 #define WGL_SAMPLES_ARB 0x2042 #define WGLEW_ARB_multisample WGLEW_GET_VAR(__WGLEW_ARB_multisample) #endif /* WGL_ARB_multisample */ /* ---------------------------- WGL_ARB_pbuffer ---------------------------- */ #ifndef WGL_ARB_pbuffer #define WGL_ARB_pbuffer 1 #define WGL_DRAW_TO_PBUFFER_ARB 0x202D #define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E #define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F #define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 #define WGL_PBUFFER_LARGEST_ARB 0x2033 #define WGL_PBUFFER_WIDTH_ARB 0x2034 #define WGL_PBUFFER_HEIGHT_ARB 0x2035 #define WGL_PBUFFER_LOST_ARB 0x2036 DECLARE_HANDLE(HPBUFFERARB); typedef HPBUFFERARB(WINAPI * PFNWGLCREATEPBUFFERARBPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); typedef BOOL(WINAPI * PFNWGLDESTROYPBUFFERARBPROC)(HPBUFFERARB hPbuffer); typedef HDC(WINAPI * PFNWGLGETPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer); typedef BOOL(WINAPI * PFNWGLQUERYPBUFFERARBPROC)(HPBUFFERARB hPbuffer, int iAttribute, int * piValue); typedef int(WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer, HDC hDC); #define wglCreatePbufferARB WGLEW_GET_FUN(__wglewCreatePbufferARB) #define wglDestroyPbufferARB WGLEW_GET_FUN(__wglewDestroyPbufferARB) #define wglGetPbufferDCARB WGLEW_GET_FUN(__wglewGetPbufferDCARB) #define wglQueryPbufferARB WGLEW_GET_FUN(__wglewQueryPbufferARB) #define wglReleasePbufferDCARB WGLEW_GET_FUN(__wglewReleasePbufferDCARB) #define WGLEW_ARB_pbuffer WGLEW_GET_VAR(__WGLEW_ARB_pbuffer) #endif /* WGL_ARB_pbuffer */ /* -------------------------- WGL_ARB_pixel_format ------------------------- */ #ifndef WGL_ARB_pixel_format #define WGL_ARB_pixel_format 1 #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 #define WGL_DRAW_TO_BITMAP_ARB 0x2002 #define WGL_ACCELERATION_ARB 0x2003 #define WGL_NEED_PALETTE_ARB 0x2004 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 #define WGL_SWAP_METHOD_ARB 0x2007 #define WGL_NUMBER_OVERLAYS_ARB 0x2008 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009 #define WGL_TRANSPARENT_ARB 0x200A #define WGL_SHARE_DEPTH_ARB 0x200C #define WGL_SHARE_STENCIL_ARB 0x200D #define WGL_SHARE_ACCUM_ARB 0x200E #define WGL_SUPPORT_GDI_ARB 0x200F #define WGL_SUPPORT_OPENGL_ARB 0x2010 #define WGL_DOUBLE_BUFFER_ARB 0x2011 #define WGL_STEREO_ARB 0x2012 #define WGL_PIXEL_TYPE_ARB 0x2013 #define WGL_COLOR_BITS_ARB 0x2014 #define WGL_RED_BITS_ARB 0x2015 #define WGL_RED_SHIFT_ARB 0x2016 #define WGL_GREEN_BITS_ARB 0x2017 #define WGL_GREEN_SHIFT_ARB 0x2018 #define WGL_BLUE_BITS_ARB 0x2019 #define WGL_BLUE_SHIFT_ARB 0x201A #define WGL_ALPHA_BITS_ARB 0x201B #define WGL_ALPHA_SHIFT_ARB 0x201C #define WGL_ACCUM_BITS_ARB 0x201D #define WGL_ACCUM_RED_BITS_ARB 0x201E #define WGL_ACCUM_GREEN_BITS_ARB 0x201F #define WGL_ACCUM_BLUE_BITS_ARB 0x2020 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 #define WGL_DEPTH_BITS_ARB 0x2022 #define WGL_STENCIL_BITS_ARB 0x2023 #define WGL_AUX_BUFFERS_ARB 0x2024 #define WGL_NO_ACCELERATION_ARB 0x2025 #define WGL_GENERIC_ACCELERATION_ARB 0x2026 #define WGL_FULL_ACCELERATION_ARB 0x2027 #define WGL_SWAP_EXCHANGE_ARB 0x2028 #define WGL_SWAP_COPY_ARB 0x2029 #define WGL_SWAP_UNDEFINED_ARB 0x202A #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B typedef BOOL(WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); typedef BOOL(WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues); typedef BOOL(WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues); #define wglChoosePixelFormatARB WGLEW_GET_FUN(__wglewChoosePixelFormatARB) #define wglGetPixelFormatAttribfvARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvARB) #define wglGetPixelFormatAttribivARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribivARB) #define WGLEW_ARB_pixel_format WGLEW_GET_VAR(__WGLEW_ARB_pixel_format) #endif /* WGL_ARB_pixel_format */ /* ----------------------- WGL_ARB_pixel_format_float ---------------------- */ #ifndef WGL_ARB_pixel_format_float #define WGL_ARB_pixel_format_float 1 #define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 #define WGLEW_ARB_pixel_format_float WGLEW_GET_VAR(__WGLEW_ARB_pixel_format_float) #endif /* WGL_ARB_pixel_format_float */ /* ------------------------- WGL_ARB_render_texture ------------------------ */ #ifndef WGL_ARB_render_texture #define WGL_ARB_render_texture 1 #define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 #define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 #define WGL_TEXTURE_FORMAT_ARB 0x2072 #define WGL_TEXTURE_TARGET_ARB 0x2073 #define WGL_MIPMAP_TEXTURE_ARB 0x2074 #define WGL_TEXTURE_RGB_ARB 0x2075 #define WGL_TEXTURE_RGBA_ARB 0x2076 #define WGL_NO_TEXTURE_ARB 0x2077 #define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 #define WGL_TEXTURE_1D_ARB 0x2079 #define WGL_TEXTURE_2D_ARB 0x207A #define WGL_MIPMAP_LEVEL_ARB 0x207B #define WGL_CUBE_MAP_FACE_ARB 0x207C #define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 #define WGL_FRONT_LEFT_ARB 0x2083 #define WGL_FRONT_RIGHT_ARB 0x2084 #define WGL_BACK_LEFT_ARB 0x2085 #define WGL_BACK_RIGHT_ARB 0x2086 #define WGL_AUX0_ARB 0x2087 #define WGL_AUX1_ARB 0x2088 #define WGL_AUX2_ARB 0x2089 #define WGL_AUX3_ARB 0x208A #define WGL_AUX4_ARB 0x208B #define WGL_AUX5_ARB 0x208C #define WGL_AUX6_ARB 0x208D #define WGL_AUX7_ARB 0x208E #define WGL_AUX8_ARB 0x208F #define WGL_AUX9_ARB 0x2090 typedef BOOL(WINAPI * PFNWGLBINDTEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL(WINAPI * PFNWGLRELEASETEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL(WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC)(HPBUFFERARB hPbuffer, const int * piAttribList); #define wglBindTexImageARB WGLEW_GET_FUN(__wglewBindTexImageARB) #define wglReleaseTexImageARB WGLEW_GET_FUN(__wglewReleaseTexImageARB) #define wglSetPbufferAttribARB WGLEW_GET_FUN(__wglewSetPbufferAttribARB) #define WGLEW_ARB_render_texture WGLEW_GET_VAR(__WGLEW_ARB_render_texture) #endif /* WGL_ARB_render_texture */ /* ----------------------- WGL_ATI_pixel_format_float ---------------------- */ #ifndef WGL_ATI_pixel_format_float #define WGL_ATI_pixel_format_float 1 #define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 #define GL_RGBA_FLOAT_MODE_ATI 0x8820 #define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 #define WGLEW_ATI_pixel_format_float WGLEW_GET_VAR(__WGLEW_ATI_pixel_format_float) #endif /* WGL_ATI_pixel_format_float */ /* -------------------- WGL_ATI_render_texture_rectangle ------------------- */ #ifndef WGL_ATI_render_texture_rectangle #define WGL_ATI_render_texture_rectangle 1 #define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 #define WGLEW_ATI_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_ATI_render_texture_rectangle) #endif /* WGL_ATI_render_texture_rectangle */ /* ------------------- WGL_EXT_create_context_es2_profile ------------------ */ #ifndef WGL_EXT_create_context_es2_profile #define WGL_EXT_create_context_es2_profile 1 #define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #define WGLEW_EXT_create_context_es2_profile WGLEW_GET_VAR(__WGLEW_EXT_create_context_es2_profile) #endif /* WGL_EXT_create_context_es2_profile */ /* ------------------- WGL_EXT_create_context_es_profile ------------------- */ #ifndef WGL_EXT_create_context_es_profile #define WGL_EXT_create_context_es_profile 1 #define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #define WGLEW_EXT_create_context_es_profile WGLEW_GET_VAR(__WGLEW_EXT_create_context_es_profile) #endif /* WGL_EXT_create_context_es_profile */ /* -------------------------- WGL_EXT_depth_float -------------------------- */ #ifndef WGL_EXT_depth_float #define WGL_EXT_depth_float 1 #define WGL_DEPTH_FLOAT_EXT 0x2040 #define WGLEW_EXT_depth_float WGLEW_GET_VAR(__WGLEW_EXT_depth_float) #endif /* WGL_EXT_depth_float */ /* ---------------------- WGL_EXT_display_color_table ---------------------- */ #ifndef WGL_EXT_display_color_table #define WGL_EXT_display_color_table 1 typedef GLboolean(WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)(GLushort id); typedef GLboolean(WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)(GLushort id); typedef void(WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)(GLushort id); typedef GLboolean(WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)(GLushort * table, GLuint length); #define wglBindDisplayColorTableEXT WGLEW_GET_FUN(__wglewBindDisplayColorTableEXT) #define wglCreateDisplayColorTableEXT WGLEW_GET_FUN(__wglewCreateDisplayColorTableEXT) #define wglDestroyDisplayColorTableEXT WGLEW_GET_FUN(__wglewDestroyDisplayColorTableEXT) #define wglLoadDisplayColorTableEXT WGLEW_GET_FUN(__wglewLoadDisplayColorTableEXT) #define WGLEW_EXT_display_color_table WGLEW_GET_VAR(__WGLEW_EXT_display_color_table) #endif /* WGL_EXT_display_color_table */ /* ----------------------- WGL_EXT_extensions_string ----------------------- */ #ifndef WGL_EXT_extensions_string #define WGL_EXT_extensions_string 1 typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void); #define wglGetExtensionsStringEXT WGLEW_GET_FUN(__wglewGetExtensionsStringEXT) #define WGLEW_EXT_extensions_string WGLEW_GET_VAR(__WGLEW_EXT_extensions_string) #endif /* WGL_EXT_extensions_string */ /* ------------------------ WGL_EXT_framebuffer_sRGB ----------------------- */ #ifndef WGL_EXT_framebuffer_sRGB #define WGL_EXT_framebuffer_sRGB 1 #define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 #define WGLEW_EXT_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_EXT_framebuffer_sRGB) #endif /* WGL_EXT_framebuffer_sRGB */ /* ----------------------- WGL_EXT_make_current_read ----------------------- */ #ifndef WGL_EXT_make_current_read #define WGL_EXT_make_current_read 1 #define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 typedef HDC(WINAPI * PFNWGLGETCURRENTREADDCEXTPROC)(VOID); typedef BOOL(WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); #define wglGetCurrentReadDCEXT WGLEW_GET_FUN(__wglewGetCurrentReadDCEXT) #define wglMakeContextCurrentEXT WGLEW_GET_FUN(__wglewMakeContextCurrentEXT) #define WGLEW_EXT_make_current_read WGLEW_GET_VAR(__WGLEW_EXT_make_current_read) #endif /* WGL_EXT_make_current_read */ /* -------------------------- WGL_EXT_multisample -------------------------- */ #ifndef WGL_EXT_multisample #define WGL_EXT_multisample 1 #define WGL_SAMPLE_BUFFERS_EXT 0x2041 #define WGL_SAMPLES_EXT 0x2042 #define WGLEW_EXT_multisample WGLEW_GET_VAR(__WGLEW_EXT_multisample) #endif /* WGL_EXT_multisample */ /* ---------------------------- WGL_EXT_pbuffer ---------------------------- */ #ifndef WGL_EXT_pbuffer #define WGL_EXT_pbuffer 1 #define WGL_DRAW_TO_PBUFFER_EXT 0x202D #define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E #define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F #define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 #define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 #define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 #define WGL_PBUFFER_LARGEST_EXT 0x2033 #define WGL_PBUFFER_WIDTH_EXT 0x2034 #define WGL_PBUFFER_HEIGHT_EXT 0x2035 DECLARE_HANDLE(HPBUFFEREXT); typedef HPBUFFEREXT(WINAPI * PFNWGLCREATEPBUFFEREXTPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); typedef BOOL(WINAPI * PFNWGLDESTROYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer); typedef HDC(WINAPI * PFNWGLGETPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer); typedef BOOL(WINAPI * PFNWGLQUERYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer, int iAttribute, int * piValue); typedef int(WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer, HDC hDC); #define wglCreatePbufferEXT WGLEW_GET_FUN(__wglewCreatePbufferEXT) #define wglDestroyPbufferEXT WGLEW_GET_FUN(__wglewDestroyPbufferEXT) #define wglGetPbufferDCEXT WGLEW_GET_FUN(__wglewGetPbufferDCEXT) #define wglQueryPbufferEXT WGLEW_GET_FUN(__wglewQueryPbufferEXT) #define wglReleasePbufferDCEXT WGLEW_GET_FUN(__wglewReleasePbufferDCEXT) #define WGLEW_EXT_pbuffer WGLEW_GET_VAR(__WGLEW_EXT_pbuffer) #endif /* WGL_EXT_pbuffer */ /* -------------------------- WGL_EXT_pixel_format ------------------------- */ #ifndef WGL_EXT_pixel_format #define WGL_EXT_pixel_format 1 #define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 #define WGL_DRAW_TO_WINDOW_EXT 0x2001 #define WGL_DRAW_TO_BITMAP_EXT 0x2002 #define WGL_ACCELERATION_EXT 0x2003 #define WGL_NEED_PALETTE_EXT 0x2004 #define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 #define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 #define WGL_SWAP_METHOD_EXT 0x2007 #define WGL_NUMBER_OVERLAYS_EXT 0x2008 #define WGL_NUMBER_UNDERLAYS_EXT 0x2009 #define WGL_TRANSPARENT_EXT 0x200A #define WGL_TRANSPARENT_VALUE_EXT 0x200B #define WGL_SHARE_DEPTH_EXT 0x200C #define WGL_SHARE_STENCIL_EXT 0x200D #define WGL_SHARE_ACCUM_EXT 0x200E #define WGL_SUPPORT_GDI_EXT 0x200F #define WGL_SUPPORT_OPENGL_EXT 0x2010 #define WGL_DOUBLE_BUFFER_EXT 0x2011 #define WGL_STEREO_EXT 0x2012 #define WGL_PIXEL_TYPE_EXT 0x2013 #define WGL_COLOR_BITS_EXT 0x2014 #define WGL_RED_BITS_EXT 0x2015 #define WGL_RED_SHIFT_EXT 0x2016 #define WGL_GREEN_BITS_EXT 0x2017 #define WGL_GREEN_SHIFT_EXT 0x2018 #define WGL_BLUE_BITS_EXT 0x2019 #define WGL_BLUE_SHIFT_EXT 0x201A #define WGL_ALPHA_BITS_EXT 0x201B #define WGL_ALPHA_SHIFT_EXT 0x201C #define WGL_ACCUM_BITS_EXT 0x201D #define WGL_ACCUM_RED_BITS_EXT 0x201E #define WGL_ACCUM_GREEN_BITS_EXT 0x201F #define WGL_ACCUM_BLUE_BITS_EXT 0x2020 #define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 #define WGL_DEPTH_BITS_EXT 0x2022 #define WGL_STENCIL_BITS_EXT 0x2023 #define WGL_AUX_BUFFERS_EXT 0x2024 #define WGL_NO_ACCELERATION_EXT 0x2025 #define WGL_GENERIC_ACCELERATION_EXT 0x2026 #define WGL_FULL_ACCELERATION_EXT 0x2027 #define WGL_SWAP_EXCHANGE_EXT 0x2028 #define WGL_SWAP_COPY_EXT 0x2029 #define WGL_SWAP_UNDEFINED_EXT 0x202A #define WGL_TYPE_RGBA_EXT 0x202B #define WGL_TYPE_COLORINDEX_EXT 0x202C typedef BOOL(WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); typedef BOOL(WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues); typedef BOOL(WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues); #define wglChoosePixelFormatEXT WGLEW_GET_FUN(__wglewChoosePixelFormatEXT) #define wglGetPixelFormatAttribfvEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvEXT) #define wglGetPixelFormatAttribivEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribivEXT) #define WGLEW_EXT_pixel_format WGLEW_GET_VAR(__WGLEW_EXT_pixel_format) #endif /* WGL_EXT_pixel_format */ /* ------------------- WGL_EXT_pixel_format_packed_float ------------------- */ #ifndef WGL_EXT_pixel_format_packed_float #define WGL_EXT_pixel_format_packed_float 1 #define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 #define WGLEW_EXT_pixel_format_packed_float WGLEW_GET_VAR(__WGLEW_EXT_pixel_format_packed_float) #endif /* WGL_EXT_pixel_format_packed_float */ /* -------------------------- WGL_EXT_swap_control ------------------------- */ #ifndef WGL_EXT_swap_control #define WGL_EXT_swap_control 1 typedef int(WINAPI * PFNWGLGETSWAPINTERVALEXTPROC)(void); typedef BOOL(WINAPI * PFNWGLSWAPINTERVALEXTPROC)(int interval); #define wglGetSwapIntervalEXT WGLEW_GET_FUN(__wglewGetSwapIntervalEXT) #define wglSwapIntervalEXT WGLEW_GET_FUN(__wglewSwapIntervalEXT) #define WGLEW_EXT_swap_control WGLEW_GET_VAR(__WGLEW_EXT_swap_control) #endif /* WGL_EXT_swap_control */ /* ----------------------- WGL_EXT_swap_control_tear ----------------------- */ #ifndef WGL_EXT_swap_control_tear #define WGL_EXT_swap_control_tear 1 #define WGLEW_EXT_swap_control_tear WGLEW_GET_VAR(__WGLEW_EXT_swap_control_tear) #endif /* WGL_EXT_swap_control_tear */ /* --------------------- WGL_I3D_digital_video_control --------------------- */ #ifndef WGL_I3D_digital_video_control #define WGL_I3D_digital_video_control 1 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 #define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 #define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 typedef BOOL(WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int * piValue); typedef BOOL(WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int * piValue); #define wglGetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewGetDigitalVideoParametersI3D) #define wglSetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewSetDigitalVideoParametersI3D) #define WGLEW_I3D_digital_video_control WGLEW_GET_VAR(__WGLEW_I3D_digital_video_control) #endif /* WGL_I3D_digital_video_control */ /* ----------------------------- WGL_I3D_gamma ----------------------------- */ #ifndef WGL_I3D_gamma #define WGL_I3D_gamma 1 #define WGL_GAMMA_TABLE_SIZE_I3D 0x204E #define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F typedef BOOL(WINAPI * PFNWGLGETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue); typedef BOOL(WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int * piValue); typedef BOOL(WINAPI * PFNWGLSETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue); typedef BOOL(WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int * piValue); #define wglGetGammaTableI3D WGLEW_GET_FUN(__wglewGetGammaTableI3D) #define wglGetGammaTableParametersI3D WGLEW_GET_FUN(__wglewGetGammaTableParametersI3D) #define wglSetGammaTableI3D WGLEW_GET_FUN(__wglewSetGammaTableI3D) #define wglSetGammaTableParametersI3D WGLEW_GET_FUN(__wglewSetGammaTableParametersI3D) #define WGLEW_I3D_gamma WGLEW_GET_VAR(__WGLEW_I3D_gamma) #endif /* WGL_I3D_gamma */ /* ---------------------------- WGL_I3D_genlock ---------------------------- */ #ifndef WGL_I3D_genlock #define WGL_I3D_genlock 1 #define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 #define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 #define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 #define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 #define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 #define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 #define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A #define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B #define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C typedef BOOL(WINAPI * PFNWGLDISABLEGENLOCKI3DPROC)(HDC hDC); typedef BOOL(WINAPI * PFNWGLENABLEGENLOCKI3DPROC)(HDC hDC); typedef BOOL(WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT uRate); typedef BOOL(WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT uDelay); typedef BOOL(WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT uEdge); typedef BOOL(WINAPI * PFNWGLGENLOCKSOURCEI3DPROC)(HDC hDC, UINT uSource); typedef BOOL(WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT * uRate); typedef BOOL(WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT * uDelay); typedef BOOL(WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT * uEdge); typedef BOOL(WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC)(HDC hDC, UINT * uSource); typedef BOOL(WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC)(HDC hDC, BOOL * pFlag); typedef BOOL(WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)(HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay); #define wglDisableGenlockI3D WGLEW_GET_FUN(__wglewDisableGenlockI3D) #define wglEnableGenlockI3D WGLEW_GET_FUN(__wglewEnableGenlockI3D) #define wglGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGenlockSampleRateI3D) #define wglGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGenlockSourceDelayI3D) #define wglGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGenlockSourceEdgeI3D) #define wglGenlockSourceI3D WGLEW_GET_FUN(__wglewGenlockSourceI3D) #define wglGetGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGetGenlockSampleRateI3D) #define wglGetGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGetGenlockSourceDelayI3D) #define wglGetGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGetGenlockSourceEdgeI3D) #define wglGetGenlockSourceI3D WGLEW_GET_FUN(__wglewGetGenlockSourceI3D) #define wglIsEnabledGenlockI3D WGLEW_GET_FUN(__wglewIsEnabledGenlockI3D) #define wglQueryGenlockMaxSourceDelayI3D WGLEW_GET_FUN(__wglewQueryGenlockMaxSourceDelayI3D) #define WGLEW_I3D_genlock WGLEW_GET_VAR(__WGLEW_I3D_genlock) #endif /* WGL_I3D_genlock */ /* -------------------------- WGL_I3D_image_buffer ------------------------- */ #ifndef WGL_I3D_image_buffer #define WGL_I3D_image_buffer 1 #define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 #define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 typedef BOOL(WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)(HDC hdc, HANDLE * pEvent, LPVOID * pAddress, DWORD * pSize, UINT count); typedef LPVOID(WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC)(HDC hDC, DWORD dwSize, UINT uFlags); typedef BOOL(WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC)(HDC hDC, LPVOID pAddress); typedef BOOL(WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)(HDC hdc, LPVOID * pAddress, UINT count); #define wglAssociateImageBufferEventsI3D WGLEW_GET_FUN(__wglewAssociateImageBufferEventsI3D) #define wglCreateImageBufferI3D WGLEW_GET_FUN(__wglewCreateImageBufferI3D) #define wglDestroyImageBufferI3D WGLEW_GET_FUN(__wglewDestroyImageBufferI3D) #define wglReleaseImageBufferEventsI3D WGLEW_GET_FUN(__wglewReleaseImageBufferEventsI3D) #define WGLEW_I3D_image_buffer WGLEW_GET_VAR(__WGLEW_I3D_image_buffer) #endif /* WGL_I3D_image_buffer */ /* ------------------------ WGL_I3D_swap_frame_lock ------------------------ */ #ifndef WGL_I3D_swap_frame_lock #define WGL_I3D_swap_frame_lock 1 typedef BOOL(WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC)(VOID); typedef BOOL(WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC)(VOID); typedef BOOL(WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC)(BOOL * pFlag); typedef BOOL(WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC)(BOOL * pFlag); #define wglDisableFrameLockI3D WGLEW_GET_FUN(__wglewDisableFrameLockI3D) #define wglEnableFrameLockI3D WGLEW_GET_FUN(__wglewEnableFrameLockI3D) #define wglIsEnabledFrameLockI3D WGLEW_GET_FUN(__wglewIsEnabledFrameLockI3D) #define wglQueryFrameLockMasterI3D WGLEW_GET_FUN(__wglewQueryFrameLockMasterI3D) #define WGLEW_I3D_swap_frame_lock WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_lock) #endif /* WGL_I3D_swap_frame_lock */ /* ------------------------ WGL_I3D_swap_frame_usage ----------------------- */ #ifndef WGL_I3D_swap_frame_usage #define WGL_I3D_swap_frame_usage 1 typedef BOOL(WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC)(void); typedef BOOL(WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC)(void); typedef BOOL(WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC)(float * pUsage); typedef BOOL(WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC)(DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage); #define wglBeginFrameTrackingI3D WGLEW_GET_FUN(__wglewBeginFrameTrackingI3D) #define wglEndFrameTrackingI3D WGLEW_GET_FUN(__wglewEndFrameTrackingI3D) #define wglGetFrameUsageI3D WGLEW_GET_FUN(__wglewGetFrameUsageI3D) #define wglQueryFrameTrackingI3D WGLEW_GET_FUN(__wglewQueryFrameTrackingI3D) #define WGLEW_I3D_swap_frame_usage WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_usage) #endif /* WGL_I3D_swap_frame_usage */ /* --------------------------- WGL_NV_DX_interop --------------------------- */ #ifndef WGL_NV_DX_interop #define WGL_NV_DX_interop 1 #define WGL_ACCESS_READ_ONLY_NV 0x0000 #define WGL_ACCESS_READ_WRITE_NV 0x0001 #define WGL_ACCESS_WRITE_DISCARD_NV 0x0002 typedef BOOL(WINAPI * PFNWGLDXCLOSEDEVICENVPROC)(HANDLE hDevice); typedef BOOL(WINAPI * PFNWGLDXLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE * hObjects); typedef BOOL(WINAPI * PFNWGLDXOBJECTACCESSNVPROC)(HANDLE hObject, GLenum access); typedef HANDLE(WINAPI * PFNWGLDXOPENDEVICENVPROC)(void * dxDevice); typedef HANDLE(WINAPI * PFNWGLDXREGISTEROBJECTNVPROC)(HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access); typedef BOOL(WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC)(void * dxObject, HANDLE shareHandle); typedef BOOL(WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE * hObjects); typedef BOOL(WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC)(HANDLE hDevice, HANDLE hObject); #define wglDXCloseDeviceNV WGLEW_GET_FUN(__wglewDXCloseDeviceNV) #define wglDXLockObjectsNV WGLEW_GET_FUN(__wglewDXLockObjectsNV) #define wglDXObjectAccessNV WGLEW_GET_FUN(__wglewDXObjectAccessNV) #define wglDXOpenDeviceNV WGLEW_GET_FUN(__wglewDXOpenDeviceNV) #define wglDXRegisterObjectNV WGLEW_GET_FUN(__wglewDXRegisterObjectNV) #define wglDXSetResourceShareHandleNV WGLEW_GET_FUN(__wglewDXSetResourceShareHandleNV) #define wglDXUnlockObjectsNV WGLEW_GET_FUN(__wglewDXUnlockObjectsNV) #define wglDXUnregisterObjectNV WGLEW_GET_FUN(__wglewDXUnregisterObjectNV) #define WGLEW_NV_DX_interop WGLEW_GET_VAR(__WGLEW_NV_DX_interop) #endif /* WGL_NV_DX_interop */ /* --------------------------- WGL_NV_DX_interop2 -------------------------- */ #ifndef WGL_NV_DX_interop2 #define WGL_NV_DX_interop2 1 #define WGLEW_NV_DX_interop2 WGLEW_GET_VAR(__WGLEW_NV_DX_interop2) #endif /* WGL_NV_DX_interop2 */ /* --------------------------- WGL_NV_copy_image --------------------------- */ #ifndef WGL_NV_copy_image #define WGL_NV_copy_image 1 typedef BOOL(WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC)(HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #define wglCopyImageSubDataNV WGLEW_GET_FUN(__wglewCopyImageSubDataNV) #define WGLEW_NV_copy_image WGLEW_GET_VAR(__WGLEW_NV_copy_image) #endif /* WGL_NV_copy_image */ /* -------------------------- WGL_NV_float_buffer -------------------------- */ #ifndef WGL_NV_float_buffer #define WGL_NV_float_buffer 1 #define WGL_FLOAT_COMPONENTS_NV 0x20B0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 #define WGL_TEXTURE_FLOAT_R_NV 0x20B5 #define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 #define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 #define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 #define WGLEW_NV_float_buffer WGLEW_GET_VAR(__WGLEW_NV_float_buffer) #endif /* WGL_NV_float_buffer */ /* -------------------------- WGL_NV_gpu_affinity -------------------------- */ #ifndef WGL_NV_gpu_affinity #define WGL_NV_gpu_affinity 1 #define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 #define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 DECLARE_HANDLE(HGPUNV); typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; typedef HDC(WINAPI * PFNWGLCREATEAFFINITYDCNVPROC)(const HGPUNV * phGpuList); typedef BOOL(WINAPI * PFNWGLDELETEDCNVPROC)(HDC hdc); typedef BOOL(WINAPI * PFNWGLENUMGPUDEVICESNVPROC)(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); typedef BOOL(WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)(HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu); typedef BOOL(WINAPI * PFNWGLENUMGPUSNVPROC)(UINT iGpuIndex, HGPUNV * phGpu); #define wglCreateAffinityDCNV WGLEW_GET_FUN(__wglewCreateAffinityDCNV) #define wglDeleteDCNV WGLEW_GET_FUN(__wglewDeleteDCNV) #define wglEnumGpuDevicesNV WGLEW_GET_FUN(__wglewEnumGpuDevicesNV) #define wglEnumGpusFromAffinityDCNV WGLEW_GET_FUN(__wglewEnumGpusFromAffinityDCNV) #define wglEnumGpusNV WGLEW_GET_FUN(__wglewEnumGpusNV) #define WGLEW_NV_gpu_affinity WGLEW_GET_VAR(__WGLEW_NV_gpu_affinity) #endif /* WGL_NV_gpu_affinity */ /* ---------------------- WGL_NV_multisample_coverage ---------------------- */ #ifndef WGL_NV_multisample_coverage #define WGL_NV_multisample_coverage 1 #define WGL_COVERAGE_SAMPLES_NV 0x2042 #define WGL_COLOR_SAMPLES_NV 0x20B9 #define WGLEW_NV_multisample_coverage WGLEW_GET_VAR(__WGLEW_NV_multisample_coverage) #endif /* WGL_NV_multisample_coverage */ /* -------------------------- WGL_NV_present_video ------------------------- */ #ifndef WGL_NV_present_video #define WGL_NV_present_video 1 #define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); typedef BOOL(WINAPI * PFNWGLBINDVIDEODEVICENVPROC)(HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList); typedef int(WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC)(HDC hDc, HVIDEOOUTPUTDEVICENV * phDeviceList); typedef BOOL(WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC)(int iAttribute, int * piValue); #define wglBindVideoDeviceNV WGLEW_GET_FUN(__wglewBindVideoDeviceNV) #define wglEnumerateVideoDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoDevicesNV) #define wglQueryCurrentContextNV WGLEW_GET_FUN(__wglewQueryCurrentContextNV) #define WGLEW_NV_present_video WGLEW_GET_VAR(__WGLEW_NV_present_video) #endif /* WGL_NV_present_video */ /* ---------------------- WGL_NV_render_depth_texture ---------------------- */ #ifndef WGL_NV_render_depth_texture #define WGL_NV_render_depth_texture 1 #define WGL_NO_TEXTURE_ARB 0x2077 #define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 #define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 #define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 #define WGL_DEPTH_COMPONENT_NV 0x20A7 #define WGLEW_NV_render_depth_texture WGLEW_GET_VAR(__WGLEW_NV_render_depth_texture) #endif /* WGL_NV_render_depth_texture */ /* -------------------- WGL_NV_render_texture_rectangle -------------------- */ #ifndef WGL_NV_render_texture_rectangle #define WGL_NV_render_texture_rectangle 1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 #define WGL_TEXTURE_RECTANGLE_NV 0x20A2 #define WGLEW_NV_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_NV_render_texture_rectangle) #endif /* WGL_NV_render_texture_rectangle */ /* --------------------------- WGL_NV_swap_group --------------------------- */ #ifndef WGL_NV_swap_group #define WGL_NV_swap_group 1 typedef BOOL(WINAPI * PFNWGLBINDSWAPBARRIERNVPROC)(GLuint group, GLuint barrier); typedef BOOL(WINAPI * PFNWGLJOINSWAPGROUPNVPROC)(HDC hDC, GLuint group); typedef BOOL(WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC)(HDC hDC, GLuint * count); typedef BOOL(WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC)(HDC hDC, GLuint * maxGroups, GLuint * maxBarriers); typedef BOOL(WINAPI * PFNWGLQUERYSWAPGROUPNVPROC)(HDC hDC, GLuint * group, GLuint * barrier); typedef BOOL(WINAPI * PFNWGLRESETFRAMECOUNTNVPROC)(HDC hDC); #define wglBindSwapBarrierNV WGLEW_GET_FUN(__wglewBindSwapBarrierNV) #define wglJoinSwapGroupNV WGLEW_GET_FUN(__wglewJoinSwapGroupNV) #define wglQueryFrameCountNV WGLEW_GET_FUN(__wglewQueryFrameCountNV) #define wglQueryMaxSwapGroupsNV WGLEW_GET_FUN(__wglewQueryMaxSwapGroupsNV) #define wglQuerySwapGroupNV WGLEW_GET_FUN(__wglewQuerySwapGroupNV) #define wglResetFrameCountNV WGLEW_GET_FUN(__wglewResetFrameCountNV) #define WGLEW_NV_swap_group WGLEW_GET_VAR(__WGLEW_NV_swap_group) #endif /* WGL_NV_swap_group */ /* ----------------------- WGL_NV_vertex_array_range ----------------------- */ #ifndef WGL_NV_vertex_array_range #define WGL_NV_vertex_array_range 1 typedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC)(GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); typedef void(WINAPI * PFNWGLFREEMEMORYNVPROC)(void * pointer); #define wglAllocateMemoryNV WGLEW_GET_FUN(__wglewAllocateMemoryNV) #define wglFreeMemoryNV WGLEW_GET_FUN(__wglewFreeMemoryNV) #define WGLEW_NV_vertex_array_range WGLEW_GET_VAR(__WGLEW_NV_vertex_array_range) #endif /* WGL_NV_vertex_array_range */ /* -------------------------- WGL_NV_video_capture ------------------------- */ #ifndef WGL_NV_video_capture #define WGL_NV_video_capture 1 #define WGL_UNIQUE_ID_NV 0x20CE #define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF DECLARE_HANDLE(HVIDEOINPUTDEVICENV); typedef BOOL(WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)(UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); typedef UINT(WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)(HDC hDc, HVIDEOINPUTDEVICENV * phDeviceList); typedef BOOL(WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); typedef BOOL(WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int * piValue); typedef BOOL(WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); #define wglBindVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewBindVideoCaptureDeviceNV) #define wglEnumerateVideoCaptureDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoCaptureDevicesNV) #define wglLockVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewLockVideoCaptureDeviceNV) #define wglQueryVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewQueryVideoCaptureDeviceNV) #define wglReleaseVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoCaptureDeviceNV) #define WGLEW_NV_video_capture WGLEW_GET_VAR(__WGLEW_NV_video_capture) #endif /* WGL_NV_video_capture */ /* -------------------------- WGL_NV_video_output -------------------------- */ #ifndef WGL_NV_video_output #define WGL_NV_video_output 1 #define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 #define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 #define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 #define WGL_VIDEO_OUT_COLOR_NV 0x20C3 #define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 #define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 #define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define WGL_VIDEO_OUT_FRAME 0x20C8 #define WGL_VIDEO_OUT_FIELD_1 0x20C9 #define WGL_VIDEO_OUT_FIELD_2 0x20CA #define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB #define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC DECLARE_HANDLE(HPVIDEODEV); typedef BOOL(WINAPI * PFNWGLBINDVIDEOIMAGENVPROC)(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); typedef BOOL(WINAPI * PFNWGLGETVIDEODEVICENVPROC)(HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice); typedef BOOL(WINAPI * PFNWGLGETVIDEOINFONVPROC)(HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); typedef BOOL(WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC)(HPVIDEODEV hVideoDevice); typedef BOOL(WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC)(HPBUFFERARB hPbuffer, int iVideoBuffer); typedef BOOL(WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC)(HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock); #define wglBindVideoImageNV WGLEW_GET_FUN(__wglewBindVideoImageNV) #define wglGetVideoDeviceNV WGLEW_GET_FUN(__wglewGetVideoDeviceNV) #define wglGetVideoInfoNV WGLEW_GET_FUN(__wglewGetVideoInfoNV) #define wglReleaseVideoDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoDeviceNV) #define wglReleaseVideoImageNV WGLEW_GET_FUN(__wglewReleaseVideoImageNV) #define wglSendPbufferToVideoNV WGLEW_GET_FUN(__wglewSendPbufferToVideoNV) #define WGLEW_NV_video_output WGLEW_GET_VAR(__WGLEW_NV_video_output) #endif /* WGL_NV_video_output */ /* -------------------------- WGL_OML_sync_control ------------------------- */ #ifndef WGL_OML_sync_control #define WGL_OML_sync_control 1 typedef BOOL(WINAPI * PFNWGLGETMSCRATEOMLPROC)(HDC hdc, INT32 * numerator, INT32 * denominator); typedef BOOL(WINAPI * PFNWGLGETSYNCVALUESOMLPROC)(HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc); typedef INT64(WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); typedef INT64(WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)(HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); typedef BOOL(WINAPI * PFNWGLWAITFORMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc); typedef BOOL(WINAPI * PFNWGLWAITFORSBCOMLPROC)(HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc); #define wglGetMscRateOML WGLEW_GET_FUN(__wglewGetMscRateOML) #define wglGetSyncValuesOML WGLEW_GET_FUN(__wglewGetSyncValuesOML) #define wglSwapBuffersMscOML WGLEW_GET_FUN(__wglewSwapBuffersMscOML) #define wglSwapLayerBuffersMscOML WGLEW_GET_FUN(__wglewSwapLayerBuffersMscOML) #define wglWaitForMscOML WGLEW_GET_FUN(__wglewWaitForMscOML) #define wglWaitForSbcOML WGLEW_GET_FUN(__wglewWaitForSbcOML) #define WGLEW_OML_sync_control WGLEW_GET_VAR(__WGLEW_OML_sync_control) #endif /* WGL_OML_sync_control */ /* ------------------------------------------------------------------------- */ #ifdef GLEW_MX #define WGLEW_FUN_EXPORT #define WGLEW_VAR_EXPORT #else #define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT #define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT #endif /* GLEW_MX */ #ifdef GLEW_MX struct WGLEWContextStruct { #endif /* GLEW_MX */ WGLEW_FUN_EXPORT PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL; WGLEW_FUN_EXPORT PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC __wglewBlitContextFramebufferAMD; WGLEW_FUN_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC __wglewCreateAssociatedContextAMD; WGLEW_FUN_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __wglewCreateAssociatedContextAttribsAMD; WGLEW_FUN_EXPORT PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC __wglewDeleteAssociatedContextAMD; WGLEW_FUN_EXPORT PFNWGLGETCONTEXTGPUIDAMDPROC __wglewGetContextGPUIDAMD; WGLEW_FUN_EXPORT PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC __wglewGetCurrentAssociatedContextAMD; WGLEW_FUN_EXPORT PFNWGLGETGPUIDSAMDPROC __wglewGetGPUIDsAMD; WGLEW_FUN_EXPORT PFNWGLGETGPUINFOAMDPROC __wglewGetGPUInfoAMD; WGLEW_FUN_EXPORT PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __wglewMakeAssociatedContextCurrentAMD; WGLEW_FUN_EXPORT PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB; WGLEW_FUN_EXPORT PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB; WGLEW_FUN_EXPORT PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB; WGLEW_FUN_EXPORT PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB; WGLEW_FUN_EXPORT PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB; WGLEW_FUN_EXPORT PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB; WGLEW_FUN_EXPORT PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB; WGLEW_FUN_EXPORT PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB; WGLEW_FUN_EXPORT PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB; WGLEW_FUN_EXPORT PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB; WGLEW_FUN_EXPORT PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB; WGLEW_FUN_EXPORT PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB; WGLEW_FUN_EXPORT PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB; WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB; WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB; WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB; WGLEW_FUN_EXPORT PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB; WGLEW_FUN_EXPORT PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB; WGLEW_FUN_EXPORT PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB; WGLEW_FUN_EXPORT PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT; WGLEW_FUN_EXPORT PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT; WGLEW_FUN_EXPORT PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT; WGLEW_FUN_EXPORT PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT; WGLEW_FUN_EXPORT PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT; WGLEW_FUN_EXPORT PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT; WGLEW_FUN_EXPORT PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT; WGLEW_FUN_EXPORT PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT; WGLEW_FUN_EXPORT PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT; WGLEW_FUN_EXPORT PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT; WGLEW_FUN_EXPORT PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT; WGLEW_FUN_EXPORT PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT; WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT; WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT; WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT; WGLEW_FUN_EXPORT PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT; WGLEW_FUN_EXPORT PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT; WGLEW_FUN_EXPORT PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D; WGLEW_FUN_EXPORT PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D; WGLEW_FUN_EXPORT PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D; WGLEW_FUN_EXPORT PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D; WGLEW_FUN_EXPORT PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D; WGLEW_FUN_EXPORT PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D; WGLEW_FUN_EXPORT PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D; WGLEW_FUN_EXPORT PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D; WGLEW_FUN_EXPORT PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D; WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D; WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D; WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D; WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D; WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D; WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D; WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D; WGLEW_FUN_EXPORT PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D; WGLEW_FUN_EXPORT PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D; WGLEW_FUN_EXPORT PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D; WGLEW_FUN_EXPORT PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D; WGLEW_FUN_EXPORT PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D; WGLEW_FUN_EXPORT PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D; WGLEW_FUN_EXPORT PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D; WGLEW_FUN_EXPORT PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D; WGLEW_FUN_EXPORT PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D; WGLEW_FUN_EXPORT PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D; WGLEW_FUN_EXPORT PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D; WGLEW_FUN_EXPORT PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D; WGLEW_FUN_EXPORT PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D; WGLEW_FUN_EXPORT PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D; WGLEW_FUN_EXPORT PFNWGLDXCLOSEDEVICENVPROC __wglewDXCloseDeviceNV; WGLEW_FUN_EXPORT PFNWGLDXLOCKOBJECTSNVPROC __wglewDXLockObjectsNV; WGLEW_FUN_EXPORT PFNWGLDXOBJECTACCESSNVPROC __wglewDXObjectAccessNV; WGLEW_FUN_EXPORT PFNWGLDXOPENDEVICENVPROC __wglewDXOpenDeviceNV; WGLEW_FUN_EXPORT PFNWGLDXREGISTEROBJECTNVPROC __wglewDXRegisterObjectNV; WGLEW_FUN_EXPORT PFNWGLDXSETRESOURCESHAREHANDLENVPROC __wglewDXSetResourceShareHandleNV; WGLEW_FUN_EXPORT PFNWGLDXUNLOCKOBJECTSNVPROC __wglewDXUnlockObjectsNV; WGLEW_FUN_EXPORT PFNWGLDXUNREGISTEROBJECTNVPROC __wglewDXUnregisterObjectNV; WGLEW_FUN_EXPORT PFNWGLCOPYIMAGESUBDATANVPROC __wglewCopyImageSubDataNV; WGLEW_FUN_EXPORT PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV; WGLEW_FUN_EXPORT PFNWGLDELETEDCNVPROC __wglewDeleteDCNV; WGLEW_FUN_EXPORT PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV; WGLEW_FUN_EXPORT PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV; WGLEW_FUN_EXPORT PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV; WGLEW_FUN_EXPORT PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV; WGLEW_FUN_EXPORT PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV; WGLEW_FUN_EXPORT PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV; WGLEW_FUN_EXPORT PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV; WGLEW_FUN_EXPORT PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV; WGLEW_FUN_EXPORT PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV; WGLEW_FUN_EXPORT PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV; WGLEW_FUN_EXPORT PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV; WGLEW_FUN_EXPORT PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV; WGLEW_FUN_EXPORT PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV; WGLEW_FUN_EXPORT PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV; WGLEW_FUN_EXPORT PFNWGLBINDVIDEOCAPTUREDEVICENVPROC __wglewBindVideoCaptureDeviceNV; WGLEW_FUN_EXPORT PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC __wglewEnumerateVideoCaptureDevicesNV; WGLEW_FUN_EXPORT PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC __wglewLockVideoCaptureDeviceNV; WGLEW_FUN_EXPORT PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC __wglewQueryVideoCaptureDeviceNV; WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC __wglewReleaseVideoCaptureDeviceNV; WGLEW_FUN_EXPORT PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV; WGLEW_FUN_EXPORT PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV; WGLEW_FUN_EXPORT PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV; WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV; WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV; WGLEW_FUN_EXPORT PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV; WGLEW_FUN_EXPORT PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML; WGLEW_FUN_EXPORT PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML; WGLEW_FUN_EXPORT PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML; WGLEW_FUN_EXPORT PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML; WGLEW_FUN_EXPORT PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML; WGLEW_FUN_EXPORT PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML; WGLEW_VAR_EXPORT GLboolean __WGLEW_3DFX_multisample; WGLEW_VAR_EXPORT GLboolean __WGLEW_3DL_stereo_control; WGLEW_VAR_EXPORT GLboolean __WGLEW_AMD_gpu_association; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_buffer_region; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_profile; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_robustness; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_extensions_string; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_framebuffer_sRGB; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_make_current_read; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_multisample; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pbuffer; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format_float; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_render_texture; WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_pixel_format_float; WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es2_profile; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es_profile; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_depth_float; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_display_color_table; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_extensions_string; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_framebuffer_sRGB; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_make_current_read; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_multisample; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pbuffer; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pixel_format; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pixel_format_packed_float; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_swap_control; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_swap_control_tear; WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_digital_video_control; WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_gamma; WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_genlock; WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_image_buffer; WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_swap_frame_lock; WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_swap_frame_usage; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_DX_interop; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_DX_interop2; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_copy_image; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_float_buffer; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_gpu_affinity; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_multisample_coverage; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_present_video; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_render_depth_texture; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_render_texture_rectangle; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_swap_group; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_vertex_array_range; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_capture; WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_output; WGLEW_VAR_EXPORT GLboolean __WGLEW_OML_sync_control; #ifdef GLEW_MX }; /* WGLEWContextStruct */ #endif /* GLEW_MX */ /* ------------------------------------------------------------------------- */ #ifdef GLEW_MX typedef struct WGLEWContextStruct WGLEWContext; GLEWAPI GLenum GLEWAPIENTRY wglewContextInit(WGLEWContext * ctx); GLEWAPI GLboolean GLEWAPIENTRY wglewContextIsSupported(const WGLEWContext * ctx, const char * name); #define wglewInit() wglewContextInit(wglewGetContext()) #define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) #define WGLEW_GET_VAR(x) (*(const GLboolean *)&(wglewGetContext()->x)) #define WGLEW_GET_FUN(x) wglewGetContext()->x #else /* GLEW_MX */ #define WGLEW_GET_VAR(x) (*(const GLboolean *)&x) #define WGLEW_GET_FUN(x) x GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported(const char * name); #endif /* GLEW_MX */ GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension(const char * name); #ifdef __cplusplus } #endif #undef GLEWAPI #endif /* __wglew_h__ */ DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/000077500000000000000000000000001360473665400237405ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/000077500000000000000000000000001360473665400254505ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/000077500000000000000000000000001360473665400262275ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/000077500000000000000000000000001360473665400271575ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/_detail.hpp000066400000000000000000000241631360473665400312770ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/_detail.hpp /// @date 2008-07-24 / 2011-06-14 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_detail #define glm_core_detail #include "setup.hpp" #include #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) #include #endif namespace glm { namespace detail { class half; #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available typedef int64_t sint64; typedef uint64_t uint64; #elif (GLM_COMPILER & GLM_COMPILER_VC) typedef signed __int64 sint64; typedef unsigned __int64 uint64; #elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG)) __extension__ typedef signed long long sint64; __extension__ typedef unsigned long long uint64; #elif (GLM_COMPILER & GLM_COMPILER_BC) typedef Int64 sint64; typedef Uint64 uint64; #else //unknown compiler typedef signed long long sint64; typedef unsigned long long uint64; #endif //GLM_COMPILER template struct If { template static GLM_FUNC_QUALIFIER T apply(F functor, const T & val) { return functor(val); } }; template<> struct If { template static GLM_FUNC_QUALIFIER T apply(F, const T & val) { return val; } }; //template //struct traits //{ // static const bool is_signed = false; // static const bool is_float = false; // static const bool is_vector = false; // static const bool is_matrix = false; // static const bool is_genType = false; // static const bool is_genIType = false; // static const bool is_genUType = false; //}; //template <> //struct traits //{ // static const bool is_float = true; // static const bool is_genType = true; //}; //template <> //struct traits //{ // static const bool is_float = true; // static const bool is_genType = true; //}; //template <> //struct traits //{ // static const bool is_float = true; // static const bool is_genType = true; //}; //template //struct desc //{ // typedef genType type; // typedef genType * pointer; // typedef genType const* const_pointer; // typedef genType const *const const_pointer_const; // typedef genType *const pointer_const; // typedef genType & reference; // typedef genType const& const_reference; // typedef genType const& param_type; // typedef typename genType::value_type value_type; // typedef typename genType::size_type size_type; // static const typename size_type value_size; //}; //template //const typename desc::size_type desc::value_size = genType::value_size(); union uif32 { GLM_FUNC_QUALIFIER uif32() : i(0) { } GLM_FUNC_QUALIFIER uif32(float f) : f(f) { } GLM_FUNC_QUALIFIER uif32(unsigned int i) : i(i) { } float f; unsigned int i; }; union uif64 { GLM_FUNC_QUALIFIER uif64() : i(0) { } GLM_FUNC_QUALIFIER uif64(double f) : f(f) { } GLM_FUNC_QUALIFIER uif64(uint64 i) : i(i) { } double f; uint64 i; }; typedef uif32 uif; ////////////////// // int template struct is_int { enum is_int_enum { _YES = 0, _NO = 1 }; }; #define GLM_DETAIL_IS_INT(T) \ template<> \ struct is_int \ { \ enum is_int_enum \ { \ _YES = 1, \ _NO = 0 \ }; \ } ////////////////// // uint template struct is_uint { enum is_uint_enum { _YES = 0, _NO = 1 }; }; #define GLM_DETAIL_IS_UINT(T) \ template<> \ struct is_uint \ { \ enum is_uint_enum \ { \ _YES = 1, \ _NO = 0 \ }; \ } //GLM_DETAIL_IS_UINT(unsigned long long) ////////////////// // float template struct is_float { enum is_float_enum { _YES = 0, _NO = 1 }; }; #define GLM_DETAIL_IS_FLOAT(T) \ template<> \ struct is_float \ { \ enum is_float_enum \ { \ _YES = 1, \ _NO = 0 \ }; \ } GLM_DETAIL_IS_FLOAT(detail::half); GLM_DETAIL_IS_FLOAT(float); GLM_DETAIL_IS_FLOAT(double); GLM_DETAIL_IS_FLOAT(long double); ////////////////// // bool template struct is_bool { enum is_bool_enum { _YES = 0, _NO = 1 }; }; template<> struct is_bool { enum is_bool_enum { _YES = 1, _NO = 0 }; }; ////////////////// // vector template struct is_vector { enum is_vector_enum { _YES = 0, _NO = 1 }; }; #define GLM_DETAIL_IS_VECTOR(TYPE) \ template \ struct is_vector> \ { \ enum is_vector_enum \ { \ _YES = 1, \ _NO = 0 \ }; \ } ////////////////// // matrix template struct is_matrix { enum is_matrix_enum { _YES = 0, _NO = 1 }; }; #define GLM_DETAIL_IS_MATRIX(T) \ template<> \ struct is_matrix \ { \ enum is_matrix_enum \ { \ _YES = 1, \ _NO = 0 \ }; \ } ////////////////// // type template struct type { enum type_enum { is_float = is_float::_YES, is_int = is_int::_YES, is_uint = is_uint::_YES, is_bool = is_bool::_YES }; }; ////////////////// // type typedef signed char int8; typedef signed short int16; typedef signed int int32; typedef detail::sint64 int64; typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef detail::uint64 uint64; typedef detail::half float16; typedef float float32; typedef double float64; ////////////////// // float_or_int_trait struct float_or_int_value { enum { GLM_ERROR, GLM_FLOAT, GLM_INT }; }; template struct float_or_int_trait { enum { ID = float_or_int_value::GLM_ERROR }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_INT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_FLOAT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_FLOAT }; }; template<> struct float_or_int_trait { enum { ID = float_or_int_value::GLM_FLOAT }; }; } //namespace detail } //namespace glm #if ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005)) #define GLM_DEPRECATED __declspec(deprecated) #define GLM_ALIGN(x) __declspec(align(x)) #define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct #define GLM_RESTRICT __declspec(restrict) #define GLM_RESTRICT_VAR __restrict #elif ((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31)) #define GLM_DEPRECATED __attribute__((__deprecated__)) #define GLM_ALIGN(x) __attribute__((aligned(x))) #define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) #if (GLM_COMPILER >= GLM_COMPILER_GCC33) #define GLM_RESTRICT __restrict__ #define GLM_RESTRICT_VAR __restrict__ #else #define GLM_RESTRICT #define GLM_RESTRICT_VAR #endif #define GLM_RESTRICT __restrict__ #define GLM_RESTRICT_VAR __restrict__ #else #define GLM_DEPRECATED #define GLM_ALIGN #define GLM_ALIGNED_STRUCT(x) #define GLM_RESTRICT #define GLM_RESTRICT_VAR #endif //GLM_COMPILER #endif //glm_core_detail DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/_fixes.hpp000066400000000000000000000035001360473665400311430ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/_fixes.hpp /// @date 2011-02-21 / 2011-11-22 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #include //! Workaround for compatibility with other libraries #ifdef max #undef max #endif //! Workaround for compatibility with other libraries #ifdef min #undef min #endif //! Workaround for Android #ifdef isnan #undef isnan #endif //! Workaround for Android #ifdef isinf #undef isinf #endif //! Workaround for Chrone Native Client #ifdef log2 #undef log2 #endif DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/_swizzle.hpp000066400000000000000000004253341360473665400315510ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/_swizzle.hpp /// @date 2006-04-20 / 2011-02-16 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_swizzle #define glm_core_swizzle #include "_swizzle_func.hpp" namespace glm { enum comp { X = 0, R = 0, S = 0, Y = 1, G = 1, T = 1, Z = 2, B = 2, P = 2, W = 3, A = 3, Q = 3 }; } //namespace glm namespace glm { namespace detail { // Internal class for implementing swizzle operators template struct _swizzle_base0 { typedef T value_type; protected: value_type & elem(size_t i) { return (reinterpret_cast(_buffer))[i]; } const value_type & elem(size_t i) const { return (reinterpret_cast(_buffer))[i]; } // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. // The size 1 buffer is assumed to aligned to the actual members so that the // elem() char _buffer[1]; }; template struct _swizzle_base1 : public _swizzle_base0 { }; template struct _swizzle_base1 : public _swizzle_base0 { V operator()() const { return V(this->elem(E0), this->elem(E1)); } }; template struct _swizzle_base1 : public _swizzle_base0 { V operator()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); } }; template struct _swizzle_base1 : public _swizzle_base0 { V operator()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } }; // Internal class for implementing swizzle operators /* Template parameters: ValueType = type of scalar values (e.g. float, double) VecType = class the swizzle is applies to (e.g. tvec3) N = number of components in the vector (e.g. 3) E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles containing duplicate elements so that they cannot be used as r-values). */ template struct _swizzle_base2 : public _swizzle_base1 { typedef VecType vec_type; typedef ValueType value_type; _swizzle_base2 & operator=(const ValueType & t) { for (int i = 0; i < N; ++i) (*this)[i] = t; return *this; } _swizzle_base2 & operator=(const VecType & that) { struct op { void operator()(value_type & e, value_type & t) { e = t; } }; _apply_op(that, op()); return *this; } void operator-=(const VecType & that) { struct op { void operator()(value_type & e, value_type & t) { e -= t; } }; _apply_op(that, op()); } void operator+=(const VecType & that) { struct op { void operator()(value_type & e, value_type & t) { e += t; } }; _apply_op(that, op()); } void operator*=(const VecType & that) { struct op { void operator()(value_type & e, value_type & t) { e *= t; } }; _apply_op(that, op()); } void operator/=(const VecType & that) { struct op { void operator()(value_type & e, value_type & t) { e /= t; } }; _apply_op(that, op()); } value_type & operator[](size_t i) { static const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } value_type operator[](size_t i) const { static const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } protected: template void _apply_op(const VecType & that, T op) { // Make a copy of the data in this == &that. // The copier should optimize out the copy in cases where the function is // properly inlined and the copy is not necessary. ValueType t[N]; for (int i = 0; i < N; ++i) t[i] = that[i]; for (int i = 0; i < N; ++i) op((*this)[i], t[i]); } }; // Specialization for swizzles containing duplicate elements. These cannot be modified. template struct _swizzle_base2 : public _swizzle_base1 { typedef VecType vec_type; typedef ValueType value_type; struct Stub { }; _swizzle_base2 & operator=(Stub const &) { } value_type operator[](size_t i) const { static const int offset_dst[4] = { E0, E1, E2, E3 }; return this->elem(offset_dst[i]); } }; template struct swizzle : public _swizzle_base2 { typedef _swizzle_base2 base_type; using base_type::operator=; operator VecType() const { return (*this)(); } }; // // To prevent the C++ syntax from getting entirely overwhelming, define some alias macros // #define _GLM_SWIZZLE_TEMPLATE1 template #define _GLM_SWIZZLE_TEMPLATE2 template #define _GLM_SWIZZLE_TYPE1 glm::detail::swizzle #define _GLM_SWIZZLE_TYPE2 glm::detail::swizzle // // Wrapper for a binary operator (e.g. u.yy + v.zy) // #define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ _GLM_SWIZZLE_TEMPLATE2 \ V operator OPERAND(const _GLM_SWIZZLE_TYPE1 & a, const _GLM_SWIZZLE_TYPE2 & b) \ { \ return a() OPERAND b(); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ V operator OPERAND(const _GLM_SWIZZLE_TYPE1 & a, const V & b) \ { \ return a() OPERAND b; \ } \ _GLM_SWIZZLE_TEMPLATE1 \ V operator OPERAND(const V & a, const _GLM_SWIZZLE_TYPE1 & b) \ { \ return a OPERAND b(); \ } // // Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) // #define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ _GLM_SWIZZLE_TEMPLATE1 \ V operator OPERAND(const _GLM_SWIZZLE_TYPE1 & a, const T & b) \ { \ return a() OPERAND b; \ } \ _GLM_SWIZZLE_TEMPLATE1 \ V operator OPERAND(const T & a, const _GLM_SWIZZLE_TYPE1 & b) \ { \ return a OPERAND b(); \ } // // Macro for wrapping a function taking one argument (e.g. abs()) // #define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE, FUNCTION) \ _GLM_SWIZZLE_TEMPLATE1 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1 & a) \ { \ return FUNCTION(a()); \ } // // Macro for wrapping a function taking two vector arguments (e.g. dot()). // #define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE, FUNCTION) \ _GLM_SWIZZLE_TEMPLATE2 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1 & a, const _GLM_SWIZZLE_TYPE2 & b) \ { \ return FUNCTION(a(), b()); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1 & a, const _GLM_SWIZZLE_TYPE1 & b) \ { \ return FUNCTION(a(), b()); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1 & a, const typename V & b) \ { \ return FUNCTION(a(), b); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V & a, const _GLM_SWIZZLE_TYPE1 & b) \ { \ return FUNCTION(a, b()); \ } // // Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). // #define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE, FUNCTION) \ _GLM_SWIZZLE_TEMPLATE2 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1 & a, const _GLM_SWIZZLE_TYPE2 & b, const T & c) \ { \ return FUNCTION(a(), b(), c); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1 & a, const _GLM_SWIZZLE_TYPE1 & b, const T & c) \ { \ return FUNCTION(a(), b(), c); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1 & a, const typename S0::vec_type & b, const T & c) \ { \ return FUNCTION(a(), b, c); \ } \ _GLM_SWIZZLE_TEMPLATE1 \ typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V & a, const _GLM_SWIZZLE_TYPE1 & b, const T & c) \ { \ return FUNCTION(a, b(), c); \ } } //namespace detail } //namespace glm namespace glm { namespace detail { _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) } // namespace detail // // Swizzles are distinct types from the unswizzled type. The below macros will // provide template specializations for the swizzle types for the given functions // so that the compiler does not have any ambiguity to choosing how to handle // the function. // // The alternative is to use the operator()() when calling the function in order // to explicitly convert the swizzled type to the unswizzled type. // //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); } // namespace glm #define _GLM_SWIZZLE2_2_MEMBERS(T, P, E0, E1) \ struct \ { \ glm::detail::swizzle<2, T, P, 0, 0, -1, -2> E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 0, 1, -1, -2> E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 1, 0, -1, -2> E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 1, 1, -1, -2> E1##E1; \ }; #define _GLM_SWIZZLE2_3_MEMBERS(T, P2, E0, E1) \ struct \ { \ glm::detail::swizzle<3, T, P2, 0, 0, 0, -1> E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P2, 0, 0, 1, -1> E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P2, 0, 1, 0, -1> E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P2, 0, 1, 1, -1> E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P2, 1, 0, 0, -1> E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P2, 1, 0, 1, -1> E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P2, 1, 1, 0, -1> E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P2, 1, 1, 1, -1> E1##E1##E1; \ }; #define _GLM_SWIZZLE2_4_MEMBERS(T, P2, E0, E1) \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 0, 0> E0##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 0, 1> E0##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 1, 0> E0##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 1, 1> E0##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 0, 0> E0##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 0, 1> E0##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 1, 0> E0##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 1, 1> E0##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 0, 0> E1##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 0, 1> E1##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 1, 0> E1##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 1, 1> E1##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 0, 0> E1##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 0, 1> E1##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 1, 0> E1##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 1, 1> E1##E1##E1##E1; \ }; #define _GLM_SWIZZLE3_2_MEMBERS(T, P2, E0, E1, E2) \ struct \ { \ glm::detail::swizzle<2, T, P2, 0, 0, -1, -2> E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 0, 1, -1, -2> E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 0, 2, -1, -2> E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 1, 0, -1, -2> E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 1, 1, -1, -2> E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 1, 2, -1, -2> E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 2, 0, -1, -2> E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 2, 1, -1, -2> E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P2, 2, 2, -1, -2> E2##E2; \ }; #define _GLM_SWIZZLE3_3_MEMBERS(T, P, E0, E1, E2) \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 0, 0, -1> E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 0, 1, -1> E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 0, 2, -1> E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 1, 0, -1> E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 1, 1, -1> E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 1, 2, -1> E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 2, 0, -1> E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 2, 1, -1> E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 2, 2, -1> E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 0, 0, -1> E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 0, 1, -1> E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 0, 2, -1> E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 1, 0, -1> E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 1, 1, -1> E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 1, 2, -1> E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 2, 0, -1> E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 2, 1, -1> E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 2, 2, -1> E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 0, 0, -1> E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 0, 1, -1> E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 0, 2, -1> E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 1, 0, -1> E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 1, 1, -1> E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 1, 2, -1> E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 2, 0, -1> E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 2, 1, -1> E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 2, 2, -1> E2##E2##E2; \ }; #define _GLM_SWIZZLE3_4_MEMBERS(T, P2, E0, E1, E2) \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 0, 0> E0##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 0, 1> E0##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 0, 2> E0##E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 1, 0> E0##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 1, 1> E0##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 1, 2> E0##E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 2, 0> E0##E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 2, 1> E0##E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 0, 2, 2> E0##E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 0, 0> E0##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 0, 1> E0##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 0, 2> E0##E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 1, 0> E0##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 1, 1> E0##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 1, 2> E0##E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 2, 0> E0##E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 2, 1> E0##E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 1, 2, 2> E0##E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 0, 0> E0##E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 0, 1> E0##E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 0, 2> E0##E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 1, 0> E0##E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 1, 1> E0##E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 1, 2> E0##E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 2, 0> E0##E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 2, 1> E0##E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 0, 2, 2, 2> E0##E2##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 0, 0> E1##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 0, 1> E1##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 0, 2> E1##E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 1, 0> E1##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 1, 1> E1##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 1, 2> E1##E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 2, 0> E1##E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 2, 1> E1##E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 0, 2, 2> E1##E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 0, 0> E1##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 0, 1> E1##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 0, 2> E1##E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 1, 0> E1##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 1, 1> E1##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 1, 2> E1##E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 2, 0> E1##E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 2, 1> E1##E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 1, 2, 2> E1##E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 0, 0> E1##E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 0, 1> E1##E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 0, 2> E1##E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 1, 0> E1##E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 1, 1> E1##E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 1, 2> E1##E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 2, 0> E1##E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 2, 1> E1##E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 1, 2, 2, 2> E1##E2##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 0, 0> E2##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 0, 1> E2##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 0, 2> E2##E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 1, 0> E2##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 1, 1> E2##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 1, 2> E2##E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 2, 0> E2##E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 2, 1> E2##E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 0, 2, 2> E2##E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 0, 0> E2##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 0, 1> E2##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 0, 2> E2##E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 1, 0> E2##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 1, 1> E2##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 1, 2> E2##E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 2, 0> E2##E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 2, 1> E2##E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 1, 2, 2> E2##E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 0, 0> E2##E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 0, 1> E2##E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 0, 2> E2##E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 1, 0> E2##E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 1, 1> E2##E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 1, 2> E2##E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 2, 0> E2##E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 2, 1> E2##E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P2, 2, 2, 2, 2> E2##E2##E2##E2; \ }; #define _GLM_SWIZZLE4_2_MEMBERS(T, P, E0, E1, E2, E3) \ struct \ { \ glm::detail::swizzle<2, T, P, 0, 0, -1, -2> E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 0, 1, -1, -2> E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 0, 2, -1, -2> E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 0, 3, -1, -2> E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 1, 0, -1, -2> E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 1, 1, -1, -2> E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 1, 2, -1, -2> E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 1, 3, -1, -2> E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 2, 0, -1, -2> E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 2, 1, -1, -2> E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 2, 2, -1, -2> E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 2, 3, -1, -2> E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 3, 0, -1, -2> E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 3, 1, -1, -2> E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 3, 2, -1, -2> E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<2, T, P, 3, 3, -1, -2> E3##E3; \ }; #define _GLM_SWIZZLE4_3_MEMBERS(T, P, E0, E1, E2, E3) \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 0, 0, -1> E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 0, 1, -1> E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 0, 2, -1> E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 0, 3, -1> E0##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 1, 0, -1> E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 1, 1, -1> E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 1, 2, -1> E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 1, 3, -1> E0##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 2, 0, -1> E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 2, 1, -1> E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 2, 2, -1> E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 2, 3, -1> E0##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 3, 0, -1> E0##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 3, 1, -1> E0##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 3, 2, -1> E0##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 0, 3, 3, -1> E0##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 0, 0, -1> E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 0, 1, -1> E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 0, 2, -1> E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 0, 3, -1> E1##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 1, 0, -1> E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 1, 1, -1> E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 1, 2, -1> E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 1, 3, -1> E1##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 2, 0, -1> E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 2, 1, -1> E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 2, 2, -1> E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 2, 3, -1> E1##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 3, 0, -1> E1##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 3, 1, -1> E1##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 3, 2, -1> E1##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 1, 3, 3, -1> E1##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 0, 0, -1> E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 0, 1, -1> E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 0, 2, -1> E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 0, 3, -1> E2##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 1, 0, -1> E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 1, 1, -1> E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 1, 2, -1> E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 1, 3, -1> E2##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 2, 0, -1> E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 2, 1, -1> E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 2, 2, -1> E2##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 2, 3, -1> E2##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 3, 0, -1> E2##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 3, 1, -1> E2##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 3, 2, -1> E2##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 2, 3, 3, -1> E2##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 0, 0, -1> E3##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 0, 1, -1> E3##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 0, 2, -1> E3##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 0, 3, -1> E3##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 1, 0, -1> E3##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 1, 1, -1> E3##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 1, 2, -1> E3##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 1, 3, -1> E3##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 2, 0, -1> E3##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 2, 1, -1> E3##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 2, 2, -1> E3##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 2, 3, -1> E3##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 3, 0, -1> E3##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 3, 1, -1> E3##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 3, 2, -1> E3##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<3, T, P, 3, 3, 3, -1> E3##E3##E3; \ }; #define _GLM_SWIZZLE4_4_MEMBERS(T, P, E0, E1, E2, E3) \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 0, 0> E0##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 0, 1> E0##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 0, 2> E0##E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 0, 3> E0##E0##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 1, 0> E0##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 1, 1> E0##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 1, 2> E0##E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 1, 3> E0##E0##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 2, 0> E0##E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 2, 1> E0##E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 2, 2> E0##E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 2, 3> E0##E0##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 3, 0> E0##E0##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 3, 1> E0##E0##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 3, 2> E0##E0##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 0, 3, 3> E0##E0##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 0, 0> E0##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 0, 1> E0##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 0, 2> E0##E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 0, 3> E0##E1##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 1, 0> E0##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 1, 1> E0##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 1, 2> E0##E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 1, 3> E0##E1##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 2, 0> E0##E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 2, 1> E0##E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 2, 2> E0##E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 2, 3> E0##E1##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 3, 0> E0##E1##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 3, 1> E0##E1##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 3, 2> E0##E1##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 1, 3, 3> E0##E1##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 0, 0> E0##E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 0, 1> E0##E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 0, 2> E0##E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 0, 3> E0##E2##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 1, 0> E0##E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 1, 1> E0##E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 1, 2> E0##E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 1, 3> E0##E2##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 2, 0> E0##E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 2, 1> E0##E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 2, 2> E0##E2##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 2, 3> E0##E2##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 3, 0> E0##E2##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 3, 1> E0##E2##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 3, 2> E0##E2##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 0, 2, 3, 3> E0##E2##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 0, 0> E1##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 0, 1> E1##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 0, 2> E1##E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 0, 3> E1##E0##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 1, 0> E1##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 1, 1> E1##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 1, 2> E1##E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 1, 3> E1##E0##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 2, 0> E1##E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 2, 1> E1##E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 2, 2> E1##E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 2, 3> E1##E0##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 3, 0> E1##E0##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 3, 1> E1##E0##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 3, 2> E1##E0##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 0, 3, 3> E1##E0##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 0, 0> E1##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 0, 1> E1##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 0, 2> E1##E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 0, 3> E1##E1##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 1, 0> E1##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 1, 1> E1##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 1, 2> E1##E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 1, 3> E1##E1##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 2, 0> E1##E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 2, 1> E1##E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 2, 2> E1##E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 2, 3> E1##E1##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 3, 0> E1##E1##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 3, 1> E1##E1##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 3, 2> E1##E1##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 1, 3, 3> E1##E1##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 0, 0> E1##E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 0, 1> E1##E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 0, 2> E1##E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 0, 3> E1##E2##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 1, 0> E1##E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 1, 1> E1##E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 1, 2> E1##E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 1, 3> E1##E2##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 2, 0> E1##E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 2, 1> E1##E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 2, 2> E1##E2##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 2, 3> E1##E2##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 3, 0> E1##E2##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 3, 1> E1##E2##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 3, 2> E1##E2##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 2, 3, 3> E1##E2##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 0, 0> E1##E3##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 0, 1> E1##E3##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 0, 2> E1##E3##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 0, 3> E1##E3##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 1, 0> E1##E3##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 1, 1> E1##E3##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 1, 2> E1##E3##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 1, 3> E1##E3##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 2, 0> E1##E3##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 2, 1> E1##E3##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 2, 2> E1##E3##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 2, 3> E1##E3##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 3, 0> E1##E3##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 3, 1> E1##E3##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 3, 2> E1##E3##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 1, 3, 3, 3> E1##E3##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 0, 0> E2##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 0, 1> E2##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 0, 2> E2##E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 0, 3> E2##E0##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 1, 0> E2##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 1, 1> E2##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 1, 2> E2##E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 1, 3> E2##E0##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 2, 0> E2##E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 2, 1> E2##E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 2, 2> E2##E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 2, 3> E2##E0##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 3, 0> E2##E0##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 3, 1> E2##E0##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 3, 2> E2##E0##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 0, 3, 3> E2##E0##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 0, 0> E2##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 0, 1> E2##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 0, 2> E2##E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 0, 3> E2##E1##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 1, 0> E2##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 1, 1> E2##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 1, 2> E2##E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 1, 3> E2##E1##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 2, 0> E2##E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 2, 1> E2##E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 2, 2> E2##E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 2, 3> E2##E1##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 3, 0> E2##E1##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 3, 1> E2##E1##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 3, 2> E2##E1##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 1, 3, 3> E2##E1##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 0, 0> E2##E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 0, 1> E2##E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 0, 2> E2##E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 0, 3> E2##E2##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 1, 0> E2##E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 1, 1> E2##E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 1, 2> E2##E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 1, 3> E2##E2##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 2, 0> E2##E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 2, 1> E2##E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 2, 2> E2##E2##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 2, 3> E2##E2##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 3, 0> E2##E2##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 3, 1> E2##E2##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 3, 2> E2##E2##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 2, 3, 3> E2##E2##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 0, 0> E2##E3##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 0, 1> E2##E3##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 0, 2> E2##E3##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 0, 3> E2##E3##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 1, 0> E2##E3##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 1, 1> E2##E3##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 1, 2> E2##E3##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 1, 3> E2##E3##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 2, 0> E2##E3##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 2, 1> E2##E3##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 2, 2> E2##E3##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 2, 3> E2##E3##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 3, 0> E2##E3##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 3, 1> E2##E3##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 3, 2> E2##E3##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 2, 3, 3, 3> E2##E3##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 0, 0> E3##E0##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 0, 1> E3##E0##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 0, 2> E3##E0##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 0, 3> E3##E0##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 1, 0> E3##E0##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 1, 1> E3##E0##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 1, 2> E3##E0##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 1, 3> E3##E0##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 2, 0> E3##E0##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 2, 1> E3##E0##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 2, 2> E3##E0##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 2, 3> E3##E0##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 3, 0> E3##E0##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 3, 1> E3##E0##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 3, 2> E3##E0##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 0, 3, 3> E3##E0##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 0, 0> E3##E1##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 0, 1> E3##E1##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 0, 2> E3##E1##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 0, 3> E3##E1##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 1, 0> E3##E1##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 1, 1> E3##E1##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 1, 2> E3##E1##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 1, 3> E3##E1##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 2, 0> E3##E1##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 2, 1> E3##E1##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 2, 2> E3##E1##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 2, 3> E3##E1##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 3, 0> E3##E1##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 3, 1> E3##E1##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 3, 2> E3##E1##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 1, 3, 3> E3##E1##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 0, 0> E3##E2##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 0, 1> E3##E2##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 0, 2> E3##E2##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 0, 3> E3##E2##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 1, 0> E3##E2##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 1, 1> E3##E2##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 1, 2> E3##E2##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 1, 3> E3##E2##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 2, 0> E3##E2##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 2, 1> E3##E2##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 2, 2> E3##E2##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 2, 3> E3##E2##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 3, 0> E3##E2##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 3, 1> E3##E2##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 3, 2> E3##E2##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 2, 3, 3> E3##E2##E3##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 0, 0> E3##E3##E0##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 0, 1> E3##E3##E0##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 0, 2> E3##E3##E0##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 0, 3> E3##E3##E0##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 1, 0> E3##E3##E1##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 1, 1> E3##E3##E1##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 1, 2> E3##E3##E1##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 1, 3> E3##E3##E1##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 2, 0> E3##E3##E2##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 2, 1> E3##E3##E2##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 2, 2> E3##E3##E2##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 2, 3> E3##E3##E2##E3; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 3, 0> E3##E3##E3##E0; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 3, 1> E3##E3##E3##E1; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 3, 2> E3##E3##E3##E2; \ }; \ struct \ { \ glm::detail::swizzle<4, T, P, 3, 3, 3, 3> E3##E3##E3##E3; \ }; #endif //glm_core_swizzle DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/_swizzle_func.hpp000066400000000000000000002141161360473665400325560ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/_swizzle_func.hpp /// @date 2011-10-16 / 2011-10-16 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_swizzle_func #define glm_core_swizzle_func #define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ SWIZZLED_TYPE A##B() CONST \ { \ return SWIZZLED_TYPE(this->A, this->B); \ } #define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ SWIZZLED_TYPE A##B##C() CONST \ { \ return SWIZZLED_TYPE(this->A, this->B, this->C); \ } #define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ SWIZZLED_TYPE A##B##C##D() CONST \ { \ return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ } #define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ template \ SWIZZLED_TYPE CLASS_TYPE::A##B() CONST \ { \ return SWIZZLED_TYPE(this->A, this->B); \ } #define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ template \ SWIZZLED_TYPE CLASS_TYPE::A##B##C() CONST \ { \ return SWIZZLED_TYPE(this->A, this->B, this->C); \ } #define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ template \ SWIZZLED_TYPE CLASS_TYPE::A##B##C##D() CONST \ { \ return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ } #define GLM_MUTABLE #define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) #define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t) //GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2) #define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) #define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A) #define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) #define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, q) //GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3) #define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C) #define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B) #define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A) #define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) #define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) //GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4) #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \ GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \ GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \ GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t) //GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4) #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q) //GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4) #define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D) #define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D) #define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) #define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) //GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4) #endif //glm_core_swizzle_func DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/_vectorize.hpp000066400000000000000000000143411360473665400320440ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/_vectorize.hpp /// @date 2011-10-14 / 2011-10-14 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #define VECTORIZE2_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec2 func( \ detail::tvec2 const & v) \ { \ return detail::tvec2( \ func(v.x), \ func(v.y)); \ } #define VECTORIZE3_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec3 func( \ detail::tvec3 const & v) \ { \ return detail::tvec3( \ func(v.x), \ func(v.y), \ func(v.z)); \ } #define VECTORIZE4_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec4 func( \ detail::tvec4 const & v) \ { \ return detail::tvec4( \ func(v.x), \ func(v.y), \ func(v.z), \ func(v.w)); \ } #define VECTORIZE_VEC(func) \ VECTORIZE2_VEC(func) \ VECTORIZE3_VEC(func) \ VECTORIZE4_VEC(func) #define VECTORIZE2_VEC_SCA(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec2 func( \ detail::tvec2 const & x, \ typename detail::tvec2::value_type const & y) \ { \ return detail::tvec2( \ func(x.x, y), \ func(x.y, y)); \ } #define VECTORIZE3_VEC_SCA(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec3 func( \ detail::tvec3 const & x, \ typename detail::tvec3::value_type const & y) \ { \ return detail::tvec3( \ func(x.x, y), \ func(x.y, y), \ func(x.z, y)); \ } #define VECTORIZE4_VEC_SCA(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec4 func( \ detail::tvec4 const & x, \ typename detail::tvec4::value_type const & y) \ { \ return detail::tvec4( \ func(x.x, y), \ func(x.y, y), \ func(x.z, y), \ func(x.w, y)); \ } #define VECTORIZE_VEC_SCA(func) \ VECTORIZE2_VEC_SCA(func) \ VECTORIZE3_VEC_SCA(func) \ VECTORIZE4_VEC_SCA(func) #define VECTORIZE2_VEC_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec2 func( \ detail::tvec2 const & x, \ detail::tvec2 const & y) \ { \ return detail::tvec2( \ func(x.x, y.x), \ func(x.y, y.y)); \ } #define VECTORIZE3_VEC_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec3 func( \ detail::tvec3 const & x, \ detail::tvec3 const & y) \ { \ return detail::tvec3( \ func(x.x, y.x), \ func(x.y, y.y), \ func(x.z, y.z)); \ } #define VECTORIZE4_VEC_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec4 func( \ detail::tvec4 const & x, \ detail::tvec4 const & y) \ { \ return detail::tvec4( \ func(x.x, y.x), \ func(x.y, y.y), \ func(x.z, y.z), \ func(x.w, y.w)); \ } #define VECTORIZE_VEC_VEC(func) \ VECTORIZE2_VEC_VEC(func) \ VECTORIZE3_VEC_VEC(func) \ VECTORIZE4_VEC_VEC(func) DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/dummy.cpp000066400000000000000000000032671360473665400310260ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/dummy.cpp /// @date 2011-01-19 / 2011-06-15 /// @author Christophe Riccio /// /// GLM is a header only library. There is nothing to compile. /// dummy.cpp exist only a wordaround for CMake file. /////////////////////////////////////////////////////////////////////////////////// #define GLM_MESSAGES #include "../ext.hpp" #include "../glm.hpp" //#error "GLM is a header only library" int main() { } DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_common.hpp000066400000000000000000000452651360473665400322070ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_common.hpp /// @date 2008-03-08 / 2010-01-26 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// /// @defgroup core_func_common Common functions /// @ingroup core /// /// These all operate component-wise. The description is per component. /////////////////////////////////////////////////////////////////////////////////// #ifndef GLM_CORE_func_common #define GLM_CORE_func_common GLM_VERSION #include "_fixes.hpp" namespace glm { /// @addtogroup core_func_common /// @{ /// Returns x if x >= 0; otherwise, it returns -x. /// /// @tparam genType floating-point or signed integer; scalar or vector types. /// /// @see GLSL abs man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType abs(genType const & x); /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. /// /// @tparam genType Floating-point or signed integer; scalar or vector types. /// /// @see GLSL sign man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType sign(genType const & x); /// Returns a value equal to the nearest integer that is less then or equal to x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL floor man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType floor(genType const & x); /// Returns a value equal to the nearest integer to x /// whose absolute value is not larger than the absolute value of x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL trunc man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType trunc(genType const & x); /// Returns a value equal to the nearest integer to x. /// The fraction 0.5 will round in a direction chosen by the /// implementation, presumably the direction that is fastest. /// This includes the possibility that round(x) returns the /// same value as roundEven(x) for all values of x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL round man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType round(genType const & x); /// Returns a value equal to the nearest integer to x. /// A fractional part of 0.5 will round toward the nearest even /// integer. (Both 3.5 and 4.5 for x will return 4.0.) /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL roundEven man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// @see New round to even technique template genType roundEven(genType const & x); /// Returns a value equal to the nearest integer /// that is greater than or equal to x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL ceil man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType ceil(genType const & x); /// Return x - floor(x). /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL fract man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType fract(genType const & x); /// Modulus. Returns x - y * floor(x / y) /// for each component in x using the floating point value y. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL mod man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType mod( genType const & x, genType const & y); /// Modulus. Returns x - y * floor(x / y) /// for each component in x using the floating point value y. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL mod man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType mod( genType const & x, typename genType::value_type const & y); /// Returns the fractional part of x and sets i to the integer /// part (as a whole number floating point value). Both the /// return value and the output parameter will have the same /// sign as x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL modf man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType modf( genType const & x, genType & i); /// Returns y if y < x; otherwise, it returns x. /// /// @tparam genType Floating-point or integer; scalar or vector types. /// /// @see GLSL min man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType min( genType const & x, genType const & y); template genType min( genType const & x, typename genType::value_type const & y); /// Returns y if x < y; otherwise, it returns x. /// /// @tparam genType Floating-point or integer; scalar or vector types. /// /// @see GLSL max man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType max( genType const & x, genType const & y); template genType max( genType const & x, typename genType::value_type const & y); /// Returns min(max(x, minVal), maxVal) for each component in x /// using the floating-point values minVal and maxVal. /// /// @tparam genType Floating-point or integer; scalar or vector types. /// /// @see GLSL clamp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType clamp( genType const & x, genType const & minVal, genType const & maxVal); template genType clamp( genType const & x, typename genType::value_type const & minVal, typename genType::value_type const & maxVal); //! @return If genTypeU is a floating scalar or vector: //! Returns x * (1.0 - a) + y * a, i.e., the linear blend of //! x and y using the floating-point value a. //! The value for a is not restricted to the range [0, 1]. //! //! @return If genTypeU is a boolean scalar or vector: //! Selects which vector each returned component comes //! from. For a component of a that is false, the //! corresponding component of x is returned. For a //! component of a that is true, the corresponding //! component of y is returned. Components of x and y that //! are not selected are allowed to be invalid floating point //! values and will have no effect on the results. Thus, this //! provides different functionality than //! genType mix(genType x, genType y, genType(a)) //! where a is a Boolean vector. /// /// @see GLSL mix man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// /// @param[in] x Value to interpolate. /// @param[in] y Value to interpolate. /// @param[in] a Interpolant. /// /// @tparam genTypeT Floating point scalar or vector. /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. /// /// @code /// #include /// ... /// float a; /// bool b; /// glm::dvec3 e; /// glm::dvec3 f; /// glm::vec4 g; /// glm::vec4 h; /// ... /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. /// glm::vec4 s = glm::mix(g, h, b); // Teturns g or h; /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. /// @endcode template genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a); //! Returns 0.0 if x < edge, otherwise it returns 1.0. //! /// @see GLSL step man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType step( genType const & edge, genType const & x); template genType step( typename genType::value_type const & edge, genType const & x); /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and /// performs smooth Hermite interpolation between 0 and 1 /// when edge0 < x < edge1. This is useful in cases where /// you would want a threshold function with a smooth /// transition. This is equivalent to: /// genType t; /// t = clamp ((x edge0) / (edge1 edge0), 0, 1); /// return t * t * (3 2 * t); /// Results are undefined if edge0 >= edge1. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL smoothstep man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType smoothstep( genType const & edge0, genType const & edge1, genType const & x); template genType smoothstep( typename genType::value_type const & edge0, typename genType::value_type const & edge1, genType const & x); /// Returns true if x holds a NaN (not a number) /// representation in the underlying implementation's set of /// floating point representations. Returns false otherwise, /// including for implementations with no NaN /// representations. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL isnan man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template typename genType::bool_type isnan(genType const & x); /// Returns true if x holds a positive infinity or negative /// infinity representation in the underlying implementation's /// set of floating point representations. Returns false /// otherwise, including for implementations with no infinity /// representations. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL isinf man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template typename genType::bool_type isinf(genType const & x); /// Returns a signed integer value representing /// the encoding of a floating-point value. The floatingpoint /// value's bit-level representation is preserved. /// /// @tparam genType Single-precision floating-point scalar or vector types. /// @tparam genIType Signed integer scalar or vector types. /// /// @see GLSL floatBitsToInt man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genIType floatBitsToInt(genType const & value); /// Returns a unsigned integer value representing /// the encoding of a floating-point value. The floatingpoint /// value's bit-level representation is preserved. /// /// @tparam genType Single-precision floating-point scalar or vector types. /// @tparam genUType Unsigned integer scalar or vector types. /// /// @see GLSL floatBitsToUint man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genUType floatBitsToUint(genType const & value); /// Returns a floating-point value corresponding to a signed /// integer encoding of a floating-point value. /// If an inf or NaN is passed in, it will not signal, and the /// resulting floating point value is unspecified. Otherwise, /// the bit-level representation is preserved. /// /// @tparam genType Single-precision floating-point scalar or vector types. /// @tparam genIType Signed integer scalar or vector types. /// /// @see GLSL intBitsToFloat man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// /// @todo Clarify this declaration, we don't need to actually specify the return type template genType intBitsToFloat(genIType const & value); /// Returns a floating-point value corresponding to a /// unsigned integer encoding of a floating-point value. /// If an inf or NaN is passed in, it will not signal, and the /// resulting floating point value is unspecified. Otherwise, /// the bit-level representation is preserved. /// /// @tparam genType Single-precision floating-point scalar or vector types. /// @tparam genUType Unsigned integer scalar or vector types. /// /// @see GLSL uintBitsToFloat man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions /// /// @todo Clarify this declaration, we don't need to actually specify the return type template genType uintBitsToFloat(genUType const & value); /// Computes and returns a * b + c. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL fma man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType fma(genType const & a, genType const & b, genType const & c); /// Splits x into a floating-point significand in the range /// [0.5, 1.0) and an integral exponent of two, such that: /// x = significand * exp(2, exponent) /// /// The significand is returned by the function and the /// exponent is returned in the parameter exp. For a /// floating-point value of zero, the significant and exponent /// are both zero. For a floating-point value that is an /// infinity or is not a number, the results are undefined. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL frexp man page /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType frexp(genType const & x, genIType & exp); /// Builds a floating-point number from x and the /// corresponding integral exponent of two in exp, returning: /// significand * exp(2, exponent) /// /// If this product is too large to be represented in the /// floating-point type, the result is undefined. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL ldexp man page; /// @see GLSL 4.20.8 specification, section 8.3 Common Functions template genType ldexp(genType const & x, genIType const & exp); /// @} } //namespace glm #include "func_common.inl" #endif //GLM_CORE_func_common DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_common.inl000066400000000000000000000665141360473665400322020ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_common.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #include "_vectorize.hpp" namespace glm{ namespace detail { template struct Abs_ {}; template struct Abs_ { static genFIType get(genFIType const & x) { GLM_STATIC_ASSERT( detail::type::is_float || detail::type::is_int, "'abs' only accept floating-point and integer inputs"); return x >= genFIType(0) ? x : -x; // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; } }; template struct Abs_ { static genFIType get(genFIType const & x) { GLM_STATIC_ASSERT( detail::type::is_uint, "'abs' only accept floating-point and integer inputs"); return x; } }; }//namespace detail // abs template GLM_FUNC_QUALIFIER genFIType abs ( genFIType const & x ) { return detail::Abs_::is_signed>::get(x); } VECTORIZE_VEC(abs) // sign //Try something like based on x >> 31 to get the sign bit template GLM_FUNC_QUALIFIER genFIType sign ( genFIType const & x ) { GLM_STATIC_ASSERT( detail::type::is_float || detail::type::is_int, "'sign' only accept signed inputs"); genFIType result; if(x > genFIType(0)) result = genFIType(1); else if(x < genFIType(0)) result = genFIType(-1); else result = genFIType(0); return result; } VECTORIZE_VEC(sign) // floor template <> GLM_FUNC_QUALIFIER detail::half floor(detail::half const & x) { return detail::half(::std::floor(float(x))); } template GLM_FUNC_QUALIFIER genType floor(genType const & x) { GLM_STATIC_ASSERT(detail::type::is_float, "'floor' only accept floating-point inputs"); return ::std::floor(x); } VECTORIZE_VEC(floor) // trunc template GLM_FUNC_QUALIFIER genType trunc(genType const & x) { GLM_STATIC_ASSERT(detail::type::is_float, "'trunc' only accept floating-point inputs"); return x < 0 ? -floor(-x) : floor(x); } VECTORIZE_VEC(trunc) // round template GLM_FUNC_QUALIFIER genType round(genType const& x) { GLM_STATIC_ASSERT(detail::type::is_float, "'round' only accept floating-point inputs"); if(x < 0) return genType(int(x - genType(0.5))); return genType(int(x + genType(0.5))); } VECTORIZE_VEC(round) /* // roundEven template GLM_FUNC_QUALIFIER genType roundEven(genType const& x) { GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); return genType(int(x + genType(int(x) % 2))); } */ // roundEven template GLM_FUNC_QUALIFIER genType roundEven(genType const & x) { GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); int Integer = int(x); genType IntegerPart = genType(Integer); genType FractionalPart = fract(x); if(FractionalPart > genType(0.5) || FractionalPart < genType(0.5)) { return round(x); } else if((Integer % 2) == 0) { return IntegerPart; } else if(x <= genType(0)) // Work around... { return IntegerPart - 1; } else { return IntegerPart + 1; } //else // Bug on MinGW 4.5.2 //{ // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); //} } VECTORIZE_VEC(roundEven) // ceil template GLM_FUNC_QUALIFIER genType ceil(genType const & x) { GLM_STATIC_ASSERT(detail::type::is_float, "'ceil' only accept floating-point inputs"); return ::std::ceil(x); } VECTORIZE_VEC(ceil) // fract template GLM_FUNC_QUALIFIER genType fract ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'fract' only accept floating-point inputs"); return x - ::std::floor(x); } VECTORIZE_VEC(fract) // mod template GLM_FUNC_QUALIFIER genType mod ( genType const & x, genType const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'mod' only accept floating-point inputs"); return x - y * floor(x / y); } VECTORIZE_VEC_SCA(mod) VECTORIZE_VEC_VEC(mod) // modf template GLM_FUNC_QUALIFIER genType modf ( genType const & x, genType & i ) { GLM_STATIC_ASSERT(detail::type::is_float, "'modf' only accept floating-point inputs"); return std::modf(x, &i); } template GLM_FUNC_QUALIFIER detail::tvec2 modf ( detail::tvec2 const & x, detail::tvec2 & i ) { return detail::tvec2( modf(x.x, i.x), modf(x.y, i.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 modf ( detail::tvec3 const & x, detail::tvec3 & i ) { return detail::tvec3( modf(x.x, i.x), modf(x.y, i.y), modf(x.z, i.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 modf ( detail::tvec4 const & x, detail::tvec4 & i ) { return detail::tvec4( modf(x.x, i.x), modf(x.y, i.y), modf(x.z, i.z), modf(x.w, i.w)); } //// Only valid if (INT_MIN <= x-y <= INT_MAX) //// min(x,y) //r = y + ((x - y) & ((x - y) >> (sizeof(int) * //CHAR_BIT 1))); //// max(x,y) //r = x - ((x - y) & ((x - y) >> (sizeof(int) * //CHAR_BIT - 1))); // min template GLM_FUNC_QUALIFIER genType min ( genType const & x, genType const & y ) { GLM_STATIC_ASSERT( detail::type::is_float || detail::type::is_int || detail::type::is_uint, "'min' only accept numbers"); return x < y ? x : y; } VECTORIZE_VEC_SCA(min) VECTORIZE_VEC_VEC(min) // max template GLM_FUNC_QUALIFIER genType max ( genType const & x, genType const & y ) { GLM_STATIC_ASSERT( detail::type::is_float || detail::type::is_int || detail::type::is_uint, "'max' only accept numbers"); return x > y ? x : y; } VECTORIZE_VEC_SCA(max) VECTORIZE_VEC_VEC(max) // clamp template GLM_FUNC_QUALIFIER valType clamp ( valType const & x, valType const & minVal, valType const & maxVal ) { GLM_STATIC_ASSERT( detail::type::is_float || detail::type::is_int || detail::type::is_uint, "'clamp' only accept numbers"); // Old implementation, less predictable branching //if(x >= maxVal) return maxVal; //if(x <= minVal) return minVal; //return x; return max(min(x, maxVal), minVal); } template GLM_FUNC_QUALIFIER detail::tvec2 clamp ( detail::tvec2 const & x, typename detail::tvec2::value_type const & minVal, typename detail::tvec2::value_type const & maxVal ) { return detail::tvec2( clamp(x.x, minVal, maxVal), clamp(x.y, minVal, maxVal)); } template GLM_FUNC_QUALIFIER detail::tvec3 clamp ( detail::tvec3 const & x, typename detail::tvec3::value_type const & minVal, typename detail::tvec3::value_type const & maxVal ) { return detail::tvec3( clamp(x.x, minVal, maxVal), clamp(x.y, minVal, maxVal), clamp(x.z, minVal, maxVal)); } template GLM_FUNC_QUALIFIER detail::tvec4 clamp ( detail::tvec4 const & x, typename detail::tvec4::value_type const & minVal, typename detail::tvec4::value_type const & maxVal ) { return detail::tvec4( clamp(x.x, minVal, maxVal), clamp(x.y, minVal, maxVal), clamp(x.z, minVal, maxVal), clamp(x.w, minVal, maxVal)); } template GLM_FUNC_QUALIFIER detail::tvec2 clamp ( detail::tvec2 const & x, detail::tvec2 const & minVal, detail::tvec2 const & maxVal ) { return detail::tvec2( clamp(x.x, minVal.x, maxVal.x), clamp(x.y, minVal.y, maxVal.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 clamp ( detail::tvec3 const & x, detail::tvec3 const & minVal, detail::tvec3 const & maxVal ) { return detail::tvec3( clamp(x.x, minVal.x, maxVal.x), clamp(x.y, minVal.y, maxVal.y), clamp(x.z, minVal.z, maxVal.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 clamp ( detail::tvec4 const & x, detail::tvec4 const & minVal, detail::tvec4 const & maxVal ) { return detail::tvec4( clamp(x.x, minVal.x, maxVal.x), clamp(x.y, minVal.y, maxVal.y), clamp(x.z, minVal.z, maxVal.z), clamp(x.w, minVal.w, maxVal.w)); } // mix template GLM_FUNC_QUALIFIER genTypeT mix ( genTypeT const & x, genTypeT const & y, genTypeU const & a ) { // It could be a vector too //GLM_STATIC_ASSERT( // detail::type::is_float && // detail::type::is_float); //return x + a * (y - x); return genTypeT(genTypeU(x) + a * genTypeU(y - x)); } template GLM_FUNC_QUALIFIER detail::tvec2 mix ( detail::tvec2 const & x, detail::tvec2 const & y, valTypeB const & a ) { return detail::tvec2( detail::tvec2(x) + a * detail::tvec2(y - x)); } template GLM_FUNC_QUALIFIER detail::tvec3 mix ( detail::tvec3 const & x, detail::tvec3 const & y, valTypeB const & a ) { return detail::tvec3( detail::tvec3(x) + a * detail::tvec3(y - x)); } template GLM_FUNC_QUALIFIER detail::tvec4 mix ( detail::tvec4 const & x, detail::tvec4 const & y, valTypeB const & a ) { return detail::tvec4( detail::tvec4(x) + a * detail::tvec4(y - x)); } template GLM_FUNC_QUALIFIER detail::tvec2 mix ( detail::tvec2 const & x, detail::tvec2 const & y, detail::tvec2 const & a ) { return detail::tvec2( detail::tvec2(x) + a * detail::tvec2(y - x)); } template GLM_FUNC_QUALIFIER detail::tvec3 mix ( detail::tvec3 const & x, detail::tvec3 const & y, detail::tvec3 const & a ) { return detail::tvec3( detail::tvec3(x) + a * detail::tvec3(y - x)); } template GLM_FUNC_QUALIFIER detail::tvec4 mix ( detail::tvec4 const & x, detail::tvec4 const & y, detail::tvec4 const & a ) { return detail::tvec4( detail::tvec4(x) + a * detail::tvec4(y - x)); } //template //GLM_FUNC_QUALIFIER genTypeT mix //( // genTypeT const & x, // genTypeT const & y, // float const & a //) //{ // // It could be a vector too // //GLM_STATIC_ASSERT( // // detail::type::is_float && // // detail::type::is_float); // return x + a * (y - x); //} template GLM_FUNC_QUALIFIER genType mix ( genType const & x, genType const & y, bool const & a ) { GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); return a ? y : x; } template GLM_FUNC_QUALIFIER detail::tvec2 mix ( detail::tvec2 const & x, detail::tvec2 const & y, typename detail::tvec2::bool_type a ) { GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); detail::tvec2 result; for ( typename detail::tvec2::size_type i = 0; i < detail::tvec2::value_size(); ++i ) { result[i] = a[i] ? y[i] : x[i]; } return result; } template GLM_FUNC_QUALIFIER detail::tvec3 mix ( detail::tvec3 const & x, detail::tvec3 const & y, typename detail::tvec3::bool_type a ) { GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); detail::tvec3 result; for ( typename detail::tvec3::size_type i = 0; i < detail::tvec3::value_size(); ++i ) { result[i] = a[i] ? y[i] : x[i]; } return result; } template GLM_FUNC_QUALIFIER detail::tvec4 mix ( detail::tvec4 const & x, detail::tvec4 const & y, typename detail::tvec4::bool_type a ) { GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); detail::tvec4 result; for ( typename detail::tvec4::size_type i = 0; i < detail::tvec4::value_size(); ++i ) { result[i] = a[i] ? y[i] : x[i]; } return result; } // step template GLM_FUNC_QUALIFIER genType step ( genType const & edge, genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); return x < edge ? genType(0) : genType(1); } template GLM_FUNC_QUALIFIER detail::tvec2 step ( typename detail::tvec2::value_type const & edge, detail::tvec2 const & x ) { return detail::tvec2( x.x < edge ? T(0) : T(1), x.y < edge ? T(0) : T(1)); } template GLM_FUNC_QUALIFIER detail::tvec3 step ( typename detail::tvec3::value_type const & edge, detail::tvec3 const & x ) { return detail::tvec3( x.x < edge ? T(0) : T(1), x.y < edge ? T(0) : T(1), x.z < edge ? T(0) : T(1)); } template GLM_FUNC_QUALIFIER detail::tvec4 step ( typename detail::tvec4::value_type const & edge, detail::tvec4 const & x ) { return detail::tvec4( x.x < edge ? T(0) : T(1), x.y < edge ? T(0) : T(1), x.z < edge ? T(0) : T(1), x.w < edge ? T(0) : T(1)); } template GLM_FUNC_QUALIFIER detail::tvec2 step ( detail::tvec2 const & edge, detail::tvec2 const & x ) { return detail::tvec2( x.x < edge.x ? T(0) : T(1), x.y < edge.y ? T(0) : T(1)); } template GLM_FUNC_QUALIFIER detail::tvec3 step ( detail::tvec3 const & edge, detail::tvec3 const & x ) { return detail::tvec3( x.x < edge.x ? T(0) : T(1), x.y < edge.y ? T(0) : T(1), x.z < edge.z ? T(0) : T(1)); } template GLM_FUNC_QUALIFIER detail::tvec4 step ( detail::tvec4 const & edge, detail::tvec4 const & x ) { return detail::tvec4( x.x < edge.x ? T(0) : T(1), x.y < edge.y ? T(0) : T(1), x.z < edge.z ? T(0) : T(1), x.w < edge.w ? T(0) : T(1)); } // smoothstep template GLM_FUNC_QUALIFIER genType smoothstep ( genType const & edge0, genType const & edge1, genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); genType tmp = clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)); return tmp * tmp * (genType(3) - genType(2) * tmp); } template GLM_FUNC_QUALIFIER detail::tvec2 smoothstep ( typename detail::tvec2::value_type const & edge0, typename detail::tvec2::value_type const & edge1, detail::tvec2 const & x ) { return detail::tvec2( smoothstep(edge0, edge1, x.x), smoothstep(edge0, edge1, x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 smoothstep ( typename detail::tvec3::value_type const & edge0, typename detail::tvec3::value_type const & edge1, detail::tvec3 const & x ) { return detail::tvec3( smoothstep(edge0, edge1, x.x), smoothstep(edge0, edge1, x.y), smoothstep(edge0, edge1, x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 smoothstep ( typename detail::tvec4::value_type const & edge0, typename detail::tvec4::value_type const & edge1, detail::tvec4 const & x ) { return detail::tvec4( smoothstep(edge0, edge1, x.x), smoothstep(edge0, edge1, x.y), smoothstep(edge0, edge1, x.z), smoothstep(edge0, edge1, x.w)); } template GLM_FUNC_QUALIFIER detail::tvec2 smoothstep ( detail::tvec2 const & edge0, detail::tvec2 const & edge1, detail::tvec2 const & x ) { return detail::tvec2( smoothstep(edge0.x, edge1.x, x.x), smoothstep(edge0.y, edge1.y, x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 smoothstep ( detail::tvec3 const & edge0, detail::tvec3 const & edge1, detail::tvec3 const & x ) { return detail::tvec3( smoothstep(edge0.x, edge1.x, x.x), smoothstep(edge0.y, edge1.y, x.y), smoothstep(edge0.z, edge1.z, x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 smoothstep ( detail::tvec4 const & edge0, detail::tvec4 const & edge1, detail::tvec4 const & x ) { return detail::tvec4( smoothstep(edge0.x, edge1.x, x.x), smoothstep(edge0.y, edge1.y, x.y), smoothstep(edge0.z, edge1.z, x.z), smoothstep(edge0.w, edge1.w, x.w)); } template GLM_FUNC_QUALIFIER bool isnan(genType const & x) { GLM_STATIC_ASSERT(detail::type::is_float, "'isnan' only accept floating-point inputs"); # if(GLM_COMPILER & GLM_COMPILER_VC) return _isnan(x) != 0; # elif(GLM_COMPILER & GLM_COMPILER_GCC) # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return _isnan(x) != 0; # else return std::isnan(x) != 0; # endif # else return std::isnan(x) != 0; # endif } template GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isnan ( detail::tvec2 const & x ) { return typename detail::tvec2::bool_type( isnan(x.x), isnan(x.y)); } template GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isnan ( detail::tvec3 const & x ) { return typename detail::tvec3::bool_type( isnan(x.x), isnan(x.y), isnan(x.z)); } template GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isnan ( detail::tvec4 const & x ) { return typename detail::tvec4::bool_type( isnan(x.x), isnan(x.y), isnan(x.z), isnan(x.w)); } template GLM_FUNC_QUALIFIER bool isinf( genType const & x) { GLM_STATIC_ASSERT(detail::type::is_float, "'isinf' only accept floating-point inputs"); # if(GLM_COMPILER & GLM_COMPILER_VC) return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; # elif(GLM_COMPILER & GLM_COMPILER_GCC) # if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) return _isinf(x) != 0; # else return std::isinf(x) != 0; # endif # else return std::isinf(x) != 0; # endif } template GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isinf ( detail::tvec2 const & x ) { return typename detail::tvec2::bool_type( isinf(x.x), isinf(x.y)); } template GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isinf ( detail::tvec3 const & x ) { return typename detail::tvec3::bool_type( isinf(x.x), isinf(x.y), isinf(x.z)); } template GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isinf ( detail::tvec4 const & x ) { return typename detail::tvec4::bool_type( isinf(x.x), isinf(x.y), isinf(x.z), isinf(x.w)); } GLM_FUNC_QUALIFIER int floatBitsToInt(float const & value) { union { float f; int i; } fi; fi.f = value; return fi.i; } GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToInt ( detail::tvec2 const & value ) { return detail::tvec2( floatBitsToInt(value.x), floatBitsToInt(value.y)); } GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToInt ( detail::tvec3 const & value ) { return detail::tvec3( floatBitsToInt(value.x), floatBitsToInt(value.y), floatBitsToInt(value.z)); } GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToInt ( detail::tvec4 const & value ) { return detail::tvec4( floatBitsToInt(value.x), floatBitsToInt(value.y), floatBitsToInt(value.z), floatBitsToInt(value.w)); } GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & value) { union { float f; uint u; } fu; fu.f = value; return fu.u; } GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToUint ( detail::tvec2 const & value ) { return detail::tvec2( floatBitsToUint(value.x), floatBitsToUint(value.y)); } GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToUint ( detail::tvec3 const & value ) { return detail::tvec3( floatBitsToUint(value.x), floatBitsToUint(value.y), floatBitsToUint(value.z)); } GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToUint ( detail::tvec4 const & value ) { return detail::tvec4( floatBitsToUint(value.x), floatBitsToUint(value.y), floatBitsToUint(value.z), floatBitsToUint(value.w)); } GLM_FUNC_QUALIFIER float intBitsToFloat(int const & value) { union { float f; int i; } fi; fi.i = value; return fi.f; } GLM_FUNC_QUALIFIER detail::tvec2 intBitsToFloat ( detail::tvec2 const & value ) { return detail::tvec2( intBitsToFloat(value.x), intBitsToFloat(value.y)); } GLM_FUNC_QUALIFIER detail::tvec3 intBitsToFloat ( detail::tvec3 const & value ) { return detail::tvec3( intBitsToFloat(value.x), intBitsToFloat(value.y), intBitsToFloat(value.z)); } GLM_FUNC_QUALIFIER detail::tvec4 intBitsToFloat ( detail::tvec4 const & value ) { return detail::tvec4( intBitsToFloat(value.x), intBitsToFloat(value.y), intBitsToFloat(value.z), intBitsToFloat(value.w)); } GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & value) { union { float f; uint u; } fu; fu.u = value; return fu.f; } GLM_FUNC_QUALIFIER detail::tvec2 uintBitsToFloat ( detail::tvec2 const & value ) { return detail::tvec2( uintBitsToFloat(value.x), uintBitsToFloat(value.y)); } GLM_FUNC_QUALIFIER detail::tvec3 uintBitsToFloat ( detail::tvec3 const & value ) { return detail::tvec3( uintBitsToFloat(value.x), uintBitsToFloat(value.y), uintBitsToFloat(value.z)); } GLM_FUNC_QUALIFIER detail::tvec4 uintBitsToFloat ( detail::tvec4 const & value ) { return detail::tvec4( uintBitsToFloat(value.x), uintBitsToFloat(value.y), uintBitsToFloat(value.z), uintBitsToFloat(value.w)); } template GLM_FUNC_QUALIFIER genType fma ( genType const & a, genType const & b, genType const & c ) { return a * b + c; } template GLM_FUNC_QUALIFIER genType frexp ( genType const & x, int & exp ) { return std::frexp(x, exp); } template GLM_FUNC_QUALIFIER detail::tvec2 frexp ( detail::tvec2 const & x, detail::tvec2 & exp ) { return std::frexp(x, exp); } template GLM_FUNC_QUALIFIER detail::tvec3 frexp ( detail::tvec3 const & x, detail::tvec3 & exp ) { return std::frexp(x, exp); } template GLM_FUNC_QUALIFIER detail::tvec4 frexp ( detail::tvec4 const & x, detail::tvec4 & exp ) { return std::frexp(x, exp); } template GLM_FUNC_QUALIFIER genType ldexp ( genType const & x, int const & exp ) { return std::frexp(x, exp); } template GLM_FUNC_QUALIFIER detail::tvec2 ldexp ( detail::tvec2 const & x, detail::tvec2 const & exp ) { return std::frexp(x, exp); } template GLM_FUNC_QUALIFIER detail::tvec3 ldexp ( detail::tvec3 const & x, detail::tvec3 const & exp ) { return std::frexp(x, exp); } template GLM_FUNC_QUALIFIER detail::tvec4 ldexp ( detail::tvec4 const & x, detail::tvec4 const & exp ) { return std::frexp(x, exp); } }//namespace glm DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_exponential.hpp000066400000000000000000000136011360473665400332320ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_exponential.hpp /// @date 2008-08-08 / 2011-06-14 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions /// /// @defgroup core_func_exponential Exponential functions /// @ingroup core /// /// These all operate component-wise. The description is per component. /////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_func_exponential #define glm_core_func_exponential GLM_VERSION namespace glm { /// @addtogroup core_func_exponential /// @{ /// Returns x raised to the y power. /// /// @param x pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. /// @param y /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL pow man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template genType pow(genType const & x, genType const & y); /// Returns the natural exponentiation of x, i.e., e^x. /// /// @param x exp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL exp man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template genType exp(genType const & x); /// Returns the natural logarithm of x, i.e., /// returns the value y which satisfies the equation x = e^y. /// Results are undefined if x <= 0. /// /// @param x log function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL log man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template genType log(genType const & x); /// Returns 2 raised to the x power. /// /// @param x exp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL exp2 man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template genType exp2(genType const & x); /// Returns the base 2 log of x, i.e., returns the value y, /// which satisfies the equation x = 2 ^ y. /// /// @param x log2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL log2 man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template genType log2(genType const & x); /// Returns the positive square root of x. /// /// @param x sqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL sqrt man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template genType sqrt(genType const & x); /// Returns the reciprocal of the positive square root of x. /// /// @param x inversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL inversesqrt man page /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions template genType inversesqrt(genType const & x); /// @} } //namespace glm #include "func_exponential.inl" #endif //glm_core_func_exponential DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_exponential.inl000066400000000000000000000103421360473665400332240ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_exponential.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #include "_vectorize.hpp" namespace glm { // pow template GLM_FUNC_QUALIFIER genType pow ( genType const & x, genType const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'pow' only accept floating-point input"); return ::std::pow(x, y); } VECTORIZE_VEC_VEC(pow) // exp template GLM_FUNC_QUALIFIER genType exp ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'exp' only accept floating-point input"); return ::std::exp(x); } VECTORIZE_VEC(exp) // log template GLM_FUNC_QUALIFIER genType log ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'log' only accept floating-point input"); return ::std::log(x); } VECTORIZE_VEC(log) //exp2, ln2 = 0.69314718055994530941723212145818f template GLM_FUNC_QUALIFIER genType exp2 ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'exp2' only accept floating-point input"); return ::std::exp(genType(0.69314718055994530941723212145818) * x); } VECTORIZE_VEC(exp2) namespace _detail { template struct _compute_log2 { template T operator() (T const & Value) const; /* { GLM_STATIC_ASSERT(0, "'log2' parameter has an invalid template parameter type. GLM core features only supports floating-point types, include for integer types support. Others types are not supported."); return Value; } */ }; template <> struct _compute_log2 { template T operator() (T const & Value) const { return T(::std::log(Value)) / T(0.69314718055994530941723212145818); } }; }//namespace _detail // log2, ln2 = 0.69314718055994530941723212145818f template GLM_FUNC_QUALIFIER genType log2 ( genType const & x ) { assert(x > genType(0)); // log2 is only defined on the range (0, inf] return _detail::_compute_log2::ID>()(x); } VECTORIZE_VEC(log2) // sqrt template GLM_FUNC_QUALIFIER genType sqrt ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'sqrt' only accept floating-point input"); return genType(::std::sqrt(x)); } VECTORIZE_VEC(sqrt) template GLM_FUNC_QUALIFIER genType inversesqrt ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'inversesqrt' only accept floating-point input"); return genType(1) / ::std::sqrt(x); } VECTORIZE_VEC(inversesqrt) }//namespace glm DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_geometric.hpp000066400000000000000000000132341360473665400326640ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_geometric.hpp /// @date 2008-08-03 / 2011-06-14 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions /// /// @defgroup core_func_geometric Geometric functions /// @ingroup core /// /// These operate on vectors as vectors, not component-wise. /////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_func_geometric #define glm_core_func_geometric GLM_VERSION namespace glm { /// @addtogroup core_func_geometric /// @{ /// Returns the length of x, i.e., sqrt(x * x). /// /// @tparam genType Floating-point vector types. /// /// @see GLSL length man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template typename genType::value_type length( genType const & x); /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). /// /// @tparam genType Floating-point vector types. /// /// @see GLSL distance man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template typename genType::value_type distance( genType const & p0, genType const & p1); /// Returns the dot product of x and y, i.e., result = x * y. /// /// @tparam genType Floating-point vector types. /// /// @see GLSL dot man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template typename genType::value_type dot( genType const & x, genType const & y); /// Returns the cross product of x and y. /// /// @tparam valType Floating-point scalar types. /// /// @see GLSL cross man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template detail::tvec3 cross( detail::tvec3 const & x, detail::tvec3 const & y); /// Returns a vector in the same direction as x but with length of 1. /// /// @see GLSL normalize man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template genType normalize( genType const & x); /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. /// /// @tparam genType Floating-point vector types. /// /// @see GLSL faceforward man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template genType faceforward( genType const & N, genType const & I, genType const & Nref); /// For the incident vector I and surface orientation N, /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. /// /// @tparam genType Floating-point vector types. /// /// @see GLSL reflect man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template genType reflect( genType const & I, genType const & N); /// For the incident vector I and surface normal N, /// and the ratio of indices of refraction eta, /// return the refraction vector. /// /// @tparam genType Floating-point vector types. /// /// @see GLSL refract man page /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions template genType refract( genType const & I, genType const & N, typename genType::value_type const & eta); /// @} } //namespace glm #include "func_geometric.inl" #endif //glm_core_func_geometric DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_geometric.inl000066400000000000000000000211311360473665400326520ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_geometric.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #include "_vectorize.hpp" namespace glm { // length template GLM_FUNC_QUALIFIER genType length ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); genType sqr = x * x; return sqrt(sqr); } template GLM_FUNC_QUALIFIER typename detail::tvec2::value_type length ( detail::tvec2 const & v ) { GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); typename detail::tvec2::value_type sqr = v.x * v.x + v.y * v.y; return sqrt(sqr); } template GLM_FUNC_QUALIFIER typename detail::tvec3::value_type length ( detail::tvec3 const & v ) { GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); typename detail::tvec3::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z; return sqrt(sqr); } template GLM_FUNC_QUALIFIER typename detail::tvec4::value_type length ( detail::tvec4 const & v ) { GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); typename detail::tvec4::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w; return sqrt(sqr); } // distance template GLM_FUNC_QUALIFIER genType distance ( genType const & p0, genType const & p1 ) { GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); return length(p1 - p0); } template GLM_FUNC_QUALIFIER typename detail::tvec2::value_type distance ( detail::tvec2 const & p0, detail::tvec2 const & p1 ) { GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); return length(p1 - p0); } template GLM_FUNC_QUALIFIER typename detail::tvec3::value_type distance ( detail::tvec3 const & p0, detail::tvec3 const & p1 ) { GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); return length(p1 - p0); } template GLM_FUNC_QUALIFIER typename detail::tvec4::value_type distance ( detail::tvec4 const & p0, detail::tvec4 const & p1 ) { GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); return length(p1 - p0); } // dot template GLM_FUNC_QUALIFIER genType dot ( genType const & x, genType const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); return x * y; } template GLM_FUNC_QUALIFIER typename detail::tvec2::value_type dot ( detail::tvec2 const & x, detail::tvec2 const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); return x.x * y.x + x.y * y.y; } template GLM_FUNC_QUALIFIER T dot ( detail::tvec3 const & x, detail::tvec3 const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); return x.x * y.x + x.y * y.y + x.z * y.z; } /* // SSE3 GLM_FUNC_QUALIFIER float dot(const tvec4& x, const tvec4& y) { float Result; __asm { mov esi, x mov edi, y movaps xmm0, [esi] mulps xmm0, [edi] haddps( _xmm0, _xmm0 ) haddps( _xmm0, _xmm0 ) movss Result, xmm0 } return Result; } */ template GLM_FUNC_QUALIFIER T dot ( detail::tvec4 const & x, detail::tvec4 const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w; } // cross template GLM_FUNC_QUALIFIER detail::tvec3 cross ( detail::tvec3 const & x, detail::tvec3 const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'cross' only accept floating-point inputs"); return detail::tvec3( x.y * y.z - y.y * x.z, x.z * y.x - y.z * x.x, x.x * y.y - y.x * x.y); } // normalize template GLM_FUNC_QUALIFIER genType normalize ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); return x < genType(0) ? genType(-1) : genType(1); } // According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error template GLM_FUNC_QUALIFIER detail::tvec2 normalize ( detail::tvec2 const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); typename detail::tvec2::value_type sqr = x.x * x.x + x.y * x.y; return x * inversesqrt(sqr); } template GLM_FUNC_QUALIFIER detail::tvec3 normalize ( detail::tvec3 const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); typename detail::tvec3::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z; return x * inversesqrt(sqr); } template GLM_FUNC_QUALIFIER detail::tvec4 normalize ( detail::tvec4 const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); typename detail::tvec4::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w; return x * inversesqrt(sqr); } // faceforward template GLM_FUNC_QUALIFIER genType faceforward ( genType const & N, genType const & I, genType const & Nref ) { return dot(Nref, I) < 0 ? N : -N; } // reflect template genType reflect ( genType const & I, genType const & N ) { return I - N * dot(N, I) * genType(2); } // refract template GLM_FUNC_QUALIFIER genType refract ( genType const & I, genType const & N, genType const & eta ) { //It could be a vector //GLM_STATIC_ASSERT(detail::type::is_float); genType dotValue = dot(N, I); genType k = genType(1) - eta * eta * (genType(1) - dotValue * dotValue); if(k < genType(0)) return genType(0); else return eta * I - (eta * dotValue + sqrt(k)) * N; } template GLM_FUNC_QUALIFIER genType refract ( genType const & I, genType const & N, typename genType::value_type const & eta ) { //It could be a vector //GLM_STATIC_ASSERT(detail::type::is_float); typename genType::value_type dotValue = dot(N, I); typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue); if(k < typename genType::value_type(0)) return genType(0); else return eta * I - (eta * dotValue + sqrt(k)) * N; } }//namespace glm DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_integer.hpp000066400000000000000000000222241360473665400323420ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_integer.hpp /// @date 2010-03-17 / 2011-06-18 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions /// /// @defgroup core_func_integer Integer functions /// @ingroup core /// /// These all operate component-wise. The description is per component. /// The notation [a, b] means the set of bits from bit-number a through bit-number /// b, inclusive. The lowest-order bit is bit 0. /////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_func_integer #define glm_core_func_integer GLM_VERSION namespace glm { /// @addtogroup core_func_integer /// @{ /// Adds 32-bit unsigned integer x and y, returning the sum /// modulo pow(2, 32). The value carry is set to 0 if the sum was /// less than pow(2, 32), or to 1 otherwise. /// /// @tparam genUType Unsigned integer scalar or vector types. /// /// @see GLSL uaddCarry man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template genUType uaddCarry( genUType const & x, genUType const & y, genUType & carry); /// Subtracts the 32-bit unsigned integer y from x, returning /// the difference if non-negative, or pow(2, 32) plus the difference /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. /// /// @tparam genUType Unsigned integer scalar or vector types. /// /// @see GLSL usubBorrow man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template genUType usubBorrow( genUType const & x, genUType const & y, genUType & borrow); /// Multiplies 32-bit integers x and y, producing a 64-bit /// result. The 32 least-significant bits are returned in lsb. /// The 32 most-significant bits are returned in msb. /// /// @tparam genUType Unsigned integer scalar or vector types. /// /// @see GLSL umulExtended man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template void umulExtended( genUType const & x, genUType const & y, genUType & msb, genUType & lsb); /// Multiplies 32-bit integers x and y, producing a 64-bit /// result. The 32 least-significant bits are returned in lsb. /// The 32 most-significant bits are returned in msb. /// /// @tparam genIType Signed integer scalar or vector types. /// /// @see GLSL imulExtended man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template void imulExtended( genIType const & x, genIType const & y, genIType & msb, genIType & lsb); /// Extracts bits [offset, offset + bits - 1] from value, /// returning them in the least significant bits of the result. /// For unsigned data types, the most significant bits of the /// result will be set to zero. For signed data types, the /// most significant bits will be set to the value of bit offset + base 1. /// /// If bits is zero, the result will be zero. The result will be /// undefined if offset or bits is negative, or if the sum of /// offset and bits is greater than the number of bits used /// to store the operand. /// /// @tparam genIUType Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitfieldExtract man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template genIUType bitfieldExtract( genIUType const & Value, int const & Offset, int const & Bits); /// Returns the insertion the bits least-significant bits of insert into base. /// /// The result will have bits [offset, offset + bits - 1] taken /// from bits [0, bits 1] of insert, and all other bits taken /// directly from the corresponding bits of base. If bits is /// zero, the result will simply be base. The result will be /// undefined if offset or bits is negative, or if the sum of /// offset and bits is greater than the number of bits used to /// store the operand. /// /// @tparam genIUType Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitfieldInsert man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template genIUType bitfieldInsert( genIUType const & Base, genIUType const & Insert, int const & Offset, int const & Bits); /// Returns the reversal of the bits of value. /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, /// where bits is the total number of bits used to represent value. /// /// @tparam genIUType Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitfieldReverse man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions template genIUType bitfieldReverse(genIUType const & value); /// Returns the number of bits set to 1 in the binary representation of value. /// /// @tparam genIUType Signed or unsigned integer scalar or vector types. /// /// @see GLSL bitCount man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions /// /// @todo Clarify the declaration to specify that scalars are suported. template class genIUType> typename genIUType::signed_type bitCount(genIUType const & Value); /// Returns the bit number of the least significant bit set to /// 1 in the binary representation of value. /// If value is zero, -1 will be returned. /// /// @tparam genIUType Signed or unsigned integer scalar or vector types. /// /// @see GLSL findLSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions /// /// @todo Clarify the declaration to specify that scalars are suported. template class genIUType> typename genIUType::signed_type findLSB(genIUType const & Value); /// Returns the bit number of the most significant bit in the binary representation of value. /// For positive integers, the result will be the bit number of the most significant bit set to 1. /// For negative integers, the result will be the bit number of the most significant /// bit set to 0. For a value of zero or negative one, -1 will be returned. /// /// @tparam genIUType Signed or unsigned integer scalar or vector types. /// /// @see GLSL findMSB man page /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions /// /// @todo Clarify the declaration to specify that scalars are suported. template class genIUType> typename genIUType::signed_type findMSB(genIUType const & Value); /// @} } //namespace glm #include "func_integer.inl" #endif //glm_core_func_integer DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_integer.inl000066400000000000000000000343101360473665400323340ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_integer.inl /// @date 2010-03-17 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #include "_vectorize.hpp" #if(GLM_COMPILER & GLM_COMPILER_VC) #include #pragma intrinsic(_BitScanReverse) #endif namespace glm { // uaddCarry template GLM_FUNC_QUALIFIER genUType uaddCarry ( genUType const & x, genUType const & y, genUType & Carry ) { detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y); genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))); Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0; return Result; } template GLM_FUNC_QUALIFIER detail::tvec2 uaddCarry ( detail::tvec2 const & x, detail::tvec2 const & y, detail::tvec2 & Carry ) { return detail::tvec2( uaddCarry(x[0], y[0], Carry[0]), uaddCarry(x[1], y[1], Carry[1])); } template GLM_FUNC_QUALIFIER detail::tvec3 uaddCarry ( detail::tvec3 const & x, detail::tvec3 const & y, detail::tvec3 & Carry ) { return detail::tvec3( uaddCarry(x[0], y[0], Carry[0]), uaddCarry(x[1], y[1], Carry[1]), uaddCarry(x[2], y[2], Carry[2])); } template GLM_FUNC_QUALIFIER detail::tvec4 uaddCarry ( detail::tvec4 const & x, detail::tvec4 const & y, detail::tvec4 & Carry ) { return detail::tvec4( uaddCarry(x[0], y[0], Carry[0]), uaddCarry(x[1], y[1], Carry[1]), uaddCarry(x[2], y[2], Carry[2]), uaddCarry(x[3], y[3], Carry[3])); } // usubBorrow template GLM_FUNC_QUALIFIER genUType usubBorrow ( genUType const & x, genUType const & y, genUType & Borrow ) { Borrow = x >= y ? 0 : 1; if(x > y) return genUType(detail::highp_int_t(x) - detail::highp_int_t(y)); else return genUType(detail::highp_int_t(1) << (detail::highp_int_t(32) + detail::highp_int_t(x) - detail::highp_int_t(y))); } template GLM_FUNC_QUALIFIER detail::tvec2 usubBorrow ( detail::tvec2 const & x, detail::tvec2 const & y, detail::tvec2 & Borrow ) { return detail::tvec2( usubBorrow(x[0], y[0], Borrow[0]), usubBorrow(x[1], y[1], Borrow[1])); } template GLM_FUNC_QUALIFIER detail::tvec3 usubBorrow ( detail::tvec3 const & x, detail::tvec3 const & y, detail::tvec3 & Borrow ) { return detail::tvec3( usubBorrow(x[0], y[0], Borrow[0]), usubBorrow(x[1], y[1], Borrow[1]), usubBorrow(x[2], y[2], Borrow[2])); } template GLM_FUNC_QUALIFIER detail::tvec4 usubBorrow ( detail::tvec4 const & x, detail::tvec4 const & y, detail::tvec4 & Borrow ) { return detail::tvec4( usubBorrow(x[0], y[0], Borrow[0]), usubBorrow(x[1], y[1], Borrow[1]), usubBorrow(x[2], y[2], Borrow[2]), usubBorrow(x[3], y[3], Borrow[3])); } // umulExtended template GLM_FUNC_QUALIFIER void umulExtended ( genUType const & x, genUType const & y, genUType & msb, genUType & lsb ) { detail::highp_uint_t ValueX64 = x; detail::highp_uint_t ValueY64 = y; detail::highp_uint_t Value64 = ValueX64 * ValueY64; msb = *(genUType*)&genUType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); lsb = *(genUType*)&genUType(Value64 >> detail::highp_uint_t(32)); } template GLM_FUNC_QUALIFIER detail::tvec2 umulExtended ( detail::tvec2 const & x, detail::tvec2 const & y, detail::tvec2 & msb, detail::tvec2 & lsb ) { return detail::tvec2( umulExtended(x[0], y[0], msb, lsb), umulExtended(x[1], y[1], msb, lsb)); } template GLM_FUNC_QUALIFIER detail::tvec3 umulExtended ( detail::tvec3 const & x, detail::tvec3 const & y, detail::tvec3 & msb, detail::tvec3 & lsb ) { return detail::tvec3( umulExtended(x[0], y[0], msb, lsb), umulExtended(x[1], y[1], msb, lsb), umulExtended(x[2], y[2], msb, lsb)); } template GLM_FUNC_QUALIFIER detail::tvec4 umulExtended ( detail::tvec4 const & x, detail::tvec4 const & y, detail::tvec4 & msb, detail::tvec4 & lsb ) { return detail::tvec4( umulExtended(x[0], y[0], msb, lsb), umulExtended(x[1], y[1], msb, lsb), umulExtended(x[2], y[2], msb, lsb), umulExtended(x[3], y[3], msb, lsb)); } // imulExtended template GLM_FUNC_QUALIFIER void imulExtended ( genIType const & x, genIType const & y, genIType & msb, genIType & lsb ) { detail::highp_int_t ValueX64 = x; detail::highp_int_t ValueY64 = y; detail::highp_int_t Value64 = ValueX64 * ValueY64; msb = *(genIType*)&genIType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); lsb = *(genIType*)&genIType(Value64 >> detail::highp_uint_t(32)); } template GLM_FUNC_QUALIFIER detail::tvec2 imulExtended ( detail::tvec2 const & x, detail::tvec2 const & y, detail::tvec2 & msb, detail::tvec2 & lsb ) { return detail::tvec2( imulExtended(x[0], y[0], msb, lsb), imulExtended(x[1], y[1], msb, lsb)); } template GLM_FUNC_QUALIFIER detail::tvec3 imulExtended ( detail::tvec3 const & x, detail::tvec3 const & y, detail::tvec3 & msb, detail::tvec3 & lsb ) { return detail::tvec3( imulExtended(x[0], y[0], msb, lsb), imulExtended(x[1], y[1], msb, lsb), imulExtended(x[2], y[2], msb, lsb)); } template GLM_FUNC_QUALIFIER detail::tvec4 imulExtended ( detail::tvec4 const & x, detail::tvec4 const & y, detail::tvec4 & msb, detail::tvec4 & lsb ) { return detail::tvec4( imulExtended(x[0], y[0], msb, lsb), imulExtended(x[1], y[1], msb, lsb), imulExtended(x[2], y[2], msb, lsb), imulExtended(x[3], y[3], msb, lsb)); } // bitfieldExtract template GLM_FUNC_QUALIFIER genIUType bitfieldExtract ( genIUType const & Value, int const & Offset, int const & Bits ) { int GenSize = int(sizeof(genIUType)) << int(3); assert(Offset + Bits <= GenSize); genIUType ShiftLeft = Bits ? Value << (GenSize - (Bits + Offset)) : genIUType(0); genIUType ShiftBack = ShiftLeft >> genIUType(GenSize - Bits); return ShiftBack; } template GLM_FUNC_QUALIFIER detail::tvec2 bitfieldExtract ( detail::tvec2 const & Value, int const & Offset, int const & Bits ) { return detail::tvec2( bitfieldExtract(Value[0], Offset, Bits), bitfieldExtract(Value[1], Offset, Bits)); } template GLM_FUNC_QUALIFIER detail::tvec3 bitfieldExtract ( detail::tvec3 const & Value, int const & Offset, int const & Bits ) { return detail::tvec3( bitfieldExtract(Value[0], Offset, Bits), bitfieldExtract(Value[1], Offset, Bits), bitfieldExtract(Value[2], Offset, Bits)); } template GLM_FUNC_QUALIFIER detail::tvec4 bitfieldExtract ( detail::tvec4 const & Value, int const & Offset, int const & Bits ) { return detail::tvec4( bitfieldExtract(Value[0], Offset, Bits), bitfieldExtract(Value[1], Offset, Bits), bitfieldExtract(Value[2], Offset, Bits), bitfieldExtract(Value[3], Offset, Bits)); } // bitfieldInsert template GLM_FUNC_QUALIFIER genIUType bitfieldInsert ( genIUType const & Base, genIUType const & Insert, int const & Offset, int const & Bits ) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); assert(Offset + Bits <= sizeof(genIUType)); if(Bits == 0) return Base; genIUType Mask = 0; for(int Bit = Offset; Bit < Offset + Bits; ++Bit) Mask |= (1 << Bit); return (Base & ~Mask) | (Insert & Mask); } template GLM_FUNC_QUALIFIER detail::tvec2 bitfieldInsert ( detail::tvec2 const & Base, detail::tvec2 const & Insert, int const & Offset, int const & Bits ) { return detail::tvec2( bitfieldInsert(Base[0], Insert[0], Offset, Bits), bitfieldInsert(Base[1], Insert[1], Offset, Bits)); } template GLM_FUNC_QUALIFIER detail::tvec3 bitfieldInsert ( detail::tvec3 const & Base, detail::tvec3 const & Insert, int const & Offset, int const & Bits ) { return detail::tvec3( bitfieldInsert(Base[0], Insert[0], Offset, Bits), bitfieldInsert(Base[1], Insert[1], Offset, Bits), bitfieldInsert(Base[2], Insert[2], Offset, Bits)); } template GLM_FUNC_QUALIFIER detail::tvec4 bitfieldInsert ( detail::tvec4 const & Base, detail::tvec4 const & Insert, int const & Offset, int const & Bits ) { return detail::tvec4( bitfieldInsert(Base[0], Insert[0], Offset, Bits), bitfieldInsert(Base[1], Insert[1], Offset, Bits), bitfieldInsert(Base[2], Insert[2], Offset, Bits), bitfieldInsert(Base[3], Insert[3], Offset, Bits)); } // bitfieldReverse template GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); genIUType Out = 0; std::size_t BitSize = sizeof(genIUType) * 8; for(std::size_t i = 0; i < BitSize; ++i) if(Value & (genIUType(1) << i)) Out |= genIUType(1) << (BitSize - 1 - i); return Out; } VECTORIZE_VEC(bitfieldReverse) // bitCount template GLM_FUNC_QUALIFIER int bitCount(genIUType const & Value) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); int Count = 0; for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i) { if(Value & (1 << i)) ++Count; } return Count; } template GLM_FUNC_QUALIFIER detail::tvec2 bitCount ( detail::tvec2 const & value ) { return detail::tvec2( bitCount(value[0]), bitCount(value[1])); } template GLM_FUNC_QUALIFIER detail::tvec3 bitCount ( detail::tvec3 const & value ) { return detail::tvec3( bitCount(value[0]), bitCount(value[1]), bitCount(value[2])); } template GLM_FUNC_QUALIFIER detail::tvec4 bitCount ( detail::tvec4 const & value ) { return detail::tvec4( bitCount(value[0]), bitCount(value[1]), bitCount(value[2]), bitCount(value[3])); } // findLSB template GLM_FUNC_QUALIFIER int findLSB ( genIUType const & Value ) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); if(Value == 0) return -1; genIUType Bit; for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){} return Bit; } template GLM_FUNC_QUALIFIER detail::tvec2 findLSB ( detail::tvec2 const & value ) { return detail::tvec2( findLSB(value[0]), findLSB(value[1])); } template GLM_FUNC_QUALIFIER detail::tvec3 findLSB ( detail::tvec3 const & value ) { return detail::tvec3( findLSB(value[0]), findLSB(value[1]), findLSB(value[2])); } template GLM_FUNC_QUALIFIER detail::tvec4 findLSB ( detail::tvec4 const & value ) { return detail::tvec4( findLSB(value[0]), findLSB(value[1]), findLSB(value[2]), findLSB(value[3])); } // findMSB #if((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC)) template GLM_FUNC_QUALIFIER int findMSB ( genIUType const & Value ) { unsigned long Result(0); _BitScanReverse(&Result, Value); return int(Result); } #elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40)) template GLM_FUNC_QUALIFIER int findMSB ( genIUType const & Value ) { return __builtin_clz(Value); } #else template GLM_FUNC_QUALIFIER int findMSB ( genIUType const & Value ) { GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); if(Value == 0) return -1; genIUType bit = genIUType(-1); for(genIUType tmp = Value; tmp; tmp >>= 1, ++bit){} return bit; } #endif//(GLM_COMPILER) template GLM_FUNC_QUALIFIER detail::tvec2 findMSB ( detail::tvec2 const & value ) { return detail::tvec2( findMSB(value[0]), findMSB(value[1])); } template GLM_FUNC_QUALIFIER detail::tvec3 findMSB ( detail::tvec3 const & value ) { return detail::tvec3( findMSB(value[0]), findMSB(value[1]), findMSB(value[2])); } template GLM_FUNC_QUALIFIER detail::tvec4 findMSB ( detail::tvec4 const & value ) { return detail::tvec4( findMSB(value[0]), findMSB(value[1]), findMSB(value[2]), findMSB(value[3])); } }//namespace glm DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_matrix.hpp000066400000000000000000000147431360473665400322200ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_matrix.hpp /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions /// /// @defgroup core_func_matrix Matrix functions /// @ingroup core /// /// For each of the following built-in matrix functions, there is both a /// single-precision floating point version, where all arguments and return values /// are single precision, and a double-precision floating version, where all /// arguments and return values are double precision. Only the single-precision /// floating point version is shown. /////////////////////////////////////////////////////////////////////////////////// #ifndef GLM_CORE_func_matrix #define GLM_CORE_func_matrix GLM_VERSION namespace glm { /// @addtogroup core_func_matrix /// @{ /// Multiply matrix x by matrix y component-wise, i.e., /// result[i][j] is the scalar product of x[i][j] and y[i][j]. /// /// @tparam matType Floating-point matrix types. /// /// @see GLSL matrixCompMult man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template matType matrixCompMult( matType const & x, matType const & y); /// Treats the first parameter c as a column vector /// and the second parameter r as a row vector /// and does a linear algebraic matrix multiply c * r. /// /// @tparam matType Floating-point matrix types. /// /// @see GLSL outerProduct man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions /// /// @todo Clarify the declaration to specify that matType doesn't have to be provided when used. template matType outerProduct( vecType const & c, vecType const & r); /// Returns the transposed matrix of x /// /// @tparam matType Floating-point matrix types. /// /// @see GLSL transpose man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template typename matType::transpose_type transpose( matType const & x); /// Return the determinant of a mat2 matrix. /// /// @tparam valType Floating-point scalar types. /// /// @see GLSL determinant man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template typename detail::tmat2x2::value_type determinant( detail::tmat2x2 const & m); /// Return the determinant of a mat3 matrix. /// /// @tparam valType Floating-point scalar types. /// /// @see GLSL determinant man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template typename detail::tmat3x3::value_type determinant( detail::tmat3x3 const & m); /// Return the determinant of a mat4 matrix. /// /// @tparam valType Floating-point scalar types. /// /// @see GLSL determinant man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template typename detail::tmat4x4::value_type determinant( detail::tmat4x4 const & m); /// Return the inverse of a mat2 matrix. /// /// @tparam valType Floating-point scalar types. /// /// @see GLSL inverse man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template detail::tmat2x2 inverse( detail::tmat2x2 const & m); /// Return the inverse of a mat3 matrix. /// /// @tparam valType Floating-point scalar types. /// /// @see GLSL inverse man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template detail::tmat3x3 inverse( detail::tmat3x3 const & m); /// Return the inverse of a mat4 matrix. /// /// @tparam valType Floating-point scalar types. /// /// @see GLSL inverse man page /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions template detail::tmat4x4 inverse( detail::tmat4x4 const & m); /// @} } //namespace glm #include "func_matrix.inl" #endif //GLM_CORE_func_matrix DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_matrix.inl000066400000000000000000000403721360473665400322100ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_matrix.inl /// @date 2008-03-08 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #include "_vectorize.hpp" namespace glm { // matrixCompMult template GLM_FUNC_QUALIFIER matType matrixCompMult ( matType const & x, matType const & y ) { GLM_STATIC_ASSERT(detail::type::is_float, "'matrixCompMult' only accept floating-point inputs"); matType result(matType::null); for(typename matType::size_type i = 0; i < matType::row_size(); ++i) result[i] = x[i] * y[i]; return result; } // outerProduct template GLM_FUNC_QUALIFIER detail::tmat2x2 outerProduct ( detail::tvec2 const & c, detail::tvec2 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat2x2 m(detail::tmat2x2::null); m[0][0] = c[0] * r[0]; m[0][1] = c[1] * r[0]; m[1][0] = c[0] * r[1]; m[1][1] = c[1] * r[1]; return m; } template GLM_FUNC_QUALIFIER detail::tmat3x3 outerProduct ( detail::tvec3 const & c, detail::tvec3 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat3x3 m(detail::tmat3x3::null); for(typename detail::tmat3x3::size_type i(0); i < m.length(); ++i) m[i] = c * r[i]; return m; } template GLM_FUNC_QUALIFIER detail::tmat4x4 outerProduct ( detail::tvec4 const & c, detail::tvec4 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat4x4 m(detail::tmat4x4::null); for(typename detail::tmat4x4::size_type i(0); i < m.length(); ++i) m[i] = c * r[i]; return m; } template GLM_FUNC_QUALIFIER detail::tmat2x3 outerProduct ( detail::tvec3 const & c, detail::tvec2 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat2x3 m(detail::tmat2x3::null); m[0][0] = c.x * r.x; m[0][1] = c.y * r.x; m[0][2] = c.z * r.x; m[1][0] = c.x * r.y; m[1][1] = c.y * r.y; m[1][2] = c.z * r.y; return m; } template GLM_FUNC_QUALIFIER detail::tmat3x2 outerProduct ( detail::tvec2 const & c, detail::tvec3 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat3x2 m(detail::tmat3x2::null); m[0][0] = c.x * r.x; m[0][1] = c.y * r.x; m[1][0] = c.x * r.y; m[1][1] = c.y * r.y; m[2][0] = c.x * r.z; m[2][1] = c.y * r.z; return m; } template GLM_FUNC_QUALIFIER detail::tmat2x4 outerProduct ( detail::tvec4 const & c, detail::tvec2 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat2x4 m(detail::tmat2x4::null); m[0][0] = c.x * r.x; m[0][1] = c.y * r.x; m[0][2] = c.z * r.x; m[0][3] = c.w * r.x; m[1][0] = c.x * r.y; m[1][1] = c.y * r.y; m[1][2] = c.z * r.y; m[1][3] = c.w * r.y; return m; } template GLM_FUNC_QUALIFIER detail::tmat4x2 outerProduct ( detail::tvec2 const & c, detail::tvec4 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat4x2 m(detail::tmat4x2::null); m[0][0] = c.x * r.x; m[0][1] = c.y * r.x; m[1][0] = c.x * r.y; m[1][1] = c.y * r.y; m[2][0] = c.x * r.z; m[2][1] = c.y * r.z; m[3][0] = c.x * r.w; m[3][1] = c.y * r.w; return m; } template GLM_FUNC_QUALIFIER detail::tmat3x4 outerProduct ( detail::tvec4 const & c, detail::tvec3 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat3x4 m(detail::tmat3x4::null); m[0][0] = c.x * r.x; m[0][1] = c.y * r.x; m[0][2] = c.z * r.x; m[0][3] = c.w * r.x; m[1][0] = c.x * r.y; m[1][1] = c.y * r.y; m[1][2] = c.z * r.y; m[1][3] = c.w * r.y; m[2][0] = c.x * r.z; m[2][1] = c.y * r.z; m[2][2] = c.z * r.z; m[2][3] = c.w * r.z; return m; } template GLM_FUNC_QUALIFIER detail::tmat4x3 outerProduct ( detail::tvec3 const & c, detail::tvec4 const & r ) { GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); detail::tmat4x3 m(detail::tmat4x3::null); m[0][0] = c.x * r.x; m[0][1] = c.y * r.x; m[0][2] = c.z * r.x; m[1][0] = c.x * r.y; m[1][1] = c.y * r.y; m[1][2] = c.z * r.y; m[2][0] = c.x * r.z; m[2][1] = c.y * r.z; m[2][2] = c.z * r.z; m[3][0] = c.x * r.w; m[3][1] = c.y * r.w; m[3][2] = c.z * r.w; return m; } template GLM_FUNC_QUALIFIER detail::tmat2x2 transpose ( detail::tmat2x2 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat2x2 result(detail::tmat2x2::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; return result; } template GLM_FUNC_QUALIFIER detail::tmat3x3 transpose ( detail::tmat3x3 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat3x3 result(detail::tmat3x3::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[0][2] = m[2][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[1][2] = m[2][1]; result[2][0] = m[0][2]; result[2][1] = m[1][2]; result[2][2] = m[2][2]; return result; } template GLM_FUNC_QUALIFIER detail::tmat4x4 transpose ( detail::tmat4x4 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat4x4 result(detail::tmat4x4::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[0][2] = m[2][0]; result[0][3] = m[3][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[1][2] = m[2][1]; result[1][3] = m[3][1]; result[2][0] = m[0][2]; result[2][1] = m[1][2]; result[2][2] = m[2][2]; result[2][3] = m[3][2]; result[3][0] = m[0][3]; result[3][1] = m[1][3]; result[3][2] = m[2][3]; result[3][3] = m[3][3]; return result; } template GLM_FUNC_QUALIFIER detail::tmat2x3 transpose ( detail::tmat3x2 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat2x3 result(detail::tmat2x3::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[0][2] = m[2][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[1][2] = m[2][1]; return result; } template GLM_FUNC_QUALIFIER detail::tmat3x2 transpose ( detail::tmat2x3 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat3x2 result(detail::tmat3x2::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[2][0] = m[0][2]; result[2][1] = m[1][2]; return result; } template GLM_FUNC_QUALIFIER detail::tmat2x4 transpose ( detail::tmat4x2 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat2x4 result(detail::tmat2x4::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[0][2] = m[2][0]; result[0][3] = m[3][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[1][2] = m[2][1]; result[1][3] = m[3][1]; return result; } template GLM_FUNC_QUALIFIER detail::tmat4x2 transpose ( detail::tmat2x4 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat4x2 result(detail::tmat4x2::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[2][0] = m[0][2]; result[2][1] = m[1][2]; result[3][0] = m[0][3]; result[3][1] = m[1][3]; return result; } template GLM_FUNC_QUALIFIER detail::tmat3x4 transpose ( detail::tmat4x3 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat3x4 result(detail::tmat3x4::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[0][2] = m[2][0]; result[0][3] = m[3][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[1][2] = m[2][1]; result[1][3] = m[3][1]; result[2][0] = m[0][2]; result[2][1] = m[1][2]; result[2][2] = m[2][2]; result[2][3] = m[3][2]; return result; } template GLM_FUNC_QUALIFIER detail::tmat4x3 transpose ( detail::tmat3x4 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); detail::tmat4x3 result(detail::tmat4x3::null); result[0][0] = m[0][0]; result[0][1] = m[1][0]; result[0][2] = m[2][0]; result[1][0] = m[0][1]; result[1][1] = m[1][1]; result[1][2] = m[2][1]; result[2][0] = m[0][2]; result[2][1] = m[1][2]; result[2][2] = m[2][2]; result[3][0] = m[0][3]; result[3][1] = m[1][3]; result[3][2] = m[2][3]; return result; } template GLM_FUNC_QUALIFIER typename detail::tmat2x2::value_type determinant ( detail::tmat2x2 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); return m[0][0] * m[1][1] - m[1][0] * m[0][1]; } template GLM_FUNC_QUALIFIER typename detail::tmat3x3::value_type determinant ( detail::tmat3x3 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); return + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); } template GLM_FUNC_QUALIFIER typename detail::tmat4x4::value_type determinant ( detail::tmat4x4 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; detail::tvec4 DetCof( + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); return m[0][0] * DetCof[0] + m[0][1] * DetCof[1] + m[0][2] * DetCof[2] + m[0][3] * DetCof[3]; } template GLM_FUNC_QUALIFIER detail::tmat2x2 inverse ( detail::tmat2x2 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); //valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; T Determinant = determinant(m); detail::tmat2x2 Inverse( + m[1][1] / Determinant, - m[0][1] / Determinant, - m[1][0] / Determinant, + m[0][0] / Determinant); return Inverse; } template GLM_FUNC_QUALIFIER detail::tmat3x3 inverse ( detail::tmat3x3 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); //valType Determinant = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) // - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) // + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); T Determinant = determinant(m); detail::tmat3x3 Inverse(detail::tmat3x3::null); Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); Inverse /= Determinant; return Inverse; } template GLM_FUNC_QUALIFIER detail::tmat4x4 inverse ( detail::tmat4x4 const & m ) { GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; detail::tvec4 const SignA(+1, -1, +1, -1); detail::tvec4 const SignB(-1, +1, -1, +1); detail::tvec4 Fac0(Coef00, Coef00, Coef02, Coef03); detail::tvec4 Fac1(Coef04, Coef04, Coef06, Coef07); detail::tvec4 Fac2(Coef08, Coef08, Coef10, Coef11); detail::tvec4 Fac3(Coef12, Coef12, Coef14, Coef15); detail::tvec4 Fac4(Coef16, Coef16, Coef18, Coef19); detail::tvec4 Fac5(Coef20, Coef20, Coef22, Coef23); detail::tvec4 Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); detail::tvec4 Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); detail::tvec4 Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); detail::tvec4 Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); detail::tvec4 Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); detail::tvec4 Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); detail::tvec4 Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); detail::tvec4 Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); detail::tmat4x4 Inverse(Inv0, Inv1, Inv2, Inv3); detail::tvec4 Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); T Determinant = glm::dot(m[0], Row0); Inverse /= Determinant; return Inverse; } }//namespace glm DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_noise.hpp000066400000000000000000000075411360473665400320270ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_noise.hpp /// @date 2008-08-01 / 2011-06-18 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions /// /// @defgroup core_func_noise Noise functions /// @ingroup core /// /// Noise functions are stochastic functions that can be used to increase visual /// complexity. Values returned by the following noise functions give the /// appearance of randomness, but are not truly random. /////////////////////////////////////////////////////////////////////////////////// #ifndef glm_core_func_noise #define glm_core_func_noise GLM_VERSION namespace glm { /// @addtogroup core_func_noise /// @{ /// Returns a 1D noise value based on the input value x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL noise1 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template typename genType::value_type noise1(genType const & x); /// Returns a 2D noise value based on the input value x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL noise2 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template detail::tvec2 noise2(genType const & x); /// Returns a 3D noise value based on the input value x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL noise3 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template detail::tvec3 noise3(genType const & x); /// Returns a 4D noise value based on the input value x. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL noise4 man page /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions template detail::tvec4 noise4(genType const & x); /// @} } //namespace glm #include "func_noise.inl" #endif //glm_core_func_noise DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_noise.inl000066400000000000000000000317341360473665400320230ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_noise.inl /// @date 2008-08-01 / 2011-09-27 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// namespace glm { template GLM_FUNC_QUALIFIER T noise1(T const & x) { return noise1(glm::detail::tvec2(x, T(0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(T const & x) { return glm::detail::tvec2( noise1(x + T(0.0)), noise1(x + T(1.0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(T const & x) { return glm::detail::tvec3( noise1(x - T(1.0)), noise1(x + T(0.0)), noise1(x + T(1.0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(T const & x) { return glm::detail::tvec4( noise1(x - T(1.0)), noise1(x + T(0.0)), noise1(x + T(1.0)), noise1(x + T(2.0))); } template GLM_FUNC_QUALIFIER T noise1(glm::detail::tvec2 const & v) { detail::tvec4 const C = detail::tvec4( T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) T(-0.577350269189626), // -1.0 + 2.0 * C.x T( 0.024390243902439)); // 1.0 / 41.0 // First corner detail::tvec2 i = floor(v + dot(v, detail::tvec2(C[1]))); detail::tvec2 x0 = v - i + dot(i, detail::tvec2(C[0])); // Other corners //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 //i1.y = 1.0 - i1.x; detail::tvec2 i1 = (x0.x > x0.y) ? detail::tvec2(1, 0) : detail::tvec2(0, 1); // x0 = x0 - 0.0 + 0.0 * C.xx ; // x1 = x0 - i1 + 1.0 * C.xx ; // x2 = x0 - 1.0 + 2.0 * C.xx ; detail::tvec4 x12 = detail::tvec4(x0.x, x0.y, x0.x, x0.y) + detail::tvec4(C.x, C.x, C.z, C.z); x12 = detail::tvec4(detail::tvec2(x12) - i1, x12.z, x12.w); // Permutations i = mod(i, T(289)); // Avoid truncation effects in permutation detail::tvec3 p = permute( permute(i.y + detail::tvec3(T(0), i1.y, T(1))) + i.x + detail::tvec3(T(0), i1.x, T(1))); detail::tvec3 m = max(T(0.5) - detail::tvec3( dot(x0, x0), dot(detail::tvec2(x12.x, x12.y), detail::tvec2(x12.x, x12.y)), dot(detail::tvec2(x12.z, x12.w), detail::tvec2(x12.z, x12.w))), T(0)); m = m * m ; m = m * m ; // Gradients: 41 points uniformly over a line, mapped onto a diamond. // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) detail::tvec3 x = T(2) * fract(p * C.w) - T(1); detail::tvec3 h = abs(x) - T(0.5); detail::tvec3 ox = floor(x + T(0.5)); detail::tvec3 a0 = x - ox; // Normalise gradients implicitly by scaling m // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); m *= T(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); // Compute final noise value at P detail::tvec3 g; g.x = a0.x * x0.x + h.x * x0.y; //g.yz = a0.yz * x12.xz + h.yz * x12.yw; g.y = a0.y * x12.x + h.y * x12.y; g.z = a0.z * x12.z + h.z * x12.w; return T(130) * dot(m, g); } template GLM_FUNC_QUALIFIER T noise1(detail::tvec3 const & v) { detail::tvec2 const C(1.0 / 6.0, 1.0 / 3.0); detail::tvec4 const D(0.0, 0.5, 1.0, 2.0); // First corner detail::tvec3 i(floor(v + dot(v, detail::tvec3(C.y)))); detail::tvec3 x0(v - i + dot(i, detail::tvec3(C.x))); // Other corners detail::tvec3 g(step(detail::tvec3(x0.y, x0.z, x0.x), x0)); detail::tvec3 l(T(1) - g); detail::tvec3 i1(min(g, detail::tvec3(l.z, l.x, l.y))); detail::tvec3 i2(max(g, detail::tvec3(l.z, l.x, l.y))); // x0 = x0 - 0.0 + 0.0 * C.xxx; // x1 = x0 - i1 + 1.0 * C.xxx; // x2 = x0 - i2 + 2.0 * C.xxx; // x3 = x0 - 1.0 + 3.0 * C.xxx; detail::tvec3 x1(x0 - i1 + C.x); detail::tvec3 x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y detail::tvec3 x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y // Permutations i = mod289(i); detail::tvec4 p(permute(permute(permute( i.z + detail::tvec4(T(0), i1.z, i2.z, T(1))) + i.y + detail::tvec4(T(0), i1.y, i2.y, T(1))) + i.x + detail::tvec4(T(0), i1.x, i2.x, T(1)))); // Gradients: 7x7 points over a square, mapped onto an octahedron. // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) T n_ = T(0.142857142857); // 1.0/7.0 detail::tvec3 ns(n_ * detail::tvec3(D.w, D.y, D.z) - detail::tvec3(D.x, D.z, D.x)); detail::tvec4 j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) detail::tvec4 x_(floor(j * ns.z)); detail::tvec4 y_(floor(j - T(7) * x_)); // mod(j,N) detail::tvec4 x(x_ * ns.x + ns.y); detail::tvec4 y(y_ * ns.x + ns.y); detail::tvec4 h(T(1) - abs(x) - abs(y)); detail::tvec4 b0(x.x, x.y, y.x, y.y); detail::tvec4 b1(x.z, x.w, y.z, y.w); // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; detail::tvec4 s0(floor(b0) * T(2) + T(1)); detail::tvec4 s1(floor(b1) * T(2) + T(1)); detail::tvec4 sh(-step(h, detail::tvec4(0.0))); detail::tvec4 a0 = detail::tvec4(b0.x, b0.z, b0.y, b0.w) + detail::tvec4(s0.x, s0.z, s0.y, s0.w) * detail::tvec4(sh.x, sh.x, sh.y, sh.y); detail::tvec4 a1 = detail::tvec4(b1.x, b1.z, b1.y, b1.w) + detail::tvec4(s1.x, s1.z, s1.y, s1.w) * detail::tvec4(sh.z, sh.z, sh.w, sh.w); detail::tvec3 p0(a0.x, a0.y, h.x); detail::tvec3 p1(a0.z, a0.w, h.y); detail::tvec3 p2(a1.x, a1.y, h.z); detail::tvec3 p3(a1.z, a1.w, h.w); // Normalise gradients detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w; // Mix final noise value detail::tvec4 m = max(T(0.6) - detail::tvec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), T(0)); m = m * m; return T(42) * dot(m * m, detail::tvec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); } template GLM_FUNC_QUALIFIER T noise1(detail::tvec4 const & v) { detail::tvec4 const C( 0.138196601125011, // (5 - sqrt(5))/20 G4 0.276393202250021, // 2 * G4 0.414589803375032, // 3 * G4 -0.447213595499958); // -1 + 4 * G4 // (sqrt(5) - 1)/4 = F4, used once below T const F4 = T(0.309016994374947451); // First corner detail::tvec4 i = floor(v + dot(v, vec4(F4))); detail::tvec4 x0 = v - i + dot(i, vec4(C.x)); // Other corners // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) detail::tvec4 i0; detail::tvec3 isX = step(detail::tvec3(x0.y, x0.z, x0.w), detail::tvec3(x0.x)); detail::tvec3 isYZ = step(detail::tvec3(x0.z, x0.w, x0.w), detail::tvec3(x0.y, x0.y, x0.z)); // i0.x = dot(isX, vec3(1.0)); //i0.x = isX.x + isX.y + isX.z; //i0.yzw = T(1) - isX; i0 = detail::tvec4(isX.x + isX.y + isX.z, T(1) - isX); // i0.y += dot(isYZ.xy, vec2(1.0)); i0.y += isYZ.x + isYZ.y; //i0.zw += 1.0 - detail::tvec2(isYZ.x, isYZ.y); i0.z += T(1) - isYZ.x; i0.w += T(1) - isYZ.y; i0.z += isYZ.z; i0.w += T(1) - isYZ.z; // i0 now contains the unique values 0,1,2,3 in each channel detail::tvec4 i3 = clamp(i0, 0.0, 1.0); detail::tvec4 i2 = clamp(i0 - 1.0, 0.0, 1.0); detail::tvec4 i1 = clamp(i0 - 2.0, 0.0, 1.0); // x0 = x0 - 0.0 + 0.0 * C.xxxx // x1 = x0 - i1 + 0.0 * C.xxxx // x2 = x0 - i2 + 0.0 * C.xxxx // x3 = x0 - i3 + 0.0 * C.xxxx // x4 = x0 - 1.0 + 4.0 * C.xxxx detail::tvec4 x1 = x0 - i1 + C.x; detail::tvec4 x2 = x0 - i2 + C.y; detail::tvec4 x3 = x0 - i3 + C.z; detail::tvec4 x4 = x0 + C.w; // Permutations i = mod(i, T(289)); T j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x); detail::tvec4 j1 = permute(permute(permute(permute( i.w + detail::tvec4(i1.w, i2.w, i3.w, T(1))) + i.z + detail::tvec4(i1.z, i2.z, i3.z, T(1))) + i.y + detail::tvec4(i1.y, i2.y, i3.y, T(1))) + i.x + detail::tvec4(i1.x, i2.x, i3.x, T(1))); // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope // 7*7*6 = 294, which is close to the ring size 17*17 = 289. detail::tvec4 ip = detail::tvec4(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); detail::tvec4 p0 = grad4(j0, ip); detail::tvec4 p1 = grad4(j1.x, ip); detail::tvec4 p2 = grad4(j1.y, ip); detail::tvec4 p3 = grad4(j1.z, ip); detail::tvec4 p4 = grad4(j1.w, ip); // Normalise gradients detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w; p4 *= taylorInvSqrt(dot(p4, p4)); // Mix contributions from the five corners detail::tvec3 m0 = max(T(0.6) - detail::tvec3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), T(0)); detail::tvec2 m1 = max(T(0.6) - detail::tvec2(dot(x3, x3), dot(x4, x4) ), T(0)); m0 = m0 * m0; m1 = m1 * m1; return T(49) * (dot(m0 * m0, detail::tvec3(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + dot(m1 * m1, detail::tvec2(dot(p3, x3), dot(p4, x4)))); } template GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec2 const & x) { return glm::detail::tvec2( noise1(x + glm::detail::tvec2(0.0)), noise1(glm::detail::tvec2(0.0) - x)); } template GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec3 const & x) { return glm::detail::tvec2( noise1(x + glm::detail::tvec3(0.0)), noise1(glm::detail::tvec3(0.0) - x)); } template GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec4 const & x) { return glm::detail::tvec2( noise1(x + glm::detail::tvec4(0.0)), noise1(glm::detail::tvec4(0.0) - x)); } template GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec2 const & x) { return glm::detail::tvec3( noise1(x - glm::detail::tvec2(1.0)), noise1(x + glm::detail::tvec2(0.0)), noise1(x + glm::detail::tvec2(1.0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec3 const & x) { return glm::detail::tvec3( noise1(x - glm::detail::tvec3(1.0)), noise1(x + glm::detail::tvec3(0.0)), noise1(x + glm::detail::tvec3(1.0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec4 const & x) { return glm::detail::tvec3( noise1(x - glm::detail::tvec4(1.0)), noise1(x + glm::detail::tvec4(0.0)), noise1(x + glm::detail::tvec4(1.0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec2 const & x) { return glm::detail::tvec4( noise1(x - glm::detail::tvec2(1.0)), noise1(x + glm::detail::tvec2(0.0)), noise1(x + glm::detail::tvec2(1.0)), noise1(x + glm::detail::tvec2(2.0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec3 const & x) { return glm::detail::tvec4( noise1(x - glm::detail::tvec3(1.0)), noise1(x + glm::detail::tvec3(0.0)), noise1(x + glm::detail::tvec3(1.0)), noise1(x + glm::detail::tvec3(2.0))); } template GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec4 const & x) { return glm::detail::tvec4( noise1(x - glm::detail::tvec4(1.0)), noise1(x + glm::detail::tvec4(0.0)), noise1(x + glm::detail::tvec4(1.0)), noise1(x + glm::detail::tvec4(2.0))); } }//namespace glm DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_packing.hpp000066400000000000000000000276301360473665400323270ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_packing.hpp /// @date 2010-03-17 / 2011-06-15 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions /// /// @defgroup core_func_packing Floating-Point Pack and Unpack Functions /// @ingroup core /// /// These functions do not operate component-wise, rather as described in each case. /////////////////////////////////////////////////////////////////////////////////// #ifndef GLM_CORE_func_packing #define GLM_CORE_func_packing GLM_VERSION namespace glm { /// @addtogroup core_func_packing /// @{ //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. //! Then, the results are packed into the returned 32-bit unsigned integer. //! //! The conversion for component c of v to fixed point is done as follows: //! packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) //! //! The first component of the vector will be written to the least significant bits of the output; //! the last component will be written to the most significant bits. //! /// @see GLSL packUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::uint32 packUnorm2x16(detail::tvec2 const & v); //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. //! Then, the results are packed into the returned 32-bit unsigned integer. //! //! The conversion for component c of v to fixed point is done as follows: //! packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) //! //! The first component of the vector will be written to the least significant bits of the output; //! the last component will be written to the most significant bits. //! /// @see GLSL packSnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::uint32 packSnorm2x16(detail::tvec2 const & v); //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. //! Then, the results are packed into the returned 32-bit unsigned integer. //! //! The conversion for component c of v to fixed point is done as follows: //! packUnorm4x8: round(clamp(c, 0, +1) * 255.0) //! //! The first component of the vector will be written to the least significant bits of the output; //! the last component will be written to the most significant bits. //! /// @see GLSL packUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::uint32 packUnorm4x8(detail::tvec4 const & v); //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. //! Then, the results are packed into the returned 32-bit unsigned integer. //! //! The conversion for component c of v to fixed point is done as follows: //! packSnorm4x8: round(clamp(c, -1, +1) * 127.0) //! //! The first component of the vector will be written to the least significant bits of the output; //! the last component will be written to the most significant bits. //! /// @see GLSL packSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::uint32 packSnorm4x8(detail::tvec4 const & v); //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. //! //! The conversion for unpacked fixed-point value f to floating point is done as follows: //! unpackUnorm2x16: f / 65535.0 //! //! The first component of the returned vector will be extracted from the least significant bits of the input; //! the last component will be extracted from the most significant bits. //! /// @see GLSL unpackUnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::tvec2 unpackUnorm2x16(detail::uint32 const & p); //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. //! //! The conversion for unpacked fixed-point value f to floating point is done as follows: //! unpackSnorm2x16: clamp(f / 32767.0, -1, +1) //! //! The first component of the returned vector will be extracted from the least significant bits of the input; //! the last component will be extracted from the most significant bits. //! /// @see GLSL unpackSnorm2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::tvec2 unpackSnorm2x16(detail::uint32 const & p); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackUnorm4x8: f / 255.0 /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see GLSL unpackUnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::tvec4 unpackUnorm4x8(detail::uint32 const & p); /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. /// /// The conversion for unpacked fixed-point value f to floating point is done as follows: /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) /// /// The first component of the returned vector will be extracted from the least significant bits of the input; /// the last component will be extracted from the most significant bits. /// /// @see GLSL unpackSnorm4x8 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::tvec4 unpackSnorm4x8(detail::uint32 const & p); /// Returns a double-precision value obtained by packing the components of v into a 64-bit value. /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. /// Otherwise, the bit- level representation of v is preserved. /// The first vector component specifies the 32 least significant bits; /// the second component specifies the 32 most significant bits. /// /// @see GLSL packDouble2x32 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions double packDouble2x32(detail::tvec2 const & v); /// Returns a two-component unsigned integer vector representation of v. /// The bit-level representation of v is preserved. /// The first component of the vector contains the 32 least significant bits of the double; /// the second component consists the 32 most significant bits. /// /// @see GLSL unpackDouble2x32 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions detail::tvec2 unpackDouble2x32(double const & v); /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector /// to the 16-bit floating-point representation found in the OpenGL Specification, /// and then packing these two 16- bit integers into a 32-bit unsigned integer. /// The first vector component specifies the 16 least-significant bits of the result; /// the second component specifies the 16 most-significant bits. /// /// @see GLSL packHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions uint packHalf2x16(vec2 const & v); /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, /// and converting them to 32-bit floating-point values. /// The first component of the vector is obtained from the 16 least-significant bits of v; /// the second component is obtained from the 16 most-significant bits of v. /// /// @see GLSL unpackHalf2x16 man page /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions vec2 unpackHalf2x16(uint const & v); /// @} } //namespace glm #include "func_packing.inl" #endif //GLM_CORE_func_packing DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/func_packing.inl000066400000000000000000000132741360473665400323210ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_packing.inl /// @date 2010-03-17 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// namespace glm { GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2 const & v) { detail::uint16 A(detail::uint16(round(clamp(v.x, 0.0f, 1.0f) * 65535.0f))); detail::uint16 B(detail::uint16(round(clamp(v.y, 0.0f, 1.0f) * 65535.0f))); return detail::uint32((B << 16) | A); } GLM_FUNC_QUALIFIER detail::tvec2 unpackUnorm2x16(detail::uint32 const & p) { detail::uint32 Mask16((1 << 16) - 1); detail::uint32 A((p >> 0) & Mask16); detail::uint32 B((p >> 16) & Mask16); return detail::tvec2( A * 1.0f / 65535.0f, B * 1.0f / 65535.0f); } GLM_FUNC_QUALIFIER detail::uint32 packSnorm2x16(detail::tvec2 const & v) { union iu { detail::int16 i; detail::uint16 u; } A, B; detail::tvec2 Unpack = clamp(v ,-1.0f, 1.0f) * 32767.0f; A.i = detail::int16(round(Unpack.x)); B.i = detail::int16(round(Unpack.y)); detail::uint32 Pack = (detail::uint32(B.u) << 16) | (detail::uint32(A.u) << 0); return Pack; } GLM_FUNC_QUALIFIER detail::tvec2 unpackSnorm2x16(detail::uint32 const & p) { union iu { detail::int16 i; detail::uint16 u; } A, B; detail::uint32 Mask16((1 << 16) - 1); A.u = detail::uint16((p >> 0) & Mask16); B.u = detail::uint16((p >> 16) & Mask16); detail::tvec2 Pack(A.i, B.i); return clamp(Pack * 1.0f / 32767.0f, -1.0f, 1.0f); } GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4 const & v) { detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f)); detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f)); detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f)); detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f)); return detail::uint32((D << 24) | (C << 16) | (B << 8) | A); } GLM_FUNC_QUALIFIER detail::tvec4 unpackUnorm4x8(detail::uint32 const & p) { detail::uint32 Mask8((1 << 8) - 1); detail::uint32 A((p >> 0) & Mask8); detail::uint32 B((p >> 8) & Mask8); detail::uint32 C((p >> 16) & Mask8); detail::uint32 D((p >> 24) & Mask8); return detail::tvec4( A * 1.0f / 255.0f, B * 1.0f / 255.0f, C * 1.0f / 255.0f, D * 1.0f / 255.0f); } GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4 const & v) { union iu { detail::int8 i; detail::uint8 u; } A, B, C, D; detail::tvec4 Unpack = clamp(v ,-1.0f, 1.0f) * 127.0f; A.i = detail::int8(round(Unpack.x)); B.i = detail::int8(round(Unpack.y)); C.i = detail::int8(round(Unpack.z)); D.i = detail::int8(round(Unpack.w)); detail::uint32 Pack = (detail::uint32(D.u) << 24) | (detail::uint32(C.u) << 16) | (detail::uint32(B.u) << 8) | (detail::uint32(A.u) << 0); return Pack; } GLM_FUNC_QUALIFIER detail::tvec4 unpackSnorm4x8(detail::uint32 const & p) { union iu { detail::int8 i; detail::uint8 u; } A, B, C, D; detail::uint32 Mask8((1 << 8) - 1); A.u = detail::uint8((p >> 0) & Mask8); B.u = detail::uint8((p >> 8) & Mask8); C.u = detail::uint8((p >> 16) & Mask8); D.u = detail::uint8((p >> 24) & Mask8); detail::tvec4 Pack(A.i, B.i, C.i, D.i); return clamp(Pack * 1.0f / 127.0f, -1.0f, 1.0f); } GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2 const & v) { return *(double*)&v; } GLM_FUNC_QUALIFIER detail::tvec2 unpackDouble2x32(double const & v) { return *(detail::tvec2*)&v; } GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2 const & v) { union helper { uint other; struct { detail::hdata a, b; } orig; } Pack; Pack.orig.a = detail::toFloat16(v.x); Pack.orig.b = detail::toFloat16(v.y); return *(uint*)&Pack; } GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v) { union helper { uint other; struct { detail::hdata a, b; } orig; } Unpack; Unpack.other = v; return vec2(detail::toFloat32(Unpack.orig.a), detail::toFloat32(Unpack.orig.b)); } }//namespace glm func_trigonometric.hpp000066400000000000000000000225301360473665400335130ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_trigonometric.hpp /// @date 2008-08-01 / 2011-06-15 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions /// /// @defgroup core_func_trigonometric Angle and Trigonometry Functions /// @ingroup core /// /// Function parameters specified as angle are assumed to be in units of radians. /// In no case will any of these functions result in a divide by zero error. If /// the divisor of a ratio is 0, then results will be undefined. /// /// These all operate component-wise. The description is per component. /////////////////////////////////////////////////////////////////////////////////// #ifndef GLM_CORE_func_trigonometric #define GLM_CORE_func_trigonometric GLM_VERSION namespace glm { /// @addtogroup core_func_trigonometric /// @{ /// Converts degrees to radians and returns the result. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL radians man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType radians(genType const & degrees); /// Converts radians to degrees and returns the result. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL degrees man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType degrees(genType const & radians); /// The standard trigonometric sine function. /// The values returned by this function will range from [-1, 1]. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL sin man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType sin(genType const & angle); /// The standard trigonometric cosine function. /// The values returned by this function will range from [-1, 1]. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL cos man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType cos(genType const & angle); /// The standard trigonometric tangent function. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL tan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType tan(genType const & angle); /// Arc sine. Returns an angle whose sine is x. /// The range of values returned by this function is [-PI/2, PI/2]. /// Results are undefined if |x| > 1. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL asin man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType asin(genType const & x); /// Arc cosine. Returns an angle whose sine is x. /// The range of values returned by this function is [0, PI]. /// Results are undefined if |x| > 1. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL acos man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType acos(genType const & x); /// Arc tangent. Returns an angle whose tangent is y/x. /// The signs of x and y are used to determine what /// quadrant the angle is in. The range of values returned /// by this function is [-PI, PI]. Results are undefined /// if x and y are both 0. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL atan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType atan(genType const & y, genType const & x); /// Arc tangent. Returns an angle whose tangent is y_over_x. /// The range of values returned by this function is [-PI/2, PI/2]. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL atan man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType atan(genType const & y_over_x); /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL sinh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType sinh(genType const & angle); /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL cosh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType cosh(genType const & angle); /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL tanh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType tanh(genType const & angle); /// Arc hyperbolic sine; returns the inverse of sinh. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL asinh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType asinh(genType const & x); /// Arc hyperbolic cosine; returns the non-negative inverse /// of cosh. Results are undefined if x < 1. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL acosh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType acosh(genType const & x); /// Arc hyperbolic tangent; returns the inverse of tanh. /// Results are undefined if abs(x) >= 1. /// /// @tparam genType Floating-point scalar or vector types. /// /// @see GLSL atanh man page /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions template genType atanh(genType const & x); /// @} } //namespace glm #include "func_trigonometric.inl" #endif //GLM_CORE_func_trigonometric func_trigonometric.inl000066400000000000000000000132351360473665400335100ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_trigonometric.inl /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// #include "_vectorize.hpp" namespace glm { // radians template GLM_FUNC_QUALIFIER genType radians ( genType const & degrees ) { GLM_STATIC_ASSERT(detail::type::is_float, "'radians' only accept floating-point input"); genType const pi = genType(3.1415926535897932384626433832795); return degrees * (pi / genType(180)); } VECTORIZE_VEC(radians) // degrees template GLM_FUNC_QUALIFIER genType degrees ( genType const & radians ) { GLM_STATIC_ASSERT(detail::type::is_float, "'degrees' only accept floating-point input"); const genType pi = genType(3.1415926535897932384626433832795); return radians * (genType(180) / pi); } VECTORIZE_VEC(degrees) // sin template GLM_FUNC_QUALIFIER genType sin ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'sin' only accept floating-point input"); return ::std::sin(angle); } VECTORIZE_VEC(sin) // cos template GLM_FUNC_QUALIFIER genType cos(genType const & angle) { GLM_STATIC_ASSERT(detail::type::is_float, "'cos' only accept floating-point input"); return ::std::cos(angle); } VECTORIZE_VEC(cos) // tan template GLM_FUNC_QUALIFIER genType tan ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'tan' only accept floating-point input"); return ::std::tan(angle); } VECTORIZE_VEC(tan) // asin template GLM_FUNC_QUALIFIER genType asin ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'asin' only accept floating-point input"); return ::std::asin(x); } VECTORIZE_VEC(asin) // acos template GLM_FUNC_QUALIFIER genType acos ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'acos' only accept floating-point input"); return ::std::acos(x); } VECTORIZE_VEC(acos) // atan template GLM_FUNC_QUALIFIER genType atan ( genType const & y, genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); return ::std::atan2(y, x); } VECTORIZE_VEC_VEC(atan) template GLM_FUNC_QUALIFIER genType atan ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); return ::std::atan(x); } VECTORIZE_VEC(atan) // sinh template GLM_FUNC_QUALIFIER genType sinh ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'sinh' only accept floating-point input"); return std::sinh(angle); } VECTORIZE_VEC(sinh) // cosh template GLM_FUNC_QUALIFIER genType cosh ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'cosh' only accept floating-point input"); return std::cosh(angle); } VECTORIZE_VEC(cosh) // tanh template GLM_FUNC_QUALIFIER genType tanh ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'tanh' only accept floating-point input"); return std::tanh(angle); } VECTORIZE_VEC(tanh) // asinh template GLM_FUNC_QUALIFIER genType asinh ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'asinh' only accept floating-point input"); return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x)); } VECTORIZE_VEC(asinh) // acosh template GLM_FUNC_QUALIFIER genType acosh ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'acosh' only accept floating-point input"); if(x < genType(1)) return genType(0); return log(x + sqrt(x * x - genType(1))); } VECTORIZE_VEC(acosh) // atanh template GLM_FUNC_QUALIFIER genType atanh ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'atanh' only accept floating-point input"); if(abs(x) >= genType(1)) return 0; return genType(0.5) * log((genType(1) + x) / (genType(1) - x)); } VECTORIZE_VEC(atanh) }//namespace glm func_vector_relational.hpp000066400000000000000000000150401360473665400343400ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_vector_relational.hpp /// @date 2008-08-03 / 2011-06-15 /// @author Christophe Riccio /// /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions /// /// @defgroup core_func_vector_relational Vector Relational Functions /// @ingroup core /// /// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to /// operate on scalars and produce scalar Boolean results. For vector results, /// use the following built-in functions. /// /// In all cases, the sizes of all the input and return vectors for any particular /// call must match. /////////////////////////////////////////////////////////////////////////////////// #ifndef GLM_CORE_func_vector_relational #define GLM_CORE_func_vector_relational GLM_VERSION #include "_detail.hpp" namespace glm { /// @addtogroup core_func_vector_relational /// @{ /// Returns the component-wise comparison result of x < y. /// /// @tparam vecType Floating-point or integer vector types. /// /// @see GLSL lessThan man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template typename vecType::bool_type lessThan(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x <= y. /// /// @tparam vecType Floating-point or integer vector types. /// /// @see GLSL lessThanEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x > y. /// /// @tparam vecType Floating-point or integer vector types. /// /// @see GLSL greaterThan man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template typename vecType::bool_type greaterThan(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x >= y. /// /// @tparam vecType Floating-point or integer vector types. /// /// @see GLSL greaterThanEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x == y. /// /// @tparam vecType Floating-point, integer or boolean vector types. /// /// @see GLSL equal man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template typename vecType::bool_type equal(vecType const & x, vecType const & y); /// Returns the component-wise comparison of result x != y. /// /// @tparam vecType Floating-point, integer or boolean vector types. /// /// @see GLSL notEqual man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template typename vecType::bool_type notEqual(vecType const & x, vecType const & y); /// Returns true if any component of x is true. /// /// @tparam vecType Boolean vector types. /// /// @see GLSL any man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template class vecType> bool any(vecType const & v); /// Returns true if all components of x are true. /// /// @tparam vecType Boolean vector types. /// /// @see GLSL all man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template class vecType> bool all(vecType const & v); /// Returns the component-wise logical complement of x. /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead. /// /// @tparam vecType Boolean vector types. /// /// @see GLSL not man page /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions template class vecType> vecType not_(vecType const & v); /// @} } //namespace glm #include "func_vector_relational.inl" #endif //GLM_CORE_func_vector_relational func_vector_relational.inl000066400000000000000000000150101360473665400343300ustar00rootroot00000000000000DustRacing2D-2.0.5/src/game/MiniCore/src/Graphics/contrib/glm/ogl-math/glm/core/////////////////////////////////////////////////////////////////////////////////// /// OpenGL Mathematics (glm.g-truc.net) /// /// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to deal /// in the Software without restriction, including without limitation the rights /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell /// copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN /// THE SOFTWARE. /// /// @ref core /// @file glm/core/func_vector_relational.inl /// @date 2008-08-03 / 2011-09-09 /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// namespace glm { template class vecType> GLM_FUNC_QUALIFIER typename vecType::bool_type lessThan ( vecType const & x, vecType const & y ) { GLM_STATIC_ASSERT(detail::is_vector >::_YES, "Invalid template instantiation of 'lessThan', GLM vector types required"); GLM_STATIC_ASSERT(detail::is_bool::_NO, "Invalid template instantiation of 'lessThan', GLM vector types required floating-point or integer value types vectors"); assert(x.length() == y.length()); typename vecType::bool_type Result(vecType::null); for(typename vecType::size_type i = 0; i < x.length(); ++i) Result[i] = x[i] < y[i]; return Result; } template class vecType> GLM_FUNC_QUALIFIER typename vecType::bool_type lessThanEqual ( vecType const & x, vecType const & y ) { GLM_STATIC_ASSERT(detail::is_vector >::_YES, "Invalid template instantiation of 'lessThanEqual', GLM vector types required"); GLM_STATIC_ASSERT(detail::is_bool::_NO, "Invalid template instantiation of 'lessThanEqual', GLM vector types required floating-point or integer value types vectors"); assert(x.length() == y.length()); typename vecType::bool_type Result(vecType::null); for(typename vecType::size_type i = 0; i < x.length(); ++i) Result[i] = x[i] <= y[i]; return Result; } template class vecType> GLM_FUNC_QUALIFIER typename vecType::bool_type greaterThan ( vecType const & x, vecType const & y ) { GLM_STATIC_ASSERT(detail::is_vector >::_YES, "Invalid template instantiation of 'greaterThan', GLM vector types required"); GLM_STATIC_ASSERT(detail::is_bool::_NO, "Invalid template instantiation of 'greaterThan', GLM vector types required floating-point or integer value types vectors"); assert(x.length() == y.length()); typename vecType::bool_type Result(vecType::null); for(typename vecType::size_type i = 0; i < x.length(); ++i) Result[i] = x[i] > y[i]; return Result; } template class vecType> GLM_FUNC_QUALIFIER typename vecType::bool_type greaterThanEqual ( vecType const & x, vecType const & y ) { GLM_STATIC_ASSERT(detail::is_vector >::_YES, "Invalid template instantiation of 'greaterThanEqual', GLM vector types required"); GLM_STATIC_ASSERT(detail::is_bool::_NO, "Invalid template instantiation of 'greaterThanEqual', GLM vector types required floating-point or integer value types vectors"); assert(x.length() == y.length()); typename vecType::bool_type Result(vecType::null); for(typename vecType::size_type i = 0; i < x.length(); ++i) Result[i] = x[i] >= y[i]; return Result; } template class vecType> GLM_FUNC_QUALIFIER typename vecType::bool_type equal ( vecType const & x, vecType const & y ) { GLM_STATIC_ASSERT(detail::is_vector >::_YES, "Invalid template instantiation of 'equal', GLM vector types required"); assert(x.length() == y.length()); typename vecType::bool_type Result(vecType::null); for(typename vecType::size_type i = 0; i < x.length(); ++i) Result[i] = x[i] == y[i]; return Result; } template class vecType> GLM_FUNC_QUALIFIER typename vecType::bool_type notEqual ( vecType const & x, vecType const & y ) { GLM_STATIC_ASSERT(detail::is_vector >::_YES, "Invalid template instantiation of 'notEqual', GLM vector types required"); assert(x.length() == y.length()); typename vecType::bool_type Result(vecType::null); for(typename vecType::size_type i = 0; i < x.length(); ++i) Result[i] = x[i] != y[i]; return Result; } template

֗ui$4Zz}J Vqv_@\8`aI{HO!؆R(Eik/'KL 8:껀r g2{A![~~!Juv2ʭ3x[9Th6# X-`xɸeFE._:pwExp `㤧e?T&!lZ0YcW5TZOT&kI͗\J HEF"R+K] ]-Zҷl[̾A@B(}Y vwVGpT JwsǩN"pxhGt@":D NXCdo v/9@`U+l6 8&|˫ Zz{h |U UHSf\egcoy:M;P!o/s^?SlI$jX0K wwLc yj| uK못7 R$mzx|`S,9H؂҂Qg04]vn|m.fDFZm۶kjo۾mUrR4E( :߱2ūq[!OhǴ%#P{eGZ}J=M`fDw^סtApe$2GE9wãOHhNYԸ+Gr{L}8 lgVaGɐKx8f&wW‹"Dc@f 2'f١d{[-ChlP43Gt>N6GHfnc0>(Ca.95kގ2F@YFx@ f9lD+ ?ٕ?MlY!IV{P46ЯٱXJON|}/?k>n,;ρ$4#c^7W3(Rj pA@f4A1٭Lø%$@ȹ <gN#qK] nA(kG5R2|vuuu6 3W˺>sYl˺m[6w2D~,}쪖F?w fʖ'\O|5d:;48BH$:S _mSN֧F"!`s[Gi^O¶D״bgunIR[A*\*! ) z=]ނ؈*$u!E9Ρ{"sܖJ50ڜ6е )Sb J:*mcSr>\`eiv 1/lfPi5&ot~޲Az[o,LPFa땔?y@M9V{{ôȉ8cE|ܹbtɁe0IdJ(.7 NRtO9tpE.?C΢_9i~ړqX ɲKŽ599IXJ@eU@TPdBA} enxU>GAµMSpS@_udIR{%y @$)Wn ˶,*\qS;RBH\@ f_[G2TU0 xl5Yԥ̖֍A?ƢqvaqxlV%NMՖ R0_b;f7h!3?nrN4iTʲ\vݮ\.<=SӿAW)5J 7ik셥?{Iᑉ V$k56΁0~cf$e*6xGmK(b4-dBvp?H  (Z՘yWDؑj%Ly-u~.?.eӵ)Q@؏mu{q?u_Adžu>]i Ruz,½*PZ+Fwaċl# :h3bZH%G9eX,#[٩]oU\d]{-XN[ݾÓ>1*mVv1>b S9vıh6 jۍEm u28[AI%q}q%Z>O,!fKyl/ANAӆ[~ˋ?S'IfP(7 ,`Oqy1ze oE?YHpp{J;$BV`9ATр#-<}X@~T$'ͅ&BʐRTe䞋"pvh:{˙h41CW9-Pf=o#v,f9ayV󢧏pՃ{'`z1)QĹP#H>{:G))K2Rjٔ@s;B1pM0p\D)!)w?lbW6ӊ%kNL RNyr.2/4 Go` jjWFK_q Y1K؍Kq:%`!Ma,)mH mx#zII>Xo)ɦ~V9֞RTRJY,?nnޮ]~^eNyN)yض|~}LR>qPWA :U cz "W Gw`60ɓ0ƣ B00LQۭ_ Zz`r DI b>FpJ.211~=YZK*VvKp" My =WD ;+˾dWAx_=WO *%t4i8i8Czyc!yQ(}v:׉ D ?zf U_i+&1J=)IJ̉Y"|MU !<ƭ@6QcbiN>L.7ٲ-ꂓq_^+z}iu!6TC˨ u`@mQVbg0!?`JŜSʙH0$F q@6nw5ɉ;Gԥh%@J䜓gTK]8x :T`Q2`(T e!*"NiC|ېIRVKxjCIp`o1Et& fp;ߋ5Ԇf_PDz6!fM ;f Myu.'L@6w?z+a[ R/2 + Hapκ'ghϾMQIi.:_~_eNe)]wm>~/yU~Q`uT3%Zv7/<, ӸDo<-:\j["SSHV_1r>ԴVl(G̓ͦxP=/ ]X 'lQlƀ\B–m7B;6G%j٪,hW񈌘V)nIDL'B>t4k[b{-Iaʹ='$3%[^v!F {1p0 'kٹbӂAtN,_W''YॕG*9L{J)<_.׷?ǏzK RiLۿ]irzV%3@ex Wڮ])ZZ[7xaO)P 1!f[ĀL71Iٽmt wV\ c={Oac]k|fJ.}u }߶-u'J)uZʹSr< A,u_3"P+C4r i UX q OjNfAnQF#d, !De&qsӸ$@#t":[[D2%ND'"mB |J>֧C%ݪ0Ew ~ D"fVO`!78m.n^A۰pP\1yЏaN>F&A(Q&l10$8B dS8& ¶733n,㞑2`\Ć^U'ݫ+HS߈,? `Nj|h*mުH+!w' +PXu:>?[L!r^tPq*fyi<$G 6rt_Z+1rEIɔJ.˼ܖ˵s@ӃT.B*C94'|b#WH&?edl!/'/԰4Yh3.??)4rPԜ5ZH~FjZ 'LM#ez ө^;4FbyC EkIDh]{0,d3L9L,SY2جa"V:Bm, "Mވ0 Ỉ.ˏ^ޖ:)Q&} m}y:K tLjT*PUXVfdn_" pI=pm`sG2eA%M4YkŊo/;IQ]^hsŖ۔X_5%C[ *$l"=B@Hx`Hl2`L̖>&E)ZxP@dp_摈 )[aujݵ2) .>oFKy6œN+=dk bmnx)Y¼$"TBӨ(0 A`70iWk@龻G! `UUpl{fTL!-KTSMP7@~]w_"0ШUD=2|~Q0r>qB9= A5TTI)%)'-2ǁ!Ta{Ω6Khբy!?tm J4K"cVE"LV\riYj\N[=, VZ-_^“sjGe.%y( x-Hse&$F0 ҚU'LsxhϭJnNm\ O spX)qT}+annQd=XσٝL@Kl!c,i_kqa2}j2N.!E4!"b)-bD9 bC?*-߸5gہ ' DBR 5)AHO #M1%}"ST PF`(3;5!.X;X:bfl,Ѯm (9D2QX.H_ׅ-ܭnŢF O-C(,]u98;Md@& ub$~vMt1T~uApS_EKp>R#= [i.%+yNM;l!$G薒wг14##-|ЃhdH<%V} P@$|?Tgf{)ՓztF*4N-(Z܌E= EIK_^놊F 7&RN4<\:MR攧l2M,znz7Ţ'˩k8l{|6Q,@K R jl`^ILENwwʷl!Ң' 5,02_ C3aX [RNG,/B[_Q*{Q.8 ÚCMCQ؛<)ve6%UGGe߃BI~oKP:dJI0/ߪѕʡg}IyT .l+y$y*9.KfIDZ gnA{?\ $P qWD ~M+q$} O`3dN0$6Uc w̝⁧_;ܟl'q BEj 2#TTgt@Ki#v ԎZ‡!:5hw$Teyrr4CJ4wٸ_ }$>yEmH ! T@G .q6AOgb~~i;s!踟BβE UTc(C .Ls#ʱ^g~(BBX,^s\.Ӽ`,]!6B&痗Ra<#'vJLk $4M4ab%5ɷ.0 쩫VxQB2:KOSq,<{2ȳ.=vZ VW*p/ưr1`2 ۔UF,"5,-3Ez`Xpz%፵óCNߍS{ΐ[U0 Hkk! 6[LA1B<<>0: ݆l!)-fV@ op*za{&49x$p73tN꩎&եVvHA> XD1/O$n@"yQ&K/Kx|< Ƿ4G $J}yYrL%\EҾJ46*qP<m)2-˲\.u\<#Cl1_H2e\/,((!Zw e9L)tlۺxu=q_ǶjC,]^b6 DT"Qmq+~8Š줡0L5{LD<l2o?\T#{ݙ挈LXCrPpU?Z ј@opH-pRZ$C&IK)RT4i*e*eJKi/LR橔JN9!~B@KFl2~3DZ_?)e.ӲN1orT i}=ɱ3QH bI>r*RYĖ`^zR֣US9F :dP`C Kij%0hϳ( 8{&.i@IT)M&: LH3Q}m} u߾N[ŃC>cc^-~m'q*cK)%&G (EJm X IDAToR~{dtass|8R[靑BZG3- Hm&uA"arp MM"ͫX իk}.:ݷuݷw` 8B_]h&!dU ZRJձ*D)Ã*n8|>w-xޘ0m8C;t \{ox|==;ibǼNL9@t_|N'Tg C|!wCGJnv#yDi>7lf4F\qo4 JP>p$ 0[YkWS[{PHWL8 wα4tJ86-H/0fSvN|2/k4;($lۘi1 6Ǒ@tiEqGH|S VK= <|`FtC2VifGk7]sk8Eu5vۚfN5@6aȕR(Ɓh EaVP-X?#'{?cub?+n! B0GX%э&N9D1nj>*ԋ6팙)Bہ`yplGS3) Z&Vp>=hz&S3XUY  SG .620dԳN@gGk䉀M5m;g\Gt۩@/Ϙۀ DpƟ]c;\Zd- H'i0Oz 6|i4ƓfLA3{Fl 6/ yߴ8)2Z/B) Y,˒*˴e^m S:-K\&M vTJ*ʍَozuߏe^:婤R(gR|3XSJ9mrUZ0q 0Z*g Wx6P"(cdlyZAH{5o2Ҥ9kd8>SŦv8 /rh(ccl\asI%7O=,)Y5x=Ef88h !=t<)Qtb' 6c3.e Z”.-= \:.("Uw[?mmlMӞsI)hbl?զys.|=[n^;~UTP!V;UEŋYbo6#zKNp[PB" WDp/('(Ζ}"-b(KJ.%M QI"je>փyg Z@ ߾׸~j\ ݗ-, 1X6<Y{Q3+hU#ߺ\3| BNhu_jSb@R s3\>yz"/w/x'gkZXxعO`=g"!yR]F~)  # a3NO5H؅ S^7CE 74wYI[,u^yI%3@9\ 3ϏchA2~_sFc@Q}rk>mPpyz]⋐ 5utV*%OSYiGFa f_Q^0O2^͚ݥVgx)<ύ܄u )^n/3Agv{uiz'2}a8?eHT 8W i!]OcjCIX-F*[/ݓrǙۅy/Wƃ伣a&C!̔p! <&T;` 5Ʃ|܄AMkQ} P#̦eY.edC!&GV4'}AΉ(,ȶ EC ZH#ꃏN%J u_q2/8+&0 \M\EX[#-.u., ! #zǾnXׯq_n"Rutasj6"_i[p jn $P΃cacjfDMOc+z4qnqA%qbCu6J 4Ix'}aܠxCVpIy*ftMy'8Z֗KdϠmsM,09yRфO I/]$UP6ϖ;2KgIZiYWؕFOw &п,ƕ4HT" rЖRJǾqXh󋡋Q#5rc|qL6B%\<SeuO5 @q-8(H#ry{֡5" C  e|9Rb 2x6?'nP|ѝfegҹmy;f)DC% =F b$fq'l6`3c!J_SJXBP4rY*/"3xP4Oqag"hS^>mQkr)+^V+o,+*";.QEFF&x VXax/1G@tc_0N]} "}NL0!eℍ%L")bL)v뾯ضu>*W%w1u11 D>F%a*ҢZ;њ4FZbuvǠ';*<bHYר@c g6@{SK~߮m.H z<WqYzPbSMXǖleL(- 0 _ 'b]gT+mH|:5V UgEQ AD7`M ;ptxZ ^~0T-&q;f/t-:8H rYtSn)WѴ(yo3( 2eFP @!ȈIW8,g-Oy3$D:tOY!E G#5Mw9\14/y*2 \4i*\(9)̵h{ԑTݫYж%o{񸯏uw=rJP9QyUYVG{>&:!rI#bG~ȩ AvGI80Ģn!S"G"I )2u.%甉z`FTz<>u۶~n]}M\둍L/ ѵ0" r`.h`Qbݯհytc`w n6b1 1c ㋱BH1aeg2AL!ǶEYq.;85JQ+`E4-M)/ez_﷟orʒSBAضq~|NKNYܵZj~5ُW#<Ӓ*dD'`dBbjP;D]4Kٍ$$IT pm^<句k J 8蔙*|(E.6b2dڼ|󠕦*Y/> ~ày~*^:,H)a h6O[X! oe*z%/B0#/7{(6cm?Qi}j !U4?M:*V@SA{Ĝ>IO\X+]iyt= P1,NKPM%s-17:Z)B 0J};%-ĺߥ:&ݓ£@sΚnOD\S2J-zzp S pZ{3ثK<8.^@g]w S}Cx-Jԟ{"L$/q< }EJ\9ȬC/uQw:84( J!<[ۍ4'&֕8Xir2A ûx0yI'"N[/HZzq|ݿc6fF 甒m Py=q_ vDr y F1:E$ d똼^Q>%@_o k pJ*SS=31i`ٹnDZ,4MAKɶJ8~޿>>?~}ׯ_>~|~|uZF=ދ!Uu`;h>ZAS uU=6Մ Aek8ە8s_ӌ95pRyIEȮGFlQQZlTFZVlIyZ۴\~\/o4\Pj=qK*~۾c0F[ĴvZVJ{  T_E&ajH\9m,at ᤷ-8c\&(d2yY^.sBTonFE`CNdix cAbJ(7kR$g%J@g>er) e"%9IJ vX%jFU( 4<`ؔKi"nM5A ob^GlO-I"sOMBrn7FNQcJSkS2OۀTk˥ PdtoHA۴ϷƳl?ᣡHӿG8Cuw(n~3Kt!}v_Y%_FF5@!lKDLq0 6#)WWU4 1hnID@!U]uVǾ|__}VLIrJHC^qߎzLHέuGwܿ:>| [Ox&4rEu/9Xvlъ& .AVS~;Yy,!Ihb218S;IPgG ގ JFLeZi1V2µ*o}~w:T. {c0n5MB =_??n9`]\dSA 8SvֵOOK%yδd4GGЀ;?E~~{4,y~V6IHd`H5|SSSF(B(1qN*5Tze"tR)Ɛe;ό6A ő,@'UA:^0O 䄞F 'Z5ËHQ+13SXQB,Lߥ ks p}hܾtQP0?!.siO Fi=ҥ`~_C=9$5R; }>掣+xB eO1B߹㝯ba'x5=_>}F!)8>C꣯5qq,m4@a0 - ʉ9Z^L4˲lv컪RJ% qq_J@X؎-;.x \$wcvAqW:Ԫ#.'Mڼ³NXY"Wx.#Ɲq֣޷xnr,˲,4O1__~?zx<*;ќ ]㰃+;u櫙Pۏ5&]6CJa&V3 sYڔ{sCo&V {Yʹs0l5  C||AcCP_rY гdHD(ㄤJ#r[BV焹P.)Og  8 ̐5[0 R\%OK.sSOr1u+O@Y{kD\w-# MOyBqP^A>t h4A_҄,z{]/m. Ju9}&Jߕ!92qxӪjD/I$O!ҫ=!:p+$\{?I Z(VʔsRd_M)#A߳?^Kά3> G?wojslWj6fNclF%$&)t`0>XyqHWAgHS O'nxS 6xDCc}(0V̬6Iq>N@(kF( &uUH쯌2bBbKVhch et82.\r N!9: į~൐+sc-P=C.6|Z s? >k(Y}*htE<4;5=Bp zVaf OYQaRl'zD皌$ĜR:ߒJ}̈1X@Dfѭql5?4e 8e@P9}!%ul~oG04 Ʋ@ rLм'QVZbE<[Vy}>v^oz^.r)L\u}߿_u:ZƲ veyrM차(I-(CiZ:eF{VTC0" R+Q)v*?nO/Or|SިcSk޾j`ڔsf9\0zZFSE̱ZkU!WCe_Xy[ACOs|p{V31}aw"]/Ȃy.u^01_{C%<(F f0#Ѣ,SQ@_"ۈ,[ι+^Qym徱 Ns4hi<=Z߳7"mtfeAƺ6c_ <)&|w۵XDF&ٔϨ5$D*lB4C/|/"-Ʋ]i㓪Gp7|Vb"Aҁ8 \JzA\OJ=GݦmJ% Qv_~yNT'80A*}a9PVB=B^5{HbAg?~}<8Q.u=jҩ>0d74hZ p&ƻȞ]Ӽ7z]1MMɐPM}$hGiM}f(Z+CG#+7Q{QU13l[}D+JUPcVeB"zUmf做6V{-C{|E#Jܘ:}Hsk P5I|]{*t:Kr\no:9am4J(8cߎcg>XXqTYKHx,+?Op  TTB^cg"eaشXf 0#X{N6 }"v 1x[$T=Ҍo(0}a3(ח%s|4uU@+nT}ݴ\s1rpgԩY#-CAGΈpP_w_IN_BDbnP[Z>UMɖ $uj<^Ykg;]'" 1W_E?WOR:i4x-Z c89oo%I& nm]TpXS1ۀs]sǵ6dWz{&) |?Jz2tlawB&!Ѷ-mJa!hVȗoŽEW IA-3FL,k/!wt){\XQ[?}5*q>]zilHtNmp|mc0LqW ͠>ʾ`bM=zڿ|}}|<_|=o|ߏߏǟzKhBĚpxt?~X")#`>r39/ 6pq(fHV$J*JDh$rq'HN/L:!/3fd*0 ykYPTyÙ0"cȍ'",L@@";gN'h x6Qt |lG2gS8ZV}US]?PAP=ʯ.bEQ$W1g `_p4@bA`jb¼Rҋ˼[fnt$#Wz(firkyĤ[ouV^?$LJ( ͯvBC L0hqHOGF"L ۀ!N Hh<:`=Zib8uJr㿿ϟ߿xhI TJ̿QkN;{f\.1DDPY7e)x''&&\O침#nΖORHi\₄Xw9.32LqFT~ &x煉.|T E!crhǐEu9'Wmmu3`ݪPzqQI]%tOqu JfT *s/ j)|J>&N:< `FuEop_%U2`nlTqyQnj(*b|_wbX<<ϣpf@0z=oēk#{Tz !i;hO=_z [+TĖ2JY>ʺ  W@BlJZdYL!;t) [o$PD]9hW$gWws^_ K{\ͣLDFBGEEe" (=*<͎aW-0t+rYxV\1 0`CS0rXf^Ϡ:m# >m,KR+Q$b>tge\m3&Ae; nR m=)u汑T" ]a=DᰙQ;[?ur߿m&TLXA*M|=_((]j٘DL*JEE8ufD11.6 OJǙkWi(NjiIs""/r< J Ú@8t$5`1x߁pZ?PwL=)9' SNK+s s{kNh^c{yyyBk:`"F >euќWAļ-Ԗ|pZ~{"P~Q὚7U_:b0q$ `N%t{0b 5\~ߡNe5 @ 'nPpO\ЦXLxZ,izh7l.­lE2`i2Gs 9ɖ%,NNƑnJWrHSj?#%"\HIXڧrW֕7:%(х%$(~:!4[&hDI xv<GE'!~d ˍe'-D֘Z}Co>EJv9mlZkg鸽Di|߿?8_lA@D0 ISOqI"xiiy1˕F$ p"kCA}Rxlv6=A^pr'=,`,{ m^ZA[?zlY덚8lޏq6`!(8>U,1KÒ>yrVU mQ4 ¥Fkڻy*3e6'Y?W%AȼI$SP)i-6OCߪ#+|P(h X6A#ZDK+KNXQ37mM[vyyb;5DGXr$w R#d5%F@Tq_?.{Zad Aޅ\ d(SC8e1Mk{bFb* QEZ@CM[G п\x?%48嚍Y1~`ie =*=C0}?r 莋U]8|'Y 2"y_V*(du}qɳ$"5IzؿI[7uqg;֑Fm۶mb]u4TCr%x29& #*o֞٧N{/&8hjKV! IDAT|.4ij|x(Zl#* .0V?~~>)# RbhīŋB%mmИM5^~:VvWeFK]wiCMLn1SK)LH˩]O~T%QrKh>r "^Hǚ@ocPwUg{>_x<轃*3m۶~odWXC0lk^/k:{w~BrC&R.\b^|Aօ9Sfꂩ*^ U(X~ YxIOYbwhzlWx>~?y6ۋoEUAAz2O7JbMz~k*lJjJj1b3 ?(z4Mٜ`p2EddZT|s}TK[O%cn i)"y2 aX2>ei"a 0B,A'Ͷ]zIȅbBʕnqZHT~~qL ZD[N"Oɿ]kHJ4.G)\~.f>&g9aUco:($ף~׺mu۾}m/D*|=qId$ \*yw]]jٖ,ZR^c?J,\yK qh2U5,h(E,M!c|"ARI"NIįw1X;ϩ<HvOeO#&LfA ![ka~]#u=4Z+҆PznߑhНݶQYՔDa,Ʉ v^>yr]#s)T/ܻ|X/ʐzAјul -Y2:/z뢡k/ϤFsه;iFEī,*kHeko1ٿUb>(ܚ2|ohǒTmq CeDI;z+ -a%A*aS[rG K<nRx~?<8U}S)OW1xd"N s7<S~ ڌ9@LVxXc̴o219GT!8VF;B<+7n~s{RHE|3_%ydR*[X ES9.l7j{5?^Sv6ssuevd$Aœej^Pg8CgA=}4OMU$0C;JLs"]׮fߜs-9thch{˻B*VEk) vt]7GBA8at3ge"=zn<^gi!A4-EW"DUy};-fmB~쟁HПnm4ZX'*sg4S'̮c,: A9|O~R-po~}m"|/j~\b@>~ K Ʒz3t5yN/6嬐UВwg=4Ȳ4 H$ &{V/ FP$8h,(t1_#W "v}xty??´nuFZс}'SjG%'WQӨ2?l~<FkrQJl¼2w78%EPTX20 e<"\!i^J֎x֭B*z;y|Calp5 T D fsn (:Z0YVKAE "P9 NtF;_l%3~SCP>^R6v ;ͮ=jDq "!D3,.^"4>%P0]}#Dl! VeR79|(jWh ]5LIPyJ#+@l&4FSގ~H%Db#l*2-l0s͔8$@yVMCd ]St$.k"Xtf}`*(MWf~׾mLZlHTFuǚVSM7cJ $<M 42];wm<$~zEOJ Q=J5lZ"[NDW^ 9`ibW ` ]LQ pT5DVXJ XR^Dllh9=uɉ@NW%@!%O4`դB*RdYr]@8ƴJVNULe\0S\gicV.QKz$S /LLLS22Id̸ 0̸>4Y!:;1HF2.x9:AT'zСt$GI?2QTOOO/gM{@!E w42~xJF&4WUu>;џ a:vl#܄fQNxXYbyuq{ױ{-ڥul=@&8A D6@D #niB A'0 K2_ZZr}M:t?D=@QMR7qV Rwn+mfCN#8kZd峧K )oua xcɴTS둅ɊꍆK۽&R 8g`犸m;ѭN\WO$DҼP!̍˴u&qf_#fv$>f' c.4L17bDG'BF.DPқ@S`Zt/ 2 IlTGӕh^aL0\3#eW#T4\8JPߘYl>_}qoޫ}?yk6,jxu=mt}RffdEQ 7d=@]_Y-0p}+1?<BP:?iADMz#Zo^ka$S7;[Org\ɌYuQP#-Ҹz X^FFf=\#FFx! V"(D{Z[{Wހ+EHif4vқI s$'8,c-y_Ey#:D-q XyZw]<0G8 D;0gYr],U H!>?XpF DLO1TLZ<=tC#GNWX!պ 'Uw"YՏ8\{Ca^! XХ;μ3\nšBeFtȻv,x$g[,lˣIv"H!DfLFB`U$lZ~%SBf}tU:@żk!۲G4eXL,‡KeF$̰2hf-Q]Z҅/! ?Vxf.[>h.p r~ A*q""]b<*FEU]vQB = 0m36XB"h^$@q;UKɌ.V}/{.uC8_( mׯ_]L!^xMkdDV] 4LUȊ%$}(`fD ̈́ԮQ)@mXAaϞD 4>\{J;tBj1% RW pR'-ۉfy\sx<<ДrL G`.L7nDC2 Jl @5th<~(\ @C3op=OzSDjw! -opr.'9dRZc `r6⚫ڗA RHi2G~T}_:!bB{n]mSW d4?Vx&t|"'HSWHhY͊뙨0U\%4bCҹ}^.1ݾ  A|,Zy|8ÂDdbXSjL"<4s/=u,uNn>YG>zA$0|0@j|K@@rCɗn}R\]U@TF7^ Pf@vsd臊 O'\5t?X%]b>4* ( "0 In]V:-#dF Q ɖ~aJ0`9N.w&Öӧiv"'}9¨NׯfT2iѺp)*!Z_L<" lccK"4ĆIViF6xw$HJ{xΘZ5pz/)05]vh֎A&@K '2RW<QT[zB?5,qu3O2]xc/gu#`K˚#ɔF+ٗ<q,ys?̈9O(c.:K7ludJ'%R`!rQ3NkB6 Z_ҦPA+a!T:YЇȲ\  8 'և~9-5!!' 1婪v DHz!Uscpu`4K#`!_?H:4'"e/o 2'J{ qݎ*\X?[|3%~pϷ-f E@ uq{SĜc6',#b"!R`@WfOȲ7L@h(MU,AkҚ։:b **({6Րj0ub "_[[-Vm;ͮR߫Y)x %-[uKG0Ӂ hbt> 06kMPKK JAF7C]ռ®N*,=@@2(T=Ev( !*őV;,qm?*@2GXPT@ ТbϨ={,&DĚsh_%-z6C<0Al. 0 WB哈3 4 8Q+ 5 waD{HO .q٘6J@]6hda2+lHMDXS1F,LL"ez[[x%,K(\ko~W;OB8^Z~۶Z /|,)]#s5Wu["nrِN$Ȅeu TzڒLL4椢}tANBK'nZXU!Y|^%[L ɫD3ntf3ׂ3onN5Q, [碘CV " dzXfgc^ )8 TKa"&_LuǰժJ@5BfD"/Z{뭝4>ΓLUK IDATVai(`K4/ }RQB<1u}30&R2҂I &@c\S1̿t놲]Dh X쀠M]E)ؗFe^p X~մi\OMwͳkR8R܈` oU>l:" `U\pfH'2sGFMBr'#{,ֱ4^T/E#0c2mHc50}P~ ub7c^:{Cz.+B$4SqFVGQA[Va.T wN1U[i&?%&⇚U XYyJoZN}rQ8\k}9ﰶ0!LNvI#X\jVLmhG'W#\8cdIiL|2d]CԞاDwffʭp %CouLm%GcϷڀ̀!hld"RֿIvZecޘ+ٓ #"bUժ>Q8 7޻p)܅يb"bfJ/{{)s)E-Cl( ~?![=CUK)?_m߷Z 3 }#=Ē`-xԴ{ tѠ..#Ք$)JgkSfB^-ZԬUdtXtg9oل;B ` U::h*0$jR?Y6yo|믧G VcPXHےU BŚl 6?>S槜"ʸ*R*ph;04RslJ魝q^_/z"2nut9+Y"j: 9:ۧ&ބ,V2h{`WC3!eĄTjm}R*Ԛ3DP罯#^r0m$Qs2K+)Iz +PO׈bs&z+l!DнlW~z~ fȐ(7QOƩLUMzkg;Oi0fj+@弉O٤]뀓喏XBXA H/fxcH9ʛz讓@Dn4=eVD*cL.X2nҜ$yYuWӮ xѴ0wR`.}D\qHl-W79 ΖUBJ,X1:wQ.آT{t"xGRYR9k_Uf`{z̗"^u~IW;OUe}__?{"BAQo)LBg 7"Р3Oal(5H36c!Ȅ^RkHv)UAF9SoL_lfa) A)UJf1'5H @`2,N]DJzLJ]ڀ̅{snG"YS&f)2pEo&^+=͈4\̯)lĞ̅98Q  "ΤO$ՂrS]RZaa 3U^l @kH A3D6FKRkz{ŭc9zl JvT!sIF˦h:C ?i4<-AkqVeEPVDg sdEVeE X@TG&Q2.3iy2fn5 ]b!o(x)ǍD/TSH v\Tczq m5 xx*`E)KN/=XQf^[+^[q)2%El1aН׻ |g'^!r@ ժaDh7D1% IBGVB?,lT܄9n0ֶ}x?~.Sǐ*/-pG\E5ה)55(Jwm$ KO1^r[wQI?_|?&B췘ExC P,ë|'3W7݁oN俹 CS Q{/MEzXLG%T4.BҠwPL N_-jZVTq}0y fϺI) '!sQ|AC_=_]6wDzNy*JFݍ *1rE[̈́j1BA vQoibT169侥6[7IP_!AAؘ \B#vUipkZb%PL_zR=TYx nHF1oĕmj^s뜇F*ˤ[inb?zکg\x$ǵàtE8K2 ڷ}K=UZ$.;GR̜̓yϭ tzw{qN6׍E)8Ǔ'\jddp&xZ*\"lYti JLuuo^r 5: fcC0 ,VI-3;LV󲍅pyNH@C+C4&ÛቀgiXsFP P|.ك8;`0]5Emٔ ]0kc dÖeD`Y,hԩ__q{۶Z+sI;ձ @`EOkm]*L[Wb'goҚ.M ItFʸF0E;*1/v qkG" Su۶R+#88H\NT"1"j6":3AM"y/s,եBv?GGrns%VS؃-H P+j=rAf REވw*w._~mmWZm PK-&iipYА7e,/qߙ{4WlCy/c*Dq_Z{oVo[|m P),A ;R~vvu ^_y4?h{+x3DFDPDD0Vm$Ք"-P{*p~V:lU}}ϯ/3H;NiOyyJa65{PݲR J$Vq1&|^pxvWv}!5DnZI"9 $/6Ati5WJL L$jP)\*Kh h|o5şa qdbO |/^P>=l_=Zͦ-=Kw0rm~#SU֢Wrt{S2D+ZtZZVK-բFK)1%UhP7M{'Mک83i?T\Q<. ɚL.stT,XCfWnI uLsl ܦ?(i^ݩzN2# (\'0sw"Qw@W IDAT}4,X\ s8lt;05Io͔?CF=af,`g"Frb' )%H ĊnS!7aa.RzE1; DuI% OREʮ L'M4\iItZ \ .Ac}qջ֍JDo;Fn$[ǂ%RKy lIɞVr%D,|g{>}߷m]eYB}kuqw!zM7ya 4͔ qQf%-Rr)<)#}:BC(sK016@8իQw 葜:yF`n6mW\{$k4N= c"͇{\1bŸuJ/i_EeMr1W_]JD٤j:9GOFÕΦ_9!,˲m_rۖۺBp03& 70?3Pq)h{TdƧ^nvy* Ȗ^G5U^( $ E9WۺJ.<ɝ q]}}_<H:ϒ@$|yCT0##RHWb̈́™XZó>nUSDsQFk#(k\@,ZT glZ% @)A( C5~dn U'b T+%pŽGjV:a;LhmgaO*@.`Zm)q> ?Uwʨ3 ƶ9Zj痛,)k.?{IysOتMRh#+`+\쪮* jC1 Fs>zC!xCt zW Drfy4ڲ͌4Y$;1٘\Obd&B(HJY6cC H'D.B 1z{b+2Uꗰ@@& 4"Q)04@͚CjoDEDDJ!km;o#7lA'te5-a#8/v"izɤ7fF+ RR%֑[QW(tcLD6!΢rȢjm'8s!/X~{ F 3BF,ӟW텄:. jV8js2qb!\r2T0x<>y|?.ccѦ 6K=TM1:lT.D3| uԈVx !ڠL)%N!b1G÷nzGC˷fdtei{* 3)Zڎc?t{WXf*O|:q`r}-{Xor_8SJ?*7^[9k/Μ H")Tܬ=b͗;_7c\uno}[5n벮q 3*2&`.6y'*#ȱ_²Li.WmR "f ҅u?sNp?>ip1 Sō dKu[}%8G%'v"!.۶o!|"8K L} ѹzUɀNPuv"PV]5gŰh_$Z2jAlIW6"XmT22F'Z(SK 5ُ8e5QP3lWJMBr ]X͠g/ #-s]>x{+\ *7!dԪԉ/5^!E]梹ș%%^@=-ʸ+7PO}-: ItE:8ʫzAUD59C/qYB1.1.1qYeZ e-NNj&sEA)XKR\ FHV? 5D īl0K\LRnt(rteHɖ Jx<<޿onK5諲̚E٩cfUf%uD ;ےƚFL_!]4yT J9[R2?c̓VeD&ttn:, hD"uJFHS?eRKտזu;.E C5)Zz`[U?#tLΑŇǩ>}Yߖ\`vHQ8E Nv#kFPVsJD R$s1gtByC1CS&^  vmw#Uh^ө ӭ@B1CbpH(8xlqߏyja8D/[ zG=@sVMMnJ2#-0H.0k"1EN2 ϫZX4DQMLFK$J(-)GTǪ\qDF7<@՗F\޳aRW ){׸l!nqòۤ2]^`0fy:=WWɄ5Dᙊ?p=!ZI`%eYeu[m[m]%o*X2C%Ӂc|jT6!Fvz;W >({[UПbH/ ~JY]2H%U zXΦ7.Rp)\\)svUxijlҠ i;x}[o ڸV^7c!٫KL,m&+-m$\P^`v4Co)q {bS;F܄FtgV:TTFfͮ.מSN R 51gmU/"UYD,ȗTgXq^B$Y# 6ܥ\и}:Zd&jT/8әLqa=/bt6Ws䜳s;5.2=7DZ/>mژP R ]S0FHq@ѐF,:JIpKM"!eɤ?3AADULy- ]e [\qy}}5aN 5$?e?·{8gN PD%SOw޻}\²u,.qY@!%.mom,KޛzLvd$-6QՔ2[B\-UP[.KJ׭UuyiLOqqgJg2}izդ*vf4c)0wlٲv۶DTT]mmJ:j8ߏq48 ~ _7,. x[6-RIucZ,)˙#a^ۄI_5fQͪ(PI;.g$qkQHjvC1d:tF=@OW5%W*0g}Xc\ޗa٧NA;#ht;]ݗ-Zhn`F@TRr:3zTv^(&0y@/+(s8&Μ F]OnlsZCމ˲,]۶mۺ-k rg~zeAcK ΑƈqeŅƜ!@;н:5O:iXޚkj g 8 Nh_Pvm+4w!Ӡǭ|_x%Ȇ&hKJ*.kɥԡ̓s%hWwag֘yO)9,1 Jq<ﯯ|y `@a ۶ޖ-#=27 B)Ef\E2n&QCZ,.&qT?&*KM .=E ALFѾCsaڃғ 6Z4^iVԑl9# .)f4Kqpa ˾lmo}{ݗV{)g./vnÁGS ,,6u?dP8:{&O_ o-> Xzf䮗-$siƠ^ڟa"&v5u&Vl뺮ۺ[w枃dIg&D vz3MMMUCT%N2i]hq/_nzip&a "DmG}v -LFDa7:vcAL0.qI|I_ޠ˺`/$fɌ\9gM()e)KK"⌹:X:lc+:XTq&Acߖ띡\Eq=G ľ+1ϒdEt W!(2 O\^lf*E&sl/~nm@PZ׺6) "Zd)VR|?{][v =%u9eɱ/Dն'UDQ!̌a@@~!OCDOLZI2+d^:"vTXE ǼEEAe Z~C7=> m" BcRUw]`]X}ns?s?mYqBXF0 ?^3L5GT!Bi6U2WzӪC ˺}{~˲.!fdii N{4i^ $R̹O3:TlR*0Fxh`q .[sZO}}}}?q<ϔrR\qe{F()HI8L_~<q&⑝:ns}'JPC bA~ZKa4U$ q!*T%ya>Ȉ94/Ծ&LQ ͆y#F@{n5{)}`CY3e7*N>b%FjYG{\}}Yo!n>,GbO]m2?3]BV=ve UrӚ@վ4Q/B+nusL=@֯8DŚaDTwqid3sBM뿮]mۺm۶˺,K1xo`?K,υ UJ:)^SvBT `?ºp`btN l;UCy@u0-ZNY@[($v)T+ Ĭշ>E\MK<-Gm* ),,Sx4$ ? TfC),7RL:kStaCE,0%b*y&+RP/N/9#S:#vqW^&(KJ?d(U{CB3$~iis.\Nt-u\T2K2|#U=tJؚ zj{Hȁ.J!z"@v䌌`J* 4ᔔRJem}`e9붝9)%S\X-ZEDn ewy5&ʹ }:-y#+b"Da7W/`_\WA$Xs0'XgS3 :@Wd1vĸ:߶m_mVK߈ZD3d3gT)C^ı0bRKf 5컿η7W iӟrzɠ^1:e^0e ^as]1P'OH\HXZ}Lx=sJv+J\J{BW<H@TDRtx>rJ*RypU{ &U;0^/IXұqc `B u I \hu[^ջjª'¶|-ςՋRB!&r 9t@sc: A0_^\ B.V眭7PPsKdQV0)y&䒳$M%h){V?yu}qlq뺬ncWT{uV{`ƜS3Ix*9Ϫmmk:#J NC2rPj78ǖ[J+'MS..\gN./R484b7;|ta ,oo?c$ڷ#sh0 @Ϡë'L@Ub%I(2XGD[󆸬~}|}|}~}~`ݪU2sJcB엚 IDAT4LQU'_<{jI%ԘqS9˫0CAKBfQP+p4=U@T xRA&(B+w²5*hC @ ZKI唒6fP{mHB(Y F+gGY3P -LZLh9Нzӹtȋ? _n&dc?6Im)%S1G(:Crā}ly۶1>D#dls0RaP bloy+DZ_Y#,%ImyIR܄]& ~yu2:sȏk["R[?{.e@j>i/Xezmmmۺ,T V|[/ !TMPC j{r-KxǷh1.:׳§]q.C`ڃr 7)إm@,05ɂg 5<)H yP"+ #g E$R>jsL w:^⤦@:BEZza=n*׷A}O .!jF,Ul[k b}Y 2c1A,ӫݎ@KќѨE՗|撊"(LJY}SxxR ՐNP*JTJ* BM#A!*@qS)gJ3=\z`g!f8)?~ۜbYUt y6fM/>n6_onoebXc^S^Ü5[뿞~(E?|8H35TSrrW:9C3ݗ_@SJ _'|BaTI_Z:ߖe۶}[o^-ۺe/"*y򞂧(Dc#bJXP|aݖ}y{_?G~eŸ1eJIޏĉ{#z bVaFޡ\z߫k?W~_8I-%q |.g`Ȫ ErN)L?1\Υ)fԽ+&"% 8|*•9g'EifkF(_Ԣx$ i"d֑ BYbСPdx>)hkz%j{Y=G0:2gt>xxϜD06dmPS&UFX&B΄@hՄuE$sxgd?3j=y<8ܞۺ>u=ۜ0.%gxybQWHܘJIR9D,|>ӴfFRVל y6-]cH*nk?5f;k5пo!J}E|: zz\Qs-L|a_ono?Zwe_}0n_ %bYƲcFTeNŪ-z|~~>v}]cVטumPYŘ7Oti ]15[ҙ88ȝ\B켏LN2s޵Kj|cJ).11qٖu_G><ͤJ?FPŨmmMDLmV$רKWyY F͇QfzSzSeɘ vP6"}vAN`^YG g^`^V s _>g{Xo~_-%^;p ys]+̊R9|xqxgɧAſ)jђ$g6SS_K? /d im_|ׯ|Uڬ9l˲om}N]ZK c9.ϒ*@fR΅~[޶6onP6GN˞]e:erzט6Չ3Ay|xvm E] A DtĀ lj)%8lL<&^)%<q<)YH\J.~3dܐ @KG554ZЋ &NHދ~1_=R+~t)q2\]e_ۺo~1ޟmYW4B>~_nC64ñ`v~7ڢYn~}~~~o.qV7\Tphm<`; =g_H:ϔRy itS6z0@K(J.#r>,qf[Hkڳue<Z^rUb˲,CzrDz-9 %aG qCR,gEY~w!xAUjR981ʱ̀OEȳ #ppB63I"Hm?MDK924KH58}_USIi^1~g᜷m[\vnnlaYC\iO&[ROER*gLy,r ,j:b [ %0^x"Pa B9? qp.˾n}۾ Y:}7✲Xip)9)%3@p>r-ooŅGvˎ?sA7wO:eNoeL)j* Ά cER eɪ$QM;澔F@-%3|geH2r(ʮj ,>.Ȯ(f^cK󓁪 )\¥i( ?ڄHvN@\)38Fg*yU<6#â&"j%>ՍG()+΋}5 :DG,Q7Ι{qܳ__XF`R* fEu%]~d<mYc?Nz\ r {.:v:NQv_ #Aj4Ugt4ܹ+z[m__oo۾mk\L?nڭ!K# !#9 Q ~e{iRе>F5 <0p|ǑڷsE" GX Ğ=z$4e@rTʨcUoڳ8ǗRхChHoD :P&/ӵw@:$##ȟ#r)xpora`f֤Y2r3sg#“D6<%,[\e޷mm !v~jW+~,f Wș˙qHqyenĔsYh @yy#We#/M6}٫S0Г6wLq~LgыȢAء?I6@%jX@]8gq 8.Һٺ1eNcVz˕iSm2q.CE*#di v3bC@HE_3Fmfr+.t=I `퓒KɪLL*gQҡEdf =#`RZdΉ2h$JCb R&ZU3.<A-׌Mؕ2qobr(E$ yK.-S_VEb>. 9BƦ8j3|Tv'bAFym{|nxYy%[@&A q^O »/]}6ZQq"%Dz6yy˽FU@8sgfB6{o8Ar ٱ_̖5;85)Nke d ϡp?GlHA-cĨ?0WЍY޵19&"`Nr񝾾w>4/L3 Q@{pwZr:\hupJtt52*?;]OcoO ʼnQgö+CHl /K\Jo۲qYCյs ?V:Z%mQH.Ŕ?#Y]]ag>|<%Obf+/+W z`mY!@_̗Ixh}v57Dt=aèر. ;qD1nox}H!;`@ڋșibLڊ+o4/Im•%ԅБ8ߎivvtc+.Ѻ$|1-33;oe1(0w|XBH![bXusJzܴF,is!eYyZ @q&䶡vB/w IPؑ mDX9pGy&#C_)/Q;M; [MsZ}XBr&!,U#ܴGm)'B&4m뙥"<י\JE bӓPrf1 );YA8NCrBP!V#EF)"Qˆ`mr=GX J9[? bvI\=<VGRHW3T(#G_* `-+6q9g*K(5kɒsT s8 kަ&C0m߼ߝ[-DHHANKU"_TЪh095dV7K1ZF%8S9 Pne1wD TY{0]@I=lOLKl$bUFMlʩnx8%s 2;%dSJLT1ΝPDc}vd>!P\wqmS1¦m,&;e-Zd [+D\*BYH2q~=?}h*\aVVt@3iMc E$$.. G\ΙR muLEѶs?2ZGW ӷ-e`ܔ(M_1#)iO*a-D{]v[no4?uݗuq9OL ڛCI`?))TR*9G9PN ,*D#o6ҞK`5o;%U|XCX~ C {+c "g>ƜV-yTkⲭv -l_WN8|Gv6bիQDqQ~h[3p𺞂)P/ivDgٻ|!(HKQ55h)XR l-Xj(!9Z9NNBWd"RRQC8NG>m +$  @Xt) vH&/6g v۶m gVДY ɭ\!fa"Ts![m~Y8F=9G=ӷ-E)Μx~}?}?g}nR49( IDATS"S=lbšۂ[l=@MY6O3f'Vl2Tȇ3BBs-*\RYB0Ue:&PjT0Iyf1,m s YU ;B 1:ȱ~~a+GUzQýӡs$B:YZ8`Zs V߶~5A@ jIzu\b8{/ ;T\],>XSB{*J)Rp)̜1 ~2Dl"^qUy,9H $ys:("&xG>BGŸ OJF;J)@`Ȏae㲸́ĊX71=8q@眈S-eC.f ,3ZbDy}$s14ToLRLj~͟癎3)ެR n3lD *Ҵԋ9/jJ?U&=cn LoNөv˼IPp=<?zRpXΪS!ZH\vdbD& Z e8%%E(j051O2d=)bzM%e7ƨɅgm?+$ Dj/ diڪv OPEǬ+UPf@"2]Ua_׿^sz Nw^.ށ<5bl^ - ,v+۾oK\쟙s<1eG-A e?P_M٪*bҮ|߯~w)in)] ԟtCH ( f W)FBf&e+-,fnjPT[( s3e†n2nz`niL/ճEKisDP {OGݳ[_?[QX`׻3+"0:mΡM#{JUTj7j}yoyJw9vnK{tH@DcyT6a&L0b;d힖UNbO9arbq-i͹jѠCH6f92S5̀PTK<dz%3(1s'9#C/~oo۶ߖm!HHRkXHyq>LYT\=ű/c<[?ffӨ*IGeYv3ȀHF3o%a\$cEĬ}sݎWt\p!3eɩIJ>3^ZjU/K$mO%6$CZeD׀ر#*|>@XD:B7#t?wݓ'CFVJ=}_ϯ?_o9ŐJi^ֶ֛eNO:z1DN{jwيyy6ڸ): g 4^eˠwq!-s 1"oAPbn}?>#aIXk @+?jZg.0msQ#B[bBܴ \?UJCR޷<_n}vg#'sGC\;bI@@`1-m)sLm??78?_|ϟ>Σ.9xpR#-;ZQ'Ӣ꿷^$=3SUn7|Cإl3EuR}  *ŔS̡-<ƵqThD rUS)u#"S vQJ*0B#ȏ H%z] TD% ELw%s[[+W0߹Q4P}v8B4JP01:Ѩ{*_g͹pa4Wzj;+V"S M uRN %κ R)B GRӍsa&~4S Ɉ1b3.?b|ԃL @R!Q@n~+y2SfvzFvc=6j]vs12JrɕS6 6'ҴUg+ i=둏4ںqFLh fb̼ Ec{}뭦dtr4JSSKs\nNK[~~~LR`L%#ܵa6@F^bTgT+g93TT/6+yxz_}rֱӛGԦb .!%]/g"cZ(,(SeoF0Eߔ6iySbAv\ ,|6(F =H-B:^_z"sj7FhZ%8g0$&s51 Ҟϲe;qtXjRh @6^Ȟ(n\)T`dơH{m+PoFT ŀ س{). H۞G~}=yƼy:8^Z8) iܼz̙yN`AZa$I쥏H|9Ic&/<%dQ5P!@frXE~B-Rf=_ϯ?Ͽ>^qzN|؇k:L6ԁՈ$8B= < *^W3!0#[G{eB4UAi݇ n{i=κ )BjSlԍ1RD-bϧ<} 9`yj&`z>[20YN_&/9pG1* :R;T U"RU$"U@P@>o%eC4V|aΝï&` ZV*'›0I`L Må9!f޸ NV -1T ɜ1 E[VPiCfiBΐ1z1%FTw%8=/M]%JT0ꂤ. p*a WI^V}XT{?4x(Ӊ>k04ja EߛFܸgGtZQVk9˙?D9Ź=Enu:tbM ea/̻wCҷ~TSJU 1m=<_bw:v"Z;Swő/# ,H?sf\Ĺ!\|z^_ϯ8&jSND'[kܫs!C1bUc(P4nxsh! oDL!})j_=BAkvmK_%X;fs7R[NmǾ[r)Mu%,&pVjQ@-Yeb!ep>J)q^ﯯ矯?>jsȉBz64˸3`bF%4Cʁ\$+$TȺHz/Dg܂7*d*@JNMTCLTcݴ>UQ+bYVڇSb) m[SJ1w<û"yZi!0hĹs9tI_?7)x?\̀ 4WB/F67U ? \ j"*RKn?? cy51=(qbiZ@8qϞg_0uO%RTznܛy}* wUeidA,l?cǎ9SJq|IK7@S|w׌ ׫ oչMh V]6z*3EhI} jp5pw]1aNpѹugxn`4H2;E6}iFEw vVKc?fٍ/y):-84z0ĥaf8Ҫp#1?dzW)#$ݑ5_ˑM] j#\D/k_,(}z}~}Ͽ>z󨭪d!yX1d0b.i&`倀 &JlI!y14agv8zp.rV.~F]܌뫗©x,W5s"uۏi5)ڊtҚOT)`Z[9j %Qb SI|"b3BL4E&!r9m[9b*P(35 Xz| D$tX3r/.euXg%uP@1RJ*A+9 տ (sxn{?o_y/} Fg]m}J ]a]ASN kJ0jE2" 3T[-DA7go ݖiߴu^&Zl[7s1p{ ]DVqVk pb.Yyzx}WyqH-͂]^`fM9븃%Z{iKY X2*(jh*~7vպ3EӨU+5w-"( ŁUTEVLI=Źbl)n)߯m9ǜg~ykB)r )c jJBt3Q③X[~=wtX;/xu`T`+ \C^OU%$@Ue#e_2VmWm0ۛnh hHM b!VO m|,ʽ/ u:9GN@U6 )0F&vYaĖ#쉞~ö+#f!ęv .^0k f ^@Z;r]~_< Y ^"P0ERP 0(ag. 5.!+ژ U't6zJ1d0ٴ.֤;gv v?6{1Rhg9N" x>|#-qT?o_=J9a_ן??|~}ޯ&D!F;L⢙a4 tu0"13r4oF9P( K\Σ7iN @s87_ωޖM(bL=qVZsGΰ͑f>kj<ʣ!aj: ]Vg1rL9YCk}$Viag/(nFw8r*ا+`bbDD ~g@пs DL㾧=m_ר)yt 3d< aFsyJoC`b4@㑇9HMH(~HEcppѽ*A"W=V6 % f U&5S7p>g(H]@S8p=lbLk@\e?@@8ΞAwem/L\"{ h0G Աs~,KrȣF ,Q&إVb*;Qv; Aaz<bȮ0n3 #YݯdfM-CV3ZRJ+gmH=Mߦ#MQ_m:T \"ښS6)~=E&* .^BPe䈏Lύ?~=#?---ƍCb{,tl,.oU}xI`wbv ߚfYm&͚wLh!x+Gt& !n@5JȄ@~͌pmy{G}KtG(?Pp$HhjuL{\-$^d]_ynܿ5)O*Q ck*MT 2cuqoIkٿ} }_x~kkj@! BȦ> LÀmWخ;_;g[ZEjS%RB.R ĕ63{"{EDXVKI>9 8s\<ۏ o PwQ54QiESZ>1l H^Ʀl!OTQPK NVxx8,̈́XIj)!cs8*NPO[L[{9Cnv]OzB#":$BLy۞Gz|Ƕ?LS1pB9t+Z|e7p<T4Ah PoȘ1(k`ը̒ӁH0if^@3H=Ah*}׫1ƔN׽~0nW,M=+E~@lC>o/4{R:OvwuY+}S SP15C54#1 ={îdh?qUTfh)zvPN('FSCFܳFx>ne8s!0U,ܳ14D,J"\54%-Uf 6&wz')&KՉY_*uv3 ֦֪brd4e4$!ģ 16 -zwkL#?;EڶspjU]ߨk;Hc ƪ`mV% AjL IDATBRu//|*)+s l;p JBв.97OUkb)WeV_hmZ"Vrf Au>to[`I/cmY/q!2M4x$HD[=c=m912DzDؔ\%tc=׶\]7e={jjAUU b: u{{p;Ձ(hs3ZC=) o}O[, 0v(~ 5T AdlS2f[&EFbք2AIjBSB"Ru F}4c}mq:++{;tDg vG_?c8~V՚䘟g9__?uQ9տCOvǐxOf[|?z1 ;:M\f&ajҤ֦Ty(t1Er|~ϳ̐c5؜ Z @kEjqLPl9L "DЈP;o&մ4ӆ/ Ffma!Ȉ@7[~} 7w@sUr iKۖ#ǖ99ɓ^(8?:C)S =m?y)S~yh]U\ u] D!y3DC„Lkh-u$H%I-jRk9z_8VE@b!ƘFl/=::SlWMSoqT ?`ɝ,':lp)D zB5F KY)Q5Ջ7f Ho9{dJf Mʽ[cUhYX*'35SBK_u`'p2 ݣw^ {Hѯ9S-Ui(U*5%V0m19zh8κtvK4z%y*Ț|6TA"y2s有r-pRsUi*̴||bT tV5j|q䷌t]y]M"^ W3 ,1l=?۾۞#čFb闗򖭠f7P/G7Lv6Gkcu BZQ)5E+5bs]8\SX`Yg##(ȘوOG(OT7HCaKɪoX~ؑBrWseZ=3(XꁈK9/﨩z M`b !wm۳ۖbWSeWEf'x$ :{^Kf .iT[+WY<~^Oo>|^53C?;ـ~j#]kݴ\\|+BcghUka b`,˳lyg:+g9xxZD-͞wQG7Zt]#CF CE"怙!$F j4FP A#~搦Hڱj7$ü0F2'j K1n9z>_cO=[rH(,6F\gT d$D!PJr9=-b0._+l/``xxOe\0-"vKmЏm!HBRX13mi$Z0j< WoUc[>EZf`l!ߴc?yta[0~/h'0{ifR 0TE wS]?'ʹ5fT]p" m+c?Γ.76*#X·ƨAz2P46HAZ|_W^q)WM |-9c"# > S bTD9Yz\H9ڋ,Zt`K,<;'._Zkm,nP>ֽjLƇ:ө+PU$K ֵ;.]~g\d:mq!v-tH8ĸmW){s_&J! v {oL Ux!$X9(+DJ8D $hFzy6iCضx>>Ǿm IkVN M#c-Gld9dN3s?-di'n-45k+6*@!S BctDR[wy}PPebV!婪)`fMz`AY0 *?$r->q= Gc?0Fp#>@TqjOd4t[ O]wg^i(%'1 jlrCNZ RQs8R Qi*bfcRVY6Ɉa@l1QҘa_)̌RN}miB3 $Pg E=xf6q\YDS6 fl33b""fpR+ő8B!j  _Y-o2kO:}ȵDq1j S&Rp}mwA>'gF 0F.MJ#-iSd#rpUE97)P'z&~xnxr(l@0(@pq4se \[ӈء%j"蜞Z6ug60'0F 2NfhPr}~ח=U/7zQ5ЉM kl|adH ܌R26bU7IԁcCEVq])Hpumܸc9m.ztJfJ'Wl=znK0=x5 ʅ[ϗ܃KC<49 %Pu 3}m@Ÿb"m/d n˂Ki2jzA-rRJ)55s*9?|<-ĮMpfcEKX̷fgѷ}5C䩈:QA0a1iug6d!7Ӂі1J3&D_+a%8Njl&'apV(9Qg0G"m,!2:}8bAAM, [rr??3>3;Jc:]g@I! EKYׯ!:pᣭo̽ (`$(FjK 2PI5oFDvE*0!5!P`(h`D& ֘u?]aF:,=g!ve21[L~ UjZa5hS68* Xi$ ߍV*iE( `Jbe2R#ppV*''3Jٴ4Ewuo>x[d~|+zhz/#Q ^_V*laD.g, *tT5!t'8BY0WL[ cL0,%,>ތg Sr1 F"ްi"c|qN"WAr/ G9uOGIEjT Zit)bDx_EE cWЌxL-:߁6w7NQے{jHh[SK`Ĝb@  !#Q!ʽ\ymBTBۻ)|#)|l,>S~PܐPP`4e4M<c2kjzE&zM0j܌(aDFf F$%WP}pv8=T|y8WSW|Yտ@1@31a` ģ!] @p75*aZ`j(@c6k@J[T 1mylx77^=GE:N?tYFus@\<ؗ?Ğ9Mh 1RbRg. 0;&SH302U${"ٖt! ʒ:9g=?~_c۶#㥶 QAIP<0}m3S|u{$ SJ}"tm| T]4~DupRH@-`a,Y S4SUNƓXSjۦbJњa`r-qϰm3 !G d,&I a1 w;ߥz[yi{%pSp?#1%/OpD_ms{<үohicߣv 4VjC 2x;PÚֱ03~'o&pU/ô;DwԫA3l Ht-UOyքx%ĨYSkX),T#(UZ]Io2ցa?`$4] D}1pDȎqwUj7,s#B4"PM q5X k!-$'IE z`.dp7$h59UK hn`KD s㫽$&_B"0d,ྑ׿/,W'w-.v)u4L'Vq|ש" - :ȈZ$ q19 ȨHCM3+xgQ h-[0f䂢$Ҹ J-5VA&9^jZ($3z"]T3om-\#iO+DŽn}5833EĴ1=OFD4{g%.q͚ſ'2m[=<9Þ3ǖ#y"RFdmApco'g-dm pjY=.X-FF4/B>7 q0_*x* HU@SUҎw:??˿i~EUl<*ߓb4R$%6 Q`} IrS :XTP N{ k՟.947m=w]<+ꑙs){i}Rk44܇uJ꽆bd2EBEJ`5 ,.J<ԟ0Rđso>>~#_<sk M.gC4K=H5{1ܻ&=嫊R>(M͌]0ͥ0HR-r t:2`>1궵ZEA8\" )bED9SNq8OUS@!C#:zB;[}zvZ oW#rP15FQ妉4@/~LokofoR d9m9)!̗^{&8G?; @`:V6c."Pč&ɻn 5۫뎜[ͳ8zPC@5E'.w1qj@WjgCa%9+:#V1&5`=} .0Ы_o2[d*2v )Z1*U{ AɌJ8br\J%h[X Iz IVQ*`?8Z >_%PM .5BUhckfԩy)$;^?Є7fqÀƤsZyr`]?do=ΣaJd9CB%m"rh' V`HQ6D -F{p{|t >ArK3OP IDATD5x绶rJ;֬rx>lfQ,7Ew͎RH9C^x}S|"\n,4aOG#inINP14 c2`qϏ_ix$oسu'슈< FzaB*:{1`44WbbՑjжiWc {ѲLB9ZCˡ&>#q eDBE,oÃLl[iG݊V12!Sœ80l#\"bH:{(:H\Bzj;MΪhg3a"A9T@UĎ%؏o}84Xഓ+d &sB J ]TXSsnε& Qţy\ >K Aq'Vnac}=MAD\;/a6 ͠ v4D%Gxxߕ0"bz"Urut1͌G U250CLO=Wz֦dHS_H@MAJPRQ?]ƺ{AAلAC1dRmԼh$C"5X!;IN`+ fP/6ȏ>UIGBM:QZhK7>L0TE0z"K`-^ǚ̓yܫoY/{qN#QCCmg 54aPU! `"'3RiV1^Fz`L&! 'Y8^O7=TVѴk,W+|m VWJ1WS!pij ϱiVtN[T7.9P#b1![` TF(c`Y|;kM|0.z8ȜCRom{n3oL!srᎪxinpRT3|. S))PՊ}9g SRbT q-/)K=:CBV @LRRLJQ1 z6^<Ы2s=ΨCsPC&Z@o^α7aR#Ϲt6.֙&Y*آ{~&Rku"͆\SC* YsxW:S}50U_d{p0XvA9vw|$iĘ#J9{GJ9u@jp7sG;̬8q r3eEA`S f 8d+x܏3#f̼iLH9YNbKD>"c#@(o;#s۫ZEj)Iml<@ƈ9q93s$boaak*DVMAHji(Fc P7"QҠV(=GwީHT> (,J!+HxEP 5U85|fB9;qdlg;vwVfZ@Pv]N-Q` {yG4X 5p'ti8 !XB* ktj , rKrCY(6E,)ͼR%P*N8gN!lsof8 c7~ M9 y]32@U3a7b4[-;)JWc@ T<!"lLkɠWuAw?f8~OLPLҩ^L—t#!"|є{ӓr==cڗ[%NmrGgsgGtcNzhrܸ]5ܲ#ձ G"} ANlH8{J$ ::H? 6pqGrokP"=`.Omc7jJ0b>}7lFĔzQT=iҺ8b$s`HnT T< ]7bQ|}.#)0E('LKR \riX-101QPl{:;>{OO/,L3sy]euYޖ5ӂ)5Rx ܞ꼣] # 7aAdd#wnUMh# !93NKJ+Sbu$wu;#揧yϛM?7j{N Pl^^lHMmf Qc#(U5*0)64@ er F9sʔ:mΐÄ>ǁ"-!]'K O^0%X1Z~甗uEESr\rYJafluw6[K j) <{8B|'#FTvENΩp*vhk~:Q.#3)[;E YhYpY`Ͷ:+!މ]4/j bOSd.%Rr^S0D7ժBRMF'UÏM(hjʮ I()dRM[3UT7`vu—ϴZEO?,!x[銤:JBܨP%Dؘ m{Y9`ɾX(5Ҭkm{L{}ɷ\5]Z0[pFv1α` 9|ku%(到8 &u_:r^.벬)@RZ¾l( ]]HrM مA i%J*l\kK J^Ĭՠ"i= VQs#6oLW~O_ڀWC3-q._{^ EswS/aAfM XN(Rt" Z|Lh RvA@ 9T@8Qd^]JkE^v(!;>?X DlW10'ڰuI)34o@1%ƙT&8JnrvDbck/oNlĆlGK`) pa.LY,0N vJBĸmqF44VN 7$Z-#0/ą'$pi02C40a~>?o@,&;%?4nLedT>"؇2qOe@Ty NX::3H15Ix€#ٸu4ߨmvk5:nlf [=Z{nCR)A>g"E)&>`o:(a$G4yA2`o:o־!DRZeNiYʭRPժ.>5'aВ0nZX (]- H +1kkJ[c dulr38eʙ {Κ<TLI}w}nqzB.sr!J*dgSZP< l򑙵@jmJ.ofCч8')9T֢ ~eĴA 9S|m*_E؄<7:;>riV{9v05,}L^+Oy"5D DH P E/`;2 "9'J%R)ME^'T˶ۍrqfCT ¨WvB55vsm]첁N8Hp4p^ەaFvlWĞx)3njqc TwKmcviڐ/ sVig~1s"9%PO^!ik)KT >lGr!Ũ\5ݦeHh/::I6i(^rc?tf)T2SƘB.z?qi}aO=&!C08;RbctNyDfv>5{#*VmZ{%R?VHNx&8R#ZZ5LJ8lP?T#,d5ky-y]uɥu-.}äS0ɝ{ @TȜxmX{Q}Ny !=roң#䵀{ )ߏԶDO HI|v(r59 |Sl‹ɪB#R)\rYsnƒnk;360vwḒB )9l`US]!H!hEhD@}JK+7 :#<mOPFMhL1;S;K0̪a&FVkȓOR?mbfUuWyRk2`%M76a} >D2N/וDɜ<9H=,BAODbMhXDI56=sDg*l@ 0BVbc |&Utv(v.5_΍= W#[wxRO)?WрuCXse-e\׵^ʺPΎXU.GF 1b>]*`T Na0D L{? נ]n6<;&r׹1W5W79;DAx _&cN bFc. Ϟ;T8#`:}\ Zz 6 XET8#%Dbښ6&$Avΐ %93iɜ 5.:@"qU/۞?N, 0T4vD&]TԭI}ABȼk:#(ѪOp]fN!sLT-e-Es7"8RGj4 B3*||]o7燗&"3Zbl3'RxY4z*GwTQ=ϿOhll;h4 zMɍ@i,3'6NR%\n>zi7WVw Xh:8V8A;ZH<6GslϱjvO.$m`;Y>^OmC@L{J%pս͍-E$>wBbKsLs5cUD(1,y]e-Im9I ek9<^[`k&fH()jF<0]))Q&N3FLRrJLH dHAC-94YāpNˁM|`N\v3q"48ĩD_J, KJ9!Zy$CaC7ܖ3I beLn6>2ŋ/s6/>ޣ_OIM~Nb HCbqMO4[ |xe#u?B'pv!Gǡh$@N(9d)C^ 41&'Ĉ9;V*#V. Dz3%I5pTe`ft "0c:cpx D^#}-!, tx4e8YܖiB%i߃Oy?e gԬg̞=3Bf zp)`nh?9U}|Dd?73XS-6(EXZ9d'iGYm &ц` &&*U]>vggذOriz# @vBl&>Y f;ݿjMЋ"<`֑QmBE8)ѡGxxECxlYj- Rʰ,i;,)FǒJ|D˺\³,z9x G3YQ0)%mRwSq0dj(`CӘxLZά0(+QW@)RܗiH=|+5 0@D{"'=qh8(l>Oϒ? ">M~"ΊގHzŀ/GVxF l/-/!!dsdjqDFCl{7vT#-[ٸ@ɕ Rb.)iN3#P3S{D%e-K7u#f5q?4U}S|͑f:L^UfgI//C^R@#D718[(ƔLqY,@T!6n ^6' <ĿLfa&CBO9Q)yYJ@󲤥p)ɉ &G\a>ܗTE׀Hݕu\/K&-6a- IDAT@ t]tco sPu.P=Jc=7Wy3<Qz{a !!vd_`K)T`TᔉSE9G1 9gĨs {2sl{e=vY#/D.'u\u-Z{kUIb߹"G)Ǽ4*=:jJ`3h0zet O&J?/ kTm|ɪsr"k܅`FRBc ISbP ,!G#ԊW֝Ps*cJo@rb㬩h^\ybyz.֭ԦC#dzHĶ{zZz&$8%tFw}v|{[;3e˅/o/tF|A<&^z5Le[j@|':Ж%/˲^n`"N%)?5@G |#8Xz3շu N<imx<c{^U 9sBnN_ s>)OH 6.4bq}X0z-0a?{Z`q`y[DLR`~?5=~dim@mc0P4 W}_SxaAXWƕxaۋ.9x +4CP0JYP DKS1bCQQb%TrYzB9W* T@&nN۰n`vP^l*FH]ht)v'N㇫*f {65Z}|B,u o{_<|,mdίtZ?fsFD{'E鿮fruMeSaCռS|L_lc66%1j$ˋX*@Cљ[*{խV-bguhYLIO_C;ѿN_>vY{ET]e}w#P#ֹTb-_!1R.zo˺.Kic19+WnMq&R7:Dĉo t횼=l~>Ύ`K5)tϤQ?s"k#5wSD٥Eu495:k[Ǩ;d@4 Z4Xuo:*T!gYEK4H)&wTZPT>YC&UOSD#"'oV-ŮU,% 3Aap5x-XKJPFN UM͜P4*5$к-˫.W]t˕ 9TOAgLԆ[U]5'6$%4F7߿߿~=~~y#j=re5}{~[EWŒ~=[UBRB$) M)7I5$pd撚SSodm&hO`Zq2NJ9e"N@0z;'Ρ5hI#~ TD[ja=udD"ǴOtu(k}Ft 5G昅|yݍ8"Y'B m +Å] ܻ8;̺'$ tA=HXXE;b9,Z::*Z/3kAxq<\|kVX ĸ/҉:jYV r(s&$HL"BTTUۆuP3~7BTfO~A8Er2J)-6bW.S%q/¢!:z9|Y5ה}w9cT@M&2hݫWq9]2DFdp!}pD3۴@}WM;!/&SPZUNJ-?VP6wY*[tR.uv^/umuǩ~\"s쨀AvbXYm-o,I [;\Bksf?"Q0QJsZrY׷r.%^a.#jep?(z- [?yصx\VWEPB!TLUZun-Sa`Yحˠz.5j]^3adU%AgNlqO鼦n+"ldN˺^>~xx_k,iw@Z,w:BhU{qiFÈs}/%Zc&d ͅ)5giT ɂݼv{ޒF- ǥ -ZCD <ϫU˕+̀`FkcMiS߰yN|M-uG2g1L bb@S40J?K~Ͽs{}ǽ==M kz<^(* ̅x"ElvNQ$>䔐SZYlY\*E丩CԐZmK#tLg{O#(`b<}u6US 0t1ax>nvn}6OJ)oe]KrNJ6=S<8y:Z &p0]Yf*lKUM3'#`8o廾Qғ%]hD1/~cp8ӆ"oAo"A(r17$O B8P |pQNe\E`/3*1mIw]fѐG!:IJ\-DLd!;xe}-7@oYBO ML(-NCKl97!pk1K T5&h]$RR3sePP obq;}ǫudfx?k,^DKNy-u]߮׏x[K* ɝ|1s9!6~~zY/҄i%:7͗( 73z֡yd{z|r,gg!@g K`ĭa4ܘ9@&0ȌrZXC1Y)0y~1?Ѷa:IuDlNhC5VUw*R5!P<.~3L;/bwGU (: *ӖS5tc(AC AU5SmCowv|~?f?w%ZHۊ18H4 gOjyhi?bX''['D4صAP# TjlPԅ ϛ~???quӘϹжq1W TA2 `d0L I2QӀ֌ CRr$D)q)/F@e4(q'>E6;t ̝AB!gWK)Jc}9ԫȾoxۮ]rYEZ@Y\ W+D@/3f7!eN尯 {uwvT&M%PJ5fPRڐݦ;^`?K&jUcYӫ/8}i6 (W.'5 76iQi;t }| y,P LܫnTv]f "DSv† upGX H{ٺhّCa䆨NU֤{2MNn`**u؅O У-QN%7q5ש8qiu45-DzXU SͲRw]j%bLc:)bhP(q>mUZ"9 CgMWǏ~|zo)~bf=@uz>p f $0uJ*VNRݝ#={()p48*1spdǟ2~T*U 졋G Vɿ$$CO{0eRʺ׷F>ô{&m g;$ T$]E, P9UeTkXCQhD)I :%M) K^}?w[w4NġAB>ӞckS6i;n4)?-crs jplzܱ jHӈ=9S]:`ju?o)>&yϛϻߟH*07g;Otɺh(#%O} dN 89CptuWAY%FubPIф u?z]7ݞVw@0wzARQٹ@Z!_!]W8vg3"#6%:9**!%kM:Up 8刿f͂6}Y.9/1=&tndd7d0z74X$n:arʣ9C 5J  ""bRM{?LrSGp\3" Ԥ#ldz:~47N2/o4{~ 'e-TQ.hھ4K)7Xz\׷z\e]wIzǴϛ%3"LGHx?08ԿSig3  Ѣ 9'(q^gq!4 __SN?e Ô}K {BիhѪRV|Yl : %Ԛ'dFΘRù#^ժ(; ibFlUL؄aL9eljHTDE0˽iN w=4g 7 }Act r\~㯏o׏z]ʚĚ[Т|OSIOy-0a/O6;λYz8r& AGݏ.LmhGHLᮓ0+RzF F `dZӗ^.h<)W[D8e?OpV?"N8@ƙ;h:$NJF׬s4[gk~M> 8|Ⳝ ,"<&?4B h|'3 %jB{]9Q*;U]]jQg@[*8aP .J p>tvJ&3u%@HK`﹨mOx[osϻݟ|c[`i9SJ@ yv'qg/T7ZZxD @PiZ-!"ZIQM#8nb_w?O'HEX!#a5\jmm)ۓK=t~=!@tc4d ,*Pu7`7,vp:vTPt0$ř{8&yuu4)ynQdN4r>B^Sr_&" t7ս۶=3d?RNFYreͥz L~L҉Vc&).̮77Ǯ3#ES@f6s7Rܜ[[+XE(`ux?=޶zc>kwb8)Tb =u̴Av7mc"XlL~$ra!\k^,D8] LFxI`xfs f| (0;CPVED% UP*CM.r?ЧC[QZ74qL`S ) \]q}}ZU/tWi; Q$nڄg`SsCh:f-}kծ (Tw6; j.s$)* s͉!8.WV1R 5Kgǭq0SlXޮ\r^$^|%YA}9 ro_78e\`N8Vj[z BLW1$fꁈfHNH8i's%?k屐qs3[0gëC"vh'3tɒ˲Dtq˲F*2y^R݇cgtvG ,X_Dm2ZO`Y}c_4"/fU9!4/sg1quݿ%dI ARV73=VJvMDjݥ@m&E@ *1ҺR0gdFà܋QǂA,=qNގѶa/ ӞL-!"3U[Idg+[=lGQٖFdZRE4~܏~r?y.Տ$@90O{q ^*P M E†9n_,떷--+/srSS0në3n^qeDI))jZ4XwV@K)&?(3!r6Ԧ6EU#Bl+RImSJѣY]e&AFP0eTn2TiڪJ+A}}l<b\%Uu3uJ VJa$TZ:pg)-K\aID#FK\[>@3Z:욘P_hs !(u%vv, qJoC_g!\IY#?~'CmŰ/IE(U0֡f&ـ3K߼˲aTxAvgI_Q28ҠSۀIzQƉ77Fh0Y"I^1y8۶n~۶u[eqN]t.yYsJ]?ѿ,ᄎ>}п {Ns3vVxkg jx24NE6M>>o_80Tj"Lm scxmge`l}hF{Na[bkij@~yH remۆܶh#?FZ x 8S"wNR,TV}?KCo{v( k@=wɔ3,PGg@JCˎD:cl" 4ЌNYpjHSC.KjŎע[ߟV(=i1E~ޟ>GI֯*#}xEq.LJJ;m.e)-lue!JL̀Ģl*L*fjpѭ \:kzvrVb MˁAسlu9Fs?fJʓ#1&&NQ4bPIYd4BiUZu/i)(Zk0p'hJ&>evãUo(fbQjRQAu?2P&Rp^R^Ӳ쾩4X7 2ğ㻢' <M$b=S`=9h|B"`OӀG֩Hμ:ex. ~ ~g#၁ !8aiE=E/G`e|*׾,#Vpf1~P7δZ !'2YYҳN(V L+!¹`woG,ruۆ 7o.GyXP"1RL .Tzϟo_xk`iP:km/9aʘs4 z)hVzA*'q9UΨ>T"7D֧ jN6qn*Vݟǿ IOvl=b5jDy,"34BTO3 PcM2(ѣQkg?^/}tI T >qM9&=pSSJJgNq.웪&8cqRR vnv[mٶ,)eJa\ ]ѣ Fۙay02SUԄfF:4Kޏ￟ޏRki># 3 rLIKwTJR:"k_Ϟ_k#UD3$>7}V+(W$9xўP֤ZKQQ*JbRJ<^ a  2zƻu!+#+&F Z#-%Ua|!ހ!Vp 34mj-G"ZRJ>H}9XصDZ{9H/)~a{J}-5uGw뀯$E`BdƵ<̪jmMCo%_yuO&s%Y'x mx@"^c<#':\ ,ة8{LW|b@p}m۹1߂  wd$M9-/+RnSi c`JAۉǓA?_Eb_Nk0rFzg\lϿX MosIᘆVs]_$3zJHQBFNk[}LRJ)5lO?L$n^ _TSg韰; t_k zBdr#ZO[[iԟOx.X*4IK;DI|&֚ÎrhWhCaDQOjt4$Q )F!86DPc݊?_iZaR9x)7TgZkڊʁ(v7&aj({WJ9꾷[~>iϧZkAĕ9e(΋-'#YR35DL-ӥGf+BWO}(8qR (q9X\浯gB~ c67f W5#Ȁ diBA Pv_ߟ??:y8H9 O p{T=aV 큃'yj>__V'fG" bEb8QM1Շ8)z"TzN#-,.,eYʲ}]w֝.HG¨gHzC:p)!+N L-lI$|5 $4iJ+A#V?8e0% uYϾ) "]!̤).ƌ9sԔqBDcLތbE,oI֘H S5W_oL'vARψLs%1gSF}p1Jᏺ!'wı^N Ywl /lKLN6`Pi#r56 T(jTU 0ĘN/hY1-@,{l#dTv#9g_vT0SU dn lo|D7QDhy F)ZNՏ̺,#$=뢢5i]"=UI/#x!g9"7 #6"yqgi}e/x_jHt=}J$~37/u { 8>z')!I ?'Vƍ5kL 諙cM tG$@YvYFZZDkǫ][1 Ku. )xY;')€af@ ~@*!!2i䶗KJRanDU2f$B`5a: g F Y0," Y%eN<l\bq%xԢ-~~CEdBG(33*DTelj@H fb f":#_/y4S_/۟z;sb:[9<2eY¢{wG*lmY׼dfB18^~}Q6U.bYmq|Q/N4Y bd/g@n9 eUa !%gF 6]Ͻx?{ )KK2GwNbk<;>'b4!ZkZU"kvu Y@aJZkF:q;L<5jLGeQ}$31al {Z@+{54&?8j9%v1 L)6$3H3gφϊIMvŊ$-zʡg*:+ t%%&]f\ E#•v IDATRVSYrۊapGFsv&A_Q?8:$HK5úx0 Ht Ǿg9 G ?'~m놡й<8Px2$}a&F\#w̫"W5**M)ow+: mlN֑g.g$a,K^umx||||sqnۺQ#JR]~8funx<>h$֜BJDgF+]π.ҕ\n/%^sObS/1@Bc#j@EYQ>QK5sCŲzql?oELcИÊRn-Gqxq(uEPg/<_'6'; [R&2';3AHQȗݺ\8̄ j|Pe2e!dfݵhSi x1  X&[6jggτUboݰzHi*R=#V( :DY^&MYdu#gF\ bglDFբVM[f@9x8 _ANfVxڶ겴*Q,)Q$K2 uB?j{PFݯ~N(їةc ~1L9{;,:ѣ *@Cl G8-Knq[݁WH!Q9M9Wn9[|op`.(y$HL(ll>#*xfOxN]uYs@W^T׮j`=7%!@W6?pܶ4'GbaU[oDK<,Km gb5`3@~pS?7o.YP ̐ Hzx4Qlժ|>>nOBLUzoU|(_1' JE$Kl,% )%4qmèp,1?g<'0ZCo=^zPA4 ƀQeY19]lPyϣrW&aY0#"UZNMv)ԫt  j'ERE 0̅6pI-4 6")!, V]iOj!gf/®j͕~xauF])uiȅHN%>7IU^_^嗫XIP/yYS ZMjhRŚiA BU r$Lܿ]ܔs U$~&œpɴ;O;ߙ/ֶбZ<F8fxb}e]h4GPIؘ*Aف6A 5ZO'q/P*4Qyc>je\A<*˪}32Lȿc4Aؓ hħվK 1~ BOxNoZvZm` `@9eS&d0\@Śކlj+uW_n~T&(CLoUO}ZդȪ*.č3z5<gm˲v?߾??x|F_URj=jKqIMT)uo~nۺ-Y9A*QNoE {r=3 mUS(|TS4i` B f.r4jDnX~=onSsrP`=سDD:~I4a|i?WC`oƿ8T_E…]3^ @TES1!mM%Z_=1$y[)oS7Aٿԩ4Ad(^.@@~aP!$D Ap'| <>=~6{6{  oˌT5" cO`Xɢle@3ÈȎ8Ghj5y֧#'5!MI+lb" n+=nqooxvkRr:В8;w1#@qPG`A7Ix(2Fsԩ1kȌZ@_*BuҒ j5s S0'J RGU9$>UGe 0EW0F[@@GZam@sqwiO5[r $΀$Uʜsds"¾fA;gszzzn~zNj/ c:p:8߻εM/3JߧHDjk>z=CI|ZEl~ɉT֠e)z۪DJAuJp:_\@Q AEK<}}P;g/mM6AUhŢ8ڊG˚BD PEzhj Ci^3v)^^!s 0Oj$'xx% *Bq⩟/x7mv1ߟ۾x|߾cߖm9{ޥH+q 7Mi֮pg3n=|qiFMt/xL,B)~ KP `j'=qc@Ȅ[@ՠyD9/ '޶x||#-/kLפ>j;&R[3#&3nL1K6Q[*(vf z^FtsUR(p"c@|Jd(F$ú'߆,FL`A\ xx3>})Rx <֦@*Xɜ ` ^{hACq2~fz[*}2<\l#'|'BHKJ7vw }㮷{=g ՟Tx]qŠ !2lLPUP-؈C:M~ŘlFavSd5(f<̚0P@JVU-Mhj"f_ʹkb51ʝUBfH#qj(|' !'P ?1kk+FB DW9">tw2Ɖ9I}Γ1ϧg%ws.΃ ^KhЉUp6rL5vM?7)/iY֭ skkjS^^Aj8@{b쉈"gb!9|4<]H?sGztk^N뽿&fUDY {O_߰DYw:N:H'wFN A`gYam K2&E1(qI/j5UV8vx^9T dtVd<(̉V @cs %fMUPhO.ﯨ?-s3qO5<κZr@=kZν0Bvs7~/Dиj02QP`Zyg%ȁNX1a&ZeeO(E'sle0 ΢)l۷ǷǷ˶mզZZKy{R3sޫmE]D$@6} x?l$@bGz6t cHDܜA!SiOCĦV_VNs[4m9/3!,GD08c=/*He}C4U@@fʙAiX|o)ۂ 9D`A$0/Dn?,6@Z6\ 1 _=SF-jZ{^r}He@=v! )'ڇYuܙ:Lƭ/Dcݓp_g]9'<]7H~_=G7Y^%F\@|hJ*J4"@=6 U=@RաC0(_+nSC&PQAU5PY-UZ(rT-j*hZ1BHk*ԇ#=SoV{ ׿ ~fUXH)jŖUjDHE#K5 !Uj˒sM)p3`N }"N)46ϰAtr{ YNW5Fa_WB\"1_0lo]1ѭƇl@HB)gĤ?5x̵ \r9q:rftMkmx (q ;,ۣI \5e|"PH_LMSי>>Qxf~tok|[3,F܀ PSͬ $4##A_o]@` C84¾kགྷ+j(! 7G8~E⸀fl cO!O!M*5ST +73ЩQ?V~F1G>РwQ)j-&ŤRM+P pNв̔ cBrħ J /4j@N@ `Q:%@ eƺ јk5kx8l|;uAUbPb:cm۶omy]SNdbڤwRjT|]n~?v S:3˼"?<"9Hc }3T:'ȆʟDEP'lZoFbMjA3X&70O,f@Lkηx<=~Rӈ8gM5)5/K*Ҡ{ތ{Ȍ 5oW ^ਲ਼fpl#mp=K%>KsW/04kGX ffHrV%v% 2b\ʨkh. ۜZ@Č 7!Rx6x<o7 p|" bPU Fac+1фrpoh:i)ARJjVjmie@~%1%%Ѷ㞾???X?--yC.VOW ={1ps ӑ҅shtilyYU2Ql*L%ӑ`,dEW}ݫ"Zre+TY HwgwM8xwtlO\3.()1&$2BeS6a_4O } >W䌶TZDRBc:24h]+{8|MU<屫RALaEzB'y9e[o^ D ޼IwxjOy>̉HmkWI9Ge2ۅL7gO֪45Jj X-T5N`aU'$ZےEDM"t6᳿r~oh9=-6@cq \%h AQ< j 0y@ߨ;hhu3RQ7U2s>03/)6OjW@F@!E"&!>oΤ+wLb+/fB&4 mbZAbC?ol(9? ցQէփ7<`Aݗ'3j-G-GE܈N漦9PA{Ds&!*ԧ~CdfOߖ_ǟoۺr@!\_LT3iWHC,v7%h2i(бkYG.jfT*AIt,td:XjVQѠ *T&bL3.k 3:5t Z6-{o@(2hF_[2#4>vs*f]D˒oжmּtKf)$Ŗ|bAM BcUW5U>Q_9竎6eNM&*ig<@mXZ9Uj{CP=6̇@l+K [8E2>É2 k٘mk. T@cLRni[y͔06fiMNDjZ|I\ ))J1l@t` mMI3dI؄*s'd ]hͦikDcε)xRjM$jWh_J9~|>W*x||{ B̑f6m[;5 +Qt #AǑDQ302U Dij40f7ű{z^"k`Y0BOϐM.2AJrH KXA4vfP E2ÌP-&;t7= Q޻MƠ!#0`B&̉kK |JKrO!PgH)?n߶c[-/h\3@,]ۉSN\j̚iQiH( ϊCfp %h`dH&7Z)EG"P: _fd x{8>tC(ɽ-9q(Feme%ӲuGҴM#kY| )SU@ł(s!b\v.XTUQԸˇ 8!ED؍R'M) (Kg/,;`Y d P6%~v?%Uu}:r}ϟ?G|yªe߿掠tDK/a#C]k9'=˼]ؐ2V['9o;Qhg pbtH<`I@ȎOX1Kb 9[N@MhŬZ,ՠ*d3RS1&0-`Lp$IЙ^jv}>`/pThS3BSJD(3/<@8%ش)?!D0АɔALd<3l ?hVOcR;3h=xc/娵VUIi=\_c .I7 S" *|yB>'NW΍;hsKoeffipؿUDh,$o~m۶˲,yI9[kVMB#tɒ"Y[ꇄ{b7A%'T!50pT  2Gy\~U"t!Pc4[vkP4sg#Z"1'ڤyӯQҎ>~tcl 3CPI0;V6TmzW5E'::f/8"cwi>i1 g|SD70vzN쏇Gu0 BFXVFHJ-K/H[XEH% vZX٣n܇u՛#~2kzjPuhݠq>wAJSœĘ3D9Q<).1]۶>c}|=>cn[^7+z!5viWT|6lVͪY6Mf*IU~Ǐ`_c`B0ݚs1nygܙqR7PUG@%^[%[91f ƂXЊԢZEMjuoUTomʜ&)͕b(8=]YhPE5#i6k.o;/7^n|[m͏E"]{%GS/; Jb tH96x5&"B& metlfk O 0~6IJȔ}MC/ UDޣoW=3U#A.Rz?~?~n0Ji׷o~fNtNDVCl 0PoqJ|.\?:Ռۓԡ*Հ8=, -ϼ>$;Kz|Eكl٠H}Ԏ,o_]dBcĒR4ձU  Ԟi&-tD';Hɯ$܀ͻjNJS!A&4TG6L?uoĦN42HUBV7FgyiJ4GOZNÚgֿ0r2dzKm˙@JMD&V}{";S0H'adȷLB1'L\iP MPnr[NB]6u hk3t QV:x 8VwJ8WWD*.`P\bbim_1Y/ z'ͳ')9,fkhjj=׾f ΙudR0T50ܜEp #1B2̸̈$Z6Umx(<{xnn+}Dr-}586k`Ro jjx>|(%L r{=eAS9)9y朖iZ eY^y2(Q{u< +fY2cU2%}3z|QGR)&ԛ.l_t8N Atߢ&`bUk9T y욶 )O6'llQg)=BAD d ȵ}+5 XDb>~ǏϿ?|Ǐ~?>,o8 y"ii"Vi=CA"3z# _W)jFZGuI/ATZpmZ?m^ To-H;ʮ@ p ; ِe6I*! 4 <>LEk}ufͶ UZzjCB`gi􈂲KKok2[˓ v֞CA?A40Ro̟ q:qh"% 8u۶~lU#YَvbL!K33ԮQr&4,Kz{}{}}{yy^y9hrus?HI3 5;1Zc_X뺮gT 3h9єv~}7z]h0@D杏uiW4#ut03DG̝X*|i}!{UkVgy[sUKc*i%)*H$&9,7B]%#3֣Mg_\2{a,= Zt qj0/ZH0|:v MYĄ2FǾm?矿?㾮۶[)O{u4wqZ14"hΚ&^뾺``xJv쾓l?$S9.g5se0U!%PQ0%TjIrH}="Z@:?;PLT8v]7x ?a6oԈN8LW.bD@ҎA<75#K떳oiKGxTŁw Z6V!R=o +.?Y3V'/(@t<&xiKz~{yY4!O oJ#J2;;2j$b`$FBKeuضm!q;i/nrԫl6h<>cm#S?(1?.%^K5V 3ةgD(VeN)ÄbƔuF AluD~L7. (HoV(*Qj@Tr_n_^%@HI 8v9bk jKϝ*P = J1u "2glthͮ'J Ο(s.$p2 o>WWUpUxk{T}<`ځVնPS}*LG$KkA#dJF`!g''&&֧)4E0M1`Sgyf^)ڀ伹iI?R5va}y h|U<ڂ BRD *& ffFnQو=mi!m=VEiIۡ)f"\|}7KĀgJJ#9G I2SDC>g&&`+ D-/9c;CG{4_h-rulH2a6!S)CߪtS"DPSbeOg\z%ȸ sQNP7~R}(8^\ִW}oLkc]ϟ߿??߿{R՛#NrTUdӼ__}'7FGdc5ӫ?{K3$!p Hm7ZDbF)!H3ujX ]a /{@k1&k!u~̉ L x(%k I0vgo4n3@-mBPcs`ouaYCWW)#x&FQ'ERRSKu_Š$s?,go]ڭpi`kI=J {jZEJ)H\ Dj=9Pib"zH?s®1Cq} k`o۷oz{{yyeʞہ?n=-䤿wa :E<{8|Ae^=p$NhV`̣ Ntq8װ8 Zv H)KH l9;vSzmDX)"$ fw*Ňأڝ쎴hH PnWNm2 g-z8Dl)Y"2Q<4<<4 m 'y!ZnH B0/fi41{`B [6G\n$u?RIESh@IJQ\NbڝubjTTU&} ^ zoor9[bq[ F-[ ٔ=FԽR]M+dPVkS> zwuhKdMdZ&|P3WI(FEnaD8'2Fe %jڥ̖g[a{TNq~zQ| `Dxߔ2O4 @k-طqǏ?~_u[FÞiyy?㱮R} E34Z|bZXx[ JZ'7) ]FM]G?%v om52X0?߱Vi*tO7,կP+~^C1.l ;t [ IDATj9Tf>*6԰dINfĄM(OsʜA?7r0vGAۼfJHHcCG 9&BDM OC@#%5}ީTsvyo/oooo}uU éM V NOALjzc?߷8Z sr .e^Z.m)g$*l:Nsj}QJb1\Vئ ҈)~ jz45'MY9#1Y4i4|)"ێ*"bsC"DUD5yyaDo:Ӥq"/ :RMݕw*P nzڎEF*p$?lJbLFDC? !DpmwG{W;t%D7CmWM c ;ED##X4/#3JjxJ:O|iyyixx9B  )aΔ'hAZ҂ i&' CbB!lr[ta^/WW!" E~Z  `{:LϪT7:#q +Ml/6.0$@ERƀZ33:G` ~z4?"(CTkDZu Wm-ȍ )rZ{F S̼߷>>>>~ c.~DDR$y߷m`x_kMea _#\ 4齔Rqm]7-xk 7L,$]ͭJ pDdXydav<8P+)Hs6T`z^,qF{iɨSyXV8X* K Y5#3#0Zhh䱼>C#$L~E$LDib7!6ΘN-X7)8;őD_PI5>&謓x[B V^b۷o鯿_oo/ySʉ%E@jދufx1޴(Vފw۶}?JDӜei!!///ĵgu}2 >+[]dgTym)r6B-X+KA47TGJDĚA$ 9SbڀyݤYU6HDlx]EZ`$V6Os D!Zp͸)2"ڙ 1 .5pvX`{Mlh3A  *{z(m '!:"kKquX O6uƄ43%y>7]y gxZHZ`X+ՙf"H5CslsOV@7`SO>gt0`"X n3n|[xY<<4q8gΉ8#$# K!'Ds&iA\fq;M8!:g"\`N5+|5Ԋr6=wJΉBaT"M8h@p[ܸZ<\6RKf2.-3Ͱ:O8eG6z(zh"$2d7ܝ+XDx ~ٸCikuH`x%~1# ꟳG>4%^6LkQs.vIg֌}V~II)RIEML5GW9d&֑z~`n=%ۗ> V/ScT2 hׇerOLo߾o׷69%/[Nc%s{:< W P){m}XǶmG9DItMG"tjl }ޠ@C%ѿ:M0nDJU=TMH^ $GoPUDz>a&fՙi2Sl0lщ3& 6f+0Dl7=Z^Av 0φAq?bV D󔦌5g22 o7^^["Fc-'v!%7L惘ɴfJm72x0< ല5F.3IH;b PIDU'm( PP*$fe֔(r.'%)*EJ)ZB}Ϟ6}sT`˦hy4u%UaOʯ2?_`q<ήXp;gwU ͔2Q0u RAVHl"Yvf&&kUj R)G-N%FXErs4Oyi)6L[n)L=l/tS9:Ǿ/2/tii8HUͺ@7ijlpI&Lm_?q?xУ b'~#mYjocF6OUS68I3C&AG4I~bfr]"\ӧK1Z?.+G:q8i~ѻJ}pچT/$ 1"=G3ܫ* >Gq%Ӫ*,7`XfgA9({@]Lpb6nNQTx=`8+G!gRT̚zv 5߾Wz{ܦi ~ $w][ySQMB8(E fueݷǺ?T3Jeo8VOLщ8J+=0cWA  @\_p?q?mtlOqs04 UZ\`sBa?i91QVUI)&uxt-DsQVc54BNU3qvJy@@,%%df#=paL|v,3!UP L Z`0~qfwJ#`R #t`/ ZARLn'o=>,<xPOWg48U0at F${z}{}}}y}}-˔=^ MebN&t)L#$z SQvqTU󸔜朦`zcH>x)tgמgSĈsɚ9 ff`'\na`faa1f~-mbn,p]ЏYMdoBhJ) J@܈4~1p#6P ĵ^k3_UoNu_н OO;k^jKBx" <^5{GtA/H)8q*ew){ _R#Q*B{uG${2gUu, ظvBtgP7 $K0 G'a`@D̐3N3/KTu-)ng `Jj\ 'fdVHJz`)ZAL@DkRj)RH6e7޻F3%ZN}V}ֻvR+Z5 oTC!sSWR甦i! ' qlkx٫_w6VwET|d8[,]Ä̬s8ZB's<6Amr!![6fdidiJ91 }"8sW[F[Tڥ}"i1t6'EU ͬߩ fu5!_Q Ď#ݨGЄDz@ؐhئaC"i%̔z5Ֆ2zcplO4Oȳ)y Z??3'e___^^__mYnr[2O9sN!dH?}0 o 6L-G-[9mxQ*"{7M4<{ԗ#D1&BW^X:|Zxu@0Cjكm#lXS,ٿQ8s=d8ZRY9b} R Pz QbJ}(,P[q=Ś+{Spi#kEUo o: XH#WμaмD>ut]aN,Hd =∇f"@XV8YM(0&*f*((mUwבUXX a!!,D6Xt|mG@E\:Q%̸(MlVW#ߏzVvM+T5@ĸ2&z>__冷|i<'ZX"o(%  S% XWu^$J"(=34uPR9+!CɈ_GATD݅P&¬[oj1r M7R!Cjn]A:*m區n3 ba]X 4j?&bPڐw/[ [J0Mt^ҋLEˤSL!8 Eq2fHF\9mV+JH̰pV+YAC;h8d|.x PƁC>bx"(5Dȵp 2qJi<40~4K-x<>~珟?~t18TϞSi_)/jy"I}OC9N*Ԗ/e.wEʡǡǎN )5zp]du;V؊3Չ֣9 TITҔӑӔYC@tḟA#'O!.jҷM(X / ϛ^  W_Gd~ FL-|RgZkq1RKB~W181RB撎Sa(I̲! @+j.Qw{Gխʮz֦2Qpa|aZ31 b ]HgȼC a 3lP MP۪V}L6~~{&Vj+z ^|c-o9_^핖7ˋI9+ QbEdv4.i蕗|9ȌUYDXcuC1W woR@%P mWE BzE FV|@Xԑ1珊ČOQY{]nG_"X l;kgLzF!D5I~MγSTP_@C0kN:ͺ,r^P*U,9w>;eŢ@)3qfDK[—{#Aނap̘眦)S2;!yiSpYTtVdab̠ djNT*(z@ΎO R+(?mG)MO@$$HjfMK0 .nf3E$TEkB :jڑ>)hH!0{,U SA"eN3U퀐~v7T9DeOJ`*j"Ch<8"r'<]H20RoEL8H<@(0pB7v98QN.Dr@o_&L'.RૣrV#@[qP9$52!X5Gz{)E2Uە:1!3)4չVI"B E$ jJ9F@H |۰Ǿ~gI k ?OQ ڦ"W;ITDY/-^D6EEiL~ձ8Ă= IDATH KEKM8r,h#U/B1 7 mBb C@Jw~QQeEj j &(Nq'z*[gg-qCpK#)`a1Xnb/U^c]-f`\-eYyn|hȐ==w ?R`Ozgg*=BU/H az`=Xk2I;RrG)TMSFHmJ(e`H%yd ]@`e0suuB(~NJ@; JH**r: vU^{ @ֶz3A5b%mbzG6+ &BD_\~ސ1 D𢶈ݪF/[ZZz@4bl/oo oj/7EiVʊIjjU) #sQ ǯt ĻĢ˵ty$ۡ^!V+¥x]Y*U%xs3ELQ aE(so 5$@1;Q)"Gr8VjOLs[-e)g6Wn`C7<7>GT@#Z-ew>JRAE7$ öt*扰Ug@j؅DR6;$#1 9ݖ=4ii✑ۈBGj\*%p8]GrNq.-FC9qC&Nx,_=A[G 忈ֻ~_?;Kq[8fڊ1dm5ӿV$5:>&o @LjĔN7fY%@>ι =T3O|R\#BGq;++mFOD(V ,h_ m:n4TM:ˏЕ^#:;6OntK'uFr o(D=V&&FKb)".~ x̤TGF2t#~L9%wwjZU ,gR=%?<ׂdY4oLS BW@N(b<2E^/v#rBNb,O/9]~ښWcYռ(~1|I=˜_OJG:Q3- bm'[J=jُcݷ~ߏ_?>>ǺRD iorܖ|yJq-%=xk4B;{|&%1. a8fqD>?j 2/"r@9\&  Yݏ8ZD5o@hmLUSC0Uж&z@& g*$RRضcݶq=TA 3%<1F&/PR8J$vvxVf#0"dUSug!PȌ * (bJ9ha'BOx8j V*FLp"Rb%dA$ARvG*TS߁(<=-Z6Dh)U"G-Q {=kR)יʌy f,0I-UrVOc<՟abPsgF[b׸ ׁH' 4¥~}mOJI&dwd'D,6d+q%*DbB_M*D9Wb]R(zCtq)C$[`4#1 03ER2$.W`^0)L Y!q4ڮf(Q`욡b;nǐ3D(TRS:u.p5CL{i[Vv;V+50)%H]>bciHl֕z6>33z i_C.&;5AGaN)iJ&RJ>ҋfY[fPUGbr_۶{m9+߿?>ǶGaOi2UCBpY9Ǒ(rmr3d*ِɥ:DgB+UvBLrp+?$v&**gq HuSp76D0B.nZoid<~O?/b&xh|Efkݓ7oӆ')⇣Ov Q^/_|OۂѲ?<'NؙlX?⊭\\}UԺE}ߏǯcݷȔ8)/җZetk}R:tfi,p0VS:>^Z0IXJ \2sf*UJҔ!̚H"f-jP3XD63>ƘkmF% U5)`)3moװaO1 L,TD@Bʬ.H0#{)Zx/vcpDPLVy_A,dƠ*dµlvk& R1eE ĆDDlH YpZP#5amCrT6`#G؞nCJ$Tt *i56DJєeϚvͻje Ȋ( F cYE25tU3oڤ̫ģC""5> S y|KrMR#20iZe[ p!X6O`[RWKۺ߯}>]S iMH)TSD<6u."L:oE7N`ݖw+NifFޤr'3pD+mZJKo'N V?Z?)={풪Zv_; f!tQ:Y~Ujl{]_z_{۶ S!|G x<vͷJt%?eʍ&* l>8մok.5Uh1֝5g 9 pQK"k.˞-{v3j&RrAbP9L=0}ߛؿ?p04'+̱ocE:-!9E#)N 1hRC5"~;>LtQ $ T2(!@C!( Jh&Ю&=㜪{[G?wKk j@-}8̪a6H2!"w2$!(DȜ0'!d;ʌ9B `{ ){E|WxܰWl X̨v a`*Ihh]yY{ -쩔Bđ#Ȟ\LAH/vB̀1w9/ x3`&Vh&dj(bRBEPEBw =D({-1@C2bE$nn`hJ8)(n QEaᘸv2؁?l`;b8Dۥuf6ԩ{ [ gsVͫnY) r@Dc=3%6D1-#H:C k#@3vIS/(`UDNBd"%9DpȌJ*Ȍ1Bh߼i_z>^e\H/[UzpU[AxsNNhZJ'௖kNIdv:u?ButsR_Eoz_۾nGs{!*I<hd8߆?ԿNjM1U?]ˀ/q?VG0lvi8HGƩŒ`7̣H|nzVBϹ~wK~|m|yf'}DNTq,0_NDl%HD~;a33#&R+tE6`xf (r}u_/~{ R"!0)0E|. D@$HBU #&rV3C P=̄XD0HEH*Kz CqM#)@ 1h%P $A" 62C4V#TfIҟ{A?Pۯ#ʎ$i}TW O5v ?`otSE.%-okI]-)ZDU (R,L"}'jca7BjZVD]t>p{_ p5S)m]^NRmW/~*S s8̉Jf)⟦&ɦ[%mmO5W^c(L<7b]mx`jVDR.'C̢BiAzjxa*lVtA\Šr9 TT5ETFa-rD))NB 1Xn0؉zP7eGH^M4E 2E ljrDI16u5p42ML--=-)PWNK ;Ț5)fFdFdACz#6 $PD}jLe@5-uwGfPĤxT@p_|`ƞ}~D7 z`ɘm+-o~=7r'BJDPC==Ϊwm3@(hż-`;EbT@%Re%e_WX/MT @L 2NpCH%Yhqa+0+?((Ԣ5Id++ou|W~!F@j0ӓ?8Mx<|MMqUbL-}eKۚV4)Q5MP0D!"3 Ք .)!^2o|_ײ, IDAT۾唋( !ׅLID#۔PUY]EJN*9;+/o0O#vA ?MxRRu]|>e$RD5PAD 1Geƪd&X:it-%Q}=s*&0:!ph6P[Fm?x:C2by< pS`N_H'4I0dE|YbQIT!ۡXW!PDBTʚ׶ޯ{_) )N~ߟ|yvu<@+ jO iVscadU 麦 U:l`蛅%-4Kg{Om_}ݓӐBrɕ@&G he2y62qN6}%V{0!.1S5z7`5 Ǎp`]xETP-j0ɭ|̌x"15Nlt_N# |`mg-,fM?8Mj10e;Ř=@'ֆ\|>݀T=眈yg  rУ߶)m/YpKm#RSYRWȵL84E#P(>ĒA(P=86Tm#B㜺%iCV+8nquO!21@4rzk0C/v`c7P5@ Ca, B`G 1 S)T9`3X0+R,H UJþNZ'fc(S,$qXJ fԄIUjދ*rs#$? JhJJ5mt~|w 0pl1B6c.{1 CDJ(0aPf!`qx{| jAT \J>L8 [>֎:Srr.9i.s=ivjv-V$lE},H眲Rq9L'r$5pN W:P)DoЕ,~zsIRa@X+NQ}e`̰JCg-MU`J)o~_e!0E <)wiWOJ;i;5/8۷kRڧQ$^VLKr|.7̥m۷u[99{g 4RRfjWN%fi\ a m@Fn+ƞu| ;uV9{ uOא ==ЗN$&: ϣZS:k+ 쟁KpR+x.}-0kƠZ#d'r:[/[@$(Da"(`\ b"{MV?eq0|??VvB$HCzg_A}rǓg]ؗ-n/k-ٜ_j/d]d>__\t6RA (`1R.9W򦧶QR0"yOeB[i;)NÉeg}Q]{!+yhKKo~ 0Cp;#`+OS.OQ_`1g%k`&j "H< `56K.qj Šs1~8?S"5!-lQ0H&\̰FvHt&bQ̂1f5ب5Adhs 2 fPj EAEd7\|/_z/v2!r q*a!c(6V;<!QZ  qBW ABSE50EӳY˨5OSW7h@1h`Hd!N& 9ĠA4Yd¬4 o ݆𘂜QF" B"YFVKk&< (XCƷNL?7wI`<uGْ Chn;WTyG ^DV;Kf6^'r (fssaBAc!Pd1xXWWI5n˜;ϧt>+ hZVvU;~5pӮ0eVéw2#R 5R@*?2bFL@ qC$" `b܂=& f ōj"9iZ`}'='XDL)RXx*gJEbBX]1)3n+*G M^טȑ okp噇G0@ +| BPjLZ$ la4ݢYTML=NI=c Jρ TvDe18$Mb ZH jyS^- jII)kQ ш!dTh)}K^rMˆ?ltr{U M yh; "W~b30 zZA!0)x>|>  d^,, .Qu?iɩeJ|>]vcA@:8OKTں80F>(KKN9g)Ӟ"17x0$JFÂH!vGqtԉI v~1O;\3Ke^ *`)?s ׈$~o}}k%]]8ƶ"Y]ghY+eh8`w  ¾a6$ 5x'L+ ЊV.}/E|u?~sߧc;I*f 溓WaH{Yf~ՔU3n5 N;ZJQɖ9J &=#Kʯm۲kJ{.EāWHտoĀ@U dR;m KUڪ-}tk[gg%OԾ 16N[=m6~,\u-$ <9ojDl֟H 3maW}UN!Bp|g3f ,T#3iH3]os8= z9ȸ8O%p#|&MHs*"d@5R? :<)Po~QNG1Ԋ n;@B,Z)col9h0)eTH_OxO\dh* LSƉ02BcJLIIv i\w\us!)ADhJ2!y5FMA  )B FeA-o.FDPUGm+#DcC4Mѕon7*fF́q~nD΀ 0xC?\Uqۭ[_+_אܳhf*8 Єp0:"Ar~>)O 6+1sJ;mB_s}d%3822b~u84Os?{&g41 5:k(hRb O@}_=Gjp4| C=)ZgKV<\Sv5vxh/P=*T yhkjNX}NُK}EW[=yl`xCCDSУax|~)B{GP1خM02O`p,B0z/NERȞn!>b'Ou6(Qku2_+#4Lgp[ok~*;]m\ ;Eĵf^J{ 954%Sjj4 )zOf,dl 6 0B$n A"@J2\A̦2iRv]_<_Ox`yᶚf`3DK@a @$ w [te.UdApp l+rhz_?Z< g{X,J\ AK=k a,0rzTGV V3Pcm]-z5BW5ޞ^m]zu۶z2cmoƁ'HEYNU\mr! :ЮyE80J<CKhdCLy{U-_vȉr⒂re.=yzwv9jWV40a 6ύ~0ZX=Wexk_5F ^bC)QC>2Ց  F Ҋ(JꯩX8R^rCB "AzD+lL\:TݧҵM\ALL"2D0Έ5}ccXc-+sj<';%p` X &0HFBb+l1[,  aWv[߶</[ް.ofłi@s۱ @(vym-Qz|+Š9ȉZn˕6u?L9sʜ Ljk$P $d Lb!zTN0cOck ȗ/.E2q8d]RZ7:}ߗuy* z]͗ETO;ǡ1F"X9,|Z 4`0MNS yoSB >m?<&P*bsNSzt ip3*Xvé۪!@{YQtuA(ah @ 4<7ґFx aV q zdeco4^|{+2)VmQ\s҈aqy)0J&DSNrl]U="$7=ҟeAkjnif c|wl7+zmxMBD}j@/{ "mf@i~nxp-GI#tXNgx?Ku[nT]x /m ax\Sjīate˲}}sd L b" )'-B82܃K80F&`PЬe/iS#qvv̷4!N!&cBL*H:=uP+=`U gêޤCNQ Z/XR?%Wg;׾:?h#DE |Z׳YKܱ=0;\JGi-fs`sFW¹ gepD`$;\D..=vρ>tG4ʐ^Shs S1?H@gQ[&+Z/.y>zN>g IDATmc\muM'G FkVFs꿕VgZ|uB/Q CW} @@KBdlz+z/EsQ.f Dډ6u K_W6wM(8L IDYE[l1\nR0X,/,o. aGJ5RڧdJSޞGʔ e6<4-`5Nͤ8݈`b$ {PW{m˲^^:i^JA#`*%=~ly݂Pf7ĮYR"J[[,Kd (nX'5uh F0m* (Y-C!p]ՈHi{MRz*C0~u`Uxq 󍀨hNEj<}EdrB\?Ս}90fF0)vkEJ R41kxQ?0'kD0TapCPٌE9s{}M ö>RbE 0Ykv Ȗu<.x ;x|xKL 9~KH{ ñh.k㱢GnN_O<>B )D\aJaOQ cbЊ5!3i}BOdi'j5Eϋ3eg07 UC'nة#Hw瘠'Ŷ5~R$'MҎidC:ZR]r/cc͐KF m'KƓ9=6~>=?P~>hPsc TGxA fPrM"cR&,K!j+,$F1rOOQm*[W'\9bknȍ@كrt4$&jֵ4nh}oMc6?3m,?+>)d)C ֊~3(PԆI lX3`ȀЫm:EC@6bh.=C Xy#[D˛nsҒM OTkpF]y=iڠTnE( ʆb}]Y6wq6@!0)9Sʼ簥iMqqaϜ3A?Q Af̑8rbOp~2N473u?SS`k.AiG̐p3 )~PҺ|>ﲬx)RL=Zx_CC@,X:?2);Q2D<ڀRcjpBr!*zDF36\9ԟǒXvZ'0bt߉p\W- Usgqy6́ d HIyOESZBO4\9O g9rW^3~ e#bf$ u }y-&Hý100C).VcgWtIߥZؠi&cL'iU~xQ@~>u|OX[ Es(=Y?_DӷcԴ|GpB=σTo7|W،4"S`i48q*Ȕkz,P8`= iP@hddȬC/'ѿ-z=Ryc?*RwObZsliZӼiMӖ=ǽp.R+h``pvEq}Ҏ lTV3<6cV֜Vkh'_Vf:( 9N~o۶f&wYW 14M붧jRrpXC#@F laһk&kQq $p 3sYT\dU .X(NF7҃{]X=5/(a0xnt{̱gPXcP%4əC$)罴UrvџG.Ш:s'i]AsyX+/@cժC 4C}ƇǓk?@xO%}ea—An6YGdUq pf)UT'C8DuzR^K9[oFdjmyzӳ{aS=Ayg:6ڣtVzm_%inatMdI嵥m/90G jeI lrXE;=&[u`QDZU m_g\D\E>R,D_g$FcDFc f"|-pDi$rU߈P6ء}b=7EH41Ӎiff e65O&CكTv R@= ëñ>tqp vjoSvrkᅰ'[/Mbc_z; }uis+ODhMzU@bլ`ɼ^5۶,Q!*8#$Vdk0}WXGE5E HFJo3mvVLt ̼\4/;4i򴗘 BE@DIe4d6݂>f[foQC{Joew8V+*;O!P59m8J+dr9&ضm]|NymSiiisEG;oWV01UC}; l(nnsL<<]Jg 9c[Y|*=0bArlZlLQ:ބu@eD&ŴT(kuNKKJ=?߰իO`ap/AeTܱñqb8йakkx9K%@}SLc{ٜ"mk1hC}ΈY h8N/ns}b(\?fíY_?ۼyT53\_fYDϵ D$P@U/0VTX/*??'.9T*wJ}{m۲[J3r2p('x0\5=:nv?}}&~C6R!Gc/7S>bJR"U12O1L&G:ws8jpod0GоJ{>:mcv_O7{7#D mB&QUՂ`Bʸ 5A&,1,PBf 3{ADMU@E(r,Ӵi.1+#:w`.gZ/{|{_ߗt[m^Tb.E@21E(s{?7vۓlAh,1TBͱio:8XtЌ1RU1f8p^1y&Jq:OO1sdn!x/~{]uvMӔҠ9j֓?[A`6HN# 誾[=ך<"3Ӂ'T+rd WCzVJ]\'`nI*\}ӃcKLb&T0FXO ҒrQ0˄Sz .a+K}eci|\F& q\x1sj׎ֶ +Ȩ5' 6Aܳ|jy>8'yA~ OըW3\;MctiA_ :He} =M1n/p^m/ҎB!N3%BܒK]!rAbFi8>C5 \$"""=@ O8ʿg6;ؑXvg $m}hǮC;Bߒ]s'X6D)פֿ(1td %`bֶFe(rt_b|ލ^<6xBAȀ޲]p*9KIoH%*F! d3V¤#(Ad=Ĥa FͭL͔DLb 0"Fˆ8F`B>m@IAsKB 4x?q*DG. }<|(?ImZ0]=%Ɲ$K>`lB=dw !R2,L (n?tqeGŐIu]eK$3@N\t.--&E1 ISm҉r&=zd9X4@ZU2f&bPLYqzg9zyTb&~Up \sz}=:>s/<ΚfRVRY+2}ZPUYLi%)ˢYj} $BTY4RJ=GU/ڶ=)rs:\[xQ,ڟ|>KW@a2u6H'S4Þ<KDv,BK]qvm6hZImn؋GDva'y&RƼXՀBȡmמ: (!qʺ-NT.!I`_SUY^jgDRl[ U1bu0h@qֽi_Ik,q9gJl HhD$5p|` ,% @i2adZY+i%-]#E:-X|pWL_֘Ij M3QuT00ST6K־kDaa^lHن 4nSwBs ٧>TRvD/'a7Abb g\} 6w h&Kh 4i2e6!V!JZQ+Jħw6Y8{g"w _%G&{n(y[4b&J$/p3ܷ ~<`02h}@7@6(|}<1 VBp^;t^LL0eHM9WLL-[N)wfEo VV"]_o_x.je1*V%r6c?C-5YSk1>G'ABs&s}SX7GTd<.!gٶ`K`̀4B"φ78h M`$a 2߮M@ &b@Ɣrs̝"v^&֦v IDATMb @">+(‰fR+"1Ǵ C>@6e{y˾_mFc?׾mL z>_ױyro o!=3r2W/.-s%HshCpw{:p£;9s78!%uI:mҝ"hz,AE{' A \/ oz5i1\.MvH%?~McfASxb 9G^{D']&v!(ABA$7m %o{U)匶p/qfVKTFm]7?#[aҩL;.=)S;6OCN3I&-wxu<ݳ%k|B\lh/r`ѻ)p6{. ݠ? PrGh>x GBH X{=k/L9qfʅ(F 3+ˡ!>@lLLٔMɔU {ԊZMĴVc9=gc\cvb'2?\2y S} 9 _)HW 1Svτ|] T"Ff"PdZ(g ӡ~>m}=[Ld*gNdV|~q%:s^k{pV{{jFmeAb~LG|tjND QSŷ XC3!i6MxamRXMZ(nÈ|:쌳RCޤTۿ~X~n[I)~tQJ/R.mt,aoB P4d|CP8:mBj5q亴FMsՐ<"R5?jRs;-."缹S&\IgAz5 _ <+cErPl. k3ҚASCZ_gϯxe/RVZwN5XqS*ޛ{=rͮeN2 6#QЄ L.0+ "(YTb`?3$-cn҆!=2r65FL@dX?#9U9'32= b ~APQU Tebf3]rRR ͢ok6 P7{KEc#'Q>b,~#=@i :>-/CK ZDBT92* Ye{TB2ETOdg@F$Th DS!%%0) Wb` Pw^+zolOIX\DKZ}_@}SՑHha-X*+{񋚙Y !# p58N:f C ө*V)g9Syy[۶q{g!{VmsN;!0wd6Z뙵n&n E;^/{jUP2DPS`Vo *-5ܼs_hֺ_BOpiEK߾x #߈9B3AJ3&Dm?m>_W~|i %M=O$mt ~sď+hځ>j[@oHw̶rUs_ 3u%gֿιk־6,v믱Btw -b}nlj Ojx-DƉ؀2@Ё~h<dVN:t>3=7ؼ&B9σ7j-p~Um.6I ҈ [ Oo|33@_'8)gj~iEa<ލ:]xCfcMZ6rUtB'+WϵxbGy"Füeg^CaUD'm)o)*f,6DIBV+.sNGU~Erfh&$Dg~!Y+.OX?36#Zd ͙CkG!VbaݗoC7Yt(1:2i}TZ 2<,I6քʠhuk* PIg}:CR$Y̵ǹ|yyzv,{#d-Gl   ˉDwHfA'sxyFJ&/AfPsOVa服E\aXw/6p`IvAjKhhoV&ϟQB0l#;. &hޥfC? ,4=N僃OW6"zϼwa b4UCeul5E9tG9TFn>X%Fb@cΜ&Zkm -G>((oi[\&c@̮{ 5oQ_%6;kfJ/?vvxTT,ut?Aժ&ȌJSIOzZYjQcٱpAO@{.Cj0tc;LiAۃN攘2AFMX%2!Єs1fƍiKGGƴ1HQB`4BDP<{HQm`}X*'Fefetoq/E;VVߡآ5l*S`#nRHB=@)yv祆CBt*ml ?!{N*ؠ?` @19 EvpKP7@5sB"b4LJUp~=C>>dVF#)()|~:]^S$@fQ^y4z=K嬵HtmۃF!1<}f >m 3 ?.24DE )U8ǿJk.vWogԪj̾\AȖ[3rY_a`>YKƤ6;A;J!U# M И0*{)^1WS5f*$AJeaT*_O/Y47x b ᒛ9rJĄ",fCD^a1п'B#c;?O< ?Nȷƍz:;[T+ȥ ǏZ o.xiS=GnG pv 5?0!IkVt 7<›?)m՚i6J8ܸ* VZx/ $@0&N+jƦj/Tr:/UܪaAǧND\k1GjEoK8Rv̱mTx||4ill*0S_V%@8z-ApkϽk1K (@Q}E|(ZԪ`nȾ2FmD4竕(嬥T*o }lK|\F>7Xfp̭)@UzP퓶~iKmH3rr1k"lh 3e0 2Bb(fd؄uB7?ͮpoR*M{٫]r9ߦ[V7ˠ{ۃ g'mcES{lSP ->1$Y> =8oc~o.qw4d P rŁmYƢ Q(oFfDfdf>C?7}$ͤ5jQpTxӟϞrQ#m*Zr(HDM74*%Ng_ I@WWc< H "whS뀯gSy"3Unjd!"LU[ޏbI)jkm!!+5 h'5iUc @fSdI/H׌6\ޭw0`XWU߳L3-kOg͒˿C0o C&2/p6lY-^>LNɮby:w"HR;EL`sgmqO%#JJWg$dS5ݙy4{q?ytfݿ4V}p k?JV;u[R!YaXL =f5VB9{!] XAgz"BLQdApbNĉRK졘O~x[dn!տp>'e7?y03Ɛ\* aKҰ4FCEU8:$&eu{8׾M'U@|Mٽ|cf,r_ZRZJŬ+G6^SΉخ"sBZ!r{'XFbĜ9}p퓷_}r~qʉs┙6L 1[e 2c,a14-e3c49:u:%X! 6Tj{}~s9zmٍ['D{U) uH}7uM̈㺨"Dmmk:i$ZBC5vw0RBNęƔ HӀv|c-Ueք@ZfӬ&jl[χzg֍-QLAP ׉~~?gS ./u!ވ /*pTH'|_$xPp QsX[d@mѬ͘'+1Z7gbaξ4USR P7k9_)b"F-fmV|^ĨLQMӣ[VbSP4ΓC&[tZ*Vdͽ  #be?ڜ߻ q}ZL40#kY24Ғew&{+EǙ"ײAخb Li%Ԙ2wo `5 EkEf԰!KW.uml  M],7{$&7zq)dNÜXGvZEȓx 2Loj&‚b!%%߁q9m;#п6nRbrytOX99t[\wޣ~"xsOjL6bvj>?z8z+ C5PmPSA"?OEG31䌌Y0&ߛ(Q'Y8/99=RLW>x{< ʌp#)%Ѕz־S0_>[46z]"@u]Ȃ=7ߡE i3u=@S'n#-! >\zh獒I@hX냎qVt}01!I[! %8g@sL@L &Ԅѐ-2rf=fF/{_;y:/sw]WTGc7o'ַgZ==v;vڈ7`2sψwLcKVOl>\]xaBh_y s0ʊv+/ *eR$C6b%@Lɐf9A$E-]A4bll^_`d9ٖl˶%H9;y'/s׉iYV=)z~DZ嘸5hhvyi^'<{l+2Kؖ]SPp\bQ RKnȾH]3fo~^UGDc()rD?m)@ȄF-gf~a! J̖3LX"dF&]Oh RbE$ZB.4 Kt?ğC=%k]\tOnՇ<]]Qd>Lba#ԧ-MCmK`)keşks(,G/[՗e'6{YչU\?bv&\<5%9fJ&]x"cnsΤ{Z\j (T #!'h%B4824B@8sD\-8)جWW8+ U*V?ƮpC4z7=!kSCnoJrʹEI}8v~g?~^?׾P ajX#T/?Hh;qNmU8!{5'$nLMQL09(10ka'& &J&Acq@Z*TAEU@wRPhtKn紲~qZcU0 /M@zJD5dzV8 '& {Q`Ȓԟi˜q^];uP#ȇ@"Dm: , dfmn35jmP&IGuC~\MUtz>x:\pᴐPUt@\;ķiJc 2.0ݬ@O43z,Ӛ#&p݊Ϯ9#jMYPX[` B.q6{J9hMۍEVϳ5n{8/j*DYF ԬjD86 DdcK'AW-2RM53`\RQCݎO:G놖 I|>WL(: ^ #*/Ub݇QƄ=sh;-n^&#"P>;gdQ2sxA3׹1&6&IL!D)ʦң#ݥţbmp9VQb @ՠ3ܺ+a.oyFo3m]io3` F,*D;h맑ó09"5[S<(]T].TGۭqL4W1jgF^ B(ŠU I0!-f% ~C"~}]p,F}Qt6mh#Z' 5j{={E@tx:d*+At~gRy֖L_up}ڭV\arҶ m'59m,.ˢW=|i7=m̮$Bf6Spw9"3 sJi^5| )&]f~K%%™/^LX<gMzy'ɽ6}9 zFCӺt  p`:ʭ2]Vܿob,hW BhꦠNu}`kk=g_ |P[~C#Yf##Z_VN`Y =a.ut|4t;@{G4h`o?m{+.r&ZW$7o]V|pMoMt}3" ݼ78Ìa8m_TIO4Y,޲xiK0 mgaݒpXÿnTsv]i-fHE+K|PB pq Z>T\cCWۭe.~>Rm;" Μ,-=Lm0jFBXYID8qTvse?OƗf UYTar] s0n 6shrTUqKc@HXګQ~^8Y*k$PgҲ){GL ]'='SHwԾzm]~[sm 4,ߟyקFS胭Rx./˷h̖Ӣwv}؀65HlbK"sY\Fá(V xbT+V/N O__߆!8RsvV_۪%4pDZ7.pVK^ EΟ+3-17]j} Б_.,RznbZ襕~" L>evI7-%L"h5:U c,G,0˽]o5^]d,u`:f8:7_ #;/ +#fm>~! K5g0Wh @wh?ދ'__FM}< C%R*Mx kNuFfj<Ժ.p0}jm9ak]8)nBupuђ>_;oër!|73*^H?oӄnE8e*4{b5E;8ja $ꉥ~ڜ.o`j!.ָ۷Ui'q!'ʼnRt<;Тx ei5SSCO؟?xm!ڃ @vu|שUN[d#o%@ agpY#%nfjwϔ\L;1 fZr]l|:gMZPasau"Ga)=?_Xo{2*b|I=־3DPEΑa\(x" "Q`d^j#{?;~៝zxUp[}qe ѳDirT{)v\f>7(Y^}>w#kOUFNO;qQ )I۶=QU {qG^q]fdBh"Ui%@d*!*qo |S[4y-7dht.5Z!wA0eԍԒic 68a㮔UĴzK+SԝɣR1t3{.Fϸf1?'!m1^[X͑hJWm0$1xAys`A]DbltdV~' H8cag@X~E_;5J bߩ=i!hz%lԠrU7  |ny[d"7 Ѝifn^JxzO2V(1%mG-峊3dEM0z9qT<1 aZ2fHqMuqsR[$ʸ (=wfqh/tM:S8P'F#70CL\ma$yuի&k[Rb6v[ vX_օut@mnivoEW =z 5Km[dG0F,oڋ )12Y*"ھM4mD@aT XpjꍶcL0ƊRZٌJʧoWL<غ"\mb"ZΝ;\G=?~~ f"D;U*rOOSs!搎*UbVPLgL[mˏ=s)甶81g KngzJv#D ECؓύfcҽ14N;.n.Jj*¢BKn $ڑw|P NY^DK} Ѽ s`5&VE "s=LWE3sv-8v4<&݁aMC-8;lkvbQh>ʉ$#fL|FNJ~@ X,UeR dd`*1vӟ}ҫ=wOtt A뀯' bqU#2 >2{y5 f#brFLHRS1mDS WLMo{l-S&;Mܖ74Wf9qiD]a_5RM+.;b}#W3oO}_5ȟY\(&ƓG9R5(mD^^8I{JOnYm/r"T ድVةr^":kA߶jrR9t\\ϭV?@>7B&0Š jYա?0 ?ـ<@&*̴!=>=>c۶֊8ΐ#C@$̐I nAtUL'_b;pl&,dT]QNB8NxۜX^?@mŭ~{&j4lY!iE<~g1RvXЇIktpj`I][ljW_\km fLL9QNe2L>Xt׊ڌX4%djZ DȀj8J¡<>YT#pk)4ӈЕwF(TSl/:+##$PBLA ِ#Uզʀ8ϪwLpwWqN8˃}>_9gg)`m[ŧB ^2%iw |+fAK?9$=U.)6R7,LQN]燄NbJ=` 1}&6n#RK޸$BTa;I/U:\9< Ni]@Ȣ!)P BzznZac` ۥVTK!gd>ؼ2PDT ӄV# L>?ᫀ"3\>x;ܺ:E~.m(A.cNj{HfYm3UaPȍAhBZ xTp7-Qj֓x#c=f ] 52&}z鏺jqM2ꛇI6%' ?A_8W﬷ⷿOxEsZs@?u%GYszY@ (ɫ{3NjͦeYbU mvv{4ecip*\D !j')36fؔ6**\'P`?|˯E*' IKM^V1kyL IDAT*ܫBFVRaz }$̔DF #qFQ` zdh]sSP/eۃc(IrNۖnm[vޞon}~>mb~>an΂RSܾ 5AS̙ 4͑i]%*>xI*Y?Jد?p#P;2 ZG4#xu-5ܱt L î>z|?`%#[t2sKjB@5{Y=$$'/jp>K4D&524CB-`.O靯4+KEa.WCAYϧߎ/rrԺ l:B9 |¡>`նLvs]OIDQ-z ,cnBR8 YH=Db@̉9e3qSjJt f`ԵM,wPzB&BoUTEhIZʍθ gaV&7 51l?rIoj2bYex1y)1F?vIJI}BbTYK!nO@ߖ#_"5I#ᾥ!P"@oPeO7ouP٪VL2&Z`,LЎL1=uMgS#Q'/? X2yRp v/s YyhJX~b;_ q߹%j-pdr.G mm[x]ds5o?-x)sV)Ij\|UQ Ym.vIC K。"bb"^HǓ6;&GbJE3s-j b.nOo^ %'} 1 |;zN\J)g4s~R$pY-z}|{ضRTm۶oB֔@%$5JUTep&>w=s!DY)C4@<]uU'bNٕ`5q^銢;t@v?Ut& 3T| ?8|h̠ERl6P3,jZZvۉwoed`GoL`?Io鿶-ۖlIC$ a_q gp 1sdъ?9h#JDʙy,Y؄ Ӄam-$+ЂDaW2^o`r:i]T/ܺ{1K~{HmZzo|AX)g<&:s?$^~MKρ?A?]LI%INy?|?) [WK*oâ¤d`eYjRF n)e$j0P@OJ߫|TyTU*k=8,Z }StlTSL`h-p;@3#[D7{~Q0H a2DMLe+_RyDrrSŜtjW@o[Z/@$%UM)xm9;NfJ,hA=[Ը*z~V~yVٕ%Ee9K gzEo @$DNʊ_@UQvu[}`2MF `F#6Y;iVxq܀;'៌2v#H3 0&>N&];tu*^`zvgL^58XJDw&2YN, b,ąl&QE)ʨ-c:U*П&݃7-V݋Xٮ5byUp^0YÉTA?wv*秙6K? "9 tsvmt[nwK٘WZK.%=)!Z\db3I-3SIRIURVJf 5Nx> >*Ty*8szMiݹ-ƉI֕'%z}H(Bϝ}xb໗$dV%T:6Jsq_-%K)mCTIIjacZ5~m9$>~*3' }RQMw+;>xNEwd̮uek{M${:\uEPt/v\Kr/VUلm^FG-M >ud`ӇZ 8K5mӺ%bpy Y`,۔VW><2:OGNz!"vWשl/:^.F8%}͒sCZq,x%z/iR]۵da Ӿ ,\[[g2$q21Xv=KX2>}O#H&0s狫Mk?igL} POE,W2e@qֆY6 D7Ӎ1nd[4Kd4e?0KcQL䄭EQU-4<~HM7d;[!-dT07fl3ݴToZ7卑`/;$$ cLW@4Ay_̫Rl AI1\M Bdc23+q1n،Q&n-ULXeÄA$hNc(bf+ov?4'(@3꾍*vūjsr=-+0^bVcm|mo7}ٽ @-%弥T̖*'FN;7~ިd7.9B UÞS+*EInTW1_ϑck\PB ?˘[g"HRT B{=MHDUrQ*bi`mz.7.3男v7j)%0H^8&XJ 2ν7qMzJS-؋=J~|wA#XRỈZWx##IUBJ;3")nf˄ H,ZdjF 0*MCY)ZHUzp{gՊZ l>^3?uo߹Xg.>ӌƴ0RpAPc<3%"Q%(c0Z@ev?fn/h_3$jT+J{gڕM%G{CUjOՇ%1y؋j}/3mf[3tm99S.L0h%/#-on&,ۖZoVw&Ҫi"*QB|Y~__O~T)$`In# dN> w^| }폐8%q:XF&X<bSmk1./\5NL> p,Z=+(㖉Nۀ~aFMr:agmzWlRrDuX~SE:z B8Fua}0i~>5p1n]W`U̗nbWEsB;u[c]+ojI&aI`9l}ųů[鷆zߵ`bT˽Slv3%"QVj+I)ěQRQA;:nُUhypAGdv0p1w d!1J&16nEk7ki#^l6FVO AONLf˩_ g,Ϣtj8KK_l.H󲘮USOB1m a@)etǻļyiBʤI%2m\2LE$BEP*s%(rQFZS~R~@x7TU!m9fZkudI5'MDy}j[y<~=~~(o% ~kZC=tIMn?͹]u33Zn L."nG܍@!jX'vʓv"4wf~, F%+3K|"e|+cch7bkl8jlj)b LQs:HP_el] ' |94ݟX"k^|k\mNC 'zP _mFB9>혖}_:EK AX 8+9sSIʔIHoo`a |=gw ^D%f8;qj?{M B dt:F3nBuz$@&I qgpĀ:5kZY N 'bCjRey`ZTAkyha07pnfTEN5%{#?lQ3/;&qp!x9`76mlِq26ŭY-ZT kj-ޘ6 a4R觵cYrU}Δ_1Ta'~= ΗʟK瓏<,)@ jVxo}~, T(a4H=1Ypbp"8>-&2F!TJ3WXmk'T/ ojGن VBX.hWod>x|gUg-Svag武4U'x3Ă6HZK2`EԲ?-NҞ˾? ,!c=#؞u(?GyYs>(ZUaz/28fH V>n$XؘПfOO\L;RB^^p6L z3]Fd?7F$1 1!WZuW-{fA&o_̲i24%^͕Έ2 W!LƧKZkAk =\ _xW+'QUQͪ'p=nYM=FۍF)z?Ug[jD@b@ 7ʤL XeS+FHgcTml҆CHg})d2ckL11}'s1ruHX(^2Ig|9oyTx쬺+-l]tx/OCptͽ'~mƲ vAODw%8: I-z/֪sƜ (%3Gr`CVHٗÃboX~G>"|ʛ_srkLХwFᝂE՛_iήK!P+PJ?yϲ3U_vq$ɳ<@mԴ^m0 !k &!x_PbyG$QJdbi~YAT4'(@jʧaH@DDjWH"IHR!bP aQ{ng*#A$ċ^JFԘR+ynwLZ?ϲjF$mbu6W,6I04ACk@AwlKL(b?n^r (t:<,3!D=2g ^a>򰑝aMj^ 2V͐Wu_jAӛZ|s[UbAv޽'guOK9Nĥ(+e:^- ̫r\zp{إ.KzmKᗫ;(wFW35e%#sҩ* .lqx3-3޶۶ݷV^֪MS֋w8D`f33V #{In4M'?H&u%L?jޔrj}B՗#)YHG?Ԡm^QگjoEAdۉoh✤F" 0s {s5txa>^kͽT'*晈ebp̙3p?i5q?``A|#`p*jnUT)%rUUa='1e̔@M13/P5)XޑΉ-|{!-뒬W>nFKT~ϗ3 (x$`”O4)ch ~Zѿ+3u-نy| >*q= /$,1X5u5[=3arրmP3̎ޓb\ &Y*#@-ã6E+? V%-{~vqn1 Ff>T-;+}Ό3No74KM6Ȅ[b?^qQLrbr<ՇsпB+=V ju/9`A]`ĮU|`/俑_~ ;Y1Q"#"I)*i$$DEͩMXd>cߜMDziܥ}V"GL[{>ZVܤ\]fgr\]UZZGC{q눘5*⧥xuW |/mRAyrHגO|x_~M>>u5b\3ߜWP%ځ'P}/];C˾_vٶ!B fmJY$%^xL!:HRc/g= VWGӊF 4JFu%3c)B+T SBsgL䈧mo F8AbŜmsDgvbOtf0sJ)8,SM" `0N OmP+9L$"Hku894@y_?LX1o Cl[Xv헜so?o?o?VęURwT,! bb@Ĝ }D' -:Sd-. rWmnHY9 'O|oAMa=H[+->ww'[e>(vmMQ*v]aE/JػGZ}4PJHYS؈ (G3V4xZNHh=R+e< O%OkZ tWk"C1`7pg1ݪ9~ܱ E̤TM} q#T=}x)84) 9='g}̢܆˕gi(ӝ1XA1"mbJf]20".'? 3suEZ}/BR\rͨ1/n mU̗C R~5_ UB=>~U_߰w-ϲ,'YZ+$@" ;gkB&v]FY (j{xx>-MF ,3_0. 0Cd}Z[@fČD'ϟ7WfW_ >%ii%"aD"C=eD]"b0GdB>)Pjx.?>X|pi仒=E~rSZ>$g*W(l=a` ԧj8IXt+9.(񧐄 T,O^+[:ξ<5.0V ۖ|$Sa .`bn9Ohse2Bu|U%{h1DL&,ʬh|f?WWC5dGa=#s+%Jf0IJ$b,J%_կzj|8Xu!#?vc-Y o?'cv`@V~oqFMoEd-@YEBt'GUBV}J+t>M5[tq6=D #b 3 @O?ӓ7/2o»ٳ֚yqbꡂ*7.SRLt;Z\lj"OljS.)s<5l,:Rpn.z,>^Q|~~U>C>nc_z ջK6-3q*D>> %&)㙭:BGֿ {,:e4#3HkDX>bfdˑ-ʵhʽe8K bBȔ<"/ .'̜2ƼlܒyVv>ɞd\ XdfȑHHjeudӕح=FTֺ{gRf2aKl`eJznOQjqJ;)x$zp+KS2H9STbs:&Iߕ<(>:O;qCc$EFH{LFhnD,"hN_tbBיS>~\gx:uiKi>}_:~0}0"_~}O~N%ɥypMaeC.tls%@Ks|RF:~Tb9(kĶQ[ԝfJ0,dHr |S'%eE zEꙃPVa>?B1̌Ÿ]ߌ~E\^Ƌsť&`+Go=U0 ?.X/^kۣ8~b #wNL^F`?>` 8^0.yjV)Q~nZNrh#=//^} ?~慂GtŽ>;"՚@pU\BJYVzd1^F_ͪ~kG R&KgD+ߛtC﹂\H*Q&S0VNee[)`3hh/iDO ?ۃ} X=b1<8k̃iVZi^K߇W}Mq_St)cO|A? ~:1Oo_oDЮT,PZS <}M3@dk>)y9 3mc2 k\7@1ߠY x Yb Q\hXpjAtB6 v絷0zX3o(Rxk}FO"'땐ezD;{8RAbg\Y>x \poWYZ1uVlK*i{؉GI o%&JFޫ|~^vUçhXь2ޏ3&j]hA-ZRߠ]X/Fva0G{刞FYd+Ғu14bOzu*ټp5ZJM{aZJnO[U@,M0es1zKWty0f,eaby*Ղj'JzeM ?M39>PժYjZ< jPbR&VPV6pVF6e*`B\("<560 -ErPtH}?gEx΁з`m:K}.qס:;_ 4#y$K"9'9g݁[ȸ_sKϋ=1|dg.LO˻o,~k17ˀ~QAT,qKq'wLq{$4צ$9e/tw&DlfJ=Η/k??NE:5|Q DnMk oi$mc`0|t<,{րϞ7Lp@_`lptS8%e?U?A(t1 irQu27.&M `5rGkĆ%Y܁",-xhYpe}S8U_5!PAP,z];tlQR81X/ec[)Z{n[VChYD'ɡ<+(SDjV]a0#aLLGS/Fp12 /p +3}c1O ww;vw(a23!;BEpַ47l DE>?P|z )b-w㕔vF.p ~v(RN!}!l-f2%M#)圷m>*Aw@]Z9Zk$g NB#%&$eXCÆypm Y}m mW;c/^(~{؛?';{p_Elr_yBYpsdn]9q\vA1kCu7q_'1-v3X B|aY;7p_{KcLe ?,ˈua29j|"{ex 9BC@p ѽX6/G{)^JqIwEky[fVU՚lj)1§%}U7$uJZ@$G7"ȔT3@TF%xZN% MhV=S_ #z*olRbZfP&kV3DŽ9!lu̲t?|!ND8aޡ+Q>-jY=h4۱]A4jt1Ao"F?Œ>fpelJsU^j4N#_&.s}g!Lc\ʫfn_`>Eb]3yI{B3?GJ IDAT"Oᝨ P̔ZfRE1zX` l˷g2KTFSj')mK)3 DwI-o_1F! v3D'fpOQj;)J4.ǠeLƧҭ5g-װi\pr\rzXS=Vh<몗#F6zVC :[b$fW lD1|L]`m3)ohfX-COB0,"W>;P@^u2#3&z~/#du7e)($>T /+:rIJˇ;#WW:ȯ1"0k?ZWkZXkAQ_zNija5VTVOF^e1ې u~ԃrYUͪ-iPx$MajC]#0[=a%>4+OPm蕺LGٯ?8O\ŧ+y ~cϡ#}?Pp'!nS]>o#-=3k?ѿO H6κ _[zHzKڅ QPjqY RC_I䯚YiưhAhjh!Җm&)tVsrjRxq%P@'߾>q _>LCC!LRXj;Rm8mi}o)4H2STƶ)XBJ_ӷEß)&`jZT$ĒDciŐا b铆9/'$/@/t3c0M9ˇ! /:_P.$^^ld?;oL+_Ty.|y5Z~A7Q$!Zo}2PKO;;;I\*+v7L@Cb/c'Օg7=&P{?@)4 v Ɉ<MEV"-aF5cBL]Y-Ϋ{1?9r3|Y˻rD}FСs8)kU+g|bʬ;13NIt'ПZ:tv`{NNy2@cPtC3/_Pd<%tU~% q֝dv|Ʃ#*kfU]SJ:P qʺɟqϓX2n rߌ7)ܟfKc5gM t5F  CY! 戃V#U?07 5[:͈@m3 Ĉ9B9g\{K ߱dXw23ss&x!}f>p=_08y֍)ULRKP`??P؉2>^,~=Z'ν4%V*mok+Vj5 w~Ft#nD[S _: z'~~ށwxQ!,Z1?q~rO@3 Lxo).+mǖ?'y`ui3?A8 ɌQUxuvv1J7b4)0Lag]S -}b/NS_槅Jr\OSC![Z0ws0Y/*#_^jeQF^DU1@9|‹.$nȑsY]X% LOa!a jd )-m|(ȃo!sH g]B{s@W` 5_+yq<?.'ar"k5pv ?ǂ/L:VgB=^@!B(DT@aF1@[G!3Om۝ж|dRK eA=w23qڢ'=@RYyֺf|@y}#x?ǸH$x\=`VS ٬/dLCSooClPܚ*{HcRv`6qCL?)Bjש?nz?u.b 0V`a'g3ED-A4oŪ2je_k-O&L0~qPT We*5u#E9 *Ji;I\PFR D5#77[7=G~K$rVT/kOMѮ5St_ȁ8Ps \)t*Jt;S3vyFW+B 6fAQE9 <,(,`;sYuv ?3<lW8Z45!?*_DHVD9K=KNj.+*'P^]M38ra۶mۂ_omQ'C`o׀&fzt 0RfPͭ\Ң~LB0U*bL/#$C^;%lg:8X`#A+| gщBa1tFs[uVݖiC'vX_MCG}X*A>˨-ԔE_-P: UY1Co:3:?GL@ ~H\h@%IQVY$$A Cb c + sKWoow[!4OIRUtL4F(AK`qñh$G=I*o5:_ l1 ?9DUZjʡkD(@$lfnXY9I8b@` 1&$2/xψ'6wQR6*8_UOUg2L'XAw;].x Dn w]_-d7'3I `E`<{#u' 30Dbv}MGN"Z,#Fd,%3))9GjLu wsB$@`{ˀJɻ+;o_;=O,Ae5_s7HўUDwʼnr` T]N_>fiv;I[!Z*;ov5^54XH\!$-WWlJ&T K*OA`zmܥUPpc >p_;pg-/O,b2u $@tRUl%Okj/{?ik@ۚU0ed-!#HFЀ1DFk7B&_0I3m}ϞਃžIΆH?~Wݯ5yȹU#l$ ,Ah>Y& y$i3@ ׬*D)RRX27`,Zơ`,4i5=JYBy- b.(9/B{'4?\WrzY{3X8gw?$) '2Dn7H<wU` /P:ز <#V ??F ? qiš_%o0b*Bh"Q%!N4 /x1w_~Fy D?7hTGf ┲,HgNlSMD⻴Y3*d.&dEg)9ie&O9ܱ`MdKawa(ΌǓ9$dƃ+_'}{}-h#h2N$տ_?=5只A1}AeOwdta _WTD(}םT-)LwzkkCoү#;i!f%k6oMXG/,U;:@mBQXj|YPEMq~PD^xTdz~_g#RDƱu,X'2H&e2@1֊3` 8"ǰyo+{-ZBMpc5oDo^-e/9/{^Lʛ V VDÑ81Xb$ouD-+ >z ٟIV.c9܂ns:0Lډb&mo1B LghF %F@J$gzμz 3U1?zHTSs.w-#w9!]](x Ռ; 8RmdEy3\|E8Q+qz`گfP#P;IjB)/ OF$׼-^l7/ѪQ4y ?J锛m]uK!b~˰[,⨢w^ÿ-dx$Ogb3Op:[ĺhGFL5ΰ5ul@|~6r+}ſW47M3XJ2_iDߕo<:cPPy% UᄚMB;π뀡f&pUА28Ɍap.# 3p:Ή3ËYBɶº]w\pöº{ b@ۀ_;} d(k'ǃ܉d?t=ٕӄȸ_MU U rt_gj ށ\W<@,o!Jȴw9znxxMȆKpKKxRUJi dnbKDXxF|N-[B]c ?A`Yt?AUD"$K8 JI4S([&k-nqnqZc-8GjyFpL۟.:0Dϱ3L!p7TdQ#ȗߒ5a68WXҵx' 7* oBd"տx:^IG(ٙO}89IgY -xǙ=oa (Ӈ +k]Qr0g 'Pb5*Zkc2?\h?G?l_m۶m?sWI^F{=*a WyZ$DW9_|< mDdkMt䬉!4$iݘ|7nv]VU0 ƃV؋KQzx} Nj]))/؂XDh,!=/ OX_Z@F:$Dftp ,B"#/úz n7 vM7\W+xB #pD.?A_F5AP˺&v>.]O,e._Cq&Se @ZT?A_@s(""ޙnH3/;"iai]r h'!@Woɟ KM8{UXo)^/:HZXFqi}]kRUG`S IDATl:L/\d*)Y?a